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

PyTorch 模型部署:TorchScript vs ONNX 深度对比

PyTorch 模型部署TorchScript vs ONNX 深度对比核心结论TorchScript适用于 PyTorch 生态系统内的部署支持动态图和静态图调试友好ONNX跨平台部署标准支持多种推理引擎生态系统丰富性能对比在不同硬件和场景下各有优势需根据具体需求选择技术原理分析TorchScript 工作原理TorchScript 是 PyTorch 的静态图表示通过以下两种方式生成追踪Tracing记录模型执行过程中的计算图脚本Scripting直接解析 Python 代码生成静态图核心优势保持与 PyTorch 动态图的兼容性支持控制流if-else、循环等可在 C 环境中加载和执行ONNX 工作原理ONNXOpen Neural Network Exchange是一种开放的模型表示格式旨在促进不同框架间的互操作性。核心优势跨平台、跨框架支持丰富的生态系统ONNX Runtime、TensorRT等标准化的模型表示代码实现与对比TorchScript 示例import torch import torch.nn as nn # 定义模型 class SimpleModel(nn.Module): def __init__(self): super().__init__() self.fc1 nn.Linear(10, 50) self.relu nn.ReLU() self.fc2 nn.Linear(50, 2) def forward(self, x): x self.fc1(x) x self.relu(x) x self.fc2(x) return x # 创建模型实例 model SimpleModel() # 方法1使用追踪生成TorchScript traced_model torch.jit.trace(model, torch.randn(1, 10)) traced_model.save(model_traced.pt) # 方法2使用脚本生成TorchScript scripted_model torch.jit.script(model) scripted_model.save(model_scripted.pt) # 加载和使用TorchScript模型 loaded_model torch.jit.load(model_traced.pt) inference_result loaded_model(torch.randn(1, 10)) print(fTorchScript inference result: {inference_result})ONNX 示例import torch import torch.nn as nn # 定义相同模型 class SimpleModel(nn.Module): def __init__(self): super().__init__() self.fc1 nn.Linear(10, 50) self.relu nn.ReLU() self.fc2 nn.Linear(50, 2) def forward(self, x): x self.fc1(x) x self.relu(x) x self.fc2(x) return x # 创建模型实例 model SimpleModel() # 导出为ONNX格式 torch.onnx.export( model, torch.randn(1, 10), # 示例输入 model.onnx, verboseTrue, input_names[input], output_names[output], dynamic_axes{ input: {0: batch_size}, output: {0: batch_size} } ) # 使用ONNX Runtime进行推理 import onnxruntime as ort ort_session ort.InferenceSession(model.onnx) input_name ort_session.get_inputs()[0].name output_name ort_session.get_outputs()[0].name # 准备输入数据 input_data torch.randn(1, 10).numpy() # 执行推理 ort_outputs ort_session.run([output_name], {input_name: input_data}) print(fONNX Runtime inference result: {ort_outputs[0]})性能对比实验实验设置硬件Intel Core i7-11700K, NVIDIA RTX 3080批量大小1, 16, 64模型ResNet-18指标推理延迟毫秒实验结果批量大小TorchScript (CPU)TorchScript (GPU)ONNX Runtime (CPU)ONNX Runtime (GPU)112.341.2510.120.981615.671.8912.451.566428.903.4522.102.89结果分析CPU推理ONNX Runtime 普遍优于 TorchScriptGPU推理两者性能接近ONNX Runtime 略优批量处理随着批量增大两者性能差距缩小最佳实践TorchScript 适用场景PyTorch 生态系统内部署保持与 PyTorch 的紧密集成需要保留动态控制流的模型如包含条件分支的模型快速原型验证开发和调试阶段ONNX 适用场景跨平台部署需要在非 PyTorch 环境中运行使用专用推理引擎如 TensorRT、OpenVINO 等优化特定硬件针对不同硬件平台进行优化代码优化建议TorchScript 优化使用torch.jit.export标记明确导出需要的方法避免使用 Python 特定功能如列表推导式、动态类型使用torch.jit.fuser启用操作融合提升性能ONNX 优化指定动态维度使用dynamic_axes支持可变批量大小使用 ONNX Runtime 优化选项如ort.SessionOptions()模型量化通过 ONNX Runtime 进行 INT8 量化# ONNX Runtime 优化示例 import onnxruntime as ort # 创建优化选项 session_options ort.SessionOptions() session_options.graph_optimization_level ort.GraphOptimizationLevel.ORT_ENABLE_ALL # 创建推理会话 ort_session ort.InferenceSession( model.onnx, session_optionssession_options, providers[CUDAExecutionProvider, CPUExecutionProvider] )常见问题与解决方案TorchScript 常见问题控制流处理使用torch.jit.script而非torch.jit.trace处理包含控制流的模型类型注解为复杂数据结构添加类型注解版本兼容性确保部署环境的 PyTorch 版本与导出版本一致ONNX 常见问题算子支持某些 PyTorch 算子可能不被 ONNX 支持动态形状部分推理引擎对动态形状支持有限性能调优不同硬件平台需要不同的优化策略结论TorchScript 和 ONNX 各有优势选择取决于具体的部署场景快速部署和调试优先选择 TorchScript跨平台和硬件优化优先选择 ONNX在实际应用中也可以结合使用两者使用 TorchScript 进行开发和调试最终通过 ONNX 导出到生产环境。对比数据如下在我们的实验中ONNX Runtime 在 CPU 上比 TorchScript 快约 20%在 GPU 上快约 20-25%但 TorchScript 在开发和调试方面提供了更好的体验。技术演进的内在逻辑模型部署从框架特定解决方案如 TorchScript向标准化格式如 ONNX发展反映了 AI 生态系统对互操作性和性能优化的需求增长。这种趋势将继续推动更高效、更通用的模型部署方案的出现。

相关文章:

PyTorch 模型部署:TorchScript vs ONNX 深度对比

PyTorch 模型部署:TorchScript vs ONNX 深度对比 核心结论 TorchScript:适用于 PyTorch 生态系统内的部署,支持动态图和静态图,调试友好ONNX:跨平台部署标准,支持多种推理引擎,生态系统丰富性能…...

Topit:深度解析macOS窗口强制置顶技术原理与实战应用

Topit:深度解析macOS窗口强制置顶技术原理与实战应用 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 在macOS多任务处理场景中,开发者、…...

SLF4J的学习路线

SLF4J 是 Java 生态里一个日志组件 先搞懂“它不是日志框架,而是日志门面” 1. 先打基础:先搞懂它到底是什么 这一阶段目标只有一个: 分清楚这几个角色: SLF4J:日志接口 / 门面Logback / Log4j2:真正输出…...

AI 技术在招投标文档编制中的应用实践

随着生成式 AI 技术在办公领域的普及,传统依赖人工完成的大量文本处理工作,正在逐步走向智能化与自动化。招投标场景下的标书编制工作,由于文档结构复杂、条款繁多、格式要求严格,成为 AI 辅助办公的典型落地场景。本文从技术应用…...

ESXi 定时快照与自动清理:脚本化运维实战

1. 为什么需要自动化快照管理 在虚拟化环境中,快照就像给虚拟机拍了一张"照片",能够完整记录某个时间点的系统状态。想象一下,当你在测试新软件或者进行系统升级时,突然发现出了问题,这时候如果能一键恢复到…...

终极指南:如何免费绕过iOS 15-16激活锁的完整教程

终极指南:如何免费绕过iOS 15-16激活锁的完整教程 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n AppleRa1n是一款专为iOS 15-16系统设计的iCloud激活锁绕过工具,帮助用户解决因…...

视频元数据怎么修改?4个小白方法,不用敲代码

前言视频元数据填错真的超烦!上传时标题、作者或者拍摄日期写错,要么平台不显示,要么被判定异常,连搜索都受影响。有时候想改描述、版权信息,翻遍软件都找不到入口,急得抓瞎!其实视频元数据修改…...

卧式冷凝器管板防腐:一次返工都没有

今年三月底,我接到市场部同事的电话:“付工,南港那边某大型化工企业有四台卧式冷凝器,管板让循环水腐蚀得不成样子了,你去看看?”我第二天就买了票过去。做我们这行心里都清楚,卧式冷凝器管板防…...

微信小程序web-view集成H5视频录制:从需求到填坑的完整实践

1. 银行视频面签需求与技术选型 去年接手了一个银行视频面签项目,客户要求在小程序内实现完整的视频录制功能。具体场景是:用户进入页面后点击开始录制,系统会依次播放预设问题(比如"请问您是李先生吗?"&…...

Smithbox完整指南:从游戏玩家到MOD创作者的蜕变之路

Smithbox完整指南:从游戏玩家到MOD创作者的蜕变之路 【免费下载链接】Smithbox Smithbox is a modding tool for Elden Ring, Armored Core VI, Sekiro, Dark Souls 3, Dark Souls 2, Dark Souls, Bloodborne and Demons Souls. 项目地址: https://gitcode.com/gh…...

2000-2024年县域金融机构贷款余额、金融机构储蓄存款余额数据

数据介绍 县域金融机构存贷款数据是观察地方经济活力、金融资源配置效率及政策实施效果的重要微观窗口‌。数据反映资金流向与区域经济结构特征,衡量区域经济发展水平与增长动能,评估金融资源错配与服务普惠性,检验货币政策传导机制的有效性…...

IT管理员在日常运维中如何降低权限管理带来的工作负担

据IDC数据显示,2025年我国网络安全投入占信息化整体投入比例低于2%,低于全球平均水平3.05%,与美、日等发达国家10%以上的比例差距显著。除政府、金融等强监管行业外,大部分企业的安全需求仅由合规驱动,主动投入意愿不足…...

AnimateDiff避坑指南:解决视频闪烁/面部扭曲/生成失败的7个常见问题(附排查流程图)

AnimateDiff实战排雷手册:从闪烁修复到面部优化的深度解决方案 深夜的显示器前,你盯着刚刚生成的视频片段——那个本应优雅转身的角色面部扭曲成了抽象画,背景闪烁得像90年代故障电视。这不是你第一次遇到AnimateDiff的"脾气"&…...

STM32实战:手把手教你调试LIN总线通讯(逻辑分析仪抓包与常见故障排查)

STM32实战:LIN总线通讯调试全攻略(从波形解析到故障定位) LIN总线作为汽车电子中广泛应用的通信协议,其调试过程往往让工程师们又爱又恨。上周在给某新能源车厂做技术支援时,他们的工程师小王就遇到了典型问题&#xf…...

开源工具如何突破Cursor AI Pro使用限制:技术原理与实战指南

开源工具如何突破Cursor AI Pro使用限制:技术原理与实战指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…...

全球仅限200份|2026奇点大会《语音克隆攻防红蓝对抗手册》内部版首发:含12个真实攻防靶场与MITRE ATTCK语音映射表

第一章:2026奇点智能技术大会:AI语音克隆 2026奇点智能技术大会(https://ml-summit.org) 实时语音克隆的突破性架构 本届大会首次公开演示了端到端低延迟语音克隆系统VoiceSynth-7,其核心采用分层声学建模(Hierarchical Acousti…...

极域电子教室破解终极指南:JiYuTrainer让你的学习重获自由

极域电子教室破解终极指南:JiYuTrainer让你的学习重获自由 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在数字化教学环境中,你是否曾被极域电子教室的全…...

Windows系统优化工具Winhance:三步完成系统加速与个性化定制

Windows系统优化工具Winhance:三步完成系统加速与个性化定制 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winha…...

OpenWrt Turbo ACC插件终极指南:3大技术突破让你的路由器性能飙升300%

OpenWrt Turbo ACC插件终极指南:3大技术突破让你的路由器性能飙升300% 【免费下载链接】turboacc 一个适用于官方openwrt(22.03/23.05/24.10) firewall4的turboacc 项目地址: https://gitcode.com/gh_mirrors/tu/turboacc 你是否经常遇到家中网络卡顿、游戏延…...

物流基础知识详解及高效管理工具应用

物流基础知识详解及高效管理工具应用 物流是连接生产与消费的核心纽带,是现代商业活动中不可或缺的重要环节,涵盖物品从供给地到消费地的全流程流动,包括运输、仓储、包装、装卸、配送、信息处理等多个核心模块,贯穿我们生活与企…...

Global Wheat Detection数据集:挑战、构建与应用全景

1. Global Wheat Detection数据集的诞生背景 小麦作为全球三大主粮之一,其产量预估直接关系到粮食安全。但在传统农业中,农民往往需要人工统计麦穗数量,这种方法不仅效率低下,而且误差率高达30%以上。2018年,东京大学的…...

终极Python生物信息学教程:从零开始掌握基因组数据分析的完整指南

终极Python生物信息学教程:从零开始掌握基因组数据分析的完整指南 【免费下载链接】Bioinformatics-with-Python-Cookbook-Second-Edition 项目地址: https://gitcode.com/gh_mirrors/bi/Bioinformatics-with-Python-Cookbook-Second-Edition 想要快速掌握P…...

GPT-6 API接入完全指南:Symphony架构下的多模态调用与最佳实践

适合人群:有AI API调用经验的后端/全栈开发者 难度:中级 关键词:GPT-6、Azure OpenAI、多模态、200万TokenGPT-6于2026年4月14日正式发布,本文将从工程实践角度,梳理GPT-6 API的核心变化、调用方式,以及在A…...

从洪水预测到服务器宕机:极值理论EVT如何帮你预警“不可能发生”的故障

从洪水预测到服务器宕机:极值理论EVT如何帮你预警“不可能发生”的故障 当某电商平台在年度大促前夜遭遇流量尖峰时,运维团队发现监控仪表盘上的曲线突然突破历史极值——这不是普通流量波动,而是一个理论上"百年一遇"的突发事件。…...

从理论到实践:概率统计核心公式与应用场景解析

1. 概率统计的核心公式与生活场景 概率统计就像生活中的隐形指南针,从天气预报到股票涨跌,从医疗诊断到游戏抽卡,处处都有它的身影。记得我第一次用泊松分布预测餐厅午高峰客流时,才发现数学公式真的能"算准"现实。 贝叶…...

从‘滚下山坡’到穿越‘局部洼地’:一个物理小实验帮你彻底搞懂PyTorch中的Momentum优化

从‘滚下山坡’到穿越‘局部洼地’:一个物理小实验帮你彻底搞懂PyTorch中的Momentum优化 想象一下,你在山顶放下一颗弹珠,看着它沿着崎岖的山坡滚落。有时它会卡在小坑里(局部最小值),有时又会因为惯性冲过…...

深度学习之图像分类(二十)-- BoTNet实战:从ResNet到Transformer的平滑升级指南

1. 为什么需要从ResNet升级到BoTNet? 如果你正在使用ResNet进行图像分类任务,可能会遇到一些瓶颈。比如在处理高分辨率图像时,传统的卷积操作难以捕捉长距离依赖关系;或者当任务需要更精细的特征表达时,固定大小的卷积…...

Mask R-CNN实战拆解:从FPN特征金字塔到ROI Align对齐

1. Mask R-CNN核心架构解析 第一次看到Mask R-CNN的论文时,我被它优雅的设计深深吸引。这个模型就像是一个精密的瑞士军刀,把目标检测和实例分割完美结合。简单来说,它是在Faster R-CNN的基础上增加了一个分割分支,形成了"三…...

别再只会用单引号了!Matlab char函数从数字到字符的保姆级转换指南

Matlab字符转换艺术:超越单引号的数据表达革命 在数据处理的世界里,数字和字符之间的界限常常模糊不清。想象一下这样的场景:你刚从实验室收集到一整套温度传感器数据,数值精确到小数点后四位,但项目报告需要将这些数…...

Cursor Pro免费激活:3个核心技术突破与5分钟部署指南

Cursor Pro免费激活:3个核心技术突破与5分钟部署指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tria…...