RK182x 模块编译与千问大模型部署

最近试了一下 RK3588 + RK182X 部署千问大模型,现在做一下分享。

一、编译 RK182X 模块

  1. 解压 SDK

    首先,创建一个文件夹来存放 SDK,并解压客服提供的压缩包。

    mkdir rk182x
    cd rk182x
    tar xf RK182X_AI_COPROCESSOR_SDK_ALPHA_V1.0.0.tgz
    .repo/repo/repo sync -l
    
  2. 配置与编译

    运行配置脚本,并根据提示选择开发板类型。

    ./build.sh config
    

    在弹出的选项中选择 2) RK182X SODIMM

    配置完成后,开始编译:

    ./build.sh
    

    编译成功后,软件包将生成在 output/firmware/rknn3_rk182x_sodimm_installer_arm64.tgz 路径下。


二、在开发板上安装软件包

  1. 拷贝与解压

    将上一步生成的 rknn3_rk182x_sodimm_installer_arm64.tgz 文件拷贝到开发板(例如桌面),然后执行以下操作:

    mkdir RK182X
    # 将软件包拷贝到 RK182X 目录下
    cd RK182X
    tar xzf rknn3_rk182x_sodimm_installer_arm64.tgz
    
  2. 安装与重启

    运行安装脚本,安装完成后务必重启开发板

    ./install.sh
    # 安装完成后,请重启开发板
    reboot
    
  3. 验证安装

    重启后,通过以下命令验证驱动和固件版本是否正确加载。

    sudo rknn-smi -v
    

    正确的输出应包含以下版本信息:

    • PCIe driver version : 3.3.0
    • RC chips connect version : 3.2.0
    • EP chips connect version : 3.2.0

    如果未重启,这些版本会显示为 NA

    没有识别到也可以:

    lspci | grep RK182
    

    进一步确定。


三、安装 RKLLM-Toolkit

  1. 安装 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 # 验证安装
    
  2. 安装 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
    
  3. 克隆仓库并安装 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
    
  4. 验证安装

    python
    >>> from rkllm.api import RKLLM
    # 如果没有报错,则表示安装成功
    

四、大语言模型转换与编译

  1. 获取模型

    使用 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
    
  2. 修改转换脚本

    进入模型转换案例目录,并修改 export_rkllm.py 文件中的 modelpath 变量,将其指向你下载的模型路径。

    cd ~/Desktop/rknn/rknn-llm/examples/rkllm_api_demo/export
    # 使用编辑器修改 export_rkllm.py
    
  3. 增加交换内存 (Swap)

    如果内存不足(例如只有 26G),模型转换可能会因内存溢出被终止。可以创建额外的 swap 空间来解决。

    sudo fallocate -l 16G /swapfile2
    sudo chmod 600 /swapfile2
    sudo mkswap /swapfile2
    sudo swapon /swapfile2
    free -h # 查看总 swap 是否已增加
    
  4. 转换模型

    python3 export_rkllm.py
    
  5. 交叉编译 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.sh
      
      build-linux.sh 中,修改 GCC_COMPILER_PATH 为你解压的工具链路径,例如:
      GCC_COMPILER_PATH=~/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
      chmod +x ./build-linux.sh
      ./build-linux.sh
      
  6. 打包部署文件

    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 压缩包复制到开发板上。


五、在开发板上部署大语言模型

  1. 解压文件

    tar -xzf rkllm_deploy.tar.gz
    cd rkllm_deploy
    
  2. 运行定频脚本
    修改脚本的 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
    
  3. 运行模型
    设置库路径并启动 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数)
    

    等待模型加载成功即可开始交互。