ONNX Runtime 移动端部署指南:在 Android 与 iOS 上跑通推理的 5 个环节

发布时间:2026/9/6 18:21:08

ONNX Runtime 移动端部署指南:在 Android 与 iOS 上跑通推理的 5 个环节
ONNX Runtime 移动端部署指南在 Android 与 iOS 上跑通推理的 5 个环节【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime把图像分类模型塞进 App是移动端 AI 最常见的起步场景一个几十 MB 的 .onnx 文件要放进 assets 或 bundle再在用户的设备上完成一次推理。ONNX Runtime 移动端部署要解决的就是这条从 ONNX 文件到张量输出的链路。读完这篇你会知道推理在设备上到底分几步、NNAPI 和 Core ML 什么条件下走、模型量化怎么操作、两个平台各贴一段能跑的关键代码以及三个最值得调的数字。一张图看懂推理链路ONNX 文件 → Session → EP → 张量整个链路四步ONNX 模型只是文件加载后由Session持有并做算子图优化执行提供器EP决定每个算子跑在哪——CPU 还是 NNAPI / Core ML 这类硬件路径张量则是输入输出的实际容器形状必须与模型声明一致。Java 侧入口类是 OrtEnvironment / OrtSessionObjective-C 侧对应 ORTEnv / ORTSession接口一一对应。选执行路径NNAPI 与 Core ML 的适用条件和降级执行路径适用设备 / 系统生效条件不满足时NNAPIAndroid 8.0芯片带 NPU/DSP模型算子可映射到 NNAPI 子图不支持的算子按子图回退 CPU会话不报错只变慢Core MLiOS 15Core ML 5 及以上算子可被 Core ML 编译器接管实现里有use_cpu_only选项可强制全 CPUiOS 15 以下 EP 不可用CPU所有设备默认兜底—版本映射的依据在 host_utils.h 头部注释iOS 15 对应 Core ML 5、iOS 16 对应 6以此类推。NNAPI 的实现位于 onnxruntime/core/providers/nnapi/。建议的写法是默认加 EP同时保留 CPU 路径出问题时通过日志确认实际走了哪条路而不是猜测。模型瘦身三步导出、量化、校验1. 导出固定 batch 与分辨率do_constant_foldingTrue动态 shape 会显著增加后续量化与 EP 转换的难度移动端优先定长。2. 量化INT8 / FP16仓库内的工具链在 onnxruntime/python/tools/quantization/含 README静态量化的标准用法python -m onnxruntime.tools.quantization.quantize_static \ --input model_fp32.onnx --output model_int8.onnx \ --per_channel --calibration_data calibration_setFP16 走--quant_format QDQ加--float16参数收益主要是内存减半精度损失比 INT8 小。3. 校验创建 Session 时抛异常即模型不合规批量回归可用仓库里的测试工具adb push build/Android/Release/onnx_test_runner /data/local/tmp/ adb shell cd /data/local/tmp ./onnx_test_runner 模型目录流程与输出格式见 docs/Android_testing.md。Android 与 iOS 各跑一次推理维度AndroidJava/KotliniOSObjective-C/Swift依赖管理Maven AARonnxruntime-androidCocoaPodsONNXRuntime模型放置src/main/assets运行时经 InputStream 读出Xcode bundle运行时取 URL创建会话OrtEnvironmentenv.createSession(modelBytes, options)ORTEnv[[ORTSession alloc] initWithEnv:...]执行推理session.run(MapString, OnnxTensor)[session runWithInputs:outputNames:error:]默认加 EPNNAPI硬件允许时Core MLiOS 15Android 关键代码模型从 assets 读入后创建会话OrtEnvironment env OrtEnvironment.getEnvironment(); SessionOptions options new SessionOptions(); options.setIntraOpNumThreads(2); // 线程数别开满见下节 byte[] model readFromAssets(model_int8.onnx); OrtSession session env.createSession(model, options); // 每次推理按模型声明形状创建输入张量 long[] shape {1, 3, 224, 224}; OrtSession.Result result session.run( Map.of(input, OnnxTensor.createTensor(env, inputFloats, shape)));iOS 关键代码ORTEnv *env [ORTEnv envWithLoggingLevel:ORTLoggingLevelWarning error:err]; ORTSessionOptions *opts [[ORTSessionOptions alloc] init]; // 默认追加 Core ML 执行提供器iOS 15 起 [session appendExecutionProvider:ort_Provider_CoreML options:nil error:err]; ORTSession *session [[ORTSession alloc] initWithEnv:env options:opts error:err]; // 推理 ORTValue *input [ORTValue tensorWithValue:inputData shape:[1, 3, 224, 224] dataType:ORTTensorTypeFloat error:err]; NSArrayORTValue * *outs [session runWithInputs:[input] outputNames:[output] error:err];Objective-C 实现位于 objectivec/Java 侧说明见 java/README.md。调三个数字延迟、内存、精度延迟——线程数不是越多越好。跨核通信与缓存竞争会吃掉小模型上的收益options.setIntraOpNumThreads(2); // 通常取核心数的 1/2 起测内存——两个开关SessionOptions 开启 memory optimization 与enable_memory_format省中间张量拷贝整体会话的分配策略见 docs/Memory_Optimizer.mdArena 复用是移动端内存峰值的主要来源。精度——量化后必须离线比对 FP32 输出再上车from onnxruntime.capi import _pybind_state as r print(r.get_build_info()) # 先用 CPU EP 跑 FP32/INT8 两版记录输出差异差异超出业务可接受范围就回退 FP16 或只对部分层量化量化工具支持按算子排除。容易踩的坑现象 → 原因 → 处理1. NNAPI 下速度没提升。部分算子不支持 NNAPI整段子图静默回退 CPU日志级别不够时看不出来。 调高日志等级SessionOptions 的 log level确认哪些算子落在 CPU 上必要时候选方案是换 CPU EP 全量执行或裁剪模型中的长尾算子。2. Core ML EP 在低版本系统上完全不可用。仓库中 host_utils.h 明确最低支持 Core ML 5iOS 15。 按运行时系统版本分支低于 iOS 15 时不追加 Core ML EP直接走 CPU不要指望 EP 自动降级。3. 量化后模型加载失败或输出异常。最常见是原模型含动态 shape或校准数据与真实分布不匹配。 导出时定长化校准集换成线上真实数据的抽样用 INT8 与 FP32 的输出差异做验收门槛。4. 真机崩、模拟器正常或反之。ABI 与构建架构不匹配模拟器通常要--android_abi x86_64真机要 arm64-v8a另外 AAR 需覆盖目标设备位宽。 按 docs/Android_testing.md 的分段构建说明为模拟器和真机分别产出对应 ABI 的库。源码与上述全部文档位于仓库 onnxruntime。下一步建议直接看 onnxruntime/python/tools/quantization/README.md 里量化工具的完整参数以及用onnx_test_runner把回归测试固化进 CI。【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

注册土木工程师(水利水电)基础考试科目拆解与高效备考指南

注册土木工程师(水利水电)基础考试科目拆解与高效备考指南

2026/9/6 18:21:08

简介:面向注册土木工程师(水利水电工程)基础考试备考人群,这份Word文档对原始考试大纲做了归纳整理,按科目提炼出更易查阅的知识点清单。内容覆盖计算机应用及Fortran语言、电工电子技术、工程经济、水力学、岩土力学、…

gRPC 核心概念详解:从 .proto 接口定义到 HTTP/2 之上的帧协议与流控

gRPC 核心概念详解:从 .proto 接口定义到 HTTP/2 之上的帧协议与流控

2026/9/6 18:21:08

gRPC 核心概念详解:从 .proto 接口定义到 HTTP/2 之上的帧协议与流控 【免费下载链接】grpc C based gRPC (C, Python, Ruby, Objective-C, PHP, C#) 项目地址: https://gitcode.com/GitHub_Trending/gr/grpc 本文基于 gRPC 官方仓库中的核心概念文档 CONCEP…

从涡流场仿真到PDF报告:ANSYS Maxwell完整流程与工程实践

从涡流场仿真到PDF报告:ANSYS Maxwell完整流程与工程实践

2026/9/6 18:21:08

简介:ANSYS Maxwell涡流场分析报告是一份面向电机、变压器、电磁兼容等领域初学者的实操型文档。报告以一个电导率σ10S/m、长100mm、截面积1010mm的导体为模型,施加幅值100A、频率60Hz、初始相位120的电流激励,从启动软件、建立Box与Line几何…

B端系统数据迁移全指南:从Oracle 12c到达梦,避开这些坑才能顺利上线

B端系统数据迁移全指南:从Oracle 12c到达梦,避开这些坑才能顺利上线

2026/9/6 19:31:12

简介:这是一份面向B端产品经理、项目经理及系统实施人员的资源,专门总结新老系统切换过程中数据迁移的关键要点与实践经验。内容覆盖数据迁移的典型场景、三种常见系统切换方式,并系统梳理迁移内容:包括基础数据、字典数据、用户数…

Anthropic开源Commerce Agents:购物与商户智能体如何把审批写进工具链

Anthropic开源Commerce Agents:购物与商户智能体如何把审批写进工具链

2026/9/6 19:31:12

商品搜索、加入购物车、人工付款,在很多电商系统里由不同模块负责。搜索归搜索引擎管,购物车归前端状态管,付款跳到收银台后,前面搜过什么、聊过什么常常就丢了。让顾客重新说一遍,顾客可能直接离开。Anthropic在2026年…

VDA6.7-CN过程审核:设备全生命周期管理要点与准备指南

VDA6.7-CN过程审核:设备全生命周期管理要点与准备指南

2026/9/6 19:31:12

简介:VDA6.7-CN(过程审核)高清版是一份面向汽车工业及其供应商的过程审核专业指导文件,聚焦单件生产与产品实现过程中的质量能力评估,适合质量体系审核员、过程策划人员及企业内审团队使用。文件依据VDA6.7标准系统梳理…

服务器硬件巡检报告模板实战指南:从指标监控到故障预警

服务器硬件巡检报告模板实战指南:从指标监控到故障预警

2026/9/6 19:31:12

简介:这是一份面向服务器管理员与运维工程师的硬件运维巡检报告模板,用于规范机房物理环境检查、服务器硬件状态核验、故障服务器信息登记及巡检结果汇总,帮助团队建立可跟踪、可复用的日常巡检机制,降低因硬件隐患引发的宕机与数…

生产实习总结怎么写?西电实战指南:从流水账到证据化表达

生产实习总结怎么写?西电实战指南:从流水账到证据化表达

2026/9/6 19:31:12

简介:西电生产实习总结文档是一份记录暑期三下乡社会实践活动的完整报告,适合高校学生、实践团队及需要撰写实习总结的读者参考。作者以志愿者身份参与陕西淳化县方里镇的科技与教育下乡服务,内容按时间线展开,依次呈现活动前期筹…

fuels-ts 实战指南:在部署 Sway 合约时设置 Configurable Constants(可配置常量)

fuels-ts 实战指南:在部署 Sway 合约时设置 Configurable Constants(可配置常量)

2026/9/6 19:21:12

fuels-ts 实战指南:在部署 Sway 合约时设置 Configurable Constants(可配置常量) 【免费下载链接】fuels-ts Fuel Network Typescript SDK 项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-ts 本篇基于 fuels-ts 文档《Confi…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/6 1:19:56

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/6 1:19:56

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/6 1:19:56

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/6 1:19:56

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/5 23:14:13

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…