RWKV 模型本地部署工具 Ai00 Server 保姆级教程

了解Ai00

简介

Ai00 Server 是基于 web-rwkv 推理引擎的 RWKV 语言模型推理 API 服务器。它本身也是一个基于 MIT 协议的开源软件,由 RWKV 开源社区成员 @cryscan@顾真牛牵头成立的 Ai00-x 开发组开发。

Ai00 Server 支持 Vulkan 作为推理后端,支持 Vulkan 并行和并发批量推理,可以在所有支持 Vulkan 的 GPU 上运行。事实上, Ai00 Server 支持大部分 NVIDIA、AMD、Intel 的显卡(包括集成显卡)。

在高兼容性的同时,Ai00 Server 又不需要笨重的 pytorch 、 CUDA 和其他运行时环境。它结构紧凑,开箱即用,且支持 INT8/NF4 量化,可以在绝大部分的个人电脑上高速运行。

Ai00 Server 仓库地址:https://github.com/Ai00-X/ai00_server

这篇新手教程旨在为一些刚接触 RWKV 大模型和 Ai00 Server 的朋友们提供指引。遵循本文的步骤,应该可以成功使用 Ai00 Server 本地运行 RWKV 模型,并进行各种任务,包括聊天、文本生成、翻译和问答。

功能预览

聊天功能

与模型对话,聊天或提出问题让模型回答。

chat_en.gif

续写功能

使 RWKV 模型根据你给定的内容进行续写。

continuation_en.gif

也可以使用特定格式的 prompt ,让模型遵循某种指令执行任务。具体的 prompt 实现请参阅:https://shoumenchougou.github.io/Awesome-RWKV-Prompts/#/Writer-Prompts

写论文

从给定的论文标题生成论文提纲,再根据提纲生成论文内容。

paper_en.gif

快速上手

下载与安装

对于新手来说,我们建议直接从 Ai00 Server 的 Release 页面下载最新版本。

在每个版本发布的 Assets 版块可以找到已经打包好的 Ai00 Server 压缩包,下载并解压即可使用。

ai00-download.png

下载/转换 RWKV 模型

Ai00 Server 目前仅支持 .st 后缀的 Safetensors 模型,有两种方法可以得到 .st 模型:

1. 下载已经转换好的 .st 模型(推荐方式)

如果你无法访问上面的网站,请访问以下镜像站:

2. 下载 .pth 后缀模型,并通过工具转换成 .st 模型

首先,可以从 RWKV 官方仓库中下载 .pth 后缀的 RWKV 模型,下载地址:

如果你无法访问上面的网站,请访问以下镜像站:

下载完成后,应该可以在文件夹中找到 .pth 模型:

ai00-model-list.png

在 Ai00 Server 解压的文件夹中,可以找到名为 “converter.exe” 的模型转换工具。在命令行中执行以下命令,可以将指定路径的 .pth 模型转化成 .st 模型:

$ ./converter --input /path/to/model.pth

请将上述命令中的 /path/to/model.pth 改成需要转换的模型文件路径。

获得 .st 后缀的 RWKV 模型后,我们需要在 assets 文件夹中新建一个 models 文件夹,并将 RWKV 模型放在此文件夹中。

调整配置参数

Ai00 程序会按照 assets/configs/Config.toml 配置文件中的参数运行 RWKV 模型。可以通过文本编辑软件(如记事本等)修改 Config.toml 的配置项,调整模型的运行效果。

下面是一组推荐的 Config.toml 配置。

注意:带中文标注的配置项可以尝试更改,其他英文标注的配置项不建议自行更改,除非你了解其具体作用。

[model]
embed_device = "Cpu"                                 # 在GPU还是CPU上放模型的Embed矩阵 ("Cpu" or "Gpu").
max_batch = 8                                        # The maximum batches that are cached on GPU.
name = "RWKV-x060-World-3B-v2.1-20240417-ctx4096.st" # 模型名称,只支持后缀st格式模型,请自己在RWKV程序中转换好,或者直接下载转换好的模型
path = "assets/models"                               # 模型路径
precision = "Fp16"                                   # Precision for intermediate tensors ("Fp16" or "Fp32"). "Fp32" yields better outputs but slower.
quant = 0                                            # 量化层数,调高会降低内存占用,但可能损失精度,调整范围尽量控制在28以内
quant_type = "Int8"                                  # 量化类型 ("Int8" or "NF4"),Int 8 效果比 NF4 好,但需要更多显存
stop = ["\n\n"]                                      # Additional stop words in generation.
token_chunk_size = 128                               # 并行Token块大小,范围32-128,显卡越牛逼这个数调越大(64 or 128)

# [[state]] # 是否挂载 state
# default = true  # 启动 Ai00 时是否加载 state 文件
# id = "fd7a60ed-7807-449f-8256-bccae3246222"   #  state 文件的 UUID,不指定则随机分配 
# name = "x060-3B" # 是否为此 state 文件命名(可选项)
# path = "rwkv-x060-chn_single_round_qa-3B-20240505-ctx1024.state" # state 文件的路径

# [[state]] # 是否挂载第二个 state 文件
# default = false     # 启动 Ai00 时是否加载第二个 state 文件
# id = "6a9c60a4-0f4c-40b1-a31f-987f73e20315"    # state 文件的 UUID,不指定则随机分配 
# path = "rwkv-x060-chn_single_round_qa-3B-20240502-ctx1024.state" # state 文件的路径

# [[lora]] # 是否默认启用 LoRA 
# alpha = 192
# path = "assets/models/rwkv-x060-3b.lora" # LoRA 文件的路径

[tokenizer]
path = "assets/tokenizer/rwkv_vocab_v20230424.json" # Path to the tokenizer.

[bnf]
enable_bytes_cache = true   # Enable the cache that accelerates the expansion of certain short schemas.
start_nonterminal = "start" # The initial nonterminal of the BNF schemas.

[adapter]
Auto = {} # Choose the best GPU.
# Manual = 0 # Manually specify which GPU to use.

[listen]
acme = false
domain = "local"
ip = "0.0.0.0"   # IPv4 地址
# ip = "::"        # Use IpV6.
force_pass = true
port = 65530
slot = "permisionkey"
tls = true      # 是否使用 https ,如果你只在本地体验 AI00 请设置为 false

[[listen.app_keys]] # Allow mutiple app keys.
app_id = "JUSTAISERVER"
secret_key = "JUSTSECRET_KEY"

[web] # Remove this to disable WebUI.
path = "assets/www/index.zip" # Path to the WebUI.

运行 Ai00 程序

配置项修改完毕后,请保存 Config.toml 文件,并双击运行 ai00_server.exe 程序。

当命令行中出现 INFO [ai00_server::middleware] model reloaded 提示时,意味着模型已经加载完成:

ai00-model-reloaded.png
此时我们打开任意浏览器,并访问 https://localhost:65530,即可打开 Ai00 的 Web 界面。

Ai00-homepage.png

调整右侧解码参数

Web 页面的右侧有一些可设置的模型解码参数,如 TemperatureTop_PPresence PenaltyFrequency Penalty ,调整这些参数会影响模型的生成效果。

参数对应的效果如下:

API 参数效果描述
Temperature采样温度,就像给模型喝酒,数值越大随机性越强,更具创造力,数值越小则越保守稳定。
Top_P就像给模型喂镇静剂,优先考虑前 n% 概率质量的结果。如设置成 0.1 则考虑前 10%,生成内容质量更高但更保守。如设置成 1,则考虑所有质量结果,质量降低但更多样。
Presence Penalty存在惩罚,正值根据“新 token 在至今的文本中是否出现过”来对其进行惩罚,从而增加了模型涉及新话题的可能性。
Frequency Penalty频率惩罚,正值根据“新 token 在至今的文本中出现的频率/次数”来对其进行惩罚,从而减少模型原封不动地重复相同句子的可能性。

其中 TemperatureTop_P 两个参数对模型生成效果的影响最大。

参数推荐

续写小说和对话这一类需要创造性的任务,需要高 Temperature + 低 Top_P 的参数组合,可以尝试以下四种参数搭配:

Temperature 1.2 ,Top_P 0.5

Temperature 1.4 ,Top_P 0.4

Temperature 1.4 ,Top_P 0.3

Temperature 2 ,Top_P 0.2

举个例子,续写小说可以尝试将 Temperature 设为 2 ( Temperature 增加会提高文采,但逻辑会下降),然后将 Top_P 设为 0.1 ~ 0.2 (Top_P 越低,逻辑能力越强),这样生成的小说内容逻辑和文采都很好。
完成相对机械的任务,例如材料问答、文章摘要等,则可将参数设为:

Temperature 1 ,Top_P 0.2

Temperature 1 ,Top_P 0.1

Temperature 1 ,Top_P 0

举个例子,如果你正在执行像关键词提取之类的机械任务,不需要模型进行任何开放性思考,则可以将 Temperature 设为 1 ,Top_PPresence PenaltyFrequency Penalty 都设为 0 。

进阶功能

除了驱动 RWKV 模型进行对话、续写之外,Ai00 还有许多进阶功能。

你可以在 Ai00 发布新版本的时候回到本页面,以查看 Ai00 的最新功能。

挂载 State 文件 [版本 0.4.9]

挂载 State 文件可以强化模型在某一类任务的表现。以一个强化单轮问答 + emoji 的 State 为例,同样都是“东京到巴黎怎么走”这个问题,模型在挂载该 State 前后的回答画风完全不同:

不挂载 State 文件:

ai00-answer-without-state.png
挂载“强化单轮中文对话 + Emoji ”的 State 文件后:

ai00-answer-with-state.png

下载 State 文件

Ai00 Server 目前仅支持 .state 后缀的 State 文件,可以从 HF 仓库下载 .state 文件。

如果你无法访问上面的网站,请访问 HF 镜像站

如何挂载 State ?

Config.toml 配置文件中修改关于挂载 State 的参数:

# [[state]] # 是否挂载 state
# id = "fd7a60ed-7807-449f-8256-bccae3246222"   #  state 文件的 UUID,不指定则随机分配 
# name = "x060-3B" # 是否为此 state 文件命名(可选项)
# path = "rwkv-x060-chn_single_round_qa-3B-20240505-ctx1024.state" # state 文件的路径

要启用 State 挂载功能,请移除 # 注释符号,并修改对应的参数。参考如下:

[[state]] # 是否挂载 state
# id = "fd7a60ed-7807-449f-8256-bccae3246222"   # 非开发环境一般不指定 UUID,可保留 `#` 注释符
name = "x060-7B-Chinese"  # 为此 state 文件命名为“x060-7B-Chinese”
path = "rwkv-x060-chn_single_round_qa-7B-20240516-ctx2048.state" # state 文件的名称,存放在 `model` 文件夹

挂载 State 注意事项

注意:挂载 state 文件时,必须使用与 State 文件参数一致的基底 RWKV 模型。

举个例子:这个 State 文件是基于 RWKV-6-World-7B 模型微调而来,那么你在 Ai00 中必须启动 RWKV-6-World-7B 模型,挂载的 State 文件才会生效。

ai00-state-file-usage.png

截至 Ai00 0.5.0 版本,支持在 WebUI-聊天模式右上方动态切换 State,但不支持同时挂载多个 State 。

ai00-change-state.png


挂载 LoRA 模型 [版本 0.4.9]

挂载 LoRA 模型和 State 的效果相似,也可以增强模型在某类任务上的表现。

如何挂载 LoRA 模型 ?

可以在 Config.toml 文件配置中修改挂载 LoRA 模型的参数:

# [[lora]] # 是否默认启用 LoRA 
# alpha = 192
# path = "assets/models/rwkv-x060-3b.lora" # LoRA 文件的路径

要启用 LoRA 挂载功能,请移除 # 注释符号,并修改对应的参数。参考如下:

[[lora]] # 默认启用 LoRA 
# alpha = 192
path = "assets/models/rwkv-x060-3b.lora" # LoRA 文件的路径

挂载 LoRA 模型注意事项

与挂载 state 相似,挂载 LoRA 文件时,必须使用与 LoRA 模型参数一致的基底 RWKV 模型。

举个例子:这个 LoRA 文件是基于 RWKV-6-World-3B 模型微调而来,那么你在 Ai00 中必须启动 RWKV-6-World-3B 模型,挂载的 LoRA 模型才会生效。

ai00-LoRA-file-usage.png

截至 Ai00 0.5.0 版本,支持在 WebUI 中同时加载多个 LoRA ,但不支持在 WebUI 中动态切换 LoRA。

这意味着想要取消 LoRA ,必须重启 Ai00 服务。


BNF (Backus-Naur Form) [版本 0.4.9]

BNF 可以强制模型以您想要的格式输出(例如,JSON、带有指定字段的 markdown)。

以下是一个 JSON 的 BNF 示例,其中包含字段 name 和 age :

<start> ::= <json_object>
<json_object> ::= "{" <object_members> "}"
<object_members> ::= <json_member> | <json_member> ", " <object_members>
<json_member> ::= <json_key> ": " <json_value>
<json_key> ::= '"' "name" '"' | '"' "age" '"' | '"' "job" '"'
<json_value> ::= <json_string> | <json_number>
<json_string>::='"'<content>'"'
<content>::=<except!([escaped_literals])>|<except!([escaped_literals])><content>|'\\"'<content>|'\\"'
<escaped_literals>::='\t'|'\n'|'\r'|'"'
<json_number> ::= <positive_digit><digits>|'0'
<digits>::=<digit>|<digit><digits>
<digit>::='0'|<positive_digit>
<positive_digit>::="1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"

ai00-bnf.png


以 prefab 格式导出量化模型[版本 0.4.9]

在 Ai00 的 WebUI - Setting 界面,可以以 prefab 格式导出量化后的 RWKV 模型。

ai00-prefab-export.png

什么是 prefab 格式?prefab 格式的 RWKV 模型有什么用?

Prefab(预制件)通常是指在游戏开发中使用的一种资源格式,Prefab 允许开发者创建、保存和复用游戏对象(GameObject)及其组件的配置。一个Prefab可以包含任何类型的游戏对象,比如角色、道具、环境元素等,以及它们的所有属性和设置。

以 prefab 格式导出 RWKV 模型,可以方便地将 RWKV 模型集成到游戏中,比如用于对话系统、故事生成或者角色行为。

常见问题

Q:访问 https://localhost:65530 加载失败

A:如果你在 Config.toml 设置了 tls = false ,则需要将 https 改为 http,即访问 http://localhost:65530

Q:为什么我在 config 里面把 tls=true 改成了 false,启动的时候还是把 tls 打开了?

A:如果设置了 ACME 的话,TLS 无论如何都是打开的。

Q:在自己电脑上可以成功运行,在 autodl 上报错。

A:autodl 不支持 vulkan,无法使用。

Q:为啥电脑有多张显卡时,跑 AI00 只有一张显卡在干活的感觉

A:AI00 暂时不支持多显卡推理。

Q:报错: ERROR [ai00 server::middleware] reload model failed: failed to request adaptor

Ai00-qa.png
A:这是因为设备缺少 vulkan 驱动,请安装最新版本驱动。

Q:AI00 支持 CUDA 驱动吗?

A:不支持。AI00 支持 Vulkan 作为推理后端,曾经支持 Dx12/openGL ,但不支持 CUDA 驱动。

Q:为什么我使用共享显存后感觉速度变慢了

ai00-qa1.png
A:一旦用了共享显存,运行速度会慢 20 倍。这是计算机硬件的工作原理,并非 bug。

倘若大家遇到其他问题,欢迎加入 RWKV QQ 群 224287095 或 Ai00 QQ 群 30920262 提问。

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值