RKLLM 使用与大语言模型部署
本文档将讲述如何使用 RKLLM 将 Huggingface 格式的大语言模型部署到 RK3588 上利用 NPU 进行硬件加速推理
目前支持模型
- LLAMA models
- TinyLLAMA models
- Qwen models
- Phi models
- ChatGLM3-6B
- Gemma models
- InternLM2 models
- MiniCPM models
- TeleChat models
- Qwen2-VL
- MiniCPM-V
这里以 Qwen2.5-1.5B-Instruct 为例子,完整讲述如何从 0 开始部署大语言模型到搭载 RK3588 芯片的开发版上,并使用 NPU 进行硬件加速推理
提示
如没安装与配置 RKLLM 环境,请参考 RKLLM 安装
模型转换
这里以 Qwen2.5-1.5B-Instruct 为例子,用户也可以选择任意目前支持模型列表中的链接
- x86 PC 工作站中下载 Qwen2.5-1.5B-Instruct 权重文件, 如没安装 git-lfs,请自行安装
git clone https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct
- 激活 rkllm conda 环境, 可参考RKLLM conda 安装
conda activate rkllm
- 更改
rknn-llm/rkllm-toolkit/examples/test.py
中 modelpath 模型路径, dataset路径, rkllm 导出路径15 modelpath = 'Your Huggingface LLM model'
29 datasert = None # 默认是 "./data_quant.json", 如无可以填写 None
83 ret = llm.export_rkllm("./Your_Huggingface_LLM_model.rkllm") - 运行模型转换脚本
转换成功后可得到 rkllm 模型
cd rknn-llm/rkllm-toolkit/examples/
python3 test.py
编译可执行文件
- 下载交叉编译工具链 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu
- 修改主程序
rknn-llm/examples/rkllm_api_demo/src/llm_demo.cpp
代码, 这里修改两个地方184 text = PROMPT_TEXT_PREFIX + input_str + PROMPT_TEXT_POSTFIX;
185 // text = input_str; - 修改
rknn-llm/examples/rkllm_api_demo/build-linux.sh
编译脚本中 GCC_COMPILER_PATH 路径GCC_COMPILER_PATH=gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
- 运行模型转换脚本
生成的可执行文件在
cd rknn-llm/examples/rkllm_api_demo/
bash build-linux.shbuild/build_linux_aarch64_Release/llm_demo
板端部署
本地终端模式
- 将转换成功后的 rkllm 模型与编译后的二进制文件 llm_demo 复制到板端
- 导入环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:rknn-llm/rkllm-runtime/Linux/librkllm_api/aarch64
- 运行 llm_demo,输入
exit
退出export RKLLM_LOG_LEVEL=1
./llm_demo your_rkllm_path 10000 10000
部分模型性能对比
Model | Parameter Size | Chip | Chip Count | Inference Speed |
---|---|---|---|---|
TinyLlama | 1.1B | RK3588 | 1 | 15.03 token/s |
Qwen | 1.8B | RK3588 | 1 | 14.18 token/s |
Phi3 | 3.8B | RK3588 | 1 | 6.46 token/s |
ChatGLM3 | 6B | RK3588 | 1 | 3.67 token/s |