本文档演示如何在Rockchip RK3588芯片上使用RKLLM工具链
部署DeepSeek-R1-Distill-Qwen-1.5B模型。
RKLLM-Toolkit 是为用户提供在计算机上进行大语言模型的量化、转换的开发套件。通过该工具提供的Python接口可以便捷地完成以下功能:
1)模型转换:支持将Hugging Face和GGUF格式的大语言模型转换为RKLLM
模型, 目前支持的模型包括LLaMA, Qwen, Qwen2, Phi-2, Phi-3, ChatGLM3, Gemma, Gemma2, Gemma3, InternLM2, TeleChat2, MiniCPM-S, MiniCPM和MiniCPM3,转换后的RKLLM模型能够在Rockchip NPU平台上加载使用。
2)量化功能:支持将浮点模型量化为定点模型,目前支持的量化类型包括
RKLLM Runtime主要负责加载RKLLM-Toolkit转换得到的RKLLM模型, 并在RK3588板端通过调用NPU驱动在Rockchip NPU上加速RKLLM模型的推理。在推理RKLLM模型时,用户可以自行定义RKLLM模型的推理参数设置,定义不同的文本生成方式,并通过预先定义的回调函数不断获得模型的推理结果。
整体框架如下:
<center class="half">
<div style="background-color:#ffffff;">
<img src="https://aijishu.com/img/bVcja8" title="RKLLM" style="width: 672px; height: 378px;"/>
</center>
要使用 RKNPU,用户需要先在 x86 工作站上运行 RKLLM-Toolkit 工具,将训练好的模型转换为 RKLLM 格式的模型,然后在开发板上使用 RKLLM C API 进行推理
(可选)安装 Anaconda
如果系统中没有安装 Python 3.8(必要版本),或者同时有多个版本的 Python 环境,建议使用 Anaconda 创建新的 Python 3.8 环境
安装 Anaconda
在计算机的终端窗口中执行以下命令,检查是否安装 Anaconda,若已安装则可省略此节步骤
$ conda --version
conda 23.10.0
如出现 conda: command not found, 则表示未安装 anaconda, 请参考 Anaconda 官网进行安装
创建 conda 环境
conda create -n rkllm python=3.8.2
进入 rkllm conda 环境
conda activate rkllm
如要退出环境
conda deactivate
安装RKLLM-Toolkit
git clone -b release-v1.1.4 https://github.com/airockchip/rknn-llm.git
pip3 install ./rknn-llm/rkllm-toolkit/packages/rkllm_toolkit-1.1.4-cp38-cp38-linux_x86_64.whl
若执行以下命令没有报错,则安装成功
python3
from rkllm.api import RKLLM
RKLLM的整体开发步骤主要分为2个部分:模型转换和板端部署运行。
1)模型转换:
在这一阶段,用户提供的Hugging Face格式的大语言模型将会被转换为RKLLM格式,以便在Rockchip NPU平台上进行高效的推理。这一步骤包括:
rkllm.load_huggingface()
函数加载huggingface格式模型, 通过rkllm.load_gguf()
函数加载GGUF 模型;rkllm.build()
函数构建RKLLM模型,在构建过程中可选择是否进行模型量化来提高模型部署在硬件上的性能,以及选择不同的优化等级和量化类型。rkllm.export_rkllm()
函数将RKLLM模型导出为一个.rkllm
格式文件,用于后续的部署。2)板端部署运行:
这个阶段涵盖了模型的实际部署和运行。它通常包括以下步骤:
x86 PC工作站中下载DeepSeek-R1-Distill-Qwen-1.5B权重文件,
git clone https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
激活 rkllm conda 环境
conda activate rkllm
模型转换
首先需要创建data_quant.json
用于量化rkllm模型,我们采用fp16模型生成结果作为量化校准数据。
其次,运行以下代码来生成data_quant.json
并导出 rkllm
模型。
cd export
python generate_data_quant.py -m /path/to/DeepSeek-R1-Distill-Qwen-1.5B
python export_rkllm.py
转换成功后可得到 DeepSeek-R1-Distill-Qwen-1.5B.rkllm 模型
在使用 RKLLM Runtime 的过程中,需要注意gcc交叉编译工具的版本。推荐下载交叉编译工具链 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu。
在deploy
目录中,提供了板侧推理的示例代码。用户可以通过运行deploy/build-linux.sh
脚本(将交叉编译器路径替换为实际路径)直接编译示例代码。这将在deploy
目录中生成一个install/demo_Linux_aarch64
文件夹,其中包含可执行文件llm_demo
和lib
文件夹。
cd deploy
# for linux
./build-linux.sh
编译完成后生成可执行程序install/demo_Linux_aarch64/llm_demo
,将编译得到的llm_demo
和库文件rknn-llm/rkllm-runtime/Linux/librkllm_api/aarch64/librkllmrt.so
以及定频脚本rknn-llm/scripts/fix_freq_rk3588.sh
一并通过scp
推送到板端。
# 执行定频脚本,以最高频率运行
firefly@firefly:~$ ./fix_freq_rk3588.sh
# 指定函数库路径,运行demo
firefly@firefly:~$ export LD_LIBRARY_PATH=./lib
firefly@firefly:~$ taskset f0 ./llm_demo ./DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm 2048 4096
rkllm init start
I rkllm: rkllm-runtime version: 1.1.4, rknpu driver version: 0.9.8, platform: RK3588
rkllm init success
**********************可输入以下问题对应序号获取回答/或自定义输入********************
[0] 现有一笼子,里面有鸡和兔子若干只,数一数,共有头14个,腿38条,求鸡和兔子各有多少只?
[1] 有28位小朋友排成一行,从左边开始数第10位是学豆,从右边开始数他是第几位?
*************************************************************************
user: 你是谁?
robot: <think>
</think>
您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。
user: