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

导出RWKV模型为onnx

测试模型:

https://huggingface.co/RWKV/rwkv-5-world-3b

导出前对modeling_rwkv5.py进行一个修改:

#        out = out.reshape(B * T, H * S)
        out = out.reshape(B * T, H * S, 1) # <<--- modified
        out = F.group_norm(out, num_groups=H, weight=lxw, bias=lxb).reshape(B, T, H * S)

因为目前存pytorch导出onnx在bug,不支持2d输入的group_norm导出。

导出代码参考:

import os
import argparse
import torch
from torch import nn
from transformers import AutoModelForCausalLM, AutoTokenizerclass LLMForCausalLMWrapper(nn.Module):def __init__(self, model, config, args):super().__init__()self.model = modelself.config = configself.args = argsdef forward(self,input_ids,state,):outputs = self.model(input_ids=input_ids,state=state,use_cache=True,)logits = outputs.logitsstate_out = outputs.statereturn logits, state_outdef export_llm_to_single_onnx(model, config, dtype, args, model_name):llama_model_wrapper = LLMForCausalLMWrapper(model, config, args)onnx_file_name = os.path.join(args.out_dir, f"{model_name}.onnx")hidden_size = config.hidden_sizelayer_num = config.num_hidden_layers# head_num = config.num_attention_heads# head_dim = config.head_dimbatch = 1N = 1input_ids_shape = [batch, N]input_ids = torch.ones(input_ids_shape, dtype=torch.int64).to(args.device)dynamic_axes = {'input_ids': {1: 'N', },}if args.dyn_batch:dynamic_axes['input_ids'][0] = "batch"state_0 = torch.randn([1, hidden_size, layer_num], dtype=dtype).to(args.device)state_1 = torch.randn([1, 40, 64, 64, layer_num], dtype=dtype).to(args.device)state_2 = torch.randn([1, hidden_size, layer_num], dtype=dtype).to(args.device)state = [state_0, state_1, state_2]in_names = ["input_ids", "state_0_in", "state_1_in", "state_2_in"]kv_caches_in = []out_names = ["lm_logits", "state_0_out", "state_1_out", "state_2_out"]input_datas = (input_ids, state)torch.onnx.export(llama_model_wrapper,input_datas,onnx_file_name,opset_version=args.opset,do_constant_folding=True,input_names=in_names,output_names=out_names,dynamic_axes=dynamic_axes,)def export_rwkv(args):device = args.devicedtype_map = {"float32": torch.float32,"float16": torch.float16,"bfloat16": torch.bfloat16,}dtype = dtype_map[args.dtype]print(f"begin load model from {args.model_path}")model = AutoModelForCausalLM.from_pretrained(args.model_path, device_map=device, torch_dtype=dtype, trust_remote_code=True).eval()model.rwkv.blocks = model.rwkv.blocks[:1]  # only export few layer for debugprint(f"finish load model from {args.model_path}")config = model.configprint("config:", config)print(f"begin export llm")export_llm_to_single_onnx(model, config, dtype, args, "llm_onnx")if __name__ == "__main__":parser = argparse.ArgumentParser(description='export llm',)parser.add_argument('-m', '--model_path', required=True, type=str)parser.add_argument('-o', '--out_dir', required=False, type=str, default="")parser.add_argument('--opset', required=False, type=int, default=15)parser.add_argument('-d', '--device', required=False, type=str, choices=["cpu", "cuda"], default="cuda")parser.add_argument('-p', '--dtype', required=False, type=str,choices=["float32", "float16", "bfloat16"], default="float16")parser.add_argument('--add_topk_warper', required=False, type=int, default=0)parser.add_argument('--topk', required=False, type=int, default=4)parser.add_argument('--dyn_batch', action='store_true')args = parser.parse_args()export_rwkv(args)

导出其他模型和对大模型进行onnxsim参考:

GitHub - luchangli03/export_llama_to_onnx: export llama to onnx

GitHub - luchangli03/onnxsim_large_model: simplify >2GB large onnx model

相关文章:

导出RWKV模型为onnx

测试模型&#xff1a; https://huggingface.co/RWKV/rwkv-5-world-3b 导出前对modeling_rwkv5.py进行一个修改&#xff1a; # out out.reshape(B * T, H * S) out out.reshape(B * T, H * S, 1) # <<--- modified out F.group_norm(out, nu…...

【LeetCode】整数转罗马数字 C语言 | 此刻,已成艺术(bushi)

Problem: 12. 整数转罗马数字 文章目录 思路解题方法复杂度Code 思路 暴力破解 转换 解题方法 由思路可知 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code char* intToRoman(int num) {char *s (char*)malloc(sizeof(char)*4000), *p s;while(…...

移动App开发常见的三种模式:原生应用、H5移动应用、混合模式应用

引言 在移动应用市场的迅猛发展中&#xff0c;移动App开发正日益成为技术创新和用户体验提升的焦点。对于开发者而言&#xff0c;选择适合自己项目的开发模式成为至关重要的决策。本文将探究移动App开发的三种常见模式&#xff1a;原生应用、H5移动应用和混合模式应用。这三种…...

k8s Secret配置资源,ConfigMap 存储配置信资源管理详解

目录 一、Secret 概念 三种Secret类型 pod三种使用secret的方式 应用场景&#xff1a;凭据&#xff1a; 二、 示例 2.1、用kubectl create secret命令创建 Secret 创建Secret&#xff1a; 查看Secret列表&#xff1a; 描述Secret&#xff1a; 2.2、用 base64 编码&…...

POS 之 最终确定性

Gasper Casper 是一种能将特定区块更新为 最终确定 状态的机制&#xff0c;使网络的新加入者确信他们正在同步规范链。当区块链出现多个分叉时&#xff0c;分叉选择算法使用累计投票来确保节点可以轻松选择正确的分叉。 最终确定性 最终确定性是某些区块的属性&#xff0c;意味…...

Vue快速开发一个主页

前言 这里讲述我们如何快速利用Vue脚手架快速搭建一个主页。 页面布局 el-container / el-header / el-aside / el-main&#xff1a;https://element.eleme.cn/#/zh-CN/component/container <el-container><el-header style"background-color: #4c535a"…...

Java SE入门及基础(33)

final 修饰符 1. 应用范围 final 修饰符应该使用在类、变量以及方法上 2. final 修饰类 Note that you can also declare an entire class final. A class that is declared final cannot be subclassed. This is particularly useful, for example, when creating an imm…...

ChatGPT逐步进入留学圈但并不能解决留学规划的问题

2022 年底&#xff0c;一个能像人类一样对话的AI软件ChatGPT&#xff0c;在5天内突破一百万用户&#xff0c;风靡全球&#xff0c;如今用户已达1.8亿。 四个月后&#xff0c;ChatGPT进化为GPT4版本。该版本逻辑、数学推理能力卓越。拿留美标准化考试举例&#xff0c;GPT4能够在…...

WebGL之灯光使用解析

在使用灯光之前&#xff0c;首先我们需要了解&#xff0c;与定义更广泛的 OpenGL 不同&#xff0c;WebGL 并没有继承 OpenGL 中灯光的支持。所以你只能由自己完全得控制灯光。幸运得是&#xff0c;这也并不是很难&#xff0c;本文接下来就会介绍完成灯光的基础。 在 3D 空间中…...

【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…...

PostgreSQL索引篇 | TSearch2 全文搜索

PostgreSQL版本为8.4.1 &#xff08;本文为《PostgreSQL数据库内核分析》一书的总结笔记&#xff0c;需要电子版的可私信我&#xff09; 索引篇&#xff1a; PostgreSQL索引篇 | BTreePostgreSQL索引篇 | GiST索引PostgreSQL索引篇 | Hash索引PostgreSQL索引篇 | GIN索引 (倒排…...

SpringMVC 中的常用注解和用法

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;JavaEE &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 注解 1. MVC定义2. 注解2.1 RequestMappin…...

智慧城市中的数据力量:大数据与AI的应用

目录 一、引言 二、大数据与AI技术的融合 三、大数据与AI在智慧城市中的应用 1、智慧交通 2、智慧环保 3、智慧公共安全 4、智慧公共服务 四、大数据与AI在智慧城市中的价值 1、提高城市管理的效率和水平 2、优化城市资源的配置和利用 3、提升市民的生活质量和幸福感…...

德人合科技|天锐绿盾加密软件——数据防泄漏系统

德人合科技是一家专注于提供企业级信息安全解决方案的服务商&#xff0c;提供的天锐绿盾加密软件是一款专为企业设计的数据安全防护产品&#xff0c;主要用于解决企事业单位内部敏感数据的防泄密问题。 www.drhchina.com PC端&#xff1a; https://isite.baidu.com/site/wjz012…...

C语言---单身狗问题

1.单身狗初阶 这个题目就是数组里面有一串数字&#xff0c;都是成对存在的&#xff0c;只有一个数字只出现了一次&#xff0c;请你找出来 &#xff08;1&#xff09;异或是满足交换律的&#xff0c;两个相同的数字异或之后是0&#xff1b; &#xff08;2&#xff09;让0和每个…...

一次gitlab 502故障解决过程

通过top,发现prometheus进程占用CPU接近100%&#xff0c;这肯定有点异常。gitlab-ctl tail prometheus 发现有报错的情况&#xff0c;提示空间不足。暂时不管空间的问题。 2024-03-07_05:48:09.01515 ts2024-03-07T05:48:09.014Z callermain.go:1116 levelerror err"open…...

Xilinx 7系列 FPGA硬件知识系列(一)——FPGA选型参考

目录 1.1 Xilinx-7系列产品的工艺级别 ​编辑1.2 Xilinx-7系列产品的特点 1.2.1 Spartan-7系列 1.2.2 Artix-7系列 1.2.3 Kintex-7系列 1.2.4 Virtex-7系列 1.3 Xilinx-7系列FPGA对比 1.3.1 DSP资源柱状图 ​1.3.2 Block RAM资源柱状图 ​1.3.3 高速串行收…...

【C++从练气到飞升】02---初识类与对象

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 ⛳️推荐 一、面向过程和面向对象初步认识 二、类的引用 1. C语言版 2. C版 三、类的定义 类的两种定义方式&#xff…...

探秘分布式神器RMI:原理、应用与前景分析(一)

本系列文章简介&#xff1a; 本系列文章将深入探究RMI远程调用的原理、应用及未来的发展趋势。首先&#xff0c;我们会详细介绍RMI的工作原理和基本流程&#xff0c;解析其在分布式系统中的核心技术。随后&#xff0c;我们将探讨RMI在各个领域的应用&#xff0c;包括分布式计算…...

JVM(Java虚拟机)概述

1. JVM的定义和作用 JVM&#xff08;Java Virtual Machine&#xff09;是一个能够运行Java字节码的虚拟计算机。它是Java平台的核心组成部分&#xff0c;负责执行编译后的Java程序&#xff0c;提供跨平台运行的能力。JVM使得Java程序可以在任何安装了JVM的操作系统上运行&#…...

国产化改造实战:手把手教你将Nacos 2.2.3的数据库从MySQL迁移到达梦DM8

企业级Nacos数据库国产化迁移实战&#xff1a;从MySQL到达梦DM8的完整指南 在数字化转型浪潮中&#xff0c;配置中心作为微服务架构的核心组件&#xff0c;其稳定性和合规性直接影响业务连续性。Nacos作为阿里巴巴开源的动态服务发现与配置管理平台&#xff0c;已成为众多企业…...

当JetBrains IDE试用期突然到期,你该怎么办?

当JetBrains IDE试用期突然到期&#xff0c;你该怎么办&#xff1f; 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 深夜两点&#xff0c;你正专注地调试一个棘手的bug&#xff0c;手指在键盘上飞舞&#xff0c;代…...

Go-依赖管理实战:从go.sum到GOSUMDB的深度解析

1. go.sum文件&#xff1a;Go依赖的"身份证"系统 第一次接触Go项目时&#xff0c;你可能注意过一个叫go.sum的文件。这个看似简单的文本文件&#xff0c;实际上是Go模块依赖管理的核心安全机制。想象一下&#xff0c;当你从网上下载一个软件包&#xff0c;如何确认下…...

SITS2026发布即颠覆:大模型推理延迟降低63%、部署成本压缩41%的8项硬核工程实践

第一章&#xff1a;SITS2026发布&#xff1a;大模型工程化白皮书下载 2026奇点智能技术大会(https://ml-summit.org) 白皮书核心价值与定位 《SITS2026大模型工程化白皮书》由ML Summit联合17家头部AI基础设施厂商、云服务商及开源社区共同编制&#xff0c;聚焦从千卡级训练集…...

5个实战技巧彻底掌握OpenUserJS.org:解锁浏览器无限定制能力

5个实战技巧彻底掌握OpenUserJS.org&#xff1a;解锁浏览器无限定制能力 【免费下载链接】OpenUserJS.org The home of FOSS user scripts. 项目地址: https://gitcode.com/gh_mirrors/op/OpenUserJS.org OpenUserJS.org作为自由开源软件用户脚本的集中平台&#xff0c;…...

Spring IOC 源码学习 声明式事务的入口点耙

springboot自动配置 自动配置了大量组件&#xff0c;配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后&#xff0c;springboot会根据类路径上的jar包来自动配置bean&#xff08;比如&#xff1a;springboot发现类路径上的MyBatis相关类&#xff…...

WebRTC GCC源码实战:手把手教你调试GoogCcNetworkController的拥塞控制流程

WebRTC GCC源码实战&#xff1a;手把手教你调试GoogCcNetworkController的拥塞控制流程 在实时视频会议应用的开发过程中&#xff0c;带宽估计不稳定是工程师们经常遇到的棘手问题。当用户反馈画面卡顿、画质波动时&#xff0c;我们需要深入WebRTC的拥塞控制核心——Google Con…...

OneNote效率革命:如何用OneMore插件将你的笔记体验提升到全新高度

OneNote效率革命&#xff1a;如何用OneMore插件将你的笔记体验提升到全新高度 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 如果你经常使用OneNote记录笔记&#xf…...

Venera:构建你的个性化漫画阅读宇宙

Venera&#xff1a;构建你的个性化漫画阅读宇宙 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 在数字阅读的浩瀚星海中&#xff0c;Venera漫画应用以其独特的可扩展架构&#xff0c;让你不再受限于单一平台&#xff0c;而是…...

避坑指南:HuggingFace Hub国内镜像设置常见错误及解决方案

HuggingFace Hub国内镜像配置实战&#xff1a;从原理到避坑全解析 第一次在团队协作项目中使用HuggingFace Hub时&#xff0c;我花了整整两天时间才让所有成员的开发环境正常加载BERT模型。有的同事在Windows上遇到证书错误&#xff0c;有人用conda虚拟环境却始终连接超时&…...