重要提示

您正在查看 NeMo 2.0 文档。此版本引入了 API 的重大更改和一个新的库,NeMo Run。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档

多模态语言模型数据集#

NeMo 框架多模态语言模型支持对话数据格式,其灵感和设计基于 LLaVA。 可以在 LLaVA 的数据文档中浏览示例数据集。

准备训练数据集#

NeVA 模型训练包含两个阶段:预训练和微调。每个阶段都需要一个独特的数据集。

对于预训练,请使用LAION/CC/SBU BLIP-Caption Concept-balanced 558K 数据集。 通过 LLaVA 的 GitHub 访问此数据集。 获取数据集后,将其解压到

/path/to/neva/datasets/LLaVA-Pretrain-LCS-558K/blip_laion_cc_sbu_558k.json

Hugging Face 获取图像数据并解压到

/path/to/neva/datasets/LLaVA-Pretrain-LCS-558K/images

对于微调,部署 LLaVA-Instruct-150K 数据集。 这也在 LLaVA 的 GitHub 上提供。 您可以从 HuggingFace 下载提示。

/path/to/neva/datasets/LLaVA-Instruct-150K/

此阶段的图像数据可以从 COCO 数据集 获取。 下载后,将图像解压到

/path/to/neva/datasets/LLaVA-Instruct-150K/images

NeVA 模型的其他准备工作#

以下说明特定于 NeMo 框架多模态语言模型中的 NeVA 模型。

设置 LLaMA-2 Chat 检查点#

7B 和 13B chat 模型均可使用。两者都可以从 LLaVA 的 Model Zoo 下载。 从 Hugging Face 下载所需的检查点后,将其解压并存储在本地系统中,以准备进行预训练。

要将 LLaMA-2 检查点转换为 NeMo 的格式,请按照以下步骤操作

  1. 调整 megatron_llama_config.yaml 中的默认 YAML 文件。 在检查点转换之前,确保 model.mcore_gptmodel.transformer_engine 设置为 False

  2. 对于 7B chat 模型,请使用此转换命令

python /opt/NeMo/scripts/nlp_language_modeling/convert_hf_llama_to_nemo.py \
  --in-file <PATH-TO-HF-CHECKPOINT> \
  --out-file /path/to/neva/checkpoints/llama-2-7b-chat.nemo

对于 13B 模型,请相应地调整 –in-file–out-file 参数中的路径。

  1. 执行后续命令以将检查点划分为张量模型并行大小为 4 或 8。 建议对 7B 模型使用 TP=4,对 13B 模型使用 TP=8,以确保预训练和微调操作都不会出现内存复杂性。

# Instructions for the 7B model partitioning provided here.
# Adjust parameters for the 13B model as needed.
python /opt/NeMo/examples/nlp/language_modeling/megatron_change_num_partitions.py \
  --model_file=/path/to/neva/checkpoints/llama-2-7b-chat.nemo  \
  --target_file=/path/to/neva/checkpoints/llama-2-7b-chat-tp4.nemo \
  --tensor_model_parallel_size=1 \
  --target_tensor_model_parallel_size=4 \
  --pipeline_model_parallel_size=1 \
  --target_pipeline_model_parallel_size=1 \
  --tp_conversion_only \
  --model_class="nemo.collections.nlp.models.language_modeling.megatron_gpt_model.MegatronGPTModel" \
  --tokenizer_model_path=<PATH-TO-HF-CHECKPOINT>/tokenizer.model

配置分词器#

对于 NeVA 训练,至关重要的是将特殊标记集成到分词器中。 从 Hugging Face 获取 7B/13B 模型后,您需要获取相应的分词器模型。 参考 7B-chat 模型

  1. 下载 tokenizer.model

/path/to/neva/tokenizers/tokenizer.model
  1. 步骤 3 需要安装 NeMo 框架。 为了快速设置,我们建议在 NeMo 框架容器中运行它。

  2. 使用以下命令将特殊标记注入到分词器中

cd /opt; git clone https://github.com/google/sentencepiece.git && \
  cd sentencepiece && \
  mkdir build && \
  cd build && \
  cmake .. && \
  make && \
  make install && \
  ldconfig
cd /opt/sentencepiece/src/; protoc --python_out=/opt/NeMo/scripts/tokenizers/ sentencepiece_model.proto
python /opt/NeMo/scripts/tokenizers/add_special_tokens_to_sentencepiece.py \
--input_file /path/to/neva/tokenizers/tokenizer.model \
--output_file /path/to/neva/tokenizers/tokenizer_neva.model \
--is_userdefined \
--tokens "<extra_id_0>" "<extra_id_1>" "<extra_id_2>" "<extra_id_3>" \
         "<extra_id_4>" "<extra_id_5>" "<extra_id_6>" "<extra_id_7>"