NPU上运行onnxruntime

1 问题背景

在Ascend环境上,使用onnxruntime推理时,报错:

vbnet 复制代码
/onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:1193 onnxruntime::Provider& onnxruntime::ProviderLibrary::Get() [ONNXRuntimeError] : 1 : FAIL : Failed to load library libonnxruntime_providers_cuda.so 
with error: libcudart.so.11.0: cannot open shared object file: No such file or directorys

显示的是cuda的组件找不到。由于是Ascend环境,肯定是没有GPU的,很明显是onnxruntime的包装错了。

sql 复制代码
pip show onnxruntime-gpu

通过如上命令,可以看到环境上确实安装的是gpu版本的。这里先卸载onnxruntime-gpu。

2 解决办法

通过查找onnxruntime社区,可以发现npu已经对onnxruntime进行了适配,参考如下文档:

onnxruntime/docs/execution-providers/community-maintained/CANN-ExecutionProvider.md at gh-pages · microsoft/onnxruntime

那么该如何才能构建onnxruntime适配Ascend上的whl包呢?

这里提供源码构建的办法:

2.1 克隆源码

bash 复制代码
git clone https://github.com/microsoft/onnxruntime.git
cd onnxruntime

2.2 构建whl包

注意--use_cann参数

bash 复制代码
# 先初始化CANN环境
source /usr/local/Ascend/ascend-toolkit/set_env.sh
 
# 执行build脚本
./build.sh --config Release --build_shared_lib --parallel --use_cann --build_wheel

若构建成功,whl包会生成在build/Linux/Release/dist/目录下。安装onnxruntime-cann

复制代码
pip3 install onnxruntime_cann-x.xx.x-xxxx-xxxxx-xxxxx_xxx_xx.whl

3 推理示例

ini 复制代码
import numpy as np
import onnxruntime as ort
 
# 模型路径
model = "./resnet34.onnx"
 
# 以CANN作为EP的配置,参数说明可见:https://github.com/microsoft/onnxruntime/blob/gh-pages/docs/execution-providers/community-maintained/CANN-ExecutionProvider.md
providers = [
    ("CANNExecutionProvider", {
        "device_id": 0,                                 
        "arena_extend_strategy": "kNextPowerOfTwo",     
        "npu_mem_limit": 4 * 1024 * 1024 * 1024,
        "enable_cann_graph": True,
    }),
]
 
# options可以用来对推理session进行配置,例如开启profiling功能
options = ort.SessionOptions()
 
# 创建推理session
session = ort.InferenceSession(model, providers=providers, sess_options=options)
 
# 构造纯推理数据
ndata = np.zeros([1, 3, 224, 224], dtype=np.float32)
 
# 执行推理
session.run(["class"], {"image": ndata}])
相关推荐
1234Wu6 分钟前
企业网站建设与SEO之后,如何补上GEO让AI搜索推荐你的品牌?
人工智能
产品推荐官8 分钟前
2026年AI应用开发服务商的选择逻辑:适配度比功能清单更重要
大数据·人工智能·ai·技术分享·开发经验
虹科网络安全10 分钟前
“顶会”看安全(十六):深入分析函数内联及其对基于机器学习的二进制分析的安全影响
人工智能·安全·机器学习
麻雀飞吧12 分钟前
最新量化实现难点,规则和流程要先有形状
人工智能·python
武子康14 分钟前
权重已到、Recipe 还在变:Kimi K3 发布后该怎样做工程验收
人工智能·后端·agent
Urbano14 分钟前
打破缝制品类偏见:工序模板机跨界生产家居收纳布艺,实现服装与家居制品通用智造
人工智能·自动化
rrrjqy15 分钟前
风险与组合管理——Quant-for-Beginners 量化入门Task6
大数据·人工智能
学术小白人17 分钟前
医学交叉会议!EI检索!2026年人工智能与健康信息学国际学术会议(AIHI 2026)
大数据·人工智能·搜索引擎·自动化·医学
RD_daoyi20 分钟前
Google偷偷给AI引用加了五个新功能:内联引用、悬停预览、品牌展示……但点击率真的回来了吗?
大数据·网络·人工智能·算法·安全·搜索引擎
网易云信23 分钟前
AI 员工也要"绩效考核"?企业管理 Agent 的未来图景
人工智能·agent