ChatRWKV|网文生成|对话机器人

ChatRWKV是一个开源项目,是对标ChatGPT的,基于RWKV (100% RNN) 语言模型的类似ChatGPT 的开源工具。该开源项目支持问话对答式交流,而且对中国网文写作方面的能利更好。

ChatRWKV|开源中文小说以及文章生成语言模型

ChatRWKV是一个开源项目,是对标ChatGPT的,基于RWKV (100% RNN) 语言模型的类似ChatGPT 的开源工具。ChatRWKV希望做大规模语言模型的Stable Diffusion,测试很一段时间确实很像ChatGPT,从使用方法和内容结果上都很相似,但是还有一些差异。该开源项目支持问话对答式交流,而且对中国网文写作方面的能利更好。

下载

如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。

首先我们需要确认一个工作目录,用来存放ChatRWKV的相关文件。本站所选择的目录为D盘的根目录下openai.wiki文件夹,完整路径为:D:\openai.wiki

1.检测D盘是否在openai.wiki,没有则创建该文件夹。

if not exist D:\openai.wiki mkdir D:\openai.wiki

2.强制切换工作路径为D盘的openai.wiki文件夹。

cd /d D:\openai.wiki

3.拉取Github仓库文件夹,将下载至openai.wiki文件夹。

git clone https://github.com/BlinkDL/ChatRWKV.git

注意:如果您无法完成第3步,执行后报错或者无法下载,可以下载该文件将其解压至D:\openai.wiki即可。

ChatRWKV

提取密码 文件说明 文件大小 4.11MB 文件格式 ZIP 资源价格 免费 下载次数 0

环境安装

为不影响电脑中的现有环境,请一定要安装Conda,如果您不知道什么是Conda,或者未安装过Conda,请参考如下文章,安装部署Conda之后再继续以下步骤。

在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。

conda create -p D:\openai.wiki\ChatRWKV\MyENV

执行完成上面的命令之后,将会在CMD窗口中看到Proceed ([y]/n)?提示,我们直接按下回车即可。

初始化Conda环境,避免后续可能报错。

conda init cmd.exe

激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。

conda activate D:\openai.wiki\ChatRWKV\MyENV

为避免出现问题,我们再次强制切换至ChatRWKV的项目路径,确保一切可以正常安装。

cd /d D:\openai.wiki\ChatRWKV

安装Torch的相关依赖库,此步骤可能需要稍等几分钟才能够安装完成,取决于电脑性能。

pip install torch --extra-index-url https://download.pytorch.org/whl/cu117 --upgrade

执行如下命令行,安装numpy依赖。

pip install numpy tokenizers prompt_toolkit

模型相关

模型下载

类别尺寸推荐显存方式下载
1.5B28.3GB3G 显存123网盘下载
1.5B28.3GB3G 显存Hugging Face下载
3B144GB6G 显存123网盘下载
3B144GB6G 显存Hugging Face下载
7B12G 显存Hugging Face下载

7B的模型实在太大了,本站的本地硬盘只剩500G都不够用,所以请自行请往Hugging Face下载吧。

模型安装

下载好模型之后,为了让您尽可能小程度的修改配置文件,您最好将模型移动至D:\openai.wiki\ChatRWKV\v2\fsx\BlinkDL\HF-MODEL目录中。您的ChatRWKV目录下应该只能找到v2,但是无法在v2目录下找到fsx文件夹,所以您需要手动创建相应文件夹,或者在CMD中执行如下命令行,自动创建相关目录。

if not exist D:\openai.wiki\ChatRWKV\v2\fsx\BlinkDL\HF-MODEL mkdir D:\openai.wiki\ChatRWKV\v2\fsx\BlinkDL\HF-MODEL

在您目录正确的情况下,将下载的模型移动至HF-MODEL文件夹中即可,以1.5B模型为例,本站的目录结构如下,其它模型同理。

D:\openai.wiki\ChatRWKV\v2\fsx\BlinkDL\HF-MODEL\rwkv-4-pile-1b5
└─.gitattributes
└─README.md
└─RWKV-4-Pile-1B5-20220814-4526.pth
└─RWKV-4-Pile-1B5-20220822-5809.pth
└─RWKV-4-Pile-1B5-20220903-8040.pth
└─RWKV-4-Pile-1B5-20220929-ctx4096.pth
└─RWKV-4-Pile-1B5-Chn-testNovel-done-ctx2048-20230312.pth
└─RWKV-4-Pile-1B5-EngChn-test4-20230115.pth
└─RWKV-4-Pile-1B5-EngChn-testNovel-done-ctx2048-20230225.pth
└─RWKV-4-Pile-1B5-Instruct-test1-20230124.pth
└─RWKV-4-Pile-1B5-Instruct-test2-20230209.pth
└─RWKV-4b-Pile-1B5-20230217-7954.pth

配置路径

打开D:\openai.wiki\ChatRWKV\v2\chat.py文件,如果您希望在中文Chat中使用1B5模型,那么您修改位于第72行的文件,在'/fsx/BlinkDL/HF-MODEL/rwkv-4-pile-1b5/RWKV-4-Pile-1B5-EngChn-testNovel-done-ctx2048-20230225'中,只需要在最前面加一个.即可。

原内容

    args.MODEL_NAME = '/fsx/BlinkDL/HF-MODEL/rwkv-4-pile-1b5/RWKV-4-Pile-1B5-EngChn-testNovel-done-ctx2048-20230225'

修改为

    args.MODEL_NAME = './fsx/BlinkDL/HF-MODEL/rwkv-4-pile-1b5/RWKV-4-Pile-1B5-EngChn-testNovel-done-ctx2048-20230225'
if CHAT_LANG == 'English':
    args.MODEL_NAME = '/fsx/BlinkDL/HF-MODEL/rwkv-4-raven/RWKV-4-Raven-14B-v6-Eng-20230401-ctx4096' # try +i for "Alpaca instruct"
    # args.MODEL_NAME = '/fsx/BlinkDL/HF-MODEL/rwkv-4-raven/RWKV-4-Raven-7B-v6-Eng-20230401-ctx4096' # try +i for "Alpaca instruct"
    # args.MODEL_NAME = '/fsx/BlinkDL/HF-MODEL/rwkv-4-pile-14b/RWKV-4-Pile-14B-20230313-ctx8192-test1050'
    # args.MODEL_NAME = '/fsx/BlinkDL/HF-MODEL/rwkv-4-pile-7b/RWKV-4-Pile-7B-20230109-ctx4096'
    # args.MODEL_NAME = '/fsx/BlinkDL/HF-MODEL/rwkv-4-pile-3b/RWKV-4-Pile-3B-20221110-ctx4096'
    # args.MODEL_NAME = 'cuda_fp16_RWKV-4-Pile-7B-20230109-ctx4096' # use convert_model.py for faster loading & saves CPU RAM

elif CHAT_LANG == 'Chinese': # testNovel系列是小说模型,请只用 +gen 指令续写。Raven系列可以对话和问答,推荐用 +i 做长问答(只用了小中文语料,纯属娱乐)
    # args.MODEL_NAME = '/fsx/BlinkDL/HF-MODEL/rwkv-4-pile-7b/RWKV-4-Pile-7B-EngChn-testNovel-done-ctx2048-20230317'
    # args.MODEL_NAME = '/fsx/BlinkDL/HF-MODEL/rwkv-4-raven/RWKV-4-Raven-7B-v6-ChnEng-20230401-ctx2048' # try +i for "Alpaca instruct"
    # args.MODEL_NAME = '/fsx/BlinkDL/HF-MODEL/rwkv-4-pile-3b/RWKV-4-Pile-3B-EngChn-testNovel-done-ctx2048-20230226'
    args.MODEL_NAME = './fsx/BlinkDL/HF-MODEL/rwkv-4-pile-1b5/RWKV-4-Pile-1B5-EngChn-testNovel-done-ctx2048-20230225'
    # args.MODEL_NAME = '/fsx/BlinkDL/CODE/_PUBLIC_/RWKV-LM/RWKV-v4neo/7-run1z/rwkv-663'

如果您希望使用7B模型,只需要将7B模型前的符号#删除,然后在模型路径前面加符号.,还要在1B5模型前面加符号#,注释掉该模型的加载。

请在修改时注意格式缩进等问题,Python代码对于缩进方式敏感,多或少空格等操作都可能导致无法正常加载模型。

注意:每次只可以加载一个模型,不要同时加载多个模型,所以不带符号#的模型只可以有一个存在。

使用教程

聊天

ChatRWKV可以进行聊天对话,双方角色分别为BobAlice。但由于现在代码写得很简单,Alice的回答不能换行(目前看到\n\n就认为对话结束)会被截断,以后将会修复该问题。

写作

可以用+i指令让它完成长任务,此时回答可以换行,可以回答很长。例子:【+i 世界各国美食】【+i 开题报告】【+i 请写一首诗,《企鹅罢工》】。注意++是重试,+++是继续写。

配置文件

打开.\ChatRWKV\v2\chat.py文件,设置如下:

设置聊天机器人语言,目前有ChineseEnglish两种语言可以选择。

CHAT_LANG = 'Chinese'

模型设置

这个MODEL_NAME修改为您所下载的模型文件路径和名字,不需要.pth文件扩展名。

警告:路径中的连接符要使用/,而不是\

args.MODEL_NAME = 'C:/xxx/xxx/RWKV-4-Pile-7B-EngChn-testNovel-xxx-ctx2048-20230xxx'

显存设置

该参数默认为cuda fp16,代表模型全部加载进显卡。

如果显存报错显存不足,可将改为cuda fp16 *10 -> cpu fp32,尽量调大10这个数字cuda fp16 *10 -> cpu fp32,只要不报错,这个数字越大,模型运行的速度就越快。

但不要太过于极限,否则在输入长文本时会时显存不够,建议测试到极限,然后对极限值减1。用这个方法,3G显存也能跑7B模型,不过会很慢,以后会更快。

还可以试试args.strategy = 'cuda fp16 *10+',注意这个数字10后面有个加号! 同样尽量调大10这个数字。可以比较哪种的速度快。

args.strategy = 'cuda fp16'

补充:您可以尝试'cuda fp16 *N -> cpu fp32'这里N是数字,例如'cuda fp16 *10 -> cpu fp32',这里N代表放多少层在GPU运算。1.5B模型有25层,3B模型有33层,7B模型有33层,14B模型有41层。这里N越大越快,需要的显存越多。尽量增大N的值,增大到显存装不下报错为止。

ChatRWKV|网文生成|对话机器人

可以在任务管理器中看显存占用,如果显还有空余,那么可以适当增大N的数值,直到调试出最佳N。

AMD

在试到最佳N后,如果发现GPU占用率非常低,CPU在单核工作(很多AMD CPU会这样),您可以尝试将'cuda fp16 *N+'的N值尽量增大,N一开始用前面的N减1或2。

也可以尝试将'cuda fp16 *N+ -> cpu fp32 *1'的N值尽量增大,N使用之前的N减1或2。

显存优化

补充:最新版支持fp16i8量化,可以省将近一半的显存:

# Basic Strategy Guide:
# 100% VRAM = 'cuda fp16'                   # all layers cuda fp16
#  98% VRAM = 'cuda fp16i8 *1 -> cuda fp16' # first 1 layer  cuda fp16i8, then cuda fp16
#  96% VRAM = 'cuda fp16i8 *2 -> cuda fp16' # first 2 layers cuda fp16i8, then cuda fp16
#  94% VRAM = 'cuda fp16i8 *3 -> cuda fp16' # first 3 layers cuda fp16i8, then cuda fp16
#  ...
#  50% VRAM = 'cuda fp16i8'                 # all layers cuda fp16i8
#  48% VRAM = 'cuda fp16i8 -> cpu fp32 *1'  # most layers cuda fp16i8, last 1 layer  cpu fp32
#  46% VRAM = 'cuda fp16i8 -> cpu fp32 *2'  # most layers cuda fp16i8, last 2 layers cpu fp32
#  44% VRAM = 'cuda fp16i8 -> cpu fp32 *3'  # most layers cuda fp16i8, last 3 layers cpu fp32
#  ...
#   0% VRAM = 'cpu fp32'                    # all layers cpu fp32

'cuda fp16i8 *10+' = first 10 layers cuda fp16i8, then fp16i8 stream the rest to it (increase 10 for better speed)

策略设置案例

模型速度续写
网文
生成设定
回答问题
Strategy
7B EngChn-TestNovel
支持英文|多语言|代码
‘cuda fp16 *20 -> cuda fp16’
尽量减少20|越少越快
3B Chn-testNovel
仅支持中文|只能写网文
‘cuda fp16’
3B EngChn-testNovel
支持英文|多语言|代码
‘cuda fp16’
3060 12GB显存用什么模型?
模型速度续写
网文
生成设定
回答问题
Strategy
7B EngChn-TestNovel
2060速度下降

支持英文|多语言|代码
‘cuda fp16i8 *15 -> cpu fp32’
尽量增加15,越大越快。
或者’cuda fp16i8*15+’
尽量增加15,越大越快。
自行测试哪种速度更快
3B Chn-testNovel
仅支持中文|只能写网文
‘cuda fp16i8*25 -> cuda fp16’
尽量减少15,越少越快。
3B EngChn-testNovel
支持英文|多语言|代码
‘cuda fp16i8*25 -> cuda fp16’
尽量减少15,越少越快。
2060 6GB显存用什么模型?

例如:

4GB的显卡用什么模型?建议3B模型,'cuda fp16i8 *30 -> cuda fp16'尽量减少30,越少越快。

8GB的显卡用什么模型?建议7B模型,'cuda fp16i8 *30 -> cuda fp16'尽量减少30,越少越快。

运行方式

执行如下命令,激活ChatRWKV的Codna环境。

conda activate D:\openai.wiki\ChatRWKV\MyENV

打开CMD命令行,执行如下命令进入ChatRWKV的v2目录:

cd /d D:\openai.wiki\ChatRWKV\v2

执行如下命令,启动chat.py

python chat.py

根据提示操作,建议先试试下列指令(不建议和机器人聊天,因为机器人没学过中文聊天):

【注意前面有 +gen,注意是 \n 不是 \\n】
+gen 这是一颗
+gen 以下是不朽的科幻史诗长篇巨著,描写细腻,刻画了数百位个性鲜明的英雄和宏大的星际文明战争。\n第一章
+gen 这是一个修真世界,详细世界设定如下:\n1.

另外在 api_demo.py 有代码调用 RWKV 的方法,几行代码就能调用RWKV。

os.environ["RWKV_JIT_ON"] = '1'
from rwkv.model import RWKV                         # everything in /v2/rwkv folder
model = RWKV(model='/fsx/BlinkDL/HF-MODEL/rwkv-4-pile-1b5/RWKV-4-Pile-1B5-20220903-8040', strategy='cuda fp16')

out, state = model.forward([187, 510, 1563, 310, 247], None)   # use 20B_tokenizer.json
print(out.detach().cpu().numpy())                   # get logits
out, state = model.forward([187, 510], None)
out, state = model.forward([1563], state)           # RNN has state (use deepcopy if you want to clone it)
out, state = model.forward([310, 247], state)
print(out.detach().cpu().numpy())                   # same result as above

网文模型testNovel,指令如下:

+gen 这是一颗
+gen 以下是不朽的科幻史诗长篇巨著,描写细腻,刻画了数百位个性鲜明的英雄和宏大的星际文明战争,情节曲折离奇,充满悬疑氛围,草蛇灰线,当谜底揭开,时而令人惊为天人,时而令人扼腕叹息。\n第一章
+gen 这是一个修真世界,详细世界设定如下:\n1.

问答模型test4,指令如下:

+gen \n活动出席发言稿:\n大家好,
+gen \n怎样创立一家快速盈利的AI公司:\n1.
+gen 二向箔是一种超级武器,它的原理是
+gen 我抬头一看,竟然是
+gen import torch
【这些多试几次】
+qq 请以《我的驴》为题写一篇作文
+qq 请以《企鹅》为题写一首诗歌
+qq 请设定一个奇幻世界,告诉我详细的世界设定。
【问答咒语】
+gen \nExpert Questions & Helpful Answers\nAsk Research Experts\nQuestion:\n猫会编程吗?\n\nFull Answer:\n
+gen \nAsk Expert\n\nQuestion:\n猫会编程吗?\n\nExpert Full Answer:\n
【使用+qa需要在chat.py设置QA_PROMPT=True然后才能看到内容丰富的长回答】
+qa 奶茶好喝吗?
+qa 猫喜欢做什么?
+qa How can I learn Python?
+qa 猫会编程吗?
+qa 知乎大V有哪些特点?

此文章由OpenAI开源维基百科原创发布,如若转载请注明出处:https://openai.wiki/chatrwkv.html

(0)
上一篇 2023-04-03 19:27
下一篇 2023-04-05 23:43

相关推荐

  • ChatGLM-6B|开源本地化语言模型

    ChatGLM-6B是一种开源的、支持中英双语的对话语言模型,具有62亿参数。它使用了GLM架构和量化技术,可在消费级显卡上进行本地部署。该模型为清华开源模型,效果堪比ChatGPT。

    2023-04-01
    0647.9K
  • Text-Generation-WebUI|通用语言模型加载工具

    oobabooga的text-generation-webui可以用来启动、加载、管理几乎所有主流的开源语言模型,并且提供WebUI界面,支持加载LLaMA2和其它羊驼类微调模型训练和LoRA的加载。

    2023-07-21
    0104.2K
  • SkyChat

    SkyChat是由昆仑万维所公开的开源AIGC全系列算法与模型,“昆仑天工”旗下模型包括天工巧汇、天工乐府SkyMusic、天工妙笔、天工智码SkyCode,涵盖图像、音乐、文本、编程等多模态内容。

    其它模型 2022-12-20
    022.0K
  • ChatYuan|开源本地化语言模型

    ChatYuan-large-v2是一个轻量化的、支持中英双语的功能型对话语言大模型,是ChatYuan系列的最新开源模型,增强了模型的基础能力和数学运算能力,新增了拒答、代码生成和表格生成等新功能。

    2023-04-01
    042.4K
  • GPT4All-UI|对话机器人

    基于Flask Web应用程序的聊天界面,可与基于llamacpp的聊天机器人(如GPT4all、vicuna等)进行交互。使用Nomic-AI高级库与GPT4all模型进行通信,确保无缝高效的通信。

    2023-04-16
    032.8K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(10条)

  • Shark
    Shark 2023-04-18 23:03

    那个RWKV的模型不需要把整个目录里所有的模型都下载回去,只需要下载其中一个就可以用,否则你再多硬盘都不够用,开发者说了,后续还会有20B,130B的模型。
    单个模型大小如下:
    1.5B:6.06G
    3B:5.97G
    7B:14.8G
    14B:28.3G

    • PhiltreX
      PhiltreX 2023-04-19 19:57

      @Shark不是的,你指的是单个功能模型,但如果即想包含对话+网文+中文+英文,那就体积巨大啦。

    • Shark
      Shark 2023-04-21 20:38

      @PhiltreX你用的时候肯定是一次加载一个单功能模型,不可能同时把所有功能都加一起,除非它一开始训练的时候就按照全功能去投喂语料,正常用有一个模型就够了,而且它那个模型目录里有不少旧模型,后面提供了最新版就不需要旧的了。按照开发者的分类,主要有三个维度:
      1 对话类(包括编程),这个是Raven系列;
      2 网文生成,这是是novel系列;
      3 中英日文,这个通过百分比来区分。
      理论上,每个规模下载4~6个最新训练出来的模型就差不多够用了。

    • PhiltreX
      PhiltreX 2023-04-22 15:38

      @Shark你说的很对,的确是这样,加载模型的时候肯定是加载一个就好了,但是我如果要把这些模型分享给大家,那就需要批量下载所有模型到本地,因为我不知道大家需要哪个模型。然后上传到网盘内,可是最后那个模型实在太大了。

  • vci
    vci 2023-05-04 17:44

    报错:RuntimeError: probability tensor contains either `inf`, `nan` or element < 0
    有人遇到过吗?模型是pickle文件,会不会是我的组件版本不一致啊。我用的torch-1.13.1+cu117和torch-2.0.0+cu117都报这个错。

    • PhiltreX
      PhiltreX 2023-05-04 18:15

      @vci这个问题还真没遇到过,可能是模型问题吧,你删除模型重新下载一下。

    • vci
      vci 2023-05-05 09:08

      @PhiltreX已解决,作者开头说了。Use RWKV-4 models (NOT RWKV-4a, NOT RWKV-4b) unless you know what you are doing.
      换一个模型就解决了。不要用-4a或者-4b字眼的。

  • 侯
    2023-05-07 23:17

    大哥我有几个问题需要详细的问一下 能不能留个联系方式

  • NSG
    NSG 2023-07-24 10:15

    楼主,1.5B就28G,达到其他模型6B、7B水平,它的优势是什么,可以分析给大家听吗?谢谢

微信