RWKV
RWKV Runner 使用教程

LoRA 微调

若要微调当前 RWKV 模型,请使用 RWKV-PEFT 的 MiSS 教程

RWKV Runner 内置的 LoRA 训练功能已经过时,Runner 作者也已明确短期内不会接入 PEFT。本页仅供仍在维护旧版 Runner 训练流程的用户参考。

LORA(Low-Rank Adaptation)是一种针对大型预训练模型的微调技术。它不改变原始模型大部分参数,而是仅通过引入两个低秩矩阵来调整模型的部分权重,以此实现对特定任务的有效优化。这种方法能够在保持模型原有泛化能力的同时,减少微调所需资源,并提高特定任务的性能。

RWKV Runner 的“训练”版块支持一键 LoRA 微调 RWKV 模型,但目前仅支持在 Windows 系统中使用 WSL 训练。

下文会引导你启用 WSL2(Windows Subsystem for Linux)并安装 Ubuntu。如果已经配置完成,可以跳过对应步骤。

LoRA 训练环境配置

在开始训练之前,我们需要先配置一次 LoRA 训练的环境。

以下步骤详细指导如何在一台新电脑上配置 RWKV Runner 的 LoRA 训练环境,请确保配置全程处于畅通的网络。

选择基底 RWKV 模型,转换训练数据

打开 RWKV Runner 的训练 - 训练参数一栏,选择你要使用的基底模型,然后点击训练按钮。

初次执行时,系统会提示你数据需要转换,点击上方的转换按钮,将训练数据转换为更适合训练的 binidx 格式。

开启 WSL ,激活 Linux 环境

再次点击训练,RWKV Runner 将会尝试开启 Windows WSL 功能,激活 Linux 环境。

runner-lora-open-WSL

此操作会要求管理员权限,你需要点击确认,并在弹出的窗口完成激活。

激活后建议重启电脑,如果之前已经开启过 WSL 功能,则可以不进行重启。

更新 WSL 版本

打开 PowerShell,依次运行:

wsl --update
wsl --set-default-version 2

第二条命令会将新安装的 Linux 发行版默认设为 WSL2。

安装并初始化 Ubuntu

再次点击训练。RWKV Runner 会检查 Windows 是否已经安装 Ubuntu。如果没有找到,Runner 会提示你进行安装。

Windows 家庭版或专业版用户点击弹窗中的安装按钮后,Microsoft Store 会打开 Ubuntu 的安装页面。点击安装,完成后再点击打开,让 Ubuntu 执行初始化配置。

alt text

runner-lora-install-ubuntu2

服务器版 Windows 通常没有 Microsoft Store,请按照 Microsoft 的 WSL 手动安装说明 安装 Ubuntu,然后返回 Runner。

为 Ubuntu 配置训练环境

继续点击训练按钮,现在将会为 Ubuntu 配置训练环境。在这个阶段,RWKV Runner 界面将会出现一系列命令文本,并下载多个组件。

此阶段请保证你的网络畅通:

runner-lora-install-ev

Ubuntu 训练环境只需要配置一次。

开始 LoRA 训练

在环境配置完毕后,RWKV Runner 将自动开始训练,当你见到这个图形化 Loss 曲线时,意味着训练已正式开始。

alt text

合并训练权重

根据你设置的保存间隔轮次,在 LoRA 模型一栏,将会出现多个训练完成的 LoRA 权重,你可以选择一个权重,并点击合并模型按钮。

合并模型将会生成一个直接可用的新微调模型,新的微调模型会带有 LoRA 后缀。

此时可在 RWKV Runner 的配置页面选择新的微调模型并正常启动。

runner-lora-model

LoRA 微调的参数设置

以下是 RWKV Runner 中 LoRA 微调的数据参数设置:

数据处理调整

  • 数据路径:可以填写一个 JSONL 文件,也可以填写一个包含 TXT 文件的文件夹。

    • **JSONL 文件:**数据格式请参考 RWKV 微调数据集
    • **文件夹:**Runner 会将文件夹中的 TXT 文件转换为训练数据,适合批量导入写作、代码或知识库文本
  • 词表路径: 默认情况下不需要修改。词表路径指向一个包含模型可识别的所有单词或标记(tokens)的列表的文件。在自然语言处理(NLP)中,词表(或词汇表)是模型用来理解输入文本的基础。每个单词或标记都会被映射到一个唯一的数字ID,模型使用这些ID来处理和生成文本。

训练参数调整

以下是 LoRA 训练参数的作用和推荐设置:

模型参数描述
基底模型选取一个本地 RWKV 模型,作为 LoRA 微调的起点
LoRA 模型从某个 LoRA 权重继续训练。如果为空,则表示从基底预训练模型开始进行 LoRA 微调。
合并模型(按钮)训练得到的 LoRA 要与基底模型合并后使用,目前还不支持直接挂载 LoRA 。
显卡数量使用多少块 GPU 进行训练,在单机多卡或者分布式环境下可以设置大于 1。
精度通常选择 BF16,这是 RWKV 的官方训练精度。
梯度检查点标志开启梯度检查点可以节省内存消耗,通过牺牲一些计算效率来换取更小的内存使用量。
上下文长度训练出来的模型能处理的任务(对话/聊天等)的上下文长度,如果你训练数据量很大,可以适当加长(建议 4096 以内)

其他参数主要涉及到优化器配置和学习率策略:

  • 每轮训练步数、训练轮次、起始轮次、保存间隔轮次等参数控制着整体训练流程。一般情况下保持默认,可根据数据集的大小适当增大训练步数和训练轮次。

  • 初始学习率和最终学习率控制学习率变化。Adam Epsilon、Beta 1、Beta 2 影响优化器更新权重的方式。一般情况下保持默认即可。如需修改学习率,请不要大于 1e-4

还有一些特定于 LoRA 的超参:

  • LoRA R 和 LoRa Alpha 用于控制低秩适应层(Low-Rank Adaptation layer)大小。根据训练的数据量和任务复杂情况,两者可保持一定的比例同时增大,如 LoRA R = 64, LoRA Alpha 128。

  • LoRA Dropout 是低秩适应层中 dropout 的比例,一般保持默认即可。

其他开关,如前馈网络预处理Head QK ,正常情况下保持关闭即可。

LoRA 微调参考示例

以下是 RWKV 开源社区开发者 @Seikaijyu 基于 RWKV-6-World 3B v2 模型进行 Lora 微调的 roleplay (角色扮演)模型:

runner-lora-example

runner-lora-example1

此次 LoRA 微调使用全新的 180M 全中文数据集:

runner-lora-example-data

使用如下参数,在 RWKV-Runner 中进行 21 个 epoch 的 LoRA 微调:

runner-lora-example

这份文档对您有帮助吗?