了解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 模型,并进行各种任务,包括聊天、文本生成、翻译和问答。
功能预览
聊天功能
与模型对话,聊天或提出问题让模型回答。
续写功能
使 RWKV 模型根据你给定的内容进行续写。
也可以使用特定格式的 prompt ,让模型遵循某种指令执行任务。具体的 prompt 实现请参阅:https://shoumenchougou.github.io/Awesome-RWKV-Prompts/#/Writer-Prompts
写论文
从给定的论文标题生成论文提纲,再根据提纲生成论文内容。
快速上手
下载与安装
对于新手来说,我们建议直接从 Ai00 Server 的 Release 页面下载最新版本。
在每个版本发布的 Assets 版块可以找到已经打包好的 Ai00 Server 压缩包,下载并解压即可使用。
下载/转换 RWKV 模型
Ai00 Server 目前仅支持 .st
后缀的 Safetensors 模型,有两种方法可以得到 .st
模型:
1. 下载已经转换好的 .st
模型(推荐方式)
-
RWKV-5 系列:https://huggingface.co/cgisky/AI00_RWKV_V5/tree/main
-
RWKV-6 系列:https://huggingface.co/cgisky/ai00_rwkv_x060/tree/main
如果你无法访问上面的网站,请访问以下镜像站:
-
RWKV-5 系列:https://hf-mirror.com/cgisky/AI00_RWKV_V5/tree/main
-
RWKV-6 系列:https://hf-mirror.com/cgisky/ai00_rwkv_x060/tree/main
2. 下载 .pth
后缀模型,并通过工具转换成 .st
模型
首先,可以从 RWKV 官方仓库中下载 .pth
后缀的 RWKV 模型,下载地址:
-
RWKV-5 系列:https://huggingface.co/BlinkDL/rwkv-5-world/tree/main
-
RWKV-6 系列:https://huggingface.co/BlinkDL/rwkv-6-world/tree/main
如果你无法访问上面的网站,请访问以下镜像站:
-
RWKV-5 系列:https://hf-mirror.com/BlinkDL/rwkv-5-world/tree/main
-
RWKV-6 系列:https://hf-mirror.com/BlinkDL/rwkv-6-world/tree/main
下载完成后,应该可以在文件夹中找到
.pth
模型:
在 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
提示时,意味着模型已经加载完成:
此时我们打开任意浏览器,并访问 https://localhost:65530
,即可打开 Ai00 的 Web 界面。
调整右侧解码参数
Web 页面的右侧有一些可设置的模型解码参数,如 Temperature
、Top_P
、Presence Penalty
和 Frequency Penalty
,调整这些参数会影响模型的生成效果。
参数对应的效果如下:
API 参数 | 效果描述 |
---|---|
Temperature | 采样温度,就像给模型喝酒,数值越大随机性越强,更具创造力,数值越小则越保守稳定。 |
Top_P | 就像给模型喂镇静剂,优先考虑前 n% 概率质量的结果。如设置成 0.1 则考虑前 10%,生成内容质量更高但更保守。如设置成 1,则考虑所有质量结果,质量降低但更多样。 |
Presence Penalty | 存在惩罚,正值根据“新 token 在至今的文本中是否出现过”来对其进行惩罚,从而增加了模型涉及新话题的可能性。 |
Frequency Penalty | 频率惩罚,正值根据“新 token 在至今的文本中出现的频率/次数”来对其进行惩罚,从而减少模型原封不动地重复相同句子的可能性。 |
其中 Temperature
和 Top_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_P
、Presence Penalty
、Frequency Penalty
都设为 0 。
进阶功能
除了驱动 RWKV 模型进行对话、续写之外,Ai00 还有许多进阶功能。
你可以在 Ai00 发布新版本的时候回到本页面,以查看 Ai00 的最新功能。
挂载 State 文件 [版本 0.4.9]
挂载 State 文件可以强化模型在某一类任务的表现。以一个强化单轮问答 + emoji 的 State 为例,同样都是“东京到巴黎怎么走”这个问题,模型在挂载该 State 前后的回答画风完全不同:
不挂载 State 文件:
挂载“强化单轮中文对话 + Emoji ”的 State 文件后:
下载 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 0.5.0 版本,支持在 WebUI-聊天模式右上方动态切换 State,但不支持同时挂载多个 State 。
挂载 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 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"
以 prefab 格式导出量化模型[版本 0.4.9]
在 Ai00 的 WebUI - Setting 界面,可以以 prefab 格式导出量化后的 RWKV 模型。
什么是 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
A:这是因为设备缺少 vulkan 驱动,请安装最新版本驱动。
Q:AI00 支持 CUDA 驱动吗?
A:不支持。AI00 支持 Vulkan 作为推理后端,曾经支持 Dx12/openGL ,但不支持 CUDA 驱动。
Q:为什么我使用共享显存后感觉速度变慢了
A:一旦用了共享显存,运行速度会慢 20 倍。这是计算机硬件的工作原理,并非 bug。
倘若大家遇到其他问题,欢迎加入 RWKV QQ 群 224287095 或 Ai00 QQ 群 30920262 提问。