已关闭
[Bug-Report|缺陷反馈]: build.sh 的 build_device() 未转发 ENABLE_EXPERIMENTAL,导致 experimental BIRS 执行器未编入 device 库,运行时 ReduceScatter 失败 #380
Davydov_Danil创建于  7月23日关闭于  17 天前
Davydov_Danil
7月23日 创建

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

Describe the current behavior / 问题描述 (Mandatory / 必填)

使用 bash build.sh --experimental --full(或 --aicpu / --static)同时构建 host 与 device 时,host 侧 hccl 库编入了 experimental 代码,但 device 侧 libscatter_aicpu_kernel.so 未编入,造成 host/device 不一致,运行时报错。
根因: build.sh 的 build_device() 以硬编码的 -D 参数列表调用独立 device 工程 cmake/device/CMakeLists.txt,该列表未包含 -DENABLE_EXPERIMENTAL;而 host 侧 cmake_config() 走 ${CUSTOM_OPTION},其中含 -DENABLE_EXPERIMENTAL=ON(build.sh:920-921)。
后果链:

  • cmake/device/CMakeLists.txt:49 的 if(ENABLE_EXPERIMENTAL) 求值为假 → add_subdirectory(experimental/ops) 被跳过;
  • experimental/ops/reduce_scatter/birs/reduce_scatter_birs_executor.cc:117 的 REGISTER_EXEC("ReduceScatterBIRSExecutor", ...) 不编入 device 库;
  • 运行时 host 选中 algName="ReduceScatterBIRSExecutor"(experimental/ops/op_common/op_common_experimental.cc:131)并 launch AICPU kernel,但 device 侧注册表查无此执行器,kernel_launch.cc:446 报 Fail to find executor,进而 HcclLaunchAicpuKernel run failed ret[1]。

Environment / 环境信息 (Mandatory / 必填)

硬件:Ascend 910C(16 卡,AICPU 模式;HCCL_OP_EXPANSION_MODE=AI_CPU)
CANN:9.1.x(host/device 包由 cann/hccl --experimental 构建)——
HCCL 仓:cann/hccl,分支/commit:<8abb2687b365a95b01f4a84a1d63c93d67513857>
工具链:aarch64-hcc 交叉编译(TOOLCHAIN_DIR=.../toolkit/toolchain/hcc)

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

bash build.sh --experimental --full(host 与 device 同时构建)
将产出的 aicpu_hccl.tar.gz 部署到 /opp/built-in/op_impl/aicpu/kernel/aicpu_hccl.tar.gz
将 host 库 libhccl.so 安装到 /lib64/
设置环境:export HCCL_BIRS_ENABLE=TRUE、export HCCL_OP_EXPANSION_MODE=AI_CPU
运行:mpirun -n 16 ./bin/reduce_scatter_test -b 1M -e 1M -f 2 -d fp32 -o sum -p 16 -w 0 -n 1 -c 0

Describe the expected behavior / 预期结果 (Mandatory / 必填)

device 库 libscatter_aicpu_kernel.so 应包含 ReduceScatterBIRSExecutor 注册(strings 可见,REGISTER_EXEC 静态初始化生效),reduce_scatter_test 在 BIRS 路径下正常完成。

device 侧(logs/debug/device-0/device-*.log):
[ERROR] HCCL(...,aicpu_scheduler) [kernel_launch.cc:446] [...]Fail to find executor for algName[ReduceScatterBIRSExecutor]
[ERROR] CCECPU(...,aicpu_scheduler) [ae_kernel_lib_aicpu_kfc.cpp:223]...KFC HcclLaunchAicpuKernel run failed ret[1]

Special notes for this issue/备注 (Optional / 选填)

位置: build.sh build_device()(build.sh:180-189,cmake 调用)
影响范围: build_device() 被 --full / --aicpu / --static 路径共用,故 --experimental 在这些路径下 device 侧均失效。
建议修复(最小改动): 在 build_device() 的 cmake -S cmake/device -B . ... 调用前,把 bash 变量转为 CMake 的 ON/OFF 并加入参数列表:
if [ "${ENABLE_EXPERIMENTAL}" == "true" ]; then
DEVICE_ENABLE_EXPERIMENTAL="ON"
else
DEVICE_ENABLE_EXPERIMENTAL="OFF"
fi

cmake -S &#36;{CURRENT_DIR}/cmake/device -B . \
    ... \
    -DENABLE_EXPERIMENTAL=&#36;{DEVICE_ENABLE_EXPERIMENTAL} \
    ...

另建议在 cmake/device/CMakeLists.txt(project(hccl_device) 之后)显式声明 option(ENABLE_EXPERIMENTAL "Enable experimental features" OFF),与根 CMakeLists.txt:13 一致,避免变量被静默当作未定义。
修复后需重新构建 device 包并重新部署 aicpu_hccl.tar.gz,再复测 reduce_scatter_test。

likedislike
DDavydov_Danil
7月23日 修改了issue 的描述
DDavydov_Danil
7月23日 修改了issue 的描述
DDavydov_Danil
7月23日 关联了pull request:fixing experimental option and ReduceScatter BIRS
LLeewis成员
7月24日 关联了看板:HCCL
Leewis成员
7月24日 评论:
likedislike
CANN-robotCANN-robot成员
7月24日 将 Davydov_Danil 设为负责人
LLeewis成员
9月2日 移除了看板:HCCL
LLeewis成员
9月2日 关联了看板:HCCL
Leewis成员
26 天前 评论:

@Davydov_Danil 你好,当前该issue 所提问题修复情况怎么样了,预计什么时候会修改上库,是否有相关问题依赖我们?

likedislike
CANN-robotCANN-robot成员
17 天前 关闭了 issue
CANN-robotCANN-robot成员
17 天前 添加了label:resolved
LLeewis成员
13 天前 移除了看板:HCCL