2023.05.11-使用纯CPU来运行RWKV大语言模型

news2024/10/7 8:27:27

1. 简介

  • 使用CPU来运行C++版本的RWKV

  • rwkv.cpp 可以将 RWKV 原始模型的参数转化为 float16,并量化到 int4,可以在 CPU 上更快地运行,也可以节省更多的内存。

2. 下载项目

## git clone --recursive https://github.com/saharNooby/rwkv.cpp.git
cd rwkv.cpp

3. 下载依赖或者自行编译

  • 使用CPU-Z 来查看一下自己的CPU是否支持AVX2 or AVX-512,如果支持的话,可以直接下载作者编译好的依赖库

  • 我这里是支持AVX指令集的,所以直接使用作者编译好的依赖库了

  • 打开Releases · saharNooby/rwkv.cpp · GitHub

  • rwkv.cpp 的开发者已经预编译了不同平台上的依赖库,可以在这里下载

  • 下载rwkv-master-a3178b2-bin-win-avx-x64.zip

  • 解压之后是一个dll文件,将其放在根目录下

  • 如果上面没有适适合自己平台的依赖库的话,那么需要进行自行编译

编译

cmake .
cmake --build . --config Release

4. 准备模型

  • 下载项目权重时,有两种选择,一种是下载作者已经量化好的bin模型,另一种是下载pat模型,然后自己手动量化
  • BlinkDL (BlinkDL)

4.1. 模型名称的参数

  • 统一前缀 rwkv-4 表示它们都基于 RWKV 的第 4 代架构。
  • pile 代表基底模型,在 pile 等基础语料上进行预训练,没有进行微调,适合高玩来给自己定制。
  • novel 代表小说模型,在各种语言的小说上进行微调,适合写小说。
  • raven 代表对话模型,在各种开源的对话语料上进行微调,适合聊天、问答、写代码。
  • 430m、7b 这些指的是模型的参数量。
  • 我这边下载的是这个

Q8_0-RWKV-4-Raven-7B-v11-Eng49%-Chn49%-Jpn1%-Other1%-20230430-ctx8192.bin

权重,下载下来可以直接使用,而不必进行转化以及量化。如果想要自己手动量化的话,可以继续看后面的步骤

  • Q8_0-RWKV-4-Raven-7B-v11-Eng49%-Chn49%-Jpn1%-Other1%-20230430-ctx8192.bin · BlinkDL/rwkv-4-raven at main
  • 文件比较大,网速慢的话,得稍等一会儿

4.2. 转换模型

  • 正常情况下,下载后这个模型配合ChatRWKV仓库中的代码就可以跑了,但是他对CPU的支持最低只到FP32i8,7B模型需要12GB内存才能跑起来,因此,我们使用的rwkv.cpp可以将RWKV原始模型的参数转换为float16,并量化到int4,可以在CPU上更快的运行,同时也可以节省更多的内存
  • 将下载好的PyTorch模型放在rwkv.cpp的路径下,执行下面的命令
### python rwkv/convert_pytorch_to_ggml.py RWKV-4-Raven-7B-v7-EngAndMore-20230404-ctx4096.pth ./rwkv.cpp-7B.bin float16

  • 这个代码的命令就是让Python运行这个rwkv/convert_pytorch_to_ggml.py转换模型的代码,
  • RWKV-4-Raven-7B-v7-EngAndMore-20230404-ctx4096.pth是待转换的权重,根据自己下载的文件,适当进行修改
  • rwkv.cpp-7B.bin 是转换后的模型路径,float16指的是将模型转换为float16类型
  • 生成的模型,与原模型相比,尺寸并没有发生改变

4.3. 量化模型

  • 上面转换之后的rwkv.cpp-7B.bin模型其实已经可以用了,但是它占用的显存内存依然比较多,大约需要16GB内存,为了进一步的减少内存占用,也为了加快模型的推理速度,可以将这个模型量化为int4,这样可以省一半的内存
### python rwkv/quantize.py ./rwkv.cpp-7B.bin ./rwkv.cpp-7B-Q4_1_O.bin Q4_0

  • 如下所示,这里可选的参数分别为Q4_0,Q4_1,Q4_2,Q5_0,Q5_1,Q8_0,根据自己实际情况进行选择即可
  • 可以看到量化后的模型只有6个G的大小

5. 运行模型

  • 经过前面的转化和量化之后,运行模型就非常简单了,只需要一行命令就可以搞定
  • 如果想要生成模型,那么使用下面的人来运行
### python rwkv\generate_completions.py rwkv.cpp-7B-Q4_1_O.bin

### python rwkv/chat_with_bot.py rwkv.cpp-7B-Q4_1_O.bin

  • 启动需要的时间还是比较长的,耐心等一会儿

启动完毕,进行测试

6. 测试效果

  • 不知道为什么,他回答自己是OpenAI训练的ChatGPT
  • 生成的文字长度还是挺可以的,对话的时候告诉他继续,他就可以一直生成下去

而且也可以进行编程

  • 但是在写代码的时候,依然存在一次输出的长度太短的问题

  • [外链图片转存中…(img-zVNWyhth-1683796408249)]

而且也可以进行编程

  • [外链图片转存中…(img-KiL0hZzE-1683796408250)]
  • 但是在写代码的时候,依然存在一次输出的长度太短的问题

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

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

相关文章

PostgreSQL11 | 视图

上一篇讲了索引,索引提高了表查询的速度,这一篇讲视图。 视图 视图,数据库中的一个虚拟表。 目录 视图 视图概述 前期准备 创建视图 单表视图 多表视图 查询视图 删除视图 视图概述 视图同真实表一样具有表的功能,但是…

spring事务失效的12种场景

前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免…

H. Binary Craziness

题目链接 2023 Hubei Provincial Collegiate Programming Contest Examples input 6 6 1 3 2 3 1 4 2 5 3 6 4 6 output 30 input 6 4 1 2 3 5 2 4 3 6 output 0 题目大意: 给出结点个数 n n n和边的个数 m m m 下面依此给出 m m m个边,边是无向的&am…

Linux三种网络模式 | 仅主机、桥接、NAT

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Linux三种网络模式 仅主机模式:虚拟机只能访问物理机,不能上网 桥接模式:虚拟机和物理机连接同一网络,虚拟机和物理机…

字典核心底层原理

字典对象的核心是散列表。散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket。每个bucket有两部分:一个是键对象的引用,一个是值对象的引用。 由于,所有bucket结构和大小一致&#xf…

服装厂的管理系统如何选?内行人:这4点一定要注意!

服装厂管理水平偏低,耗费大量时间和资金成本,导致利润越来越低,是现在很多中小服装厂普遍面临的痛点。 依靠传统的管理模式,口头询问生产进度,手写统计数量,很显然不适合现代工厂的管理模式,服装…

java开发记录V1

编辑器vscode 在vscode中安装配置springboot 下载安装jdk oracle jdk BellSoft Liberica JDK version 17 在vscode编辑器中安装相关组件Extension Pack for Java、Spring Boot Extension Pack、Spring Initializr Java Support 创建springboot项目:ctrlshiftp后…

【Midjourney】Midjourney 辅助工具 ① ( 自定义命令工具 | 设置描述词 | 设置风格 | 设置灯光 | 设置相机 | 设置艺术家 )

文章目录 一、Midjourney Prompt Tool 自定义命令工具1、设置描述词2、设置风格3、设置灯光4、设置相机参数5、设置艺术家参数 Midjourney 提示词命令 可以使用 辅助工具 进行生成 , 辅助工具如下 : Midjourney Prompt Tool 自定义命令工具Midjourney Prompt Generator 命令生…

软件测试踏入这三个误区,就离滚蛋不远了

误区一:测试都是女生,男生不适合 误区二:这个职位很简单,不需要很多技术含量,每天很闲 误区三:起步即巅峰,薪资提升空间不大,一线才八九千 如果你听到这样的言论,赶紧走…

AssetBundle加载与卸载时的内存变化

AssetBundle.LoadFromFile加载一个80MB的assetbundle会分配1MB左右的pss内存 adb分析:private-otherUnityProfiler分析:有3块 1.Other/AssetBundle/LoadingCache 2.Other/SerializedFile/archive:/CAB-e42axxxxxxx 3.NotSaved/AssetBundle/xxxxxx.ab …

陷入“产品纠结”的王振滔,与学不来波司登的奥康

文|螳螂观察 作者| 青月 曾经的一代“鞋王”奥康,正在走下神坛。 4月底,奥康国际披露了2022年的年报,数据显示,公司归母净利润亏损3.7亿元,同比下滑1185.93%。此外,公司年报还被出具了保留意见的审计报告…

Revit创建装饰纹路柱及CAD生成柱

一、Revit中如何创建装饰纹路的柱子 在罗马柱的外观中,很少存在圆滑的柱身,在Revit中,可以用阵列的方式,更快的装饰柱子。 在族样板中,采用拉伸的方式先创建一个柱子 采用空心拉伸为柱子绘制花纹 选择圆形工具绘制&…

C语言的数据类型

数据类型 变量和常量 常量的2种定义方式: 1、关键字const const 数据类型 常量名 值; 如:const float pi 3.14159; 2、宏定义 #define 常量名 值 PS: 这里没有"“和”;" 如:#define PI 3.14159 推荐用宏定义的方式定义常量。 整…

Thradlocal底层原理

java引用:强软弱虚 软引用空间不足时会被回收 软引用非常适合做缓存 弱引用:只要有垃圾回收,就会被回收 虚引用回不回收都拿不到 他只有一个作用,管理直接内存 也是只要有垃圾回收就会被回收 ThreadLocal Spring事务&#x…

【职场新人备忘录】新人职场生存指南:快速适应、持续成长和个人提升

新人职场生存指南:快速适应、持续成长和个人提升 引言 职场对于新人来说充满了新的挑战和机遇。作为一名新人,如何在职场中快速适应、获得成长和提升自己是至关重要的技能。本备忘录旨在为职场新人提供实用的职场tips,帮助他们在职场中取得…

Ubuntu 20.04 安装 mysql 并配置远程访问

文章目录 一、使用 apt-get 安装 mysql 服务二、初始化 mysql 数据库管理员用户密码三、配置远程访问 一、使用 apt-get 安装 mysql 服务 # 更新软件源 apt-get install update# 安装mysql服务 apt-get install mysql-server# 使用mysqladmin工具查看mysql版本 mysqladmin --v…

Set和Map学习笔记

参考链接:https://blog.csdn.net/weixin_43359799/article/details/123131917 Set 集合,存储的是value值,以对象形式存储,并且不会存储重复的值,可以用来数组去重。 const s new Set() [1, 2, 3, 4, 3, 2, 1].forEach(x > s.add(x)) c…

景区户外剧本杀小程序冲关软件

景区户外剧本杀小程序具有以下几个方面的市场前景: 旅游市场需求增加:随着人们对于旅游方式的多样化需求增加,景区户外剧本杀作为一种互动性强、参与感强的旅游体验项目,将会得到越来越多游客的喜爱和关注。 移动互联网应…

对称加密和非对称加密的区别

两个人有不想让第三者知道的事情,可以找一个私密的空间去聊。而互联网本身是一个开放的体系,双方在交换数据的时候会经历大量的第三者——公司的防火墙、ISP 的路由器,还有可能有黑客抓取数据。那么这个时候如果张三和李四有私密的话想聊&…

游戏是怎么做推广的

游戏是怎么做推广的 大家好我是艾西,今天是我们的闲聊日记,大家都知道我是一直做游戏相关的事情,不管是开发、运营还是资源渠道等都是不可少的因素,那么在这长时间的积累下还是有一些直接的心得以及方式方法的。今天我们主要聊的…