Chapter 08

NeMo Aligner:SFT / DPO / SteerLM / PPO

📌 commit 2ea3e0fNVIDIA 自家的 RLHF 工具集

NeMo Aligner(独立子项目 NVIDIA/NeMo-Aligner)提供了 NeMo 风格的全套 RLHF 实现,包括 SFT、DPO、PPO、SteerLM、Self-Rewarding。本章把它的整体结构和典型用法过一遍。

8.1Aligner 覆盖的算法

算法对应文件说明
SFTnemo_aligner/algorithms/supervised.py有监督微调
DPOalgorithms/dpo.py直接偏好优化
RPO / IPO / KTO同上 + 不同 lossDPO 变体
RM 训练algorithms/critic_server.pyBradley-Terry
PPOalgorithms/ppo.py四模型分服务
SteerLMalgorithms/steerlm.py多属性可控对齐
Self-Rewardingalgorithms/self_rewarding.py自生成偏好
SPINalgorithms/spin.pySelf-Play

8.2PPO:分服务部署

Aligner 的 PPO 设计是把 4 个模型分开起服务

这种架构跟 OpenRLHF / verl 一脉相承,能让每个角色独立分配 GPU、互不抢资源。

# 起 critic + reward server(节点 A)
python -m nemo_aligner.servers.serve_reward_model \
    rm_model_file=./rm.nemo \
    inference.port=5555

# 起 reference server(节点 B)
python -m nemo_aligner.servers.serve_reference_model \
    pretrained_checkpoint=./sft.nemo \
    inference.port=5556

# 起训练(节点 C)
python -m nemo_aligner.algorithms.ppo_actor \
    pretrained_checkpoint=./sft.nemo \
    rm_server.host=A_ip rm_server.port=5555 \
    ref_server.host=B_ip ref_server.port=5556 \
    trainer.devices=8

8.3DPO:单机就够

python -m nemo_aligner.algorithms.dpo \
    pretrained_checkpoint=./sft.nemo \
    "model.data.data_prefix={train: [./pref_train.jsonl], validation: [./pref_val.jsonl]}" \
    trainer.dpo.max_steps=2000 \
    trainer.dpo.val_check_interval=100 \
    model.dpo.beta=0.1 \
    model.optim.lr=5e-7 \
    exp_manager.exp_dir=./dpo_out

8.4SteerLM:NVIDIA 自家算法

SteerLM 是 NVIDIA 2023 提出的多属性条件对齐方法。思路:

  1. 用一个 attribute classifier 给每条数据打分(如 helpfulness=4, correctness=5, coherence=4);
  2. 把属性值当 prompt 一部分训:<extra_id_2> helpfulness:4 correctness:5 ... <text>
  3. 推理时让用户填想要的属性值。

跟 RLHF 比,SteerLM 不要 RM 也不要 critic,纯监督学。劣势是要先训属性 classifier。

python -m nemo_aligner.algorithms.attribute_classifier \
    train_ds.data_prefix=./hh_with_attrs.jsonl
# 然后用 attribute classifier 给数据打分
# 然后跑 SFT,把属性当 prompt 一部分

8.5显存预算(70B PPO 为例)

角色GPU 数每卡显存
policy (TP=8, bf16)8~50 GB
reference (TP=8, bf16, no grad)8~35 GB
reward (TP=8, bf16, no grad)8~35 GB
critic (TP=8, bf16)8~50 GB
总 GPU32~4 节点 8卡

8.6Aligner vs TRL vs OpenRLHF

NeMo AlignerTRLOpenRLHF
底层NeMo + MCoreHF TransformersDeepSpeed
分布式★★★★★(TP/PP/EP 全)★★★(accelerate)★★★★(Ray)
易用性★★(要熟悉 NeMo)★★★★★★★★
独家算法SteerLM / Self-Rewarding / SPIN
多机大模型 (≥ 70B)★★★★★★★★★★★

8.7这章你需要带走的