2026年6月初,深圳河套学院AI训练平台项目团队联合哈尔滨工业大学(深圳)、深圳市大数据研究院、华为有关团队,并协同深智城AI算力平台,依托昇腾910C集群完成1.6万亿参数DeepSeek-V4-Pro全参数后训练。公开报道给出了一个明确的能力锚点:昇腾910C集群已经承担过万亿参数级任务。
落到日常研发,麻烦往往藏在更小的地方。7B—13B模型从CUDA迁到Ascend,可能在第一个Step触发OOM,也可能卡在一个融合算子,或者运行一段时间后停在HCCL通信。三个项目记录,恰好覆盖了这三类故障。
OOM先看样本长度,别只盯80GB
一个金融科技项目在单机8卡昇腾910C上全参数微调Llama-7B,seq_length=4096,batch_size=4。同样的配置曾在A100环境运行,但迁移后刚完成第一个Step,PyTorch便抛出 RuntimeError: Out of memory。
项目使用的是80GB HBM配置。这里最容易出现的误判,是拿标称容量直接推算训练能否装下。动态Shape、变长序列和算子缓存都会影响峰值显存,CANN与CUDA的运行时策略也不相同,A100上的经验不能直接套用。
排查时先做三件事:
- 按token长度分桶。 将长度接近的样本放进同一个batch,缩小批次内的长度差,减少算子内部反复resize带来的额外开销。
- 拆开物理batch和等效batch。 将
micro-batch降到1,再用梯度累加维持等效batch_size=4。这通常比继续压单卡物理batch更稳妥。 - 固定版本组合。 驱动、CANN、MindSpore,或PyTorch与
torch_npu,都要记录完整版本。升级前先核对官方配套关系,并用同一批数据回归,不要只写一句“已升级最新版”。
如果首个Step仍然OOM,可以固定输入样本,分别记录前向、反向阶段的显存峰值。这样才能判断问题来自数据Shape、激活值,还是运行时内存管理。
算子报错,先查具体调用路径
一家医疗大模型团队把原有的HuggingFace Transformers代码直接搬到昇腾环境。第一次迭代进入反向阶段后,程序报错:
AscendError: Not implemented operator: aten::_scaled_dot_product_flash_attention_backward
这个错误指向当前调用路径缺少对应实现,不能简单概括成“昇腾不支持Flash Attention”。原代码调用了PyTorch 2.x底层的融合接口,而TorchNPU的兼容层没有映射到可执行路径。
这类问题可以按以下顺序处理:
- 先沿调用栈确认,是Transformers、PyTorch SDPA接口,还是项目自定义代码触发了该算子。
- 对照当前CANN、PyTorch和
torch_npu的版本关系,检查是否存在官方支持的替代入口。 - 如果只缺少单个算子,优先替换调用路径;如果RoPE、Flash Attention等融合算子连续出现兼容问题,再评估迁移到MindSpore和MindSpeed。
- 使用MindSpeed时,也要核对仓库版本与910C环境,不要直接复制旧版Megatron脚本。
华为在昇腾基础软件栈的公开介绍中,将CANN(Compute Architecture for Neural Networks)定位为昇腾AI基础软硬件平台中的异构计算架构。实际排错时,CANN、框架版本和算子实现需要放在一起检查,只替换一个Python包往往解决不了问题。
Step 120卡死,HCCL超时可能只是结果
第三个项目使用4台服务器、共32卡昇腾910C微调13B模型。训练经常运行到Step 120左右后停住:程序没有退出,也没有OOM,NPU利用率降到0%,Host侧日志持续出现HCCL通信超时。
HCCL超时未必是最早发生的异常。某个rank没有进入集合通信,其余rank也会一直等待。定位时要先找出第一个停止推进的rank,再判断问题出在算子、进程还是物理链路。
几项检查不能省:
- 对齐时间戳和rank。 汇总各节点日志,找到最先停止输出的进程,不要只看最后一条超时记录。
- 核对rank table。 可使用部署环境中的
hccl_tools生成或校验配置,确认服务器、NPU设备和rank编号一一对应。 - 检查实际组网。 单台8卡服务器内部通过HCCS互联,跨服务器走RoCE。ring或mesh没有通用模板,应按当前组网、并行方式和HCCL版本配置。
- 配置梯度分桶。 根据当前MindSpore版本设置通信融合参数,使前一个bucket的梯度通信与后续反向计算重叠。
comm_fusion的参数名称和阈值要以所用版本文档为准。 - 在卡死现场留存日志。 保存各节点dump、HCCL日志、rank table和版本信息。作业重启后只剩一条timeout,很难还原最早的故障点。
能复现,才算跑通
一次训练成功并不够。环境重建、卡数增加或数据集更换后无法复现,团队还会回到临场救火。迁移SOP至少要留下这些信息:
- 卡型、服务器数量、单机卡数,以及驱动、固件、CANN和框架版本;
- 模型名称、
seq_length、物理batch、micro-batch、梯度累加和数据分桶规则; - 缺失算子的完整名称、调用栈、发生在前向还是反向,以及最终替代路径;
- rank table、设备映射、HCCL超时对应的rank和Step;
- 每轮只改一类变量,先用短作业验证,再扩大卡数或序列长度。
2025年6月20日,华为云宣布新一代昇腾AI云服务全面上线。证券时报相关报道显示,团队获取昇腾算力的入口正在增加。训练脚本能否稳定运行,仍取决于版本、算子和通信配置是否记录清楚。
在CUDA环境中可以直接执行 accelerate launch 的脚本,迁到Ascend后需要重新验证数据Shape、算子路径与集群拓扑。把这三项写进SOP,后续的7B—13B微调故障才能按同一顺序复现和定位。