RWKV-Development-Tools 是一个面向RWKV模型的研究平台。
✅ 提供多种可视化工具,满足语言建模等任务下的研究、使用需求。
✅ 完善的类RNN模型历史管理工具。
✅ 提供OpenAI API协议的对话接口的前端用于测试各种模型(需提供API Key)。
✅ 一套工作流允许用户快速将对话历史送入模型sft,或是打标签后强化学习。
✅ 提供多智能体框架,支持在线学习。
✅ 支持 RWKV V7
✅ GRPO强化学习的支持
✅ 一个多智能体的框架, Ourborous,以及它的前端界面。
✅ 翻新后端服务,并支持批量推理。
⏳ 项目文档。
⏳ 开源一个reward model,嗯,有空整理代码就开源。
⏳ 接入mcp和blackfog
⏳ 端到端多模态训练与推理。
创建虚拟环境:
conda create [你的后端环境名] python=3.11.3
conda create [你的前端环境名] python=3.11.3安装后端依赖:
conda activate [你的后端环境名]
pip install -r requirements_backend.txt安装前端与智能体工具依赖:
conda activate [你的前端与智能体工具环境名]
pip install -r requirements_frontend_and_tools.txt
conda install -c conda-forge opencc请勿将前后端依赖装在一起,它们会互相冲突!
调整.configs/config2.0.json中的路径依赖
开启推理服务:
conda activate [你的后端环境名]
python inference_service.py开启训练服务(可选):
conda activate [你的后端环境名]
deepspeed --num_gpus 1 train_api.py启动webui:
conda activate [你的前端环境名]
python playground_webui.py建议使用http://127.0.0.1:7860/?__theme=dark 而不是 http://127.0.0.1:7860/ 启动webui。
-
前往huggingface下载最新的rwkv模型, 或者使用本项目提供的示例微调模型rwkv-ruri-3b。
-
聊天
- 将模型文件下载至某目录下,并将
.configs/config2_0.json中的ckpt_dir改为该目录。 - 将
.configs/config2_0.json中infer_service_config字段的load_model改为模型路径。 - 将
.configs/config2_0.json中infer_service_config字段的device改为你需要的GPU编号。 - 开启推理服务和webui,即可聊天。
- 将模型文件下载至某目录下,并将
-
标注
- 聊天时,点击
保存生成历史(强化学习),然后切换至标注,即可在下拉菜单中选择保存的历史记录。可以为每次重新生成的选项记录score和safety标签,或者确认最佳选项。
- 聊天时,点击
-
训练
- 聊天时,点击
保存数据集即可将当前聊天历史保存为数据集。 - 将
.configs/config2_0.json中train_service_config字段的device改为你需要的GPU编号。 - 将数据集整理成数据文件夹后,切换至
训练,键入该文件夹地址后,点击开始训练即可尝试微调。 - 训练前,需要开启训练服务。
- 聊天时,点击
目前依赖cuda算子运行。
| 训练模式 | 模型规模 | 内存消耗 | 显存消耗 | batch_size |
|---|---|---|---|---|
| 全量训练 | 3B (ds stage2 offload) | 64GB | 12GB | 1 |
| 7B (ds stage2 offload) | 256GB | 24GB | 1 | |
| 14B | >320GB | >48GB | 1 | |
| 低秩训练 | 3B (ds stage1) | 64GB | 12GB | 4 |
| 7B (ds stage1) | 64GB | 24GB | 4 | |
| 14B | >128GB | >24GB | 4 |
RWKV-Development-Tools会以桶索引的方式处理并读取数据集。
目前支持四种数据集类型。
➡️ txt文本数据集
txt文件数据集是一个没有任何格式需求的txt文件,在tokenize时,系统会自动在txt的末尾加上eod (0号token)。
目前请不要使用太大的文件,会对创建索引的速度产生影响。
➡️ RWKV风格数据集
RWKV风格数据集是一个jsonl文件,其每一行格式如:
{"text": 数据内容}
- 系统会自动在每一行的末尾加上eod。
- 为避免单个文件的行数太多。建议将行数过多 (>10000)或单行字数过多的数据保存为多个文件。
数据集例:
{"text": "这是一段文本\n\nuser: 文本中说了什么?\n\nassistant: 文本中说了xxx\n\n"}
➡️ ourborous V1风格数据集
ourborous风格数据集可以十分简洁地管理special tokens,每一行格式如:
{"data": [{sp_token_role: content}, {sp_token_role: content}]}
- 其中:
sp_token_role: 字符串,用来决定special tokens的角色标签,常用的标签有conversations(非bot发言),responsebot发言),think思考)等。
content: 字符串,完整对话内容,例如"assistant: 是的。" - 请不要与一般的OPENAI协议对话数据集混淆!
content中应包含说话人的前缀字符,例如assistant:
数据集例:
{"data": [{"conversation": "user: 你好"}, {"response": "assistant: 你好。"}]}
➡️ ourborous V2风格数据集
ourborous-V2风格数据集用于管理更加复杂的数据形式,每一行格式如:
{"data_dict_list": [{"role":sp_token_role, "content": content}, {"role": sp_token_role, "content": content}]}
- 数据集例:
{"data_dict_list": [{"role":"conversation", "content":"user: 你好"}, {"role": "response", "content":"assistant: <-voice->", "voice":"/home/你好.wav"}]}
请将以上数据集准备好,放入一个数据文件夹内
数据文件夹结构如:
-- 数据文件夹名字
-- 数据子文件夹名字1
-- 数据文件1.txt
-- 数据文件114514.jsonl
-- 任意数据文件名.jsonl
-- 数据子文件夹名字2
-- 数据文件.jsonl
-- ...
- 数据文件夹内的所有子文件会被遍历读取。在第一次读取时,系统将自动在最外层文件夹内生成索引,包括:
in_line_indices文件夹、dataset_metadata.json和idx.index。 - 目前暂不支持动态检验并更改这些索引,如果调整了数据集内部结构,请删除这些文件。
- 另外,如果数据集很大,第一次读取数据文件夹可能较慢。
webui仅支持单gpu训练,如果想要使用多gpu训练,请使用预训练工具。
预训练的配置位于pretrain_script_config字段。请调整需要的配置,尤其是正确的dataset_folder。
deepspeed --num_gpus [需要gpu数量] pre_train.py或者
deepspeed --include localhost: [gpu编号列表] pre_train.py