导出LLaMA等LLM模型为onnx

这篇具有很好参考价值的文章主要介绍了导出LLaMA等LLM模型为onnx。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

https://github.com/luchangli03/export_llama_to_onnx

导出的LLM进行onnxsim优化:

一种大于2GB ONNX模型onnxsim优化方法_Luchang-Li的博客-CSDN博客

https://github.com/luchangli03/onnxsim_large_model

可以在这个基础上进行简单修改从而导出其他模型,例如百川,Qwen等模型。当前已经加入了对llama, 清华ChatGlm2和阿里Qwen的导出支持。百川跟llamma相似性很高,可以直接用llama的导出脚本。

除了导出onnx,目前还增加了一个基于onnx推理chatglm2的demo。

该方案优点是无需侵入式修改transformers代码,缺点是你需要提前了解各个模型的输入,相关shape和dtype。这可以在代码里面增加shape,dtype打印,进行一次推理获取。

阿里的Qwen模型导出onnx存在大量琐碎的算子,主要是因为其使用了einops库的rearrange操作。把这些算子替换为reshape,transpose, split等操作后onnx模型会极大简化。此外,还可以进一步优化该模型的RotaryEmbedding相关的代码以优化导出的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。优化前后:

导出LLaMA等LLM模型为onnx,推理引擎,大模型,llama,人工智能,onnx导出LLaMA等LLM模型为onnx,推理引擎,大模型,llama,人工智能,onnx

导出模型调试

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

如/layers.0/attn/rotary_emb/Slice可以知道该算子定义于第0个decoder层的atten.rotary_emb模块,而slice一般来自于张量切片索引操作。文章来源地址https://www.toymoban.com/news/detail-629261.html

到了这里,关于导出LLaMA等LLM模型为onnx的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenMMlab导出mobilenet-v2的onnx模型并推理

    使用mmpretrain导出mobilenet-v2的onnx模型: 安装有mmdeploy的话可以通过如下方法导出: 通过onnxruntime进行推理: 使用mmdeploy推理: 或者 这里通过trtexec转换onnx文件,LZ的版本是TensorRT-8.2.1.8。 使用mmdeploy推理: 或者

    2024年02月05日
    浏览(49)
  • LLM实践-在Colab上使用免费T4 GPU进行Chinese-Llama-2-7b-4bit推理

    一、配置环境 1、打开colab,创建一个空白notebook,在[修改运行时环境]中选择15GB显存的T4 GPU. 2、pip安装依赖python包 注意此时,安装完accelerate后需要重启notebook,不然报如下错误: ImportError: Using low_cpu_mem_usage=True or a device_map requires Accelerate: pip install accelerate 注:参考文章内容

    2024年02月04日
    浏览(50)
  • llama.cpp模型推理之界面篇

    目录 前言 一、llama.cpp 目录结构 二、llama.cpp 之 server 学习 1. 介绍 2. 编译部署 3. 启动服务 4、扩展或构建其他的 Web 前端 5、其他 在《基于llama.cpp学习开源LLM本地部署》这篇中介绍了基于llama.cpp学习开源LLM本地部署。在最后简单介绍了API 的调用方式。不习惯命令行的同鞋,也

    2024年01月19日
    浏览(37)
  • llama.cpp LLM模型 windows cpu安装部署;运行LLaMA-7B模型测试

    参考: https://www.listera.top/ji-xu-zhe-teng-xia-chinese-llama-alpaca/ https://blog.csdn.net/qq_38238956/article/details/130113599 cmake windows安装参考:https://blog.csdn.net/weixin_42357472/article/details/131314105 1、下载: 2、编译 3、测试运行 参考: https://zhuanlan.zhihu.com/p/638427280 模型下载: https://huggingface.co/nya

    2024年02月15日
    浏览(52)
  • 【大模型】大模型 CPU 推理之 llama.cpp

    描述 The main goal of llama.cpp is to enable LLM inference with minimal setup and state-of-the-art performance on a wide variety of hardware - locally and in the cloud. Plain C/C++ implementation without any dependencies Apple silicon is a first-class citizen - optimized via ARM NEON, Accelerate and Metal frameworks AVX, AVX2 and AVX512 support for x86 arc

    2024年04月14日
    浏览(43)
  • llama.cpp LLM模型 windows cpu安装部署;运行LLaMA2模型测试

    参考: https://www.listera.top/ji-xu-zhe-teng-xia-chinese-llama-alpaca/ https://blog.csdn.net/qq_38238956/article/details/130113599 cmake windows安装参考:https://blog.csdn.net/weixin_42357472/article/details/131314105 1、下载: 2、编译 3、测试运行 参考: https://zhuanlan.zhihu.com/p/638427280 模型下载: https://huggingface.co/nya

    2024年02月16日
    浏览(41)
  • LLM微调(四)| 微调Llama 2实现Text-to-SQL,并使用LlamaIndex在数据库上进行推理

            Llama 2是开源LLM发展的一个巨大里程碑。最大模型及其经过微调的变体位居Hugging Face Open LLM排行榜(https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard)前列。多个基准测试表明,就性能而言,它正在接近GPT-3.5(在某些情况下甚至超过它)。所有这些都意味着,对于从

    2024年02月03日
    浏览(54)
  • 基于中文金融知识的 LLaMA 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学

    项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域) :汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自

    2024年02月14日
    浏览(44)
  • llama.cpp一种在本地CPU上部署的量化模型(超低配推理llama)

    前不久,Meta前脚发布完开源大语言模型LLaMA, 随后就被网友“泄漏”,直接放了一个磁力链接下载链接。 然而那些手头没有顶级显卡的朋友们,就只能看看而已了 但是 Georgi Gerganov 开源了一个项目llama.cpp ggerganov/llama.cpp: Port of Facebook’s LLaMA model in C/C++ (github.com) 次项目的牛逼

    2023年04月23日
    浏览(44)
  • Llama 3大模型发布!快速体验推理及微调

            Meta,一家全球知名的科技和社交媒体巨头,在其官方网站上正式宣布了一款开源的大型预训练语言模型——Llama-3。     据了解,Llama-3模型提供了两种不同参数规模的版本,分别是80亿参数和700亿参数。这两种版本分别针对基础的预训练任务以及指令微调任务进

    2024年04月26日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包