重要提示

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

Phi 3#

Microsoft 的 Phi-3-mini-4K-Instruct 是一个 38 亿参数、轻量级的最先进开放训练模型 该模型属于 Phi-3 系列,Mini 版本有两个变体:4K 和 128K,这是它可以支持的上下文长度(以 token 为单位)。我们为预训练和微调 Llama 3 模型(两种尺寸:8B 和 70B)以及 Llama 3.1 模型(三种尺寸:8B、70B 和 405B)提供预定义的配方。这些配方使用 NeMo 2.0 和 NeMo-Run。这些配方为 NeMo 2.0 中引入的 nemo.collections.llm api 函数之一配置了一个 run.Partial。这些配方托管在以下文件中:llama3_8bllama3_70bllama31_8bllama31_70bllama31_405b

NeMo 2.0 预训练配方#

注意

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

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

from nemo.collections import llm

pretrain = llm.phi3_mini_4k_instruct.pretrain_recipe(
    name="phi3_mini_4k_instruct_pretraining",
    dir=f"/path/to/checkpoints",
    num_nodes=1,
    num_gpus_per_node=8,
)

# # To override the data argument
# dataloader = a_function_that_configures_your_custom_dataset(
#     gbs=gbs,
#     mbs=mbs,
#     seq_length=pretrain.model.config.seq_length,
# )
# pretrain.data = dataloader

NeMo 2.0 微调配方#

注意

微调配方将 SquadDataModule 用于 data 参数。您可以将 SquadDataModule 替换为您自定义的数据集。

要导入 HF 模型并转换为 NeMo 2.0 格式,请运行以下命令(这只需要执行一次)

from pathlib import Path
from nemo.collections.llm import import_ckpt
from nemo.collections.llm.gpt.model.phi3mini import Phi3ConfigMini, Phi3Model
import_ckpt(model=Phi3Model(Phi3ConfigMini()),source='hf://microsoft/Phi-3-mini-4k-instruct')

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

from nemo.collections import llm

recipe = llm.phi3_mini_4k_instruct.pretrain_recipe(
    name="phi3_mini_4k_instruct_pretrainin",
    dir=f"/path/to/checkpoints",
    num_nodes=1,
    num_gpus_per_node=1,
    peft_scheme='lora',  # 'lora', 'none'
    packed_sequence=None,
)

# # To override the data argument
# dataloader = a_function_that_configures_your_custom_dataset(
#     gbs=gbs,
#     mbs=mbs,
#     seq_length=recipe.model.config.seq_length,
# )
# recipe.data = dataloader

默认情况下,微调配方将运行 LoRA 微调,LoRA 应用于语言模型中的所有线性层。要在没有 LoRA 的情况下微调整个模型,请在配方参数中设置 peft_scheme='none'

要使用序列打包进行微调以获得更高的吞吐量,请设置 packed_sequence=True。请注意,您可能需要调整全局批大小以实现类似的收敛。

注意

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

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

import nemo_run as run

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

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

run.run(pretrain, direct=True)

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

配方

状态

Phi 3 mini 4k instruct

Phi 3 mini 128k instruct

不适用

Phi 3 small 8k instruct

不适用