跳转至

指南: 配置训练任务 (GUIDE_CONFIGURATION.md)

本指南详细说明了如何配置、覆盖和管理训练过程中的所有设置. 框架的配置系统非常灵活, 支持通过默认值、YAML 文件、命令行参数和环境变量进行设置.

配置的层级结构

配置系统是分层的, 优先级从低到高如下:

  1. 数据类中的默认值: 这是最底层的设置, 在 core/config.py 中定义.
  2. YAML 配置文件: 您可以提供一个 YAML 文件来覆盖默认值.
  3. 命令行参数: 在运行时指定的参数具有最高优先级, 可以覆盖 YAML 文件和默认值.
  4. 环境变量: 主要用于分布式训练, 用于设置 MASTER_ADDR 等参数.

方法一: 使用命令行参数 (最常用)

对于快速实验和微调, 直接在命令行中覆盖参数是最方便的. 框架的配置系统设计为高度可配置, 几乎所有参数都可以通过命令行设置.

# 运行一个训练任务, 并覆盖学习率和批量大小
llm-train --task regression --lr 0.001 --batch-size 32

# 禁用 torch.compile 以进行调试
llm-train --task regression --compile false

# 从指定的检查点恢复训练 (通过 YAML 配置)
llm-train --task regression --config-path config_with_checkpoint.yaml

# 使用 YAML 配置进行复杂设置
llm-train --task sft --config-path config.yaml

# 启用/禁用 AMP 混合精度
llm-train --task regression --amp true
  • 要查看所有可用的命令行参数, 请运行 llm-train --help.
  • 当前 CLI 暴露的参数包括: --task, --config-path, --epochs, --batch-size, --lr, --num-samples, --compile, --amp.
  • 完整的模型配置(如 hidden_size, use_moe, num_experts 等)建议通过 YAML 配置文件设置.

方法二: 使用 YAML 配置文件 (推荐用于可复现的实验)

对于正式的、可复现的实验, 强烈建议使用 YAML 文件来管理配置. 这使得跟踪和版本控制实验设置变得容易.

  1. 创建一个 config.yaml 文件:

    # config.yaml
    model:
      hidden_size: 256
      num_layers: 4
      dropout: 0.15
      use_moe: true # 启用 MoE
      num_experts: 8
      top_k: 2
    
    training:
      epochs: 50
      batch_size: 256
      lr: 0.001
      scheduler_type: cosine
      warmup_epochs: 5
    
    optimization:
      use_compile: true
      use_amp: true
      num_workers: 8
    
    checkpoint:
      checkpoint_dir: "checkpoints/my_experiment"
      save_best: true
    
    logging:
      log_dir: "logs/my_experiment"
      log_interval: 50
    
  2. 在您的训练脚本中加载它:

    框架的 Config 类提供了 from_yaml 方法来从 YAML 文件加载配置. 您可以在自己的训练脚本中调用此方法:

    from llm.training.core.config import Config
    
    # 从 YAML 文件加载配置
    config = Config.from_yaml("path/to/your/config.yaml")
    
    # CLI 参数会覆盖 YAML 配置 (如上所示)
    # 直接在命令行中使用 --lr, --batch-size 等参数覆盖 YAML 中的值
    

    注意: train.py 默认从命令行和环境变量加载配置. 如果您希望使用 YAML 文件, 您需要在自己的脚本中显式调用 Config.from_yaml().

方法三: 使用环境变量 (分布式训练)

在进行多节点分布式训练时, 通常使用环境变量来告知每个进程其角色和如何找到主进程.

# 节点 0 (主节点)
export MASTER_ADDR='10.1.1.1'
export MASTER_PORT='12355'
export NUM_NODES=2
export NODE_RANK=0
export GPUS_PER_NODE=8
llm-train --task ...

# 节点 1
export MASTER_ADDR='10.1.1.1' # 与主节点相同
export MASTER_PORT='12355'  # 与主节点相同
export NUM_NODES=2
export NODE_RANK=1
export GPUS_PER_NODE=8
llm-train --task ...

DistributedManager 会自动从环境变量中读取这些值来初始化 torch.distributed.