重要提示
您正在查看 NeMo 2.0 文档。此版本引入了 API 的重大更改和一个新的库,NeMo Run。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档。
将 exp_manager 迁移到 NeMoLogger 和 AutoResume#
在 NeMo 2.0 中,exp_manager
配置已被 NeMoLogger 和 AutoResume 对象取代。本指南将帮助您迁移实验管理设置。
NeMo 1.0(先前版本)#
在 NeMo 1.0 中,实验管理在 YAML 配置文件中配置。
exp_manager:
explicit_log_dir: null
exp_dir: null
name: megatron_gpt
create_wandb_logger: False
wandb_logger_kwargs:
project: null
name: null
resume_if_exists: True
resume_ignore_no_checkpoint: True
resume_from_checkpoint: ${model.resume_from_checkpoint}
create_checkpoint_callback: True
checkpoint_callback_params:
dirpath: null # to use S3 checkpointing, set the dirpath in format s3://bucket/key
monitor: val_loss
save_top_k: 10
mode: min
always_save_nemo: False # saves nemo file during validation, not implemented for model parallel
save_nemo_on_train_end: False # not recommended when training large models on clusters with short time limits
filename: 'megatron_gpt--{val_loss:.2f}-{step}-{consumed_samples}'
model_parallel_size: ${multiply:${model.tensor_model_parallel_size}, ${model.pipeline_model_parallel_size}}
async_save: False # Set to True to enable async checkpoint save. Currently works only with distributed checkpoints
NeMo 2.0(新版本)#
在 NeMo 2.0 中,实验管理使用 NeMoLogger
和 AutoResume
类进行配置。
from nemo.collections import llm
from nemo import lightning as nl
from pytorch_lightning.loggers import WandbLogger
log = nl.NeMoLogger(
name="megatron_gpt",
log_dir=None, # This will default to ./nemo_experiments
explicit_log_dir=None,
version=None,
use_datetime_version=True,
log_local_rank_0_only=False,
log_global_rank_0_only=False,
files_to_copy=None,
update_logger_directory=True,
wandb=WandbLogger(project=None, name=None),
ckpt=nl.ModelCheckpoint(
dirpath=None, # to use S3 checkpointing, set the dirpath in format s3://bucket/key
monitor="val_loss",
save_top_k=10,
mode="min",
always_save_nemo=False,
save_nemo_on_train_end=False,
filename='megatron_gpt--{val_loss:.2f}-{step}-{consumed_samples}',
)
)
resume = nl.AutoResume(
path=None, # Equivalent to resume_from_checkpoint
dirpath=None,
import_path=None,
resume_if_exists=True,
resume_past_end=False,
resume_ignore_no_checkpoint=True,
)
llm.train(..., log=log, resume=resume)
此外,NeMo 1.0 实验管理器提供了向训练器添加一些回调的选项。在 NeMo 2.0 中,这些回调可以直接传递给您的训练器。值得注意的是,TimingCallback()
在 NeMo 1.0 中用于记录步长时间。
要在 NeMo 2.0 中添加 TimingCallback
,请将回调直接添加到训练器
import nemo.lightning as nl
from nemo.utils.exp_manager import TimingCallback
trainer = nl.Trainer(
...
callbacks=[TimingCallback()],
...
)
迁移步骤#
从您的 YAML 配置文件中删除
exp_manager
部分。将以下导入添加到您的 Python 脚本
from nemo import lightning as nl from pytorch_lightning.loggers import WandbLogger
使用适当的参数创建
NeMoLogger
对象log = nl.NeMoLogger( name="megatron_gpt", log_dir=None, # This will default to ./nemo_experiments explicit_log_dir=None, version=None, use_datetime_version=True, log_local_rank_0_only=False, log_global_rank_0_only=False, files_to_copy=None, update_logger_directory=True, wandb=WandbLogger(project=None, name=None), ckpt=nl.ModelCheckpoint( dirpath=None, monitor="val_loss", save_top_k=10, mode="min", always_save_nemo=False, save_nemo_on_train_end=False, filename='megatron_gpt--{val_loss:.2f}-{step}-{consumed_samples}', async_save=False, ) )
使用适当的参数创建
AutoResume
对象resume = nl.AutoResume( path=None, # Equivalent to resume_from_checkpoint dirpath=None, import_path=None, resume_if_exists=True, resume_past_end=False, resume_ignore_no_checkpoint=True, )
将您想要的任何回调添加到训练器
import nemo.lightning as nl from nemo.lightning.python.callbacks import PreemptionCallback from nemo.utils.exp_manager import TimingCallback callback = [TimingCallback(), PreemptionCallback()] trainer = nl.Trainer( ... callbacks=callbacks, ... )
将
trainer
、log
和resume
对象传递给llm.train()
函数llm.train(..., trainer=trainer, log=log, resume=resume)
调整
NeMoLogger
和AutoResume
中的参数以匹配您之前的 YAML 配置。
注意
检查点配置中不再需要
model_parallel_size
参数。对于 S3 检查点,请将
ModelCheckpoint
中的dirpath
设置为s3://bucket/key
格式。