最近试了一下 RK3588 + RK182X 部署千问大模型,现在做一下分享。
一、编译 RK182X 模块
-
解压 SDK
首先,创建一个文件夹来存放 SDK,并解压客服提供的压缩包。
mkdir rk182x cd rk182x tar xf RK182X_AI_COPROCESSOR_SDK_ALPHA_V1.0.0.tgz .repo/repo/repo sync -l -
配置与编译
运行配置脚本,并根据提示选择开发板类型。
./build.sh config在弹出的选项中选择
2) RK182X SODIMM。配置完成后,开始编译:
./build.sh编译成功后,软件包将生成在
output/firmware/rknn3_rk182x_sodimm_installer_arm64.tgz路径下。
二、在开发板上安装软件包
-
拷贝与解压
将上一步生成的
rknn3_rk182x_sodimm_installer_arm64.tgz文件拷贝到开发板(例如桌面),然后执行以下操作:mkdir RK182X # 将软件包拷贝到 RK182X 目录下 cd RK182X tar xzf rknn3_rk182x_sodimm_installer_arm64.tgz -
安装与重启
运行安装脚本,安装完成后务必重启开发板。
./install.sh # 安装完成后,请重启开发板 reboot -
验证安装
重启后,通过以下命令验证驱动和固件版本是否正确加载。
sudo rknn-smi -v正确的输出应包含以下版本信息:
PCIe driver version : 3.3.0RC chips connect version : 3.2.0EP chips connect version : 3.2.0
如果未重启,这些版本会显示为
NA。没有识别到也可以:
lspci | grep RK182进一步确定。
三、安装 RKLLM-Toolkit
-
安装 Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh按提示操作:阅读并接受协议,确认安装路径,初始化 conda。
source ~/.bashrc conda -V # 验证安装 -
安装 Miniforge3 并创建环境
wget -c https://mirrors.bfsu.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-Linux-x86_64.sh chmod 777 Miniforge3-Linux-x86_64.sh bash Miniforge3-Linux-x86_64.sh # 进入 Conda base 环境 source ~/miniforge3/bin/activate # 创建并进入 Python 3.9 环境 conda create -n RKLLM-Toolkit python=3.9 -y conda activate RKLLM-Toolkit -
克隆仓库并安装 Toolkit
mkdir cd rknn git clone -b release-v1.2.3 https://github.com/airockchip/rknn-llm.git进入克隆的目录,根据 Python 版本安装对应的
.whl文件。cd rknn-llm/rkllm-toolkit/packages # 以 Python 3.9 为例 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rkllm_toolkit-1.2.3-cp39-cp39-linux_x86_64.whl -
验证安装
python >>> from rkllm.api import RKLLM # 如果没有报错,则表示安装成功
四、大语言模型转换与编译
-
获取模型
使用 Hugging Face 镜像加速下载千问 7B 模型。
export HF_ENDPOINT=https://hf-mirror.com pip install huggingface_hub huggingface-cli download Qwen/Qwen2.5-7B-Instruct --local-dir ./Qwen2.5-7B-Instruct --resume-download -
修改转换脚本
进入模型转换案例目录,并修改
export_rkllm.py文件中的modelpath变量,将其指向你下载的模型路径。cd ~/Desktop/rknn/rknn-llm/examples/rkllm_api_demo/export # 使用编辑器修改 export_rkllm.py -
增加交换内存 (Swap)
如果内存不足(例如只有 26G),模型转换可能会因内存溢出被终止。可以创建额外的 swap 空间来解决。
sudo fallocate -l 16G /swapfile2 sudo chmod 600 /swapfile2 sudo mkswap /swapfile2 sudo swapon /swapfile2 free -h # 查看总 swap 是否已增加 -
转换模型
python3 export_rkllm.py -
交叉编译
llm_demo- 下载并解压交叉编译工具链
cd ~ # 下载 gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz 并复制到虚拟机 tar -xf gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz - 修改并运行编译脚本
在cd ~/Desktop/rknn/rknn-llm/examples/rkllm_api_demo/deploy vim build-linux.shbuild-linux.sh中,修改GCC_COMPILER_PATH为你解压的工具链路径,例如:
GCC_COMPILER_PATH=~/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnuchmod +x ./build-linux.sh ./build-linux.sh
- 下载并解压交叉编译工具链
-
打包部署文件
mkdir -p ~/rkllm_deploy # 复制转换好的模型、demo、库文件和脚本 cp ~/Desktop/rknn/rknn-llm/examples/rkllm_api_demo/export/Qwen2.5-7B-Instruct_W8A8_RK3588.rkllm ~/rkllm_deploy/ cp ~/Desktop/rknn/rknn-llm/examples/rkllm_api_demo/deploy/install/demo_Linux_aarch64/llm_demo ~/rkllm_deploy/ cp ~/Desktop/rknn/rknn-llm/examples/rkllm_api_demo/deploy/install/demo_Linux_aarch64/lib/librkllmrt.so ~/rkllm_deploy/ cp ~/Desktop/rknn/rknn-llm/scripts/fix_freq_rk3588.sh ~/rkllm_deploy/ 2>/dev/null || echo "定频脚本不存在,跳过" # 添加执行权限并打包 chmod +x ~/rkllm_deploy/llm_demo chmod +x ~/rkllm_deploy/fix_freq_rk3588.sh 2>/dev/null cd ~ tar -czf rkllm_deploy.tar.gz rkllm_deploy/最后,将
rkllm_deploy.tar.gz压缩包复制到开发板上。
五、在开发板上部署大语言模型
-
解压文件
tar -xzf rkllm_deploy.tar.gz cd rkllm_deploy -
运行定频脚本
修改脚本的 shebang 并执行,以锁定 CPU 频率,保证性能稳定。sed -i 's|#!/system/bin/sh|#!/bin/bash|' fix_freq_rk3588.sh chmod +x fix_freq_rk3588.sh sudo ./fix_freq_rk3588.sh -
运行模型
设置库路径并启动llm_demo。export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./llm_demo ./Qwen2.5-7B-Instruct_W8A8_RK3588.rkllm 4096 512 # 4096 512 代表 max_context_len(最大上下文长度)和 max_new_tokens(最大生成Token数)等待模型加载成功即可开始交互。