重要提示
您正在查看 NeMo 2.0 文档。此版本对 API 和新库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档。
将数据配置从 NeMo 1.0 迁移到 NeMo 2.0#
数据在 NeMo 2.0 中使用 DataModule
类进行配置。 LLM 集合具有专门用于语言建模用例的预训练和微调数据模块。
NeMo 1.0(先前版本)#
在 NeMo 1.0 中,数据配置通过 YAML 配置文件进行控制。 浓缩的示例如下所示
data:
train_ds:
file_names: "my/traindata1,my/traindata2"
global_batch_size: 4
micro_batch_size: 2
shuffle: True
num_workers: 8
memmap_workers: 2
pin_memory: True
max_seq_length: 2048
min_seq_length: 1
concat_sampling_probabilities:
- 0.75
- 0.25
...
validation_ds:
file_names: "/my/validdata1"
...
metric:
name: "loss"
average: null
num_classes: null
test_ds:
file_names: "/my/testdata1"
...
metric:
name: "loss"
average: null
num_classes: null
NeMo 2.0(新版本)#
在 2.0 中,数据通过相关的 DataModule
进行配置。 例如,为预训练设置 DataModule 可能如下所示
from nemo.collections.llm.gpt.data import PreTrainingDataModule
from nemo.collections.nlp.modules.common.tokenizer_utils import get_nmt_tokenizer
tokenizer = get_nmt_tokenizer("megatron", "GPT2BPETokenizer")
data = PreTrainingDataModule(
paths={
"train": [0.75, '/my/traindata1', 0.25, '/my/traindata2'],
"validation": '/my/validdata1',
"test": '/my/testdata`',
},
global_batch_size=4,
micro_batch_size=2,
num_workers=8,
pin_memory=True,
seq_length=2048,
tokenizer=tokenizer
)
有关预训练和微调支持的完整参数列表,请参阅 PreTrainingDataModule 和 FineTuningDataModule 文档。
重要提示
如果您已经为 NeMo 1.0 处理了数据集,则可以在 NeMo 2.0 中使用相同的数据路径。 离线数据准备步骤没有进行任何更改。
迁移步骤#
从 YAML 配置文件中删除
data
部分。在您的 Python 脚本中导入必要的模块
from nemo.collections.llm.gpt.data import PreTrainingDataModule from nemo.collections.nlp.modules.common.tokenizer_utils import get_nmt_tokenizer
创建
PreTrainingDataModule
或FineTuningDataModule
的实例,并将 YAML 文件中的参数映射到数据模块。
如果使用
PreTrainingDataModule
,请将 YAML 文件中的数据集路径和权重映射到paths
。 以以下 NeMo 1.0 YAML 配置为例。train_ds: file_names: "my/traindata1,my/traindata2" concat_sampling_probabilities: - 0.75 - 0.25 ... validation_ds: file_names: "/my/validdata1" ... test_ds: file_names: "/my/testdata1" ...此 NeMo 1.0 YAML 配置变为一个字典,将每个拆分映射到 NeMo 2.0 中的路径列表。 如果 YAML 文件中提供了
concat_sampling_probabilities
,则概率将与路径压缩在一起以创建平面列表paths={ "train": [0.75, "my/traindata1", 0.25, "my/traindata2"] "validation": ["/my/validdata1"] "test": ["/my/testdata1"] }
如果使用
FineTuningDataModule
,则dataset_root
应指向包含 training.jsonl、validation.jsonl 和 test.jsonl 的目录,这些文件处理为与 NeMo 1 中相同的格式。这些文件名可通过train_path
、validation_path
和test_path
属性进行配置。 或者,NeMo 2.0 提供了数据集特定的类,这些类将自动处理数据集的下载、预处理和拆分。 支持的数据集可以在此处找到。
将
data
对象传递给 llm.train 函数。
关于迁移的一些注意事项#
根据当前设计,用户需要指定单个数据加载配置,以便在训练、验证和测试数据之间共享。 换句话说,传递给
DataModule
构造函数的参数将用于所有三个数据加载器。 这与 NeMo 1.0 不同,在 NeMo 1.0 中,用户可以为每个拆分指定不同的配置。NeMo 1.0 中向用户公开的一些参数目前在 NeMo 2.0 中不可配置。 它们是
min_seq_length
(在 2.0 中默认为1
)
label_key
(在 2.0 中默认为output
)
add_eos
(默认为True
)
add_bos
(默认为False
)
add_sep
(默认为False
)
truncation_field
(默认为input
)
prompt_template
(默认为'{input} {output}'
)
drop_last
(默认为True
)
tokens_to_generate
(不支持)
metric
(不支持)
write_predictions_to_file
(不支持)