老杨说话的地方
  • 首页
  • 关于老杨
  • 博客时间
  • 文章分类
    • 人工智能
    • 人生感悟
      • 共产主义
      • 能量哲学
      • 自然辩证法
    • 信息技术
      • C#笔记
      • LaTex
      • Linux
      • RIME
      • Ubuntu&Debian
      • WordPress
      • 基于Java的B/S系统构建
      • 开源开发
      • 病毒相关
      • 编程的坏习惯
      • 网上办公系统
    • 往事随风
      • 我在大学那几年
      • 童年趣事
      • 精彩生活
    • 情感随笔
    • 文学创作
      • 小说
    • 生活记录
      • 博士进行中
      • 美国一年
      • 老杨学游泳
    • 评论杂谈
  • 留言本
我是老杨
张驰有度 宠辱不惊
  1. 首页
  2. 人工智能
  3. 正文

PyTorch模型转onnx格式

2023年07月05日 9721点热度 0人点赞 2条评论

因项目需要,把PyTorch模型转为onnx。

Huggingface的模型无法直接转为onnx(仅有部分支持),如果是huggingface的模型,需要先转成PyTorch,详见文章《Huggingface模型转PyTorch模型》。

onnx是一种通用的模型架构,详细介绍可参考官网。

转换代码:

Python
123456789101112131415161718192021222324252627
from transformers import AutoTokenizer
from transformers import AutoModel
from transformers import LlamaTokenizer, LlamaForCausalLM
import torch

# convert pytorch model to onnx model

def generate_prompt(text):
    return f"""Below is an instruction that describes a task. Write a response that appropriately completes the request.

### Instruction:
{text}

### Response:"""


text = '请介绍一下中国海洋大学'
prompt = generate_prompt(text)
tokenizer = LlamaTokenizer.from_pretrained('minlik/chinese-alpaca-7b-merged')
input = tokenizer.encode(prompt, return_tensors='pt')
print("now load pytorch model")
modeloftorchtype = torch.load('your_model_path_and_name.pt')
print("load finished, now eval")
modeloftorchtype.eval()
print("eval finished, now convert to onnx")

torch.onnx.export(modeloftorchtype, input, "your_model_path_and_name.onnx",input_names=["input"], output_names=["output"],opset_version=11,dynamic_axes={'input': {1:'tokenlength'},'output' : [0,1]}) # 输入的第1为可变

转换的思路其实很简单,就是把原有的模型,推理一遍,就可以使用PyTorch自带的函数导出了。

这里面有几点需要注意:

  1. 转换前需要调用eval函数
  2. 如果模型很大,那么转换出来的文件会很多,因为存储onnx的文件大小不允许超过2G,这是正常的
  3. export函数中,input_names=["input"], output_names=["output"]是自己定义的。dynamic_axes={'input': {1:'tokenlength'},'output' : [0,1]}是用来定义输入输出的可变长度的。比如,对于文本问答模型,每次输入的长度都不统一,如果按照这次转换的推理,那么input的维度就固定了,这样当再次加载模型推理的时候,就会报长度不一致的错误,所以这里要设置为可变长度。其中,1表示三维张量的第二维是可变的。'output' : [0,1]表示output张量(列表)的第一维和第二维,都是可变的。
标签: import onnx pytorch
最后更新:2023年07月05日
老杨

老杨

博士,非博学之士;讲师,讲所学所知。糊涂半生,虚度半世,唯愿平淡快乐,度过此生。

点赞

评论(2)

写下你的评论
  1. hokj
    hokj2023年08月28日 09:11

    想问下,转换之后还能有办法把torch的权重名字和onnx的权重名字对上吗。比如说我现在一个转换后的onnx模型,但我需要对这个onnx再修改部分权重,但是我又不想重新再转换一次,能否根据现有的state_dict在onnx文件上修改权重?

    1. 老杨
      老杨作者2023年08月28日 09:52

      @hokj 这个不是很清楚,我也只是转换后用了一下,并没有对onnx进行深入研究。

发表评论

选择代码语言
选好后在光标处插入代码块,把示例文字换成你的代码即可。

老杨

老杨

博士,非博学之士;讲师,讲所学所知。糊涂半生,虚度半世,唯愿平淡快乐,度过此生。

搜索
最新 热点 随机
关于机器人的发展 遥遥领先 开源密码生成工具SimplePassword 痛苦根源 同步日历-我的第一款鸿蒙应用(鸿蒙CalDav客户端) 别成为AI的奴隶 给阿嬷的情书 信息焦虑综合症 PUA 人的悲喜并不相通
为多用户安装Anaconda及其使用方法WordPress主题发布:kratos_YangLaTex中上划线\overline和\bar的使用说明LaTex中设置字体的正确方法那一年,2009使用Windows7自带Windows Media Center播放RMVB影片幼儿园:回味童年童年趣事之气门芯这几天的事儿无插件实现WordPress留言本
多难兴邦 博客升级完成 晴迷星途18风万里 老杨首波主打歌—手放开 LaTex中的下划线 与项目经理共勉 一人成虎 贴近照几张顺便测试巴巴变 又是一年总结时 我的坚持与梦想
最近评论
  • 感谢支持。可以买个鸿蒙设备玩玩
    老杨·2 周前·同步日历-我的第一款鸿蒙应用(鸿蒙CalDav客户端)
  • 没有鸿蒙设备,吆喝一声支持老杨的产品
    乱云/Akay·2 周前·同步日历-我的第一款鸿蒙应用(鸿蒙CalDav客户端)
  • 先从减少手机使用时间开始。
    shanshan·2 月前·信息焦虑综合症
  • 所以必须得自己下定决心痛改前非,而不是跟自己讲条件。
    shanshan·2 月前·第二青春计划失败
  • 这种平台挺多的,但是应该没啥用,能有啥情绪价值比躺着刷手机更好呢?
    老杨·2 月前·第二青春计划失败
  • 已经遇到了,额外支付了170,托运登机行李,还不是托运行李。
    老杨·2 月前·春秋航空让人长见识
  • 那很好,恭喜你
    老杨·2 月前·PUA
  • 可以尝试改变。
    老杨·2 月前·信息焦虑综合症
  • 现在很多人离开AI已经不知道怎么工作了。
    老杨·2 月前·别成为AI的奴隶
  • 建议开发一个适合P人的工作生活计划平台,完不成没什么惩罚、但是完成了有大大的情绪…
    shanshan·2 月前·第二青春计划失败
  • 还有部分机型里20寸箱子应该上不了机,且没有免费行李托运额度。托运费超贵!
    shanshan·2 月前·春秋航空让人长见识
  • 这个世界精致利己主义者太多啦!
    shanshan·2 月前·人的悲喜并不相通
文章分类
选择分类
  • 人工智能13
  • 人生感悟121
    • 共产主义1
    • 能量哲学12
    • 自然辩证法12
  • 信息技术234
    • C#笔记6
    • LaTex12
    • Linux18
    • RIME4
    • Ubuntu&Debian21
    • WordPress1
    • 基于Java的B/S系统构建10
    • 开源开发2
    • 病毒相关3
    • 编程的坏习惯4
    • 网上办公系统9
  • 往事随风41
    • 我在大学那几年18
    • 童年趣事12
    • 精彩生活5
  • 情感随笔113
  • 文学创作69
    • 小说68
  • 生活记录220
    • 博士进行中6
    • 美国一年22
    • 老杨学游泳4
  • 评论杂谈169
关注公众号

COPYRIGHT © 2026 老杨说话的地方. ALL RIGHTS RESERVED.

THEME KRATOS YANG Modified BY 老杨

鲁ICP备17014997号-4

鲁公网安备 37021302000754号