相关文章推荐

RWKV 模型启动工具 RWKV Runner 进阶教程(下)

在 RWKV Runner 教程的上篇(新手教程),我们讲述了如何使用 RWKV Runner 本地部署并运行 RWKV 模型:

RWKV模型启动工具RWKV Runner新手教程(上)

而在今天发布的教程下篇,我们将主要介绍 RWKV Runner 的进阶用法,包括模型的自定义模型配置、服务器部署、API 相关、LoRA 微调,以及如何连接实体 MIDI 键盘作曲等内容。

自定义模型配置

在教程的上篇中,我们介绍了 RWKV Runner 拥有许多预设的模型配置,我们可以根据自己的显卡选择某项预设模型配置。

实际上,在 RWKV Runner 的配置页面,可修改预设模型配置的参数,或点击 + 号添加自定义的模型配置。

如果说预设模型配置像餐厅提前准备好的食物套餐,那么自定义模型配置就像是自助餐,你可以随意调整自定义配置中的各类参数,但请记住:对每项参数的调整,都会影响模型最终的生成效果。

以下为自定义模型配置的 API 参数说明,及其调整效果:

下为自定义模型配置的模型参数说明及其调整效果。

自定义模型配置示例

下面一项自定义模型配置的过程:

1. 点击 + 号,新建一项配置,调整 API 参数

由于是不需要创造力的翻译任务,我们稍微调低了 Temperature 和 Top_P 两项参数,使翻译的结果更准确。

2. 调整模型参数

在这一步,我们选择了一个 RWKV-5 1.5B 参数的 World 模型。

由于我们设备是 AMD的核显,无法使用 CUDA 驱动模型。因此我们在 Strategy 选项中选择了 “WebGPU(Python)”。

由于 WebGPU(Python)模式只支持 Safetensors 格式。因此,我们需要点击 Runner 的“转换”弹框,将 .pth 后缀的官方模型转换为 .st 后缀的模型格式。

3. 重新运行模型

耐心等待模型转换完成后,我们再次点击“模型”选项,选择转换完成后的 .st 模型,并点击运行。

如果你在 Strategy 选项中选择了 CPU ,转换过后的模型会带有类似 --cpu-fp32i8.pth 的后缀。

如果选择了 CPU(rwkv.cpp),则转换过后的模型会带有类似 fp16.bin 的后缀。

🌐 服务器部署

以下是一份简易的服务器部署示例:

1. 在你的服务器中选择一个空的目录,然后执行以下语句,将 RWKV Runner 克隆到服务器中:

git clone <https://github.com/josStorer/RWKV-Runner>

2. 如需启动后端推理服务,请执行以下命令:

cd RWKV-Runner python ./backend-python/main.py

此时可调用 /switch-model 载入模型,参考 API 文档:http://127.0.0.1:8000/docs

3. 如需启动前端服务,请执行以下命令:

cd RWKV-Runner/frontend npm ci npm run build #编译前端 cd .. python ./backend-python/webui_server.py #单独启动前端服务

4. 如需同时启动前后端服务,请执行以下语句:

python ./backend-python/main.py --webui #同时启动前后端服务

5. 如需查看帮助参数,请执行:

python ./backend-python/main.py -h

更详细的服务器部署案例请在此查看: https://github.com/josStore r/RWKV-Runner/tree/master/deploy-examples

⚠️ 注意:如果你正在部署并对外提供公开服务,请通过 API 网关限制请求大小,避免过长的 prompt 提交占用资源。

此外,请根据你的实际情况,限制请求的 max_tokens 上限,因为默认le = 102400,可能导致极端情况下单个响应消耗大量服务器资源。

🖇️ API 相关

1. API 并发压力测试

ab -p body.json -T application/json -c 20 -n 100 -l http://127.0.0.1:8000/chat/completions

body.json:

{ "messages": [ { "role": "user", "content": "Hello" } ]}

2. Embeddings API 示例

Embeddings API 是由 OpenAI 公司开发的人工智能技术平台,可以帮助开发者构建更加高效和准确地预测文本输入或任务输出的模型。

import numpy as np import requests def cosine_similarity(a, b): return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)) values = [ "I am a girl", "我是个女孩", "私は女の子です", "广东人爱吃福建人", "我是个人类", "I am a human", "that dog is so cute", "私はねこむすめです、にゃん♪", "宇宙级特大事件!号外号外!"] embeddings = [] for v in values: r = requests.post("http://127.0.0.1:8000/embeddings", json={"input": v}) embedding = r.json()["data"][0]["embedding"] embeddings.append(embedding) compared_embedding = embeddings[0] embeddings_cos_sim = [cosine_similarity(compared_embedding, e) for e in embeddings] for i in np.argsort(embeddings_cos_sim)[::-1]: print(f"{embeddings_cos_sim[i]:.10f} - {values[i]}")

注意: 1.4.0 版本对 embeddings API 质量进行了改善,生成结果与之前的版本不兼容,如果你正在使用此 API 生成知识库等,请重新生成。

如果你在用 langchain, 请直接使用以下代码:

OpenAIEmbeddings(openai_api_base="http://127.0.0.1:8000", openai_api_key="sk-") LoRA 微调功能

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

RWKV Runner 的“训练”版块支持一键 LoRA 微调 RWKV 模型,但目前仅支持在 Windows 系统中使用。 在开始训练之前,请确保你的 Windows 设备上已安装最新版的 WSL(Windows Subsystem for Linux) 2 。   LoRA 训练环境配置 在开始训练之前,我们需要先配置一次 LoRA 训练的环境。 以下步骤详细指导如何在一台新电脑上配置 RWKV Runner 的 LoRA 训练环境,请确保配置全程处于畅通的网络。

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

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

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

2.开启 WSL ,激活 Linux 环境

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

此操作会要求管理员权限,你需要点击确认,并在弹出的窗口完成激活。此时建议你重启电脑,如果之前已经开启过WSL功能,则可以不进行重启。

3. 为 WSL 安装 Ubuntu

接着,RWKV Runner 会自动查询 Windows 是否安装了 Ubuntu 系统。如果没有找到, Runner 将会提示你进行安装。

对于一般使用windows家庭版或专业版的用户,点击弹框的安装按钮后,Microsoft Store 将会自动打开并跳转至 Ubuntu 的安装界面。

4.打开 Ubuntu

商店安装前,建议你先在命令行执行一次 wsl --update 进行 WSL 更新,并执行 wsl --set-default-version 2 将 WSL 的默认版本设为 2。

然后点击微软商店的安装按钮,安装完毕后,再点击打开按钮,让 Ubuntu 执行初始化配置。

如果你使用的是服务器版 Windows 系统,通常该系统没有商店组件,请使用命令行自行安装 Ubuntu 系统。

5. 为 Ubuntu 配置训练环境

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

此阶段请保证你的网络畅通,Ubuntu 训练环境只需要配置一次。

6. 开始 LoRA 训练

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

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

合并模型将会生成一个直接可用的新微调模型,新的微调模型会带有 LoRA 后缀。此时可在 RWKV Runner 的配置页面选择新的微调模型并正常启动。

LoRA 微调的参数设置

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

数据处理调整

数据路径: 这里的数据指的用于 LoRA  微调的数据集,这些数据集用于训练 RWKV 模型理解和学习特定任务,例如情感分析、文本分类、问答系统等。数据路径必须是一个文件夹,或者 jsonl 格式文件 (未来会支持更多格式)。当你填写的路径是一个文件夹时,该文件夹内的所有 txt 文件会被自动转换为训练数据,通常用于大批量训练写作,代码生成或知识库。 词表路径:  默认情况下不需要修改。词表路径指向一个包含模型可识别的所有单词或标记(tokens)的列表的文件。在自然语言处理(NLP)中,词表(或词汇表)是模型用来理解输入文本的基础。每个单词或标记都会被映射到一个唯一的数字ID,模型使用这些ID来处理和生成文本。

训练参数调整

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

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

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

初始学习率、最终学习率、Adam Epsilon、Beta 1、Beta 2 等参数则影响着优化器(如 Adam)如何更新权重,一般情况下保持默认即可。如需修改学习率,请不要大于 le-4 。

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

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

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

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

LoRA  微调参考示例

以下是一名 RWKV 用户基于 RWKV-6 3B 模型进行 Lora 微调的 roleplay (角色扮演)模型:

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

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

🎹 MIDI 硬件输入

RWKV Runner “作曲” 功能支持使用 MIDI 硬件创建旋律,这个章节介绍如何为 RWKV Runner 配置 MIDI 硬件输入。

如果你没有实体的 MIDI 键盘, 可以使用像 Virtual Midi Controller 3 LE 这样的虚拟 MIDI 输入软件,再配合 loopMIDI,即可使用普通电脑键盘作为 MIDI 输入。

loopMIDI 下载地址:https://www.tobias-erichsen.de/wp-content/uploads/2020/01/loopMIDISetup_1_0_16_27.zip

连接 USB 接口的 MIDI 设备

USB 接口的 MIDI 设备是即插即用的,你能够在 RWKV Runner 作曲界面选择已插入的 USB MIDI 输入设备:

MacOS 的 MIDI 蓝牙连接

对于想要使用蓝牙输入的 Mac 用户,请安装 Bluetooth MIDI Connect。 启动 Bluetooth MIDI Connect 后,点击托盘连接,之后可以在作曲界面选择你的输入设备。

Windows 系统的 MIDI 蓝牙连接

⚠️ 注意:如果你正在使用 Windows 11 ,请确保系统在 Windows 11 23H2 及以上版本。22H2 及之前版本有概率出现 BUG,导致 MIDIberry 的蓝牙任务无法正常运作。

Windows 系统只为 UWP 实现了蓝牙 MIDI 支持,因此我们需要创建一个虚拟的 MIDI 设备,并通过 UWP 程序将实体蓝牙 MIDI 设备的输入重定向到虚拟的 MIDI 设备,再将输出提供给 RWKV Runner 。

听起来似乎有些复杂,但无需担心,只需跟着以下几个步骤操作即可:

1. 使用 loopMIDI 创建一个本地的虚拟 MIDI 设备

首先,我们需要下载用于创建虚拟 MIDI 设备的 loopMIDI 软件。 下载完成后,打开 loopMIDI 并点击左下角的加号,创建一个虚拟的 MIDI 设备(如下图中的 loopMIDI Port ):

2.使用 Bluetooth LE Explorer 连接实体 MIDI 设备的蓝牙

第二步,你需要下载 Bluetooth LE Explorer,以发现并连接实体的蓝牙 MIDI 设备。

Bluetooth LE Explorer 下载地址:https://apps.microsoft.com/detail/9N0ZTKF1QD98

打开 Bluetooth LE Explorer,点击 “Start” 搜索设备, 然后点击 “Pair” 绑定实体 MIDI 设备(下图中的 Vboard 49 为实体 MIDI 键盘的蓝牙名称)。

3.将实体 MIDI 设备的蓝牙输入重定向到虚拟的 MIDI 设备

在这一步,你需要安装 MIDIberry,这个 UWP 应用能将实体 MIDI 设备的蓝牙输入重定向到虚拟的 MIDI 设备。

启动 MIDIberry 后, 在输入栏双击你实际的蓝牙MIDI 设备名称( Vboard 49 ),并在输出栏双击此前使用 loopMIDI 创建的虚拟 MIDI设备名称(loopMIDI Port):

4. 使用 RWKV Runner 监听虚拟 MIDI 设备的输入

完成以上步骤后,实体 MIDI 设备的蓝牙已被映射到虚拟的 MIDI 设备上,此时可以在 RWKV Runner 的作曲界面选择虚拟 MIDI 设备(loopMIDI Port)作为输入。

连接完毕即可使用 RWKV Runner 创作,此时保持 MIDIberry 软件打开即可。可以关闭 Bluetooth LE Explorer 软件,也可以关闭 loopMIDI 窗口,它会自动在后台运行。

由于进阶教程通常需要较为复杂的配置,无法将常见问题一一列出。

如果你遇到了无法解决的困难,建议加入 RWKV 官方 QQ 群 224287095 提问,提问时请附带问题截图和文字描述。

RWKV 模型介绍

RWKV 是一种创新的深度学习网络架构,它将 Transformer 与 RNN 各自的优点相结合,同时实现高度并行化训练与高效推理,时间复杂度为线性复杂度,在长序列推理场景下具有优于 Transformer 的性能潜力。

RWKV 模型的最新版本是 RWKV-6 ,架构图如下:

相对 Transformer 架构,RWKV 架构的推理成本降低 2~10 倍,训练成本降低 2~3 倍。

RWKV 模型最初由彭博设计,今已捐赠给 Linux Foundation AI&Data 作为孵化项目。

加入 RWKV 社区

RWKV 官网:https://www.rwkv.com/

QQ 频道:https://pd.qq.com/s/9n21eravc

QQ 交流群:224287095

更新时间 2024-04-09

 
推荐文章