MiSS 微调教程
MiSS 微调是什么?
MiSS 微调(Matrix Shard Sharing)是一种新颖的参数高效微调方法(PEFT,Parameter-Efficient Fine-Tuning),该方法使用一个初始值为零的共享可训练矩阵 来更新原始权重矩阵的各个分片。
MiSS 通过让权重分片共享一个可训练矩阵来减少可训练参数;实际效果和资源占用仍取决于模型、数据集与训练配置。

本文的 MiSS 微调方法来自 RWKV 社区微调项目 RWKV-PEFT。
在开始 MiSS 微调之前,请确保你拥有一个 Linux 工作区,以及支持 CUDA 的 NVIDIA 显卡。
MiSS 微调案例
- Seikaijyu/rwkv7-g1-1.5b-Lonely-Neko:基于 RWKV7-G1 1.5B 模型微调的猫娘模型,拥有较为优秀的单角色扮演能力
- keepzmy/RWKV-V7-Soothe:基于 RWKV7-G1 2.9B 模型微调的心理咨询师模型
视频教程
高画质视频请跳转到 B 站观看。
MiSS 微调显存参考
RWKV MiSS 微调的显存(GPU VRAM)需求可参考下表:
| 模型参数 | bf16 | int8 | nf4 |
|---|---|---|---|
| RWKV7-0.1B | 2.7GB GPU | 2.5GB GPU | 2.4GB GPU |
| RWKV7-0.4B | 3.1GB GPU | 2.9GB GPU | 2.7GB GPU |
| RWKV7-1.5B | 5.6GB GPU | 4.5GB GPU | 3.9GB GPU |
| RWKV7-2.9B | 8.8GB GPU | 6.7GB GPU | 5.7GB GPU |
| 模型参数 | bf16 | int8 | nf4 |
|---|---|---|---|
| RWKV-6-1.6B | 7.3GB GPU | 5.9GB GPU | 5.4GB GPU |
| RWKV-6-3B | 11.8GB GPU | 9.4GB GPU | 8.1GB GPU |
| RWKV-6-7B | 23.7GB GPU | 17.3GB GPU | 14.9GB GPU |
上表的数据基于以下训练参数:
- ctxlen=1024
- micro_bsz=1
- strategy=deepspeed_stage_1
- peft_config='{"r":64}'
随着训练参数的变更,RWKV MiSS 微调所需显存会发生改变。
收集训练数据
MiSS 支持直接读取 JSONL 数据,也可以使用转换后的 binidx 数据,具体格式和准备方法可参考准备微调数据集。
配置训练环境
请参考RWKV 微调环境配置板块,配置 Conda 等训练环境。
克隆仓库并安装依赖
在 Linux 或 WSL 中,使用 git 命令克隆 RWKV-PEFT 仓库:
git clone https://github.com/Joluck/RWKV-PEFT.git
# 如果 GitHub 无法链接,请使用以下国内仓库:
git clone https://gitee.com/rwkv-vibe/RWKV-PEFT.git克隆完成后,使用 cd RWKV-PEFT 命令进入 RWKV-PEFT 目录。并运行以下命令,安装项目所需依赖:
pip install .修改训练参数
使用任意文本编辑器(如 vscode)打开 RWKV-PEFT/scripts 目录下的 miss.sh 文件,可以修改训练参数,进而控制微调的训练过程和训练效果:

以下是一次 MiSS 微调的调参过程:
调整路径参数
miss.sh 文件前三行是文件路径参数:
- load_model: 基底 RWKV 模型的路径
- proj_dir:训练日志和训练得到的 MiSS 文件输出路径
- data_file:训练数据集的路径。使用
jsonl时需要填写包含.jsonl后缀的文件路径;使用binidx时填写数据文件前缀,不带.bin和.idx后缀。
调整 n_layer 和 n_embd 参数
不同参数的 RWKV 模型,训练时使用的 n_layer 和 n_embd 数值不一样
以下是 RWKV 模型参数对应的 n_layer/n_embd 值:
| 模型参数 | n_layer | n_embd |
|---|---|---|
| 0.1B | 12 | 768 |
| 0.4B | 24 | 1024 |
| 1.5B | 24 | 2048 |
| 3B | 32 | 2560 |
| 7B | 32 | 4096 |
| 14B | 61 | 4096 |
调整重要训练参数
| 参数 | 描述 |
|---|---|
micro_bsz=1 | 微批次大小,根据显存大小调整,微调时从 1 开始逐渐增大 |
epoch_save=5 | 每隔多少个训练轮次保存一次 MiSS 文件,注意存储空间是否充足 |
epoch_steps=1200 | 每个训练轮次的步数,增加会延长单个 epoch 的训练时间 |
ctx_len=512 | 微调模型的上下文长度,建议根据语料长度修改 |
peft_config='{"r":8}' | MiSS 微调的 rank 参数;上游 miss.sh 当前使用 r=8,增大 rank 通常会增加可训练参数和显存占用,实际取值需要结合任务测试 |
调整其他训练参数
下面列出了脚本中其他可修改的训练参数,及其修改的效果。
| 参数 | 描述 |
|---|---|
--vocab_size 65536 | 模型词表大小,必须与基底模型一致;RWKV World 模型使用 65536 |
--data_type binidx | 训练语料的文件格式。本教程使用 jsonl 或 binidx 格式 |
--epoch_count 5 | 总训练轮次 |
--lr_init 1e-5 | 初始学习率,当前 miss.sh 使用 1e-5 |
--lr_final 1e-5 | 最终学习率,当前 miss.sh 使用 1e-5 |
--accelerator gpu | 使用的加速器类型,目前主要支持 gpu,cpu 基本不支持训练 |
--devices 1 | 显卡数量,单显卡填 1,多卡按实际数量填写 |
--precision bf16 | 训练精度;上游 miss.sh 使用 bf16,程序支持 fp32、tf32、fp16 和 bf16 |
--strategy deepspeed_stage_1 | Lightning 训练策略;上游 miss.sh 使用 deepspeed_stage_1。Stage 2/3 适用于更大的模型或全量微调,不是单纯的低显存开关 |
--grad_cp 1 | 是否启用梯度检查点;设为 1 可减少激活值占用的显存,但会增加重新计算开销,0 表示关闭 |
--my_testing "x070" | 训练的 RWKV 模型版本,v7 选 x070,v6 选 x060 ,v5 选 x052(已淘汰,不推荐) |
--peft miss | 微调训练类型,MiSS 微调填 miss 即可 |
--op | 选择 WKV 算子,支持 cuda 和 fla,默认使用 cuda;fla 使用基于 Triton 的 RWKV-FLA 算子 |
--wandb RWKV-PEFT-MiSS | 可选,是否使用 wandb 可视化记录训练日志,需提前配置 wandb 账号 |
--lr_schedule wsd | 可选,学习率调度方法,支持 cos 和 wsd,默认使用 cos |
附录:miss.sh 配置参考
load_model='/home/rwkv/models/rwkv7-g1a3-1.5b.pth'
proj_dir='/home/rwkv/roleplay_1107_g1a3_1b5_73k_miss'
data_file='/home/rwkv/roleplay_data/73k-cn-en-doubao.jsonl'
n_layer=24
n_embd=2048
micro_bsz=4
epoch_save=1
epoch_steps=1000
ctx_len=4096
peft_config='{"r":8}'
python train.py --load_model $load_model \
--proj_dir $proj_dir --data_file $data_file \
--vocab_size 65536 \
--data_type jsonl \
--n_layer $n_layer --n_embd $n_embd \
--ctx_len $ctx_len --micro_bsz $micro_bsz \
--epoch_steps $epoch_steps --epoch_count 4 --epoch_save $epoch_save \
--lr_init 1e-5 --lr_final 1e-5 \
--accelerator gpu --precision bf16 \
--devices 4 --strategy deepspeed_stage_1 --grad_cp 1 \
--my_testing "x070" \
--peft miss --peft_config $peft_config
# 以下是可选项
# --op cuda/fla (选择不同的算子,不加此参数则默认使用 cuda)
# --wandb RWKV-PEFT-MiSS (是否使用 wandb 监控训练过程)
# --lr_schedule wsd (使用 WSD 学习率调度,不加此参数则默认使用 cos)参数调整完成后,请记得保存 miss.sh 文件。
开始训练
在 RWKV-PEFT 目录,运行 sh scripts/miss.sh 命令,开启 MiSS 微调 。
正常开始训练后,应当是如下画面:

如何使用 MiSS 微调模型
训练完毕后,应当可以在输出文件夹中找到完整的 MiSS 权重文件(.pth 格式)和训练日志(.txt 文件):

合并后的 MiSS 模型可以在 RWKV Runner 或者 Ai00 中正常使用。将微调模型放到 RWKV Runner 的 models 文件夹,然后新建配置,选择微调模型即可。
更多详细用法请参考 RWKV Runner 教程 和 Ai00 教程。

