RKLLM
RKLLM 软件堆栈可以帮助用户快速将大语言模型部署到Rockchip芯片上。
为了使用RKNPU,用户需要首先在计算机上安装RKLLM-Toolkit工具,将训练后的模型转换为RKLLM格式模型,然后在开发板上使用RKLLM C API进行推理。
RKLLM Toolkit是一个软件开发工具包,供用户在PC上进行模型转换和量化。
RKLLM Runtime为Rockchip NPU平台提供了C/C++编程接口,帮助用户部署RKLLM模型,加速LLM应用程序的实现。
RKLLM的整体开发步骤主要分为:模型转换和板端部署运行。
- 模型转换是使用RKLLM-Toolkit将预训练的大语言模型将会被转换为RKLLM格式。
- 板端部署运行是调用RKLLM Runtime库加载RKLLM模型到Rockchip NPU平台,然后进行推理等操作。
1. RKLLM-Toolkit
RKLLM-Toolkit 是为用户提供在计算机上进行大语言模型的量化、转换的开发套件。通过该 工具提供的接口可以便捷地完成模型转换和模型量化。
1.1. RKLLM-Toolkit安装
拉取RKLLM源码以及目录文件说明:
# 拉取源码
git clone https://github.com/airockchip/rknn-llm.git
# 简单的目录结构说明
.
├── CHANGELOG.md
├── LICENSE
├── README.md
├── doc # 存放的RKLLM用户手册
├── res
├── rkllm-runtime # 板端部署的库和例程
├── rkllm-toolkit # rkllm-toolkit安装包以及模型转换示例
└── rknpu-driver # RKNPU驱动
5 directories, 3 files
使用conda创建一个RKLLM1.0.1环境(conda安装参考下前面章节):
# 创建RKLLM_Toolkit环境
conda create -n RKLLM1.0.1 python=3.8
# 激活环境
conda activate RKLLM1.0.1
# 切换到rkllm-toolkit目录
cd rknn-llm/rknn-toolkit/
# 安装rkllm_toolkit(文件请根据具体版本修改),会自动下载RKLLM-Toolkit工具所需要的相关依赖包。
pip3 install packages/rkllm_toolkit-1.0.1-cp38-cp38-linux_x86_64.whl
1.2. RKLLM-Toolkit测试
RKLLM-Toolkit提供模型的转换、量化功能, 将Hugging Face格式或者GGUF格式的大语言模型转换为RKLLM模型,然后使用RKLLM Runtime的接口实现板端推理。
目前支持的模型有TinyLLAMA 1.1B、Qwen 1.8B、Qwen2 0.5B、Phi-2 2.7B、Phi-3 3.8B、 ChatGLM3 6B、Gemma 2B、InternLM2 1.8B、MiniCPM 2B,最新支持情况请查看 rknn-llm。
# 切换到前面拉取仓库的rknn-llm/rknn-toolkit/example目录
cd rknn-llm/rknn-toolkit/examples/huggingface
# 示例是使用Qwen-1_8B模型,先下载模型(或者从网盘获取)
git lfs install
git clone https://huggingface.co/Qwen/Qwen-1_8B-Chat
修改示例程序test.py的模型路径:
test.py
from rkllm.api import RKLLM
'''
https://huggingface.co/Qwen/Qwen-1_8B-Chat
Download the Qwen model from the above website.
'''
modelpath = './Qwen-1_8B-Chat'
# 初始化RKLLM对象
llm = RKLLM()
# 模型加载
ret = llm.load_huggingface(model = modelpath)
if ret != 0:
print('Load model failed!')
exit(ret)
# 模型的量化构建
ret = llm.build(do_quantization=True, optimization_level=1, quantized_dtype='w8a8', target_platform='rk3588')
if ret != 0:
print('Build model failed!')
exit(ret)
# 导出rkllm模型
ret = llm.export_rkllm("./qwen.rkllm")
if ret != 0:
print('Export model failed!')
exit(ret)
调用RKLLM-Toolkit提供的接口,初始化RKLLM对象,然后调用rkllm.load_huggingface()函数加载模型, 加载模型后是通过rkllm.build()函数对RKLLM模型的构建,配置量化等,最后通过rkllm.export_rkllm()函数将 模型导出为RKLLM模型文件。
详细的接口说明请参考 RKLLM用户手册 。
运行test.py
,转换模型为RKLLM模型:
(RKLLM1.0.1) llh@anhao:/xxx/rkllm-toolkit/examples/huggingface$ python3 test.py
rkllm-toolkit version: 1.0.1
# 省略..................
Loading checkpoint shards: 100%|███████████████████████████████████████████████████████████████████████████████████████| 2/2 [01:04<00:00, 32.40s/it]
Optimizing model: 100%|██████████████████████ █████████████████████████████████████████████████████████████████████████| 24/24 [03:25<00:00, 8.56s/it]
Converting model: 100%|█████████████████████████████████████████████████████████████████████████████████████████| 195/195 [00:00<00:00, 2278243.12it/s]
Model has been saved to ./qwen.rkllm!
RKLLM模型转换成功后,会在当前目录生成qwen.rkllm文件,复制qwen.rkllm文件到板卡系统中。
2. RKLLM Runtime
RKLLM Runtime加载的RKLLM模型,并在RK3576/RK3588板端部署RKLLM模型。