RK3588平台用NPU跑大模型
原文:https://github.com/wudingjian/rkllm_chat?tab=readme-ov-file 原作者:方程式
RK3588平台用 NPU跑大模型,rknn-llm 服务端 https://github.com/airockchip/rknn-llm
一、RKLLM 简介
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
二、模型转换(RKLLM-Toolkit容器转换工具)
要使用 RKNPU,用户需要先在 x86 工作站上运行 RKLLM-Toolkit 容器转换工具,将训练好的模型转换为 RKLLM 格式的模型,然后在开发板上使用 RKLLM C API 进行推理
1. docker-compose.yml
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
2. 启用
docker-compose up -d
3. 魔塔 或Hugging Face下载模型
模型放在下载在 ./model 目录
4. 下载转换python程序到./model
https://github.com/airockchip/rknn-llm/blob/main/rkllm-toolkit/examples/huggingface/test.py
5. 修改test.py中的模型路径
modelpath = '/root/ws/Qwen2.5-3B-Instruct'
其中“/root/ws/”为容器内的路径,“Qwen2.5-3B-Instruct” 为下载的模型文件夹
6. 修改test.py中的生成转换模型的名称和路径
ret = llm.export_rkllm("./Qwen2.5-3B.rkllm")
当前目录(./model)中生成Qwen2.5-3B.rkllm
7. 转换模型
进入容器内部:
docker exec -it rk3588_llm /bin/bash
进入模型文件夹
cd /root/ws
运行转换
python3 test.py
三、RK3588 的 RKNPU driver 驱动
由于所提供的 RKLLM 所需要的 NPU 内核版本较高,用户在板端使用 RKLLM Runtime 进行模型 推理前,首先需要确认板端的 NPU 内核是否为 v0.9.6 版本,具体的查询命令如下:
# 板端执行以下命令,查询 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模型文件
如果不转换模型(跳过“二、模型转换”),可以直接下载转好后的rkllm模型
例如:Qwen2.5-3B.rkllm
rkllm模型下载链接:https://pan.baidu.com/s/1kIxv488-0IiQdZgDpKO-cw?pwd=up1b 提取码:up1b
下载后的模型文件放在./model目录下
五、docker-compose.yml
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
六、聊天web界面
1.浏览器访问 http://ip:8080
2.可选其他聊天方式(ssh中演示的demo)
2.1. rkllm_api_demo 编译(在x86 pc上编译)
下载rkllm_api_demo
git clone https://github.com/airockchip/rknn-llm/tree/main/rkllm-runtime/examples/rkllm_api_demo
下载 gcc 编译工具
使用 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设备安装rkllm_api_demo
llm_demo
文件和 librkllmrt.so
文件推送到RK3588设备:编译好的 ./rkllm_api_demo/build/build_linux_aarch64_Release/llm_demo
文件复制到 ~/llm #目录自行确定
下载 https://github.com/airockchip/rknn-llm/blob/main/rkllm-runtime/runtime/Linux/librkllm_api/aarch64/librkllmrt.so
文件复到/usr/lib/librkllmrt.so
运行
cd ~/llm
taskset f0 ./llm_demo ./model/Qwen2.5-3B.rkllm # "./model/Qwen2.5-3B.rkllm " 为转换好的模型路径
输出聊天对话界面
八、FAQ
本文标题:RK3588平台用NPU跑大模型
本文链接:https://www.wifilu.com/3387.html
版权声明:本站除标记为转载外,均为原创。转载请标注来源和原始链接。