更新时间:2025-07-29 GMT+08:00
分享

常见错误原因和解决方法

训练中常见错误链接如下,根据实际情况选择相应链接:

问题一 显存溢出错误

在训练过程中,常见显存溢出报错,示例如下:

RuntimeError: NPU out of memory. Tried to allocate 1.04 GiB (NPU 4; 60.97 GiB total capacity; 56.45 GiB already allocated; 56.45 GiB current active; 1017.81 MiB free; 56.84 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.

【解决措施】MindSpeed-LLM和Llama-Factory解决方式有所区别,根据所选框架选择。

  • MindSpeed-LLM
    • 通过npu-smi info查看是否有进程资源占用NPU,导致训练时显存不足。解决可通过kill掉残留的进程或等待资源释放。
    • 可调整参数:TP张量并行(tensor-model-parallel-size) 和PP流水线并行(pipeline-model-parallel-size),可以尝试增加 TP和PP的值,一般TP×PP≤NPU数量,并且要被整除。
    • 可调整参数:MBS指最小batch处理的样本量(micro-batch-size)、GBS指一个iteration所处理的样本量(global-batch-size)。可将MBS参数值调小至1,但需要遵循GBS/MBS的值能够被NPU/(TP×PP)的值进行整除。
    • 可调整参数:SEQ_LEN要处理的最大的序列长度(seq-length),参数值过大很容易发生显存溢出的错误。
    • 可添加参数:在3_training.sh文件中添加开启重计算的参数。其中recompute-num-layers的值为模型网络中num-layers的参数值。
      --recompute-granularity full \
      --recompute-method block \
      --recompute-num-layers {NUM_LAYERS} \
  • Llama-Factory
    • 调整参数:per_device_train_batch_size(MBS)指最小batch处理的样本量,可将MBS参数值调小至1。
    • 调整参数:deepspeed,调整zero级别,依次递增。
      • - ZeRO-0: 数据分布到不同的NPU
      • - ZeRO-1: Optimizer States分布到不同的NPU
      • - ZeRO-2: Optimizer States、Gradient分布到不同的NPU
      • - ZeRO-2-Offload: Optimizer States分布到不同的NPU且开启Offload
      • - ZeRO-3: Optimizer States、Gradient、Model Parameter分布到不同的NPU
      • - ZeRO-3-Offload: Optimizer States、Gradient、Model Parameter分布到不同的NPU且开启Offload。
    • 增大卡数,依次递增。

问题二 网卡名称错误

当训练开始时提示网卡名称错误。或者通信超时。可以使用ifconfig命令检查网卡名称配置是否正确。

比如,ifconfig看到当前机器IP对应的网卡名称为enp67s0f5,则可以设置环境变量指定该值。

图1 网卡名称错误
export GLOO_SOCKET_IFNAME=enp67s0f5   # 多机之间使用gloo通信时需要指定网口名称,
export TP_SOCKET_IFNAME=enp67s0f5     # 多机之间使用TP通信时需要指定网口名称
export HCCL_SOCKET_IFNAME=enp67s0f5   # 多机之间使用HCCL通信时需要指定网口名称

关于环境变量的解释可以参考:Distributed communication package - torch.distributed — PyTorch 2.3 documentation

问题三 保存ckpt时超时报错

在多节点集群训练完成后,只有部分节点会保存权重,而其他节点会一直在等待通信。当等待时间超过36分钟时,会发生超时的错误。

图2 报错提示

【解决措施】

  1. 需要保证磁盘IO带宽正常,可以在36分钟内将文件保存到磁盘。单个节点内,最大只有60G(实际应该在40G以下)的文件内容,只要在36分钟内保存完成,就不会报超时错误。
  2. 忽略该报错,因为报错不影响实际报错的权重。

问题四 DockerFile或install.sh安装三方依赖包失败

【问题现象】

下载安装AscendFactory/dependences.yaml中三方依赖包:Llama-Factory、MindSpeed-LLM等失败。

【问题根因】

无法连接公网导致拉取git失败。

【解决措施】

配置代理或使用有公网权限的机器手动拉取AscendFactory/dependences.yaml中的三方依赖包,命名、版本与dependences.yaml中${save_name}、${version}值保持一致,并将其复制至AscendFactory/third-party目录下,重新DockerFile或执行install.sh命令。

问题五 Llama-Factory框架数据预处理过大数据集超时

【问题根因】

Llama-Factory框架处理数据默认先处理0卡,再依次处理1~7卡,串行处理数据导致时间占用过大导致超时。

【解决措施】

  • 方案A:修改LLamaFactory barrier策略,将0卡先处理,1~7卡再处理方案修改为0~7卡同步处理,训练前执行以下命令:
    export DISABLE_MAIN_PROCESS_FIRST = True
  • 方案B:默认处理策略不变,将训练作业运行超时时间修改为2小时,训练前执行以下命令:
    export ACL_DEVICE_SYNC_TIMEOUT=7200

    方案B操作简单,但数据集过大时,有可能2个小时也会超时,可以继续修改延长超时时间。

问题六 Llama-Factory框架训练过程中训练至某一步卡死现象

【问题现象】

多节点训练任务,运行至某一个steps时训练任务卡死2H,导致任务超时

【问题根因】

ascend_trace线程抓取调用栈时对相关资源加锁,dataloader_worker进程在被fork拉起时继承了锁状态,导致dataloader_worker进程因无法获取到锁而卡死。

【解决措施】

训练作业前,先通过加载环境变量export ASCEND_COREDUMP_SIGNAL=none关闭ascend的堆栈跟踪。

export ASCEND_COREDUMP_SIGNAL=none

问题七 Llama-Factory环境,运行DockerFile或install.sh中的setup.py失败

【问题现象】

执行Llama-Factory代码目录下setup.py失败,报错:“SetuptoolsDeprecationWarning: License classifiers are deprecated.”

图3 setup.py报错提示

【问题根因】

pip依赖包版本过低导致与其他依赖包冲突。

【解决措施】

  1. 修改添加pip install --upgrade pip命令至AscendFactory/install.sh文件,如图所示:

  2. 重新执行DockerFile或install.sh。

问题八 MindSpeed-LLM蒸馏模型训练精度问题

【问题根因】

MindSpeed-LLM框架中某些参数值为固定值,与蒸馏后模型配置不一致,导致训练结果精度问题。

【解决措施】

训练前修改代码包目录下scripts_modellink/{model}/3_training.sh文件参数值与蒸馏模型权重目录下config.json参数值保持一致,参数表格如下:

表1 3_training.sh参数修改值

蒸馏模型

原模型

3_training.sh文件参数

DeepSeek-R1-Distill-Qwen-7B

qwen2.5-7b

--rotary-base 10000

DeepSeek-R1-Distill-Qwen-14B/32B

qwen2.5-14b/32b

--norm-epsilon 1e-5

问题九 DeepSeek-V3或R1报错“lease install cann-nnal package first”

【问题现象】

MindSpeed-LLM框架基于Snt9B23环境训练DeepSeek-V3或DeepSeek-R1报错“lease install cann-nnal package first”。

【问题根因】

MindSpeed-LLM框架训练镜像中未安装“cann-nnal ”包,需手动安装。

【解决措施】

  1. 下载“cann-nnal_8.0.RC3.20”软件包:Ascend-cann-nnal_8.0.RC3.20_linux-aarch64.run并解压上传到容器内,如下图所示。
    图4 下载“cann-nnal_8.0.RC3.20”软件包
  2. 根据训练场景选择执行以下步骤:
    • Lite Server环境:在启动任务前进入“cann-nnal_8.0.RC3.20”软件包父目录,执行以下命令安装“cann-nnal ”包。
      source /usr/local/Ascend/ascend-toolkit/set_env.sh # 安装nnal包需要source环境变量
      bash Ascend-cann-nnal_8.0.RC3.20_linux-aarch64.run --install
      # 设置环境变量
      source /usr/local/Ascend/nnal/atb/set_env.sh
    • ModelArts Standard环境
      • 本地上传“cann-nnal_8.0.RC3.20”软件包,可参考上传代码包【OBS桶SFS Turbo共享盘】将软件包解压并放置在代码包的AscendFactory目录下。
      • 创建训练任务时,在启动命令的最前面加入以下命令:
        cd <${AscendFactory_dir}> # 进入代码目录路径,参考代码路径解释。
        source /usr/local/Ascend/ascend-toolkit/set_env.sh # 安装nnal包需要source环境变量
        bash Ascend-cann-nnal_8.0.RC3.20_linux-aarch64.run --install
        # 设置环境变量
        source /usr/local/Ascend/nnal/atb/set_env.sh

相关文档