重要提示

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

检查点#

在本节中,我们将介绍 NVIDIA NeMo 与检查点管理相关的关键功能。

检查点格式#

.nemo 检查点本质上是一个 tar 文件,它捆绑了模型配置(在 YAML 文件中指定)、模型权重(在 .ckpt 文件中)以及其他工件(如分词器模型或词汇表文件)。这种整合的设计简化了共享、加载、调优、评估和推理。

相比之下,在 PyTorch Lightning 训练期间创建的 .ckpt 文件包含模型权重和优化器状态,通常用于恢复训练。

分片模型权重#

.nemo.ckpt 检查点中,模型权重可以以常规格式(模型并行文件夹内名为 model_weights.ckpt 的单个文件)或分片格式(名为 model_weights 的文件夹)保存。

使用分片模型权重,您可以更有效地保存和加载具有多个 GPU 或节点的训练脚本状态,并避免在使用不同的模型并行设置恢复调优时需要更改模型分区。

NeMo 支持来自 Megatron Core 的分布式(分片)检查点格式。Megatron Core 支持两个检查点后端:基于 PyTorch 的(推荐)和基于 Zarr 的(已弃用)。有关详细说明,请查看 NeMo 分布式检查点用户指南 指南。

量化检查点#

NeMo 提供了 训练后量化 工作流程,允许您将常规 .nemo 模型转换为 TensorRT-LLM 检查点,在 NeMo 中通常称为 .qnemo 检查点。这些 .qnemo 检查点随后可以与 NVIDIA TensorRT-LLM 库 一起使用,以实现高效推理。

.qnemo 检查点与 .nemo 检查点类似,是一个 tar 文件,它捆绑了 config.json 文件中指定的模型配置以及 rank{i}.safetensors 文件。这些 .safetensors 文件单独存储每个 rank 的模型权重。此外,还保存了一个 tokenizer_config.yaml 文件,其中仅包含原始 NeMo model_config.yaml 文件中的分词器部分。此配置文件定义了给定模型使用的分词器。

当处理大型量化 LLM 时,建议您将检查点保留为未压缩的目录而不是 tar 文件。您可以通过在 PTQ 配置文件 中导出量化模型时设置 compress 标志来控制此行为。

以下示例显示了旨在通过两个 GPU(rank)提供的量化模型的内容

model-qnemo
├── config.json
├── rank0.safetensors
├── rank1.safetensors
├── tokenizer.model
└── tokenizer_config.yaml

社区检查点转换器#

我们提供了易于使用的工具,使用户能够将社区检查点转换为 NeMo 格式。这些工具简化了各种操作,包括恢复训练、监督微调 (SFT)、参数高效微调 (PEFT) 和部署。有关详细说明和指南,请参阅我们的文档。

我们提供全面的指南来帮助最终用户和开发者

  • 用户指南:关于如何在 NeMo 中转换社区模型检查点以进行进一步训练或部署的详细步骤。有关更多信息,请参阅我们的 user_guide

  • 开发者指南:关于开发者如何实现社区模型检查点转换器的说明,从而在 NeMo 生态系统中实现更广泛的兼容性和集成。有关开发详细信息,请参阅我们的 dev_guide

  • Megatron-LM 检查点转换:NVIDIA NeMo 和 NVIDIA Megatron-LM 共享多项基础技术。您可以使用我们的脚本将使用 Megatron-LM 训练的 GPT 风格模型检查点转换为 NeMo 框架,请参阅我们的 从 Megatron-LM 转换