参考文档地址:rknn-llm/doc/Rockchip_RKLLM_SDK_CN_1.2.3.pdf at main · airockchip/rknn-llm
官方仓库地址:Airockchip/RKNN-LLM --- airockchip/rknn-llm

开发板驱动版本确认

首先输入:

1
dmesg | grep -i npu

这一行命令用于判断系统能否识别rk3576的NPU,接下来,为了确保能够使用rkllm模型继续推理,我们还需要保证NPU驱动版本>=0.9.8,驱动版本检查命令如下:
1
cat /sys/kernel/debug/rknpu/version

模型转换

由于模型转换部分不是由我负责,所以本章节不做讲解,先假设我们已经转换好了rkllm模型,将Qwen.rkllm 从转换用的PC上拷贝到开发板的某个目录备用。

PC上的编程,编译

为了在开发板上调用我们的rkllm模型,我们选择在一台X86 PC上参考瑞芯微官方的开发文档编写一个C++程序,并且通过官方提供的交叉编译工具链将其编译为开发板上的可执行文件。

首先,下载交叉编译工具链:

[!NOTE]
RKLLMRuntime 的编译要求
在使用RKLLMRuntime的过程中,需要注意gcc编译工具的版本。推荐使用交叉编译工具 地址 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu;下载路径为:GCC_10.2 交叉编译工具下载 。请注意,交叉编译工具往往向下兼容而无法向上兼容,因此不要使用10.2以下的版本

进入想要安装的目录,输入

1
2
3
4
//下载
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
//解压
tar -xvf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz

如果上述链接无法下载,你也可以在 Ubuntu 软件源中安装(版本可能不同,但通常可用):

1
2
sudo apt update 
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

为了让RKLLM的编译脚本能够识别并且使用编译器,我们需要将编译器添加至环境变量;
临时配置(当前终端有效)
假设你将工具链解压到了 /home/user/tools/gcc-arm-10.2...:

1
2
//将 /path/to/your/gcc 替换为实际的解压路径
export GCC_COMPILER=/home/user/tools/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu

参考这个路径添加到环境变量,另外,为了方便编译,我们可以写一个一键编译脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash

# ================= 配置区域 =================
# 你的交叉编译器路径
CXX_COMPILER="/home/eisem/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++"

# 库文件所在目录 (假设你在项目下建了一个 lib 文件夹放 .so 文件)
LIB_PATH="./lib"

# 源文件
SOURCE_FILE="llm_demo.cpp"

# 输出文件名
OUTPUT_FILE="llm_demo"

# =============== 编译命令 =================
# -I. 表示包含当前目录的头文件 (rkllm.h)
# -L 指定库路径
# -l 链接 rkllmrt 库 (自动补全为 librkllmrt.so)
# -lpthread 链接线程库 (RKLLM 依赖)

echo "🚀 正在编译..."

$CXX_COMPILER $SOURCE_FILE -o $OUTPUT_FILE \
-I. \
-L$LIB_PATH \
-lrkllmrt \
-lpthread \
-std=c++11

if [ $? -eq 0 ]; then
echo "✅ 编译成功!生成文件: $OUTPUT_FILE"
else
echo "💥 编译失败!请检查代码或路径"
fi

编写代码,运行编译脚本
对于c++代码,我之前尝试编写的代码成功通过了编译,但是在开发板上运行出错,仍在调试中,所以这里先不写出来。

1
2
3
4
5
6
llm_project/
├── build.sh <-- 上面的脚本
├── llm_demo.cpp <-- 你的 C++ 代码
├── rkllm.h <-- 头文件 (必须存在)
└── lib/ <-- 库文件夹
└── librkllmrt.so <-- 你的 ARM64 库文件

rkllm.hlibrkllmrt.so都是在瑞芯微官方仓库中下载的,自行下载放在相应位置即可;