新闻详情

新闻详情

首页 / 资讯中心 / 详情

ONNX Runtime:3步在Android和iOS跑通AI模型推理的实操指南

发布时间:2026/9/6 17:52:02来源:尧图网络
ONNX Runtime:3步在Android和iOS跑通AI模型推理的实操指南
ONNX Runtime3步在Android和iOS跑通AI模型推理的实操指南【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime假设我们要给一个拍照应用加上图片识别能力但又不想让用户等200ms以上。这里要用到的工具是ONNX Runtime模型训练好之后导出成ONNX格式一次导出Android和iOS两端原生跑通。这篇文章记录我们完整走一遍移动部署的流程——装依赖、建会话、出推理结果。它到底解决什么问题一句话ONNX Runtime就像一个多语言翻译官把PyTorch/TensorFlow导出的模型统一翻译成手机硬件能直接执行的指令。它内部的核心概念是执行提供器Execution Provider简称EP每种硬件加速通道对应一个EP比如Android上的NNAPI、iOS上的Core ML、以及通用的XNNPACK针对移动CPU优化过的内核库。创建会话时运行时会自动挑选支持模型算子的EP来执行我们只需要声明想用哪个剩下的交给框架。下图是官方文档里的执行提供器架构图可以看到EP是挂在推理运行时下面的一层同一套API对上层完全透明动手前准备 先确认三样东西都很轻模型文件.onnx格式的模型比如MobileNetV2这类分类网络大小通常几MB到几十MB。没有现成的话用torch.onnx.export从PyTorch导出即可详见 docs/FAQ.md。开发环境Android端用Android StudioJava 11及以上iOS端用Xcode CocoaPodsORT版本与仓库根目录的VERSION_NUMBER当前为1.30.0保持一致。依赖安装// app/build.gradleAndroid端依赖 implementation com.microsoft.onnxruntime:onnxruntime-android:1.30.0# PodfileiOS端依赖 pod ONNXRuntime门槛到这里就算过了接下来是最核心的代码部分。3步跑通第一个demo步骤1创建环境与SessionOptions做什么初始化全局环境配置会话参数。// 环境与会话选项建议放在App启动时一次性完成 OrtEnvironment env OrtEnvironment.getEnvironment(); // 全局单例 OrtSession.SessionOptions options new OrtSession.SessionOptions(); options.addExecutionProvider( List.of(new OrtEpDevice(OrtProvider.NNAPI)), Map.of()); // 关键声明优先用NNAPI加速怎么验证env.getAvailableProviders()返回的列表里包含NnapiExecutionProvider说明这个EP在当前构建里可用。步骤2加载模型构建输入张量做什么把ONNX文件加载成会话把预处理好的图像数据包成输入张量。// 从assets读模型并创建会话 InputStream in getAssets().open(mobilenet_v2.onnx); byte[] model in.readAllBytes(); OrtSession session env.createSession(model, options); // 图像预处理成float数组224x224x3转成NCHW布局 float[] pixels preprocessImage(bitmap); // ... 省略归一化等细节 long[] shape {1, 3, 224, 224}; OnnxTensor input OnnxTensor.createTensor(env, pixels, shape);怎么验证session创建成功且不抛OrtException说明模型图解析、算子匹配都通过了。步骤3执行推理并读结果做什么按名字传入输入张量拿到输出并解析。MapString, OnnxTensor inputs Map.of(input, input); // key必须是模型定义的输入名 OrtSession.Result outputs session.run(inputs); float[] scores (float[]) outputs.get(0).getValue(); outputs.close(); int topClass argmax(scores); // 找到概率最高的类别怎么验证topClass对着一张猫的照片应该稳定落在猫对应的类别号上这就是最小闭环跑通了。两端API同构关键差异用这张表就够了对比项AndroidiOS硬件加速EPOrtProvider.NNAPICore ML通过provider options配置模型放置src/main/assets打包进APK拖进Xcode工程走Bundle推理接口OrtSession.run(Map)ObjCORTSession的runWithInputs:Swift直接可用底层实现java/src/main/java/ai/onnxruntime/OrtSession.javaobjectivec/include/ort_session.hiOS侧大致长这样// 创建会话并启用Core MLoptions里带coreml版本等配置 NSError *error nil; ORTSession *session [[ORTSession alloc] initWithEnvironment:env options:options handle:error]; // runWithInputs: 传入ORTValueArray返回输出逻辑与Java版run对应让它跑得快 ⚙️环境这块跑通了下面是收益最明显的几个调优点算子内线程数推理慢且CPU利用率低时把setIntraOpNumThreads设到接近物理核心数大模型时留1-2核给系统。// 通常设为CPU核心数或略少 options.setIntraOpNumThreads(4);确认EP真的生效创建会话后打印日志确认子图被分配到NNAPI/Core ML而不是全部回落CPU回落了就先检查算子覆盖率。量化模型CPU推理瓶颈明显时在PC端离线做INT8量化模型体积和内存占用都会降下来# 仓库自带工具生成QDQ格式量化模型 python -m onnxruntime.quantize \ --input mobilenet_v2.onnx \ --output mobilenet_v2_int8.onnx \ --quant_format QDQ --per_channel图优化保持默认最高档setOptimizationLevel默认就是全部优化开启别误关。下图展示了图优化阶段做的算子融合与常量折叠这就是同一个模型跑得快的主要来源踩坑记录 症状创建NNAPI会话失败或大量算子回落CPU。原因NNAPI支持的算子集合有限模型里有未覆盖的算子。解法用NnapiFlags相关的provider options调整CPU回落策略配置细节见 onnxruntime/core/providers/nnapi/。症状session.run抛异常提示输入找不到。原因传给run的key和模型定义的输入名对不上。解法先通过会话的输入信息ValueInfo/OnnxModelMetadata打印真实名字别手写。症状第一帧推理特别慢后面正常。原因首次执行包含图优化、算子编译和内存分配。解法会话创建和首次预热放在App启动阶段做不要放在用户点击识别之后。症状加载大模型时OOM。原因权重本身大加上中间张量峰值内存。解法优先上量化模型内存相关选项参考 docs/Memory_Optimizer.md。接下来可以学什么真机测试方法怎么把benchmark推到手机上跑见 docs/Android_testing.md。移动端CPU内核XNNPACK背后的MLAS库做了大量手工优化源码在 onnxruntime/core/mlas/适合想抠极限性能的人。EP算子支持范围想知道某个EP到底支持哪些算子翻 docs/ContribOperators.md 和providers目录。到这里一个能跑的最小闭环就搭完了剩下的就是按自己的模型和业务把线程数、量化格式、EP配置这几个旋钮调到位。【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

泰坦尼克号英语剧本:从精读到角色扮演的三轮榨干学习法 2026/9/6 19:13:17

泰坦尼克号英语剧本:从精读到角色扮演的三轮榨干学习法

简介:《泰坦尼克号》中英对照剧本doc文档,聚焦英语听力、口语与电影文化学习,以经典台词为语料,面向英语自学者、影视爱好者和教师,用于原声对照、剧情精读和口语模仿。资源仅1个doc文件,压缩包仅55KB&…

阅读更多 →
《泰坦尼克号》剧本精读:从口语、听力到表演的英语进阶实战 2026/9/6 19:13:17

《泰坦尼克号》剧本精读:从口语、听力到表演的英语进阶实战

简介:《泰坦尼克号》中英对照剧本以DOC文档形式呈现,专为英语学习者和经典电影爱好者打造,可用于提升听力口语、对照字幕理解地道对白,并深入体会角色情感与剧情节奏。整份资源包含1个DOC文件,压缩包仅55KB&#xff0c…

阅读更多 →
如何把小米设备全部接入 Home Assistant:ha_xiaomi_home 新手指南 2026/9/6 19:13:17

如何把小米设备全部接入 Home Assistant:ha_xiaomi_home 新手指南

如何把小米设备全部接入 Home Assistant:ha_xiaomi_home 新手指南 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home 本文带你完成智能家居接入的全过程&#…

阅读更多 →
Lama Cleaner:一条命令完成 AI 图片擦除,去水印、物体消除、老照片修复都在这里 2026/9/6 19:13:17

Lama Cleaner:一条命令完成 AI 图片擦除,去水印、物体消除、老照片修复都在这里

Lama Cleaner:一条命令完成 AI 图片擦除,去水印、物体消除、老照片修复都在这里 【免费下载链接】IOPaint Image inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powe…

阅读更多 →
华为薪酬设计方案解析:从美世IPE评估到宽带薪酬落地 2026/9/6 19:13:17

华为薪酬设计方案解析:从美世IPE评估到宽带薪酬落地

简介:这是一份美世咨询为华为技术有限公司制作的薪酬设计方案演示文稿,聚焦企业薪酬体系设计与落地,适合HR从业者、薪酬福利专员及企业中高层管理者学习参考。PPT系统梳理了薪酬结构设计的核心环节,包括基本薪酬政策、竞争性参考工…

阅读更多 →
把待办管理和番茄计时放进同一个工具:Super Productivity 新手上手指南 2026/9/6 19:10:17

把待办管理和番茄计时放进同一个工具:Super Productivity 新手上手指南

把待办管理和番茄计时放进同一个工具:Super Productivity 新手上手指南 【免费下载链接】super-productivity Super Productivity is an advanced todo list app with integrated Timeboxing and time tracking capabilities. It also comes with integrations for …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞