开发者
下载
Atlas 900A2 Pod 驱动升级后未重启导致 HCCL 通信域初始化失败问题分析与解决

Atlas 900A2 Pod 驱动升级后未重启导致 HCCL 通信域初始化失败问题分析与解决

HCCL

发表于: 2026/06/04

背景概述

在中心训练场景下,Atlas 900A2 Pod 作为高性能 AI 训练硬件平台,广泛应用于大规模分布式深度学习训练任务。其核心依赖于 Ascend HDK 驱动栈的稳定运行,尤其是 HCCL(Huawei Collective Communication Library)通信库在多节点协同训练中的关键作用。当驱动版本变更后,若未完成系统重启,可能导致内核态与用户态组件状态不一致,进而引发通信初始化异常,影响训练作业的正常启动。

本文基于一次实际故障案例,系统梳理了从问题现象到根因定位、最终解决的完整排查过程,旨在为开发者提供可复用的诊断思路与规避建议。


问题现象

在执行 128 节点分布式训练任务时,部分工作节点报错:

RuntimeError: Communicator of group hccl_world_group inited: failed.

该错误表明 HCCL 通信域 hccl_world_group 初始化失败,导致训练任务无法正常启动。进一步查看日志发现,相关节点在启动阶段即出现 Not support svm mem 的提示,且伴随 Svm map va not fixed 的异常日志。


原因分析

1. SVM 内存映射异常初步定位

日志中首报错点为 Not support svm mem, because asan is opened or os not support mmap 8T,提示 SVM(System Virtual Memory)内存映射失败。SVM 机制要求在进程启动阶段,Host 侧与 Device 侧共同映射一段固定范围的虚拟地址空间(0x100000000000 - 0x180000000000,共 8TB),用于高效管理 Host 与 NPU 之间的内存交互。

若该映射失败,将导致 SVM 相关功能不可用,进而影响 HCCL 通信初始化。


2. 排查关键配置项

为排除外部环境干扰,对以下可能影响 SVM 映射的配置项逐一验证:

AddressSanitizer(ASan)启用:确认程序未编译启用 -fsanitize=address,且无关联的 ASan 运行时库加载。

OS 虚拟地址空间限制:检查内核启动参数,确认未设置 vm.max_map_count 或其他限制。

进程虚拟内存限制:通过 ulimit -v 检查,确认无非默认值限制。

容器配置冲突:排查容器运行时参数,确认未使用 --default-ulimit stack=-1 等可能导致 SO 加载异常的配置。

用户程序地址空间冲突:检查 /proc/pid/maps,确认无用户程序(如 JDK21)与驱动所需地址段冲突。

上述排查均未发现异常配置。


3. 带内设备日志异常分析

进一步分析设备侧日志,发现关键异常:

Svm map va not fixed, vm_start=0x100000000000, vm_end=0x200000000000

正常情况下,vm_end 应为 0x180000000000,而实际值为 0x200000000000,超出预期范围 8TB,表明虚拟地址映射范围异常,与驱动预期不一致。

该异常指向驱动 SO 包在加载时未能正确执行地址映射逻辑,怀疑驱动文件存在异常或版本不一致。


4. 单机压测验证问题必现

为进一步确认问题根源,执行单机 HCCL 与 P2P 通信压测,结果均失败,日志显示:

Host mem gotgo malloc, errstr=Invalid argument

该错误由研发确认,仍源于 8TB 地址空间映射不匹配问题,说明该故障具备可复现性,且与驱动状态强相关。

5. 驱动版本不一致线索

通过 npu-smi 工具查询驱动版本,发现其与系统中实际安装的驱动版本不一致:

npu-smi 显示版本:24.1.rc3

实际驱动包版本:24.1.0.3

正常情况下,二者应保持一致。该不一致现象提示驱动更新后未完成系统重启,导致运行时加载的仍是旧版本驱动。


6. 驱动安装日志确认操作行为

查阅驱动安装日志,确认用户曾将驱动从 24.1.0.3 降级至 24.1.rc3,但未执行系统重启操作。


问题根因

驱动版本变更后未执行系统重启,导致运行时加载的驱动版本与实际安装版本不一致,驱动接口返回数据不符合预期,引发 SVM 内存映射失败,进而导致 HCCL 通信域初始化异常。


解决措施

  1. 执行系统重启:通过带内命令 reboot 重启故障节点。
  2. 验证版本一致性:重启后执行 npu-smi versiondpkg -l | grep ascend 等命令,确认 npu-smi 与驱动版本一致。
  3. 重新启动训练任务:重启后重新提交训练作业,问题解决,HCCL 通信域正常初始化。

✅ 关键提示:驱动升级或降级后,必须执行系统重启,以确保内核模块与用户态组件状态同步。


总结与建议

1、驱动变更后必须重启:任何驱动版本变更(包括升级、降级)均需重启系统,否则可能导致运行时行为异常。

2、版本一致性检查:建议在部署后增加版本一致性校验脚本,自动比对 npu-smi 与驱动包版本。

3、日志先行:遇到通信初始化失败问题时,优先检查 plogdevice log 中的 SVM 映射相关日志,快速定位问题方向。

本案例再次验证:系统级变更后,重启是保障组件状态一致性的最有效手段。

本页内容