重要提示
您正在查看 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 的格式,请按照以下步骤操作
调整 megatron_llama_config.yaml 中的默认 YAML 文件。 在检查点转换之前,确保
model.mcore_gpt
和model.transformer_engine
设置为 False。对于 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 参数中的路径。
执行后续命令以将检查点划分为张量模型并行大小为 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 模型
下载 tokenizer.model 到
/path/to/neva/tokenizers/tokenizer.model
步骤 3 需要安装 NeMo 框架。 为了快速设置,我们建议在 NeMo 框架容器中运行它。
使用以下命令将特殊标记注入到分词器中
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>"