Precision Alignment
在 VeRL 框架中进行强化学习(RL)训练时,精度对齐是确保训练过程可复现、可调试的关键环节。
本文档总结了在 VeRL 上对NPU和GPU进行精度对齐的方法以供参考。
Last updated: 05/09/2026.
1. 环境与权重对齐
1.1 依赖版本对齐
VeRL、transformers版本需要进行强对齐,否则会直接影响精度结果。
其他关键依赖(torch、megatron、vllm)如无法进行强对齐,需优先保持一致或相近。
1.2 模型权重对齐
检查模型的权重和config.json文件是否完全一致
2. 输入数据对齐
在verl训练启动脚本中添加如下配置:
data.shuffle=False
data.validation_shuffle=False
3. 配置对齐
在NPU与GPU做精度对齐时,需检查配置是否完全对齐。包含:
直接对比脚本写入配置
运行过程中保存日志,收集日志打屏中的配置进行对比,可比较默认参数配置是否一致,需保证关键参数对齐
4. 固定确定性
4.1 固定随机种子
在环境中安装 msprobe :
pip install mindstudio-probe
在 worker 文件开头添加确定性函数:
from msprobe.pytorch import seed_all
seed_all(mode=True)
4.2 固定通信环境变量
在多卡通信情况下:
HCCL通信下(默认场景):
export CLOSE_MATMUL_K_SHIFT=1
export ATB_MATMUL_SHUFFLE_K_ENABLE=0
export HCCL_DETERMINISTIC=”true”
export VLLM_ENABLE_V1_MULTIPROCESSING=0
LCCL通信下(通过export HCCL_OP_EXPANSION_MODE=”AIV”使能):
export CLOSE_MATMUL_K_SHIFT=1
export ATB_MATMUL_SHUFFLE_K_ENABLE=0
export LCCL_DETERMINISTIC=1
export ATB_LLM_LCOC_ENABLE=0
export VLLM_ENABLE_V1_MULTIPROCESSING=0
在单卡无通信情况下:
export CLOSE_MATMUL_K_SHIFT=1
export ATB_MATMUL_SHUFFLE_K_ENABLE=0
export VLLM_ENABLE_V1_MULTIPROCESSING=0
5. 验证训练精度
5.1 训练打桩
打桩即保留当前阶段的输入输出数据,便于从结果上对比分析。在进行精度问题排查时,需要进行打桩辅助问题定位。常见的打桩方式是直接将rollout阶段的数据直接dump下来。
第一步:在 GPU 环境生成基准数据
先跑一次GPU脚本,开启如下配置:
trainer.rollout_data_dir='/path/dump/data_json'
可以保存每步推理结果为jsonl文件。
第二步:在 NPU 环境复现验证
NPU上开启如下参数,复用上一步生成的序列,端到端运行:
skip.rollout.enable=True \
skip.rollout.dump_dir=/path/to/rollout_dump \
第三步:对比指标
在打桩输入相同推理结果,训练配置保持一致,并且固定随机性的情况下,比较NPU与GPU的rewards/pg_loss/grad_norm值是否存在差异。
6. 验证推理精度
6.1 resharding
在推理正式开始前,vllm会进行dummy run,通过推理一个 token 来评估推理时的显存占用,进而分配显存。可以在 vLLM 的 LLM 初始化时指定参数 load_format 来指定 dummy run 的权重是随机初始化的(dummy)还是真实权重(safetensors)。在 VeRL 中,通过参数 actor_rollout_ref.rollout.load_format 指定该参数。
当出现推理乱码现象时,如果引擎初始化方式为load_format=dummy,则sharding高概率存在问题,即使换成了safetensors后吐字正常,sharding也是存在问题的,需要对比前向。
6.2 推理结果对齐
trainer.rollout_data_dir='/path/dump/data_json'
保存每步推理结果为jsonl文件,可以直接打开jsonl文件快速确认整网推理结果是否乱码,用于推理精度问题定界。
在dump推理数据之前,若复现推理精度问题占用的资源较多,可以先尝试缩小推理精度问题复现成本,减少复现的规模,减少需要dump和对比的数据。在多batch、长序列的场景下,可以通过发送单batch请求,减少序列长度尝试复现。
7. dump对比
精度调试工具,定位到问题出现的阶段之后,可以通过msprobe工具进行数据dump来细致定位。
在推理或训练过程中,模型可能出现输出偏离预期、生成异常、甚至产生 NaN/Inf 等数值不稳定问题。要定位根因,需要对模型执行路径进行精细化监控,采集中间特征、权重、激活值以及各关键层的输入输出,并记录提示词、张量 dtype、硬件配置等上下文信息。通过捕获这些核心张量及元数据,可以系统性地追踪精度退化或数值错误的来源。