昇腾MindSpore 找不到tbe operator implementation错误
总结
因为 MindSpore 在 Ascend NPU 模式下找不到 TBE(Tensor Boost Engine)算子实现的路径,而这些算子实现是运行在华为 Ascend NPU 上所必须的。
很像 tf,pytorch找不到cudnn就不能正常使用gpu
在 ~/.bashrc 文件添加:
# ASCEND 软件安装根路径(根据实际安装路径调整)
export ASCEND_HOME=/usr/local/Ascend
# TBE 算子实现路径(给 PYTHONPATH)
export TBE_IMPL_PATH=${ASCEND_HOME}/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe
export PYTHONPATH=${TBE_IMPL_PATH}:${PYTHONPATH}
# OPP 路径(算子描述文件)
export ASCEND_OPP_PATH=${ASCEND_HOME}/ascend-toolkit/latest/opp
# 编译器路径(ccec_compiler)
export PATH=${ASCEND_HOME}/ascend-toolkit/latest/compiler/ccec_compiler/bin:${PATH}
# 动态库路径(驱动 + 运行库)
export LD_LIBRARY_PATH=${ASCEND_HOME}/ascend-toolkit/latest/lib64:${ASCEND_HOME}/driver/lib64:${ASCEND_HOME}/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/op_tiling:${LD_LIBRARY_PATH}
执行 source ~/.bashrc
华为云 notebook 不改配置 .bashrc 设置方法
在notebook 最顶端添加一个单元格, 并运行
import os
import sys
# ----------------------------
# 1) Ascend 根目录
# ----------------------------
os.environ["ASCEND_HOME"] = "/usr/local/Ascend"
# ----------------------------
# 2) TBE 算子实现路径加入 PYTHONPATH
# ----------------------------
tbe_impl = os.path.join(os.environ["ASCEND_HOME"],
"ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe")
os.environ["PYTHONPATH"] = f"{tbe_impl}:{os.environ.get('PYTHONPATH','')}"
# ----------------------------
# 3) OPP 路径
# ----------------------------
opp_path = os.path.join(os.environ["ASCEND_HOME"], "ascend-toolkit/latest/opp")
os.environ["ASCEND_OPP_PATH"] = opp_path
# ----------------------------
# 4) 编译器路径加入 PATH
# ----------------------------
ccec = os.path.join(os.environ["ASCEND_HOME"],
"ascend-toolkit/latest/compiler/ccec_compiler/bin")
os.environ["PATH"] = f"{ccec}:{os.environ.get('PATH','')}"
# ----------------------------
# 5) 动态库路径(驱动 + 运行库)
# ----------------------------
lib64_1 = os.path.join(os.environ["ASCEND_HOME"], "ascend-toolkit/latest/lib64")
lib64_2 = os.path.join(os.environ["ASCEND_HOME"], "driver/lib64")
tiling = os.path.join(os.environ["ASCEND_HOME"],
"ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/op_tiling")
# LD_LIBRARY_PATH 一定要在最前面覆盖
ld_paths = ":".join([lib64_1, lib64_2, tiling, os.environ.get("LD_LIBRARY_PATH","")])
os.environ["LD_LIBRARY_PATH"] = ld_paths
# Optional: 打印检查
print("ASCEND_HOME:", os.environ["ASCEND_HOME"])
print("PYTHONPATH:", os.environ["PYTHONPATH"].split(":")[:3])
print("ASCEND_OPP_PATH:", os.environ["ASCEND_OPP_PATH"])
print("PATH (head):", os.environ["PATH"].split(":")[:3])
print("LD_LIBRARY_PATH (head):", os.environ["LD_LIBRARY_PATH"].split(":")[:3])
原因
问题原因
当你在运行 MindSpore + Ascend NPU 时,MindSpore 会检查:
✔ TBE 算子实现路径是否在 PYTHONPATH ✔ CCEC 编译器是否在 PATH ✔ OPP 路径是否在 ASCEND_OPP_PATH ✔ 库文件是否在 LD_LIBRARY_PATH
Enjoy Reading This Article?
Here are some more articles you might like to read next: