已关闭
[Bug-Report|缺陷反馈]: GE调用HCCL的HcomPlugin::Initialize接口和HcomPlugin::Finalize()不是同一线程导致getdevice失败 #431
maxinyuan1创建于 6月3日关闭于 6月26日
ClarkXie
6月3日 评论:
6月3日 评论:
收到,感谢反馈!这个问题我们已在定位中。
从目前的排查来看,报错发生在流程执行过程中,初步分析有以下两点需要进一步确认:
- 目前正在确认当前 TF 侧的使用方式是否正确;
- 如果 TF 侧使用方式没问题,GE 内部目前没有主动调用 SetDevice 的逻辑,需要再排查一下是哪个环节触发了 SetDevice 的调用。
有进展会及时同步,感谢耐心等待!


6月3日 移除了负责人 ClarkXie
6月3日 将 ClarkXie 设为负责人
6月9日 将 chenqian1365 设为负责人
6月9日 移除了负责人 ClarkXie
wangyuchen
6月26日 评论:
6月26日 评论:
您好,本问题已由 hcom 组件修复,合入 PR 为https://gitcode.com/cann/hcomm/pull/2928。
TFA 1.x 脚本中通过 session.run 方式显式调用 npu_initialize 与 npu_shutdown(分别对应 GE 的初始化与去初始化)。由于 session.run 内部采用线程池机制,导致去初始化阶段所在线程可能与初始化阶段不一致。
核心问题在于:aclrtSetDevice 具有线程绑定语义。当 GEInitialize 在线程 A 执行、而 GEFinalize 在线程 B 执行时,线程 B 从未调用过 aclrtSetDevice,致使 Finalize 链路中所有依赖 aclrtGetDevice 的环节(如 HCCL 引擎 Finalize、VarManager::FreeVarMemory 等)均可能失败。因此,hcom 组件对于无法获得 Context 的场景做特别处理。


6月26日 issue状态由 待办的 改变为 已完成
6月26日 关闭了 issue
在您提交issue前,请确认以下信息:
问题描述
在GE调用HcomPlugin::Finalize()时getdeivce失败,分析了一下GE调用HCCL的HcomPlugin::Initialize接口和HcomPlugin::Finalize()不是同一线程导致getdevice失败
环境信息
A5 POD
重现步骤
【测试环境】:POD
【测试版本】:br_torino_v100r001c10_main/202606/20260602_004126690_newest
【预置条件】:已安装 run包等组件
【重现步骤】:
source /usr/local/Ascend/cann/bin/setenv.bash
cd /mnt/hccl/testscript/
chmod 777 *
export ASCEND_GLOBAL_LOG_LEVEL=0
ulimit -c unlimited
echo /mnt/hccl/core.%e.%p > /proc/sys/kernel/core_pattern
export RANK_TABLE_FILE=/mnt/hccl/ranktable.json
export HCCL_CONNECT_TIMEOUT=120
export HCCL_EXEC_TIMEOUT=68
export HCCL_ENTRY_LOG_ENABLE=1
export HCCL_OP_EXPANSION_MODE=CCU_MS
./mul_server_tensorflow.sh 2 8 tensorflow/hccl_python_reducescatter_unknowshape_test_dynamic_graph_static_subgraph.py 1000 --test_type sum,max,min --dtype int8,int32,float16,float32 --data 1024,10 --iter 1
预期结果
【预期结果】:SUCCESS
日志 / 截图
$ grep -nr "SetDevice: SetDevice success" debug/plog/* | grep 3456860
debug/plog/plog-3456860_20260602211313762.log:17796:[INFO] RUNTIME(3456860,python3):2026-06-02-21:13:17.461.659 [api_impl.cc:3204] 3466695 SetDevice: SetDevice success, curCtx=0xffea100522c0, drv devId=0.
debug/plog/plog-3456860_20260602211313762.log:19225:[INFO] RUNTIME(3456860,python3):2026-06-02-21:13:19.735.848 [api_impl.cc:3204] 3466695 SetDevice: SetDevice success, curCtx=0xffea100522c0, drv devId=0.
$ grep -nr "Finalize start." debug/plog/* | grep 3456860
debug/plog/plog-3456860_20260602211313762.log:40696:[INFO] HCCL(3456860,python3):2026-06-02-21:13:20.924.403 [hcom_plugin.cc:83] [3466694]Finalize start.
$ grep -nr ERROR debug/plog/plog-3456860_20260602211313762.log | head -10
40706:[ERROR] HCCL(3456860,python3):2026-06-02-21:13:20.924.452 [orion_adapter_rts.cc:125][3466694][Get][Device]errNo[0x000000000500000f] rtGet device fail, please make sure that device is set. return[107002], para:deviceLogicId[0]
40707:[ERROR] HCCL(3456860,python3):2026-06-02-21:13:20.926.775 [p2p_enable_manager.cc:128][3466694]Runtime api exception: [Get][Device]errNo[0x000000000500000f] rtGet device fail, please make sure that device is set. return[107002], para:deviceLogicId[0]
备注