重要提示

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

Llama 3.2 Vision Models#

Meta 的 Llama 3.2 模型引入了在视觉识别、图像推理、图像描述和回答一般图像相关问题方面的高级功能。

Llama 3.2 视觉-语言模型提供两种参数尺寸:11B 和 90B。每种尺寸都提供基础版本和指令微调版本,为各种用例提供灵活性。

资源

从 Hugging Face 导入到 NeMo 2.0#

要导入 Hugging Face (HF) 模型并将其转换为 NeMo 2.0 格式,请运行以下命令。此步骤只需执行一次

from nemo.collections.llm import import_ckpt
from nemo.collections import vlm

if __name__ == '__main__':
    hf_model_id = "meta-llama/Llama-3.2-11B-Vision-Instruct"
    import_ckpt(
        model=vlm.MLlamaModel(vlm.MLlamaConfig11BInstruct(),
        source=f"hf://{hf_model_id}",
    )

上面的命令将转换后的文件保存在 NeMo 缓存文件夹中,位置在:~/.cache/nemo

如果需要,您可以通过在运行脚本之前设置 NEMO_CACHE_DIR 环境变量来更改默认缓存目录。

NeMo 2.0 微调配方#

我们提供了预定义的配方,用于使用 NeMo 2.0 和 NeMo-Run 微调 Llama 3.2 视觉模型(也称为 MLlama)。这些配方为 NeMo 2.0 中引入的 nemo.collections.llm api 函数之一配置了 run.Partial。这些配方托管在 mllama_11bmllama_90b 文件中。这些配方将 MockDataModule 用于 data 参数。

注意

这些配方将 MockDataModule 用于 data 参数。您需要将 MockDataModule 替换为您自定义的数据集。

默认情况下,加载模型的非指令版本。要加载不同的模型,请设置 finetune.resume.restore_config.path=nemo://<hf_model_id>finetune.resume.restore_config.path=<local_model_path>

我们在下面提供了一个关于如何调用默认配方并覆盖数据参数的示例

from nemo.collections import vlm

finetune = vlm.mllama_11b.finetune_recipe(
    name="mllama_11b_finetune",
    dir=f"/path/to/checkpoints",
    num_nodes=1,
    num_gpus_per_node=8,
    peft_scheme='lora',  # 'lora', 'none'
)

默认情况下,微调配方将 LoRA 应用于语言模型中的所有线性层,包括交叉注意力层,同时保持视觉模型不冻结。

  • 要配置应用 LoRA 的层:设置 finetune.peft.target_modules。例如,要仅在自注意力 qkv 投影层上应用 LoRA,请设置 finetune.peft.target_modules=["*.language_model.*.linear_qkv"]

  • 要冻结视觉模型:设置 finetune.peft.freeze_vision_model=True

  • 要在没有 LoRA 的情况下微调整个模型:在配方参数中设置 peft_scheme='none'

注意

配方中的配置是使用 NeMo-Run run.Configrun.Partial 配置对象完成的。请查看 NeMo-Run 文档,以了解有关其配置和执行系统的更多信息。

一旦您准备好最终配置,就可以在任何 NeMo-Run 支持的执行器上执行它。最简单的是本地执行器,它只是在单独的进程中本地运行预训练。您可以按如下方式使用它

import nemo_run as run

run.run(finetune, executor=run.LocalExecutor())

此外,您也可以按如下方式在同一 Python 进程中直接运行它

run.run(finetune, direct=True)

自带数据#

将默认配方中的 MockDataModule 替换为您自定义的数据集。

from nemo.collections import vlm

# Define the fine-tuning recipe
  finetune = vlm.mllama_11b.finetune_recipe(
      name="mllama_11b_finetune",
      dir=f"/path/to/checkpoints",
      num_nodes=1,
      num_gpus_per_node=8,
      peft_scheme='lora',  # 'lora', 'none'
  )

# The following is an example of a custom dataset configuration.
data_config = vlm.ImageDataConfig(
    image_folder="/path/to/images",
    conv_template="mllama",  # Customize based on your dataset needs
)

# Data module setup
custom_data = vlm.MLlamaLazyDataModule(
    paths="/path/to/dataset.json",  # Path to your llava-like dataset
    data_config=data_config,
    seq_length=6404,
    decoder_sequence_length=2048,
    global_batch_size=16,  # Global batch size
    micro_batch_size=1,  # Micro batch size
    tokenizer=None,  # Define your tokenizer if needed
    image_processor=None,  # Add an image processor if required
    num_workers=8,  # Number of workers for data loading
)

# Assign custom data to the fine-tuning recipe
finetune.data = custom_data

下面提供了我们目前支持或计划很快支持的预训练配方的完整列表,供您参考

配方

状态

Llama 3.2 11B LoRA

Llama 3.2 11B 完全微调

Llama 3.2 90B LoRA

Llama 3.2 90B 完全微调