cann-recipes-train 仓库是昇腾平台训练优化的实战手册,首批放出的两个样例直击 RL 训练痛点:一个基于 Qwen2.5-1.5B 的入门级任务,单卡即可跑通;另一个是 DeepSeek-R1 在 128 张 A3 卡上的高吞吐优化实践。
仓库把 CANN 的异构适配、算子调度这些底层杂活封装成了直接可用的代码。你不用抱着抽象文档琢磨 GPU/NPU 怎么协同,现有模型代码基本不用动就能接昇腾。LLM 和多模态训练里,算子优化和内存复用的提速效果会直接体现在你的训练任务上。
硬件要求很清晰:DeepSeek 样例至少 128 张 Atlas A3,Qwen2.5 样例一张 Atlas A2 就行。准备好 Notebook:1×NPU 910B,32vCPU + 64GB 内存,镜像 ubuntu22.04-py3.11-cann8.2.rc1-sglang-main-notebook。启动后跑一下 npu-smi,确认 NPU 状态正常(910B3 功耗 96.5W,温度 46℃,HBM 还剩 60G+)。
git clone <cann-recipes-train 仓库地址>
cd cann-recipes-train/rl_train
目录结构很直白:deepseek 和 qwen2_5 两个文件夹分别对应两个样例。先看 DeepSeek 优化实践。
DeepSeek-R1 RL 训练优化
基于 veRL 框架,配合 MindSpeed-LLM 和 vLLM-Ascend,在 Atlas A3 集群上实现 GRPO 算法的高吞吐训练,最终达到 120TPS/卡的吞吐。部署时先装依赖(verl、torch_npu 等,部分版本冲突不影响),然后拉取指定 commit 的 veRL、vLLM v0.9.1、vLLM-Ascend 并打补丁,再把这些框架全部挪到 cann-recipes-train/rl_train/deepseek/ 下统一调用。补丁生效前还得按要求修改 verl 源码。
框架适配:让 veRL 和 vLLM-Ascend 能对话
vLLM-Ascend 社区已经做了 DeepSeek-R1 的昇腾适配,推理性能可以直接借鉴。但 veRL 和它对接时得改几个关键接口,主要集中在 vllm_rollout_spmd.py:
- 在导入 vLLM 之前先手动引入 vLLM-Ascend 的 patch,否则类/函数对不上。
- 设置
VLLM_DP_MASTER_PORT和对应 IP,保证多机下每个数据并行组有独立通信端口。 - 关掉 sleep 模式:NPU 多机环境下 sleep 会导致显存释放不掉,而且不能让 vLLM 内存池接管显存,否则后续手动卸载会失败。
- 加载真实权重时,
max_num_batched_token默认 8192 容易 OOM,改小到 1024 并开启 chunked_prefill 即可。
训推一体化:参数重排与模型装卸
大模型 RL 最头疼的是训练和推理时分片方式完全不同。8 张卡训练时按 EP4、PP2 分组,推理时却要合并成 EP8、PP1。参数更新后必须做 reshard:通过 AlltoAllV 将专家参数精准发到目标推理 rank,避免全量广播,单卡增量内存从 14G 骤降到 0.0547G,OOM 风险大幅降低。PP 域通信也做了顺序调整,先在 TP 域聚合,再用 AlltoAll 广播,进一步压减通信量(例如 p=8、t=4 时第一步通信量减半)。


