导出LLaMA等LLM模型为onnx

news2024/11/23 22:34:19

通过onnx模型可以在支持onnx推理的推理引擎上进行推理,从而可以将LLM部署在更加广泛的平台上面。此外还可以具有避免pytorch依赖,获得更好的性能等优势。

这篇博客(大模型LLaMa及周边项目(二) - 知乎)进行了llama导出onnx的开创性的工作,但是依赖于侵入式修改transformers库,比较不方便。

这里本人实现了避免侵入式修改transformers库导出LLM为ONNX方法,代码库为:

https://github.com/luchangli03/export_llama_as_onnx/tree/main

可以在这个基础上进行简单修改从而导出其他模型,例如百川,Qwen等模型。当前已经加入了对Qwen的导出支持。

该方案优点是无需侵入式修改transformers代码,缺点是你需要提前了解各个模型的输入,相关shape和dtype。

阿里的Qwen模型导出onnx存在大量琐碎的算子,主要是因为其使用了einops库的rearrange操作。把这些算子替换为reshape,transpose, split等操作后onnx模型会极大简化。

例如

# context_layer = rearrange(
#     context_layer, "b s h d -> b s (h d)"
# ).contiguous()
b, s, h, d = context_layer.shape
context_layer = context_layer.reshape([b, s, -1])
# self._rotary_pos_emb_cache = rearrange(emb, "n d -> 1 n 1 d")
emb = torch.unsqueeze(emb, 0) # [1nd]
emb = torch.unsqueeze(emb, 2)
def _rotate_half(x):
    # from einops import rearrange
    # x = rearrange(x, "... (j d) -> ... j d", j=2)
    # x1, x2 = x.unbind(dim=-2)
    last_dim = x.shape[-1]
    x1, x2 = torch.split(x, last_dim//2, dim=-1)
    return torch.cat((-x2, x1), dim=-1)

导出的llama decoder会存在if算子,但是经过符号shape推导和设置相应的符号shape到onnx模型value_info,然后经过onnxsim可以完全去掉。也可以考虑修改llama定义代码去掉if。优化前后:

ea389166fad24bbbbc9d2a007294ef94.png57bda583259b421ca6f808504eb90980.png

导出模型调试

从导出模型中算子的名称可以大概推断出该算子在那个模块定义的。

如/layers.0/attn/rotary_emb/Slice可以知道该算子定义于decoder第0层的atten.rotary_emb模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/841835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ctfshow-web4

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 <?php include($_GET[url]);?> 0x02 Write Up 和web3是相同的内容&#xff0c;这里可以通过任意文件读取的方式来进行利用&#xff0c;这里根据返回包知道是nginx&#xff1a; 默认nginx日志是&#xff1a;/var/log/…

基于PINN的传播动力学研究

分享者&#xff1a;中国传媒大学大数据分析与挖掘实验室博士生张志强 众所周知&#xff0c;我们处于网络信息大爆炸的时代。现代互联网产生了大量的舆情信息&#xff0c;其中很多信息并不是正常的信息&#xff0c;是因为在网络中存在着大量水军或部分恶意造谣者。国家非常重视…

【C++】C++11 新特性总结 | C++ 常见设计模式总结(秋招篇)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言介绍几种C11新特性介绍一下自动类型推导auto和decltype关键字的用法举例讲一下范围基于的for循环介绍一下列表初始化讲一下右值引用&#xff0c;和左值引用的区…

Java数据类型,你不想不学会都不行~

——每一种数据都定义了明确的数据类型&#xff0c;在内存中分配了不同大小的内存空间&#xff08;字节&#xff09; 思维导图 一.整数类型 1.什么是整数类型 —— 用int、short、byte、long存储的整数值就是整数类型 2.整数的类型 类型 所占的字节数 数值…

Chrome开发者工具介绍

Chrome开发者工具介绍 前言1 打开DevTools2 命令菜单3 Elements面板ConsoleJavaScript调试Network 前言 Chrome开发者工具是谷歌浏览器自带的一款开发者工具&#xff0c;它可以给开发者带来很大的便利。常用的开发者工具面板主要包含Elements面板、Console面板、Sources面板、…

【一】SPI IP核使用

一、spi是串行外设接口&#xff08;serial peripheral interface&#xff09;,是高速的、全双工、同步通信总线&#xff0c;标准的spi仅仅使用4个引脚 spi ip核框图&#xff1a; 二、spi核的寄存器描述 三、配置spi核 四、SPI内核编程 alt_avalon_spi_command(alt_u32 base,alt…

React Dva项目 简单引入models中的所有JS文件

我们前面接触的 Dva项目 models目录下的文件还要一个一个引入 其实体验并不是很好 而且如果项目很大那就比较麻烦了 我们可以在 models 下创建一个 index.js 文件 编写代码如下 const context require.context("./", false, /\.js$/); export default context.key…

Java02-迭代器,数据结构,List,Set ,Map,Collections工具类

目录 什么是遍历&#xff1f; 一、Collection集合的遍历方式 1.迭代器遍历 方法 流程 案例 2. foreach&#xff08;增强for循环&#xff09;遍历 案例 3.Lamdba表达式遍历 案例 二、数据结构 数据结构介绍 常见数据结构 栈&#xff08;Stack&#xff09; 队列&a…

如何利用模拟考试系统提升学生复习效果

随着教育技术的发展&#xff0c;现代学生已经不再局限于传统的课本学习方式。模拟考试系统作为一种新型的教学工具&#xff0c;已经逐渐被学校和教师们广泛采用。它不仅能够帮助学生预测和评估自己的学习水平&#xff0c;还可以有效提升学生的复习效果。 第一&#xff0c;树立…

微信小程序集成V3支付接口

官方文档地址&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml 小程序开通微信支付 微信小程序集成参考最新先程序集成文档 yml配置&#xff1a; x-pay:v3:#微信关联的小程序的appidappId: wx281xxxxxxxxxxx#微信支付商户号mchId: 164803…

深度学习,计算机视觉任务

目录 计算机视觉任务 1.K近邻算法 2.得分函数 3.损失函数的作用 4.向前传播整体流程 5.反向传播计算方法 计算机视觉任务 机器学习的流程&#xff1a; 数据获取 特征工程 建立模型 评估与应用 计算机视觉&#xff1a; 图像表示&#xff1a;计算机眼中的图像&#…

实际工作中通过python+go-cqhttp+selenium实现自动检测维护升级并发送QQ通知消息(程序内测)

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 首先&#xff0c;今年比较忙没有多余时间去实操创作分享文章给大家&#xff0c;那就给大家分享下博主在实际工作中的一点点内容吧&#xff0c;就当交…

2024考研408-计算机网络 第四章-网络层学习笔记

文章目录 前言一、网络层的功能1.1、网络层功能概述&#xff08;三种功能介绍&#xff09;1.2、SDN基本概念1.2.1、理解转发与路由选择1.2.1.1、转发1.2.1.2、路由选择 1.2.2、数据平面&#xff08;转发&#xff09;1.2.3、控制平面&#xff08;路由计算与选择&#xff09;实现…

九分学长大作文笔记

前言 最近看了《顾家北手把手教你雅思写作》&#xff0c;我觉得收获很少&#xff0c;逻辑感觉很乱&#xff0c;不知道为什么网上全是吹的。在Bilibili上看了九分学长&#xff0c;非常清晰&#xff0c;发现自己很多没有注意到的问题&#xff0c;下面将总结一些对我有用的部分。…

C#,OpenCV开发指南(01)

C#&#xff0c;OpenCV开发指南&#xff08;01&#xff09; 一、OpenCV的安装1、需要安装两个拓展包&#xff1a;OpenCvSharp4和OpenCvSharp4.runtime.win 二、C#使用OpenCV的一些代码1、需要加头文件2、读取图片3、在图片上画矩形框4、 在图片上画直线 一、OpenCV的安装 1、需…

使用 React Native CLI 创建项目

React Native 安装的先决条件和设置 需要掌握的知识点 掌握 JavaScript 基础知识掌握 React 相关基础知识掌握 TypeScript 相关基础知识 安装软件前需要首先安装Chocolatey。Chocolatey 是一种流行的 Windows 包管理器。 安装 nodejs 和 JDK choco install -y nodejs-lts …

接口测试——postman接口测试(三)

目录 1. postman介绍与安装 2. postman发送get请求 3. postman发送post请求 1. postman介绍与安装 安装网址&#xff1a;Postman安装教程&#xff1a;留言找我要即可 2. postman发送get请求 import pymysql from flask import Flask,request# 这里是mysql的基本连接信息 c…

cloudstack management高可用

一、环境说明 CPU&#xff1a; kunpeng 920 操作系统&#xff1a;OpenEuler 22.03 IP角色192.168.157.20mysql192.168.157.21management-server 1192.168.157.22management-server 2192.168.157.30nginx 二、部署 基础环境准备参考【cloudstack测试环境搭建】 1、部署mysql&…

音视频 FFmpeg命令行搭建

文章目录 一、配置二、测试 一、配置 以FFmpeg4.2.1 win32为例 解压ffmpeg-4.2.1-win32-shared.zip 拷⻉可执⾏⽂件到C:\Windows拷⻉动态链接库到C:\Windows\SysWOW64 注&#xff1a;WoW64 (Windows On Windows64)是⼀个Windows操作系统的⼦系统&#xff0c;被设计⽤来处理许…

替换开源LDAP,某科技企业用宁盾目录统一身份,为业务敏捷提供支撑

客户介绍 某高科技企业成立于2015年&#xff0c;是一家深耕于大物流领域的人工智能公司&#xff0c;迄今为止已为全球16个国家和地区&#xff0c;120余家客户打造智能化升级体验&#xff0c;场景覆盖海陆空铁、工厂等货运物流领域。 该公司使用开源LDAP面临的挑战 挑战1 开源…