Rk3588平台用 NPU跑大模型,rknn-llm 服务端 https://github.com/airockchip/rknn-llm
RKLLM 可以帮助用户快速将 LLM 模型部署到 Rockchip 芯片中,本仓库所述目前支持芯片:rk3588,整体框架如下:
要使用RKNPU,用户需要先在电脑上运行RKLLM-Toolkit工具,将训练好的模型转换为RKLLM格式的模型,然后在开发板上使用RKLLM C API进行推理。
- RKLLM-Toolkit是一套软件开发包,供用户在PC上进行模型转换和量化。
- RKLLM Runtime为Rockchip NPU平台提供C/C++编程接口,帮助用户部署RKLLM模型,加速LLM应用的实现。
- RKNPU内核驱动负责与NPU硬件交互,已经开源,可以在Rockchip内核代码中找到。
- RK3588系列
- 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
要使用 RKNPU,用户需要先在 x86 工作站上运行 RKLLM-Toolkit 容器转换工具,将训练好的模型转换为 RKLLM 格式的模型,然后在开发板上使用 RKLLM C API 进行推理
★内存要大于32G 否则会失败,转换前一定要关闭其他应用,以免资源不足,转换失败
★本文有第三章节有转换好的模型供下载
version: '3.8'
services:
rk3588_llm:
image: kaylor/rk3588_llm
platform: linux/amd64
container_name: rk3588_llm
restart: unless-stopped
privileged: true
volumes:
- ./model:/root/ws
stdin_open: true # -i
tty: true # -t
command: /bin/bash
docker-compose up -d
3. 魔塔 或Hugging Face下载模型
模型放在下载在 ./model 目录
wget https://raw.githubusercontent.com/airockchip/rknn-llm/main/rkllm-toolkit/examples/huggingface/test.py
modelpath = '/root/ws/Qwen2.5-3B-Instruct'
其中“/root/ws/”为容器内的路径,“Qwen2.5-3B-Instruct” 为下载的模型文件夹
ret = llm.export_rkllm("./Qwen2.5-3B.rkllm")
当前目录(./model)中生成Qwen2.5-3B.rkllm
docker exec -it rk3588_llm /bin/bash
cd /root/ws
python3 test.py
由于所提供的 RKLLM 所需要的 NPU 内核版本较高,用户在板端使用 RKLLM Runtime 进行模型 推理前,首先需要确认板端的 NPU 内核是否为 v0.9.6 版本(https://github.com/airockchip/rknn-llm/tree/main/rknpu-driver) 具体的查询命令如下:
# 板端执行以下命令,查询 NPU 内核版本
cat /sys/kernel/debug/rknpu/version
# 确认命令输出是否为:
# RKNPU driver: v0.9.6
若所查询的 NPU 内核版本低于 v0.9.6,请前往官方固件地址下载最新固件进行更新,详见技术手册:https://github.com/airockchip/rknn-llm/blob/main/doc/Rockchip_RKLLM_SDK_CN.pdf
若是H88K_V1,直接更新固件(内含RKNPU driver: v0.9.7):https://github.com/wudingjian/armbian-h88k-images/releases/tag/20240917-2001
如果不转换模型(跳过“二、模型转换”),可以直接下载转好后的rkllm模型
例如:Qwen2.5-3B.rkllm
rkllm模型下载链接:https://pan.baidu.com/s/1kIxv488-0IiQdZgDpKO-cw?pwd=up1b 提取码:up1b
https://huggingface.co/jsntwdj/rkllm
下载后的模型文件放在./model目录下
version: '3.8'
services:
rkllm_server:
image: jsntwdj/rkllm_chat:1.0.1
container_name: rkllm_chat
restart: unless-stopped
privileged: true
devices:
- /dev:/dev
volumes:
- ./model:/rkllm_server/model # rkllm模型文件目录
ports:
- "8080:8080" # 端口自行修改
command: >
sh -c "python3 gradio_server.py --target_platform rk3588 --rkllm_model_path /rkllm_server/model/Qwen2.5-3B.rkllm" # rkllm模型文件名称自行修改
启用
docker-compose up -d
浏览器访问 http://ip:8080
git clone --no-checkout https://github.com/airockchip/rknn-llm.git
cd /rknn-llm/tree/main/rkllm-runtime/examples/rkllm_api_demo
使用 RKLLM Runtime 的过程中,需要注意 gcc 编译工具的版本。推荐使用交叉编译工具 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu;下载路径为:GCC_10.2 交叉编译工具下载 地址:https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
放在 root 目录
修改./rkllm_api_demo/src/main.cpp中的两个参数
param.num_npu_core = 3; # rk3588 3个核心 由1或2 改成3
param.use_gpu = false; # 禁止gpu加速
确保 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
要执行,请运行:
bash build-linux.sh
编译生成的rk3588 上的可执行程序llm_demo目录在./rkllm_api_demo/build/build_linux_aarch64_Release/
将编译好的 llm_demo
文件和 librkllmrt.so
文件推送到RK3588设备:
编译好的 ./rkllm_api_demo/build/build_linux_aarch64_Release/llm_demo
★仓库中已有编译好的 /rkllm_api_demo/llm_demo
文件复制到 ~/llm #目录自行确定
使用 wget 下载librkllmrt.so文件
~~~ liunx
# 使用 wget 下载librkllmrt.so文件
wget https://raw.githubusercontent.com/airockchip/rknn-llm/main/rkllm-runtime/runtime/Linux/librkllm_api/aarch64/librkllmrt.so
# 使用 cp 命令将文件复制到 /usr/lib/ 目录
cp librkllmrt.so /usr/lib/librkllmrt.so
~~~
# 程序目录
cd ~/llm
# 将当前 shell 进程及其子进程的文件描述符限制设置为 102400
ulimit -n 102400
# "./model/Qwen2.5-3B.rkllm " 为转换好的模型路径
taskset f0 ./llm_demo ./model/Qwen2.5-3B.rkllm
输出聊天对话界面
FAQ:https://github.com/wudingjian/rkllm_chat/issues hub.docker:https://hub.docker.com/r/jsntwdj/rkllm_chat