重要提示

您正在查看 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 配置已被 NeMoLoggerAutoResume 对象取代。本指南将帮助您迁移实验管理设置。

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 中,实验管理使用 NeMoLoggerAutoResume 类进行配置。

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()],
    ...
)

迁移步骤#

  1. 从您的 YAML 配置文件中删除 exp_manager 部分。

  2. 将以下导入添加到您的 Python 脚本

    from nemo import lightning as nl
    from pytorch_lightning.loggers import WandbLogger
    
  3. 使用适当的参数创建 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,
        )
    )
    
  4. 使用适当的参数创建 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,
    )
    
  5. 将您想要的任何回调添加到训练器

    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,
        ...
    )
    
  6. trainerlogresume 对象传递给 llm.train() 函数

    llm.train(..., trainer=trainer, log=log, resume=resume)
    
  1. 调整 NeMoLoggerAutoResume 中的参数以匹配您之前的 YAML 配置。

注意

  • 检查点配置中不再需要 model_parallel_size 参数。

  • 对于 S3 检查点,请将 ModelCheckpoint 中的 dirpath 设置为 s3://bucket/key 格式。