MindSpore分布式训练Qwen-7B时Graph execution failed的解决

1 系统环境

  • 硬件环境(Ascend/GPU/CPU): Ascend
  • MindSpore版本: mindspore=2.3
  • 执行模式(PyNative/ Graph): Graph
  • Python版本: Python=3.9
  • 操作系统平台: Linux

2 报错信息

2.1 问题描述

在服务器上使用mindspore.train.Model训练Qwen-7B(TP=8),前2epoch正常,第3epoch中途报错。

2.2 报错信息

[ERROR] HCCL(1234): hccl_timeout_error.cc:45] Timeout occurred, rank 5 is not responding.
[ERROR] GE(1234): graph_manager.cc:210] Graph execution failed.

3 根因分析

Qwen模型中的Rotary Embedding(RoPE)算子在MindSpore 2.3中存在HCCL AllGather死锁风险,当序列长度>2048且梯度累积步数>1时,rank间同步会超时。

4 解决方案

根据报错分析,可以通过以下三个方面解决这个问题。

  1. 升级CANN7.0.RC2或更高(含RoPE算子修复),避免RoPE被锁死的风险。
# 华为官网下载 CANN 7.0.RC2+
sudo ./Ascend-cann-toolkit_{version}_linux-aarch64.run --install
  1. 修改训练脚本:禁用梯度累积或缩短序列。
# 若无法升级,临时规避
train_config = {
    "batch_size": 16,          # 原为 32
    "seq_length": 2048,        # 原为 4096
    "gradient_accumulation_steps": 1  # 原为 2
}
  1. 启用HCCL超时延长。
export HCCL_EXEC_TIMEOUT=1800  # 默认 600 秒
export HCCL_CONNECT_TIMEOUT=1200