跳转至

NeMo 大模型框架 — 英伟达出品的企业级语音+语言一体化训练平台


一句话说明

NeMo(Neural Modules)是英伟达出品的大规模 AI 训练框架,覆盖 LLM 预训练/微调、语音识别(ASR)、语音合成(TTS)三大领域,内部集成 Megatron-Core,是英伟达 DGX 集群上训练模型的标准工具。


安装与配置

# 方式1:Docker(最推荐,环境最干净)
docker pull nvcr.io/nvidia/nemo:25.02           # 拉取 2025年2月版本镜像

docker run --gpus all -it --rm \
    -v /home/user/data:/data \                   # 挂载数据目录
    nvcr.io/nvidia/nemo:25.02 bash              # 进入容器

# 方式2:pip 安装(LLM 模块)
pip install nemo_toolkit['llm']                 # 只安装 LLM 相关组件

# 方式3:全套安装(含 ASR/TTS)
pip install nemo_toolkit['all']

# 验证安装
python -c "import nemo; print(nemo.__version__)"

核心用法

NeMo 有两套接口:旧版 NeMo Core 和新版 NeMo 2.0(推荐)。

# NeMo 2.0 风格(新版,更简洁)
import nemo_run as run
from nemo.collections import llm

# 配置预训练任务
pretrain = llm.PretrainRecipe(
    model=llm.LlamaModel(                        # 使用 LLaMA 架构
        config=llm.Llama3Config8B()              # 8B 参数配置
    ),
    trainer=run.Config(
        nemo.lightning.Trainer,
        max_steps=100000,                        # 最大训练步数
        val_check_interval=1000,                 # 验证间隔
        devices=8,                               # GPU 数量
        num_nodes=1,                             # 节点数
    ),
    optim=run.Config(
        nemo.lightning.MegatronOptimizerModule,
        config=run.Config(
            nemo.core.optim.OptimizerConfig,
            lr=1e-4,
            use_distributed_optimizer=True,      # 使用分布式优化器
        ),
    ),
)

# 本地执行
run.run(pretrain, executor=run.LocalExecutor(ntasks_per_node=8))

参数详解

# NeMo SFT 微调配置

from nemo.collections import llm
import nemo_run as run

# 配置 LoRA 微调
finetune = llm.finetune_recipe(
    model=llm.LlamaModel(
        config=llm.Llama3Config8B()
    ),
    resume=run.Config(
        nemo.lightning.AutoResume,
        restore_config=run.Config(
            nemo.lightning.RestoreConfig,
            path="hf://meta-llama/Llama-3.2-8B-Instruct",  # 从 HF 加载
            load_optim_state=False,                          # 不加载优化器状态
        ),
    ),
    peft=run.Config(
        nemo.collections.llm.peft.LoRA,
        target_modules=["linear_qkv", "linear_proj"],       # 目标层
        dim=8,                                               # LoRA 秩
    ),
    trainer=run.Config(
        nemo.lightning.Trainer,
        max_steps=2000,
        num_nodes=1,
        devices=4,                                           # 4 张 GPU
    ),
)

实战案例

# 使用 NeMo 命令行工具微调(旧版 NeMo Core 风格,仍广泛使用)

# 下载示例配置文件
wget https://raw.githubusercontent.com/NVIDIA/NeMo/main/examples/nlp/language_modeling/tuning/megatron_gpt_sft.yaml

# 编辑配置后启动训练
python examples/nlp/language_modeling/tuning/megatron_gpt_sft.py \
    --config-path=. \
    --config-name=megatron_gpt_sft.yaml \
    trainer.devices=4 \                              # 4 张 GPU
    trainer.num_nodes=1 \
    trainer.max_epochs=3 \
    model.restore_from_path=/path/to/model.nemo \   # NeMo 格式模型文件
    model.peft.peft_scheme=lora \                    # 使用 LoRA
    model.peft.lora_tuning.adapter_dim=32 \
    model.data.train_ds.file_path=/data/train.jsonl \
    model.data.validation_ds.file_path=/data/val.jsonl \
    exp_manager.exp_dir=./experiments/lora-finetune

# HuggingFace 模型转换为 NeMo 格式
python scripts/checkpoint_converters/convert_llama_hf_to_nemo.py \
    --input_name_or_path meta-llama/Llama-3.2-8B-Instruct \
    --output_path llama3-8b.nemo

常见报错与解决

报错信息原因解决方法
No module named 'nemo'未安装pip install nemo_toolkit['llm']
apex not found缺少 NVIDIA Apex建议用 Docker 镜像(已预装)
模型格式不支持需要 .nemo 格式用转换脚本把 HF 模型转换
NCCL 通信错误多卡通信问题NCCL_DEBUG=WARN 查看详情
显存不足模型太大开启 model.megatron_amp_O2=false 或减少设备数

速查表

功能方式
安装(推荐)Docker: nvcr.io/nvidia/nemo:latest
SFT 微调llm.finetune_recipe(peft=LoRA(...))
模型格式转换convert_llama_hf_to_nemo.py
日志可视化集成 TensorBoard 和 W&B
支持模型LLaMA、Mistral、Gemma、Nemotron 等
官方文档https://docs.nvidia.com/nemo-framework