当前位置: 首页 > article >正文

在Ascend NPU上构建并运行onnxruntime的实战指南

1. 为什么要在Ascend NPU上运行onnxruntime最近几年国产AI加速硬件发展迅猛Ascend NPU凭借出色的算力和能效比在推理场景中表现亮眼。但很多开发者手上积累了大量ONNX格式的模型直接迁移到新硬件平台总会遇到各种兼容性问题。这时候onnxruntime就成为了打通生态的关键桥梁。我在实际项目中就遇到过这样的困境团队之前基于GPU训练好的ResNet、YOLO等模型想要快速部署到搭载Ascend 910B的服务器上。直接用原生框架转换太麻烦而onnxruntime官方默认只提供CUDA和CPU版本。这时候就需要自己动手编译适配CANN的定制版本。这种需求在国产化替代过程中非常普遍。比如某安防客户要将原有的人脸识别系统从英伟达平台迁移到昇腾服务器或者工业质检客户希望利用NPU的低延迟特性提升产线效率。onnxruntime的跨平台特性正好能解决这类问题让开发者无需重写整个推理 pipeline。2. 环境准备与依赖检查2.1 硬件与基础软件要求在开始编译之前建议先确认你的Ascend设备满足以下条件至少16GB内存编译过程比较吃内存已安装Ubuntu 18.04/20.04 LTS这是CANN官方支持的系统已正确部署Ascend驱动和CANN工具包建议5.1.RC2以上版本我遇到过最典型的环境问题就是驱动版本不匹配。有一次在客户现场发现编译总是报奇怪的段错误最后排查是CANN版本太旧。可以用以下命令检查基础环境# 检查NPU设备识别 npu-smi info # 查看CANN版本 cat /usr/local/Ascend/ascend-toolkit/latest/acllib/version.info2.2 开发依赖安装除了硬件驱动还需要准备这些开发工具CMake 3.18GCC 7.3太新的版本可能反而会有兼容问题Python 3.6-3.8onnxruntime对3.9支持还不完善建议用apt-get一次性安装sudo apt-get install -y build-essential cmake python3-dev python3-pip特别注意如果之前安装过onnxruntime-gpu一定要先卸载干净pip uninstall onnxruntime-gpu rm -rf ~/.cache/onnxruntime3. 源码编译实战3.1 获取适配CANN的源码官方社区维护的CANN执行提供器目前还在主分支外推荐用这个特定提交git clone --recursive https://github.com/microsoft/onnxruntime.git cd onnxruntime git checkout 5810f31 # 这个提交已验证过兼容性如果遇到子模块下载慢的问题可以修改.gitmodules中的URL为国内镜像源。我在内网环境编译时就吃过这个亏等了三小时才发现卡在protobuf下载。3.2 编译参数详解关键编译命令如下source /usr/local/Ascend/ascend-toolkit/set_env.sh ./build.sh --config Release \ --build_shared_lib \ --parallel 8 \ --use_cann \ --build_wheel \ --skip_tests几个实用技巧--parallel根据你CPU核心数设置能显著加快编译内存不足时可以加--minimal_build去掉非必要组件国内网络建议先export http_proxyhttp://your_proxy避免下载超时编译过程中最容易出问题的就是第三方依赖下载。我整理了几个常见错误的解决方法错误现象解决方案Failed to download protobuf手动下载后放到cmake/build/downloads/目录numpy头文件找不到先pip install numpy再设置PYTHONPATHacl库链接失败检查set_env.sh是否生效3.3 生成whl包与验证成功编译后在build/Linux/Release/dist/下会生成类似onnxruntime_cann-1.12.0-cp36-cp36m-linux_x86_64.whl的文件。安装时建议创建新的虚拟环境python3 -m venv cann_env source cann_env/bin/activate pip install onnxruntime_cann-*.whl验证安装是否成功import onnxruntime as ort print(ort.get_available_providers()) # 应该看到CANNExecutionProvider4. 模型推理最佳实践4.1 基础推理示例以ResNet34为例典型使用方式如下providers [ (CANNExecutionProvider, { device_id: 0, npu_mem_limit: 4 30, # 4GB内存限制 arena_extend_strategy: kSameAsRequested, }) ] session ort.InferenceSession(resnet34.onnx, providersproviders) inputs np.random.randn(1, 3, 224, 224).astype(np.float32) outputs session.run(None, {input: inputs})这里有个性能调优的小技巧对于固定输入尺寸的模型设置arena_extend_strategy为kSameAsRequested可以减少内存碎片。我在图像分类场景实测能提升约15%的吞吐量。4.2 高级配置参数CANN执行提供器支持一些特有参数{ enable_cann_graph: True, # 启用图优化 dump_graphs: False, # 调试时保存计算图 precision_mode: force_fp16, # 强制FP16推理 op_select_impl_mode: high_performance, optypelist_for_implmode: Gelu,Add }特别说明几个关键参数precision_mode对支持混合精度的模型效果显著我在BERT上测试能提速2倍op_select_impl_mode建议对Transformer类模型开启调试时可以开启dump_graphs查看算子融合情况4.3 性能对比测试在Ascend 310P上测试不同配置的ResNet50推理时延配置时延(ms)内存占用默认参数8.21.2GBFP16模式5.70.8GB图优化FP164.10.9GB从数据可以看出合理的参数组合能带来显著的性能提升。不过也要注意FP16可能会导致精度损失实际业务中需要做好验证。5. 常见问题排查5.1 编译阶段问题问题一acl库链接错误undefined reference to aclrtSetDevice解决方法export CXXFLAGS-I/usr/local/Ascend/ascend-toolkit/latest/acllib/include export LDFLAGS-L/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64问题二Python绑定生成失败检查是否安装了正确版本的protobufpip install protobuf3.20.15.2 运行时问题问题一找不到CANN提供器确认两点安装的是自己编译的onnxruntime_cann运行前执行了source set_env.sh问题二模型加载失败常见于包含不支持算子的情况可以用官方工具检查python -m onnxruntime.tools.check_onnx_model resnet34.onnx5.3 性能问题如果发现推理速度不如预期建议按以下步骤排查用npu-smi查看NPU利用率检查是否启用了enable_cann_graph尝试不同的arena_extend_strategy使用Ascend的msprof工具进行性能分析我在部署EfficientNet时遇到过性能反而不如CPU的情况最后发现是因为模型中的Swish激活函数没有被正确融合。通过修改模型中的Swish为SigmoidMultiply后性能提升了7倍。

相关文章:

在Ascend NPU上构建并运行onnxruntime的实战指南

1. 为什么要在Ascend NPU上运行onnxruntime? 最近几年国产AI加速硬件发展迅猛,Ascend NPU凭借出色的算力和能效比,在推理场景中表现亮眼。但很多开发者手上积累了大量ONNX格式的模型,直接迁移到新硬件平台总会遇到各种兼容性问题。…...

保姆级教程:在Ubuntu 22.04上从零编译ArmSoM Sige7的RK3588 Linux固件(含环境配置与常见错误排查)

RK3588 Linux固件编译实战:从环境搭建到烧录全流程指南 1. 开发环境准备与SDK获取 在Ubuntu 22.04系统上编译RK3588 Linux固件前,需要确保主机满足以下硬件要求: 磁盘空间:至少40GB可用空间(多系统编译需更大&#…...

从ECU复位到产线下线:深度拆解ControlDTCSetting(0x85)在汽车电子生命周期中的4种角色

ECU生命周期中的ControlDTCSetting(0x85)服务:从研发到售后的四维实践指南 当ECU完成最后一次产线测试即将装车时,产线工程师老张习惯性地在EOL终端上输入了一组UDS指令。其中那条ControlDTCSetting(0x85)服务的执行结果让他确认了这个控制单元已经准备好…...

SITS2026多模态工具链极简入门,1小时搭建可商用图文生成流水线(含私有化部署Checklist与License激活密钥生成逻辑)

第一章:SITS2026发布:多模态大模型工具链 2026奇点智能技术大会(https://ml-summit.org) SITS2026是面向工业级多模态AI研发场景推出的开源工具链,聚焦视觉-语言-时序信号联合建模能力,支持从数据预处理、多模态对齐训练、轻量化…...

如何用WeChatMsg永久珍藏微信聊天记录:你的数字记忆终极守护指南

如何用WeChatMsg永久珍藏微信聊天记录:你的数字记忆终极守护指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trendin…...

如何高效使用BUAAthesis:北航毕业论文LaTeX模板的完整指南

如何高效使用BUAAthesis:北航毕业论文LaTeX模板的完整指南 【免费下载链接】BUAAthesis 北航毕设论文LaTeX模板 项目地址: https://gitcode.com/gh_mirrors/bu/BUAAthesis 对于每一位北航学子来说,毕业论文不仅是学术研究的结晶,更是一…...

神经网络架构图可视化宝典:轻松绘制专业深度学习图表

神经网络架构图可视化宝典:轻松绘制专业深度学习图表 【免费下载链接】Neural-Network-Architecture-Diagrams Diagrams for visualizing neural network architecture 项目地址: https://gitcode.com/gh_mirrors/ne/Neural-Network-Architecture-Diagrams 你…...

避开这些坑!百度智能云AppBuilder API调用中的5个常见错误及解决方案

百度智能云AppBuilder API实战避坑指南:从鉴权到调用的深度解析 第一次接触百度智能云AppBuilder API时,我像大多数开发者一样,以为这不过是又一个标准的RESTful接口。直到凌晨三点被报警短信惊醒——某个未做限流的API密钥在短短两小时内耗尽…...

深入解析BioBERT:高效生物医学文本挖掘的实战应用完全指南

深入解析BioBERT:高效生物医学文本挖掘的实战应用完全指南 【免费下载链接】biobert Bioinformatics2020: BioBERT: a pre-trained biomedical language representation model for biomedical text mining 项目地址: https://gitcode.com/gh_mirrors/bi/biobert …...

比对智能体,偏置群体:多智能体系统中的偏置放大测量

摘要尽管多智能体系统正越来越多地部署于复杂工作流中,但其涌现特性——尤其是偏见的累积机制——仍鲜为人知。由于现实世界中的多智能体系统过于复杂而难以全面分析,评估其伦理鲁棒性首先需要剥离其基础运行机制。本文开展了一项基线实证研究&#xff0…...

深入解析Camera矩阵:从Intrinsic到Extrinsic的完整指南

1. 相机矩阵基础:从成像原理到坐标转换 当你用手机拍照时,有没有想过镜头背后的数学魔法?相机矩阵就是这场视觉盛宴的幕后导演。简单来说,它就像一套精确的数学公式,告诉计算机如何把三维世界"压扁"成手机里…...

2026届毕业生推荐的十大降AI率神器实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 将AIGC率予以降低的关键核心之处在于,把文本里那些能够被机器识别出来的规律性特…...

避坑指南:在Win11上搞定PSCAD 5.0与MATLAB R2022a联合仿真(附VS2015+Intel Fortran配置)

Win11下PSCAD与MATLAB联合仿真避坑全攻略 电力系统仿真研究者们常常需要在PSCAD和MATLAB之间搭建联合仿真环境,但这个过程就像在雷区行走——稍有不慎就会触发各种兼容性问题。本文将带你避开所有已知的"地雷",从版本选择到配置修复&#xff…...

用PPO算法训练AI团队:从零实现多智能体协作捕猎(附完整代码)

用PPO算法训练AI团队:从零实现多智能体协作捕猎 想象一下,你正在设计一个虚拟生态系统,需要让一群AI控制的捕食者学会协同围猎敏捷的猎物。这不是简单的单智能体任务,而是需要多个智能体在局部观测条件下做出分布式决策的复杂场景…...

SystemVerilog三大专用always块:如何避免RTL设计中的常见陷阱

1. SystemVerilog专用always块的前世今生 在Verilog时代,我们只有一个万能的always块来处理所有类型的逻辑。这就像给你一把瑞士军刀,虽然什么都能干,但切菜不如菜刀顺手,拧螺丝不如螺丝刀专业。SystemVerilog带来的always_ff、al…...

新概念英语第一册137_A pleasant dream

Lesson 137: A pleasant dream 美好的梦 Watch the story and answer the question What would Julie like to do, if she had the money? She would like to travel and see the world.Key words and expressions football 足球(美:橄榄球)pool 赌注win …...

别再踩坑了!ZYNQ7000双核FreeRTOS通信与LwIP API调用的五个关键细节

ZYNQ7000双核FreeRTOS通信与LwIP API调用的五个关键细节 调试ZYNQ7000双核系统就像在走钢丝——稍有不慎就会掉进隐蔽的陷阱。去年我们团队在开发工业网关时,曾因一个Cache未刷新的问题浪费了两周时间。本文将分享那些手册上不会写的实战经验,特别是当Fr…...

Battery Toolkit:终极Apple Silicon Mac电池健康管理指南,让电池寿命延长50%

Battery Toolkit:终极Apple Silicon Mac电池健康管理指南,让电池寿命延长50% 【免费下载链接】Battery-Toolkit Control the platform power state of your Apple Silicon Mac. 项目地址: https://gitcode.com/gh_mirrors/ba/Battery-Toolkit 你是…...

英雄联盟自动化工具League-Toolkit:如何让游戏体验提升3倍效率

英雄联盟自动化工具League-Toolkit:如何让游戏体验提升3倍效率 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是一…...

实验六 存储器实验:从触发器到RAM的实战解析

1. 存储器实验的前置知识 第一次接触存储器实验时,我完全被各种专业术语搞晕了。触发器、寄存器、计数器这些名词听起来都很抽象,直到我用Logisim实际搭建电路才恍然大悟。存储器就像计算机的"记忆宫殿",从最基础的触发器开始&…...

Intv_AI_MK11智能运维(AIOps)实战:日志分析与故障预测

Intv_AI_MK11智能运维(AIOps)实战:日志分析与故障预测 1. 运维场景痛点分析 凌晨3点,某电商平台的服务器突然出现异常流量激增。值班运维工程师小张面对海量日志束手无策,等他终于定位到是某个微服务接口出现死循环时…...

测试文章标题01wwwwwww

测试文章内容这是一篇测试文章...

算法训练营|704.二分查找

题目链接:https://leetcode.cn/problems/binary-search/ 视频讲解:https://www.bilibili.com/video/BV1fA4y1o715第一想法:运用左闭右闭写法,直接书写代码,实现题目要求。遇到的困难:没有将nums.size加&…...

CVSS 评分 9.3!Marimo 关键漏洞披露不到 10 小时被利用,组织需紧急应对

CVSS 评分 9.3!Marimo 关键漏洞披露不到 10 小时便被利用,组织需紧急应对Sysdig 表示,CVSS 评分为 9.3 的漏洞可让攻击者在暴露的 Marimo 服务器上进行未认证的远程代码执行,且该漏洞在披露后不久便在现实中被利用。据 Sysdig 威胁…...

Hermes 智能体框架:从零到一的完整安装与实战指南

作者:AI技术实践专家 | 本文已通过实测验证,适用于国内开发者环境 引言:为什么选择 Hermes? 在当今大模型百花齐放的时代,开发者面临一个核心问题:如何高效管理和调度多个AI模型?Hermes 作为 N…...

基于Logistic函数的负荷需求响应模型:Matlab编程实现负荷转移率对比,涵盖电价激励下...

负荷需求响应模型 基于Logistic函数 采用matlab编程,考虑电价激励下的乐观响应和悲观响应,利用负荷需求响应模型得到峰转平、平转谷的实际负荷转移率,从而得到基于Logistic函数的负荷转移对比,程序运行稳定一、代码概述 本代码基于…...

如何用uBlock Origin实现浏览器零广告体验:完全免费的高效拦截指南

如何用uBlock Origin实现浏览器零广告体验:完全免费的高效拦截指南 【免费下载链接】uBlock uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean. 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock 还在为网页上不断弹…...

基于OFA模型的智能客服系统开发:VQA技术实战

基于OFA模型的智能客服系统开发:VQA技术实战 想象一下这个场景:你是一家电商公司的客服主管,每天要处理上千张用户上传的图片问题——“这个商品有划痕正常吗?”、“我收到的包装破损了怎么办?”、“这个尺寸和我拍的…...

从零开始搭建CTF靶场:catcat漏洞环境复现与调试指南

从零开始搭建CTF靶场:catcat漏洞环境复现与调试指南 在网络安全领域,CTF(Capture The Flag)比赛已成为检验安全技能的重要方式。而搭建本地靶场环境,则是学习漏洞原理和攻防技术的绝佳途径。本文将带你从零开始构建一…...

龙虾openclaw安装本地部署

github搜索找到openclaw,根据下载运行,同时按下windows徽标键R,出现输入框,输入cmd回车打开终端,根据github上install,start来下载运行openclaw...