前言:大致分为两个阶段
在这里插入图片描述

  1. 在pc端将原始模型转换为rknn模型;(建议pc端转换设备配置内存不低于120G,磁盘不低于120G)
  2. 将转换得到的模型文件推送部署到板端,开启server服务。

一、创建RKNN3相关仓库

在这里插入图片描述

以下是我在转换设备服务器上的目录结构
在这里插入图片描述

二、安装rknn3-toolkit 环境

安装Python

如果系统中未安装Python 3.10(推荐版本),或存在多个Python版本,建议使⽤Miniforge Conda创建独⽴的Python 3.10环境。

安装Miniforge Conda

在终端中执⾏以下命令检查是否已安装Miniforge Conda,若已安装可跳过此步骤。

conda -V

# 输出⽰例:conda 23.3.1,表⽰Miniforge conda版本为23.3.1

# 如果提⽰ conda: command not found,则表⽰未安装Miniforge

如果未安装Miniforge Conda,可通过以下命令下载安装包:

wget -c https://github.com/conda-forge/miniforge/releases/download/25.3.0-1/Miniforge3
25.3.0-1-Linux-x86_64.sh

然后执⾏以下命令安装Miniforge Conda:

# 拷⻉到⽤⼾⽬录

cp /path/to/Miniforge3-25.3.0-1-Linux-x86_64.sh ~

# 增加运⾏权限

chmod 777 Miniforge3-25.3.0-1-Linux-x86_64.sh

# 运⾏安装脚本

bash Miniforge3-25.3.0-1-Linux-x86_64.sh

使⽤Miniforge Conda创建Python环境

在终端中执⾏以下命令进⼊Conda base环境:

# 刷新环境变量
source ~/.bashrc
# 成功后,命令⾏提⽰符会变为:
# (base) xxx@xxx:~$

执⾏以下命令创建名为toolkit3的Python 3.10环境:

conda create -n toolkit3 python=3.10

激活toolkit3环境,后续将在此环境中安装rknn3-toolkit:

conda activate toolkit3
# 成功后,命令⾏提⽰符会变为:
(toolkit3) xxx@xxx:~$

注意:后续Python运⾏命令默认在toolkit3环境中执⾏。

安装rknn3-toolkit

激活toolkit3环境后,通过本地wheel包安装rknn3-toolkit:

# 进⼊ rknn3-toolkit ⽬录
cd Projects/rknn3-toolkit/rknn3-toolkit/packages

# 根据Python版本和处理器架构选择对应的requirements⽂件
# cpxxx为Python版本号,x.x.x为rknn3-toolkit版本号
pip install -r requirements_cpxxx-x.x.x.txt

# 安装rknn3-toolkit
# 根据Python版本和处理器架构选择对应的wheel安装包
# x.x.x为rknn3-toolkit版本号,cpxx为Python版本号
pip install rknn3_toolkit-x.x.x-cpxx-cpxx-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

验证安装

在终端中执⾏以下命令验证rknn3-toolkit环境是否安装成功,若⽆报错则表⽰安装成功:

# 进⼊ Python 交互模式
python
# 导⼊ RKNN 类
from rknn.api import RKNN

安装编译⼯具

安装CMake

在终端中执⾏以下命令:

 # 更新包列表 
sudo apt update 

# 安装 cmake 
sudo apt install cmake  

三、开始转换

运⾏llm主要步骤分为:1)模型导出为 onnx ;2)模型转换为 rknn ; 3)运行程序。

其⽬录结构如下:

rknn3-model-zoo
├── examples
│   └── DeepSeek-R1-0528-Qwen3-8B
│
├── data # 量化数据集
│
│
└── ...
├── cpp # 模型推理⽰例代码
├── python # 模型转换脚本

安装依赖环境

在计算机的终端窗⼝(命令⾏界⾯)中,执⾏以下命令:

cd Projects/rknn3-model-zoo
pip install -r requirements.txt

llm模型导出为onnx模型

在计算机的终端窗⼝(命令⾏界⾯)中,执⾏以下命令:

# 设置环境变量
export PYTHONPATH=Projects/rknn3-model-zoo/

# 进⼊DeepSeek-R1-0528-Qwen3-8B python⽬录
cd Projects/rknn3-model-zoo/examples/DeepSeek-R1-0528-Qwen3-8B/python/

# 导出onnx模型和配置⽂件
python export_llm.py

运行成功后会在 examples/DeepSeek-R1-0528-Qwen3-8B/model ⽂件夹下⽣成后缀名onnx的模型文件、后缀名为 为 .config.pkl 的配置⽂件。

转换为rknn 模型

在计算机的终端窗⼝(命令⾏界⾯)中,执⾏以下命令:

# 进⼊DeepSeek-R1-0528-Qwen3-8B python⽬录
cd Projects/rknn3-model-zoo/examples/DeepSeek-R1-0528-Qwen3-8B/python/

# 转换为rknn模型
python export_rknn.py

相关输出:

I rknn building done.
done
--> Export RKNN model
done

到这里我们会得到三个文件
在这里插入图片描述
还差一个
在这里插入图片描述

导出tokenizer.gguf文件

自带的convert_hf_to_gguf.py(去仓库找)不支持 Qwen3 BPE tokenizer,需要先打补丁:

# 在 convert_hf_to_gguf.py 的 get_vocab_base_pre() 函数中
# 找到 deepseek-r1-qwen 那一行,在其后插入:
if chkhsh == "b0f33aec525001c9de427a8f9958d1c8a3956f476bec64403680521281c032e2":
    # ref: https://huggingface.co/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B
    res = "qwen2"

然后运行:

cd ~/Projects/rknn3-model-zoo/tokenizer/thirdparty/llama_vocab/
python convert_hf_to_gguf.py --vocab-only 
~/.cache/modelscope/models/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B/

# 重命名输出文件
mv ~/.cache/modelscope/models/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B/DeepSeek-R1-0528-Qwen3-vocab.gguf 
~/.cache/modelscope/models/deepseek-ai/DeepSeek-R1-0528-Qwen3-8B/DeepSeek-R1-0528-Qwen3-8B.tokenizer.gguf

至此,所需要的四个文件已准备完毕。下一步,部署到板子上。
在这里插入图片描述

四、部署到板端

将转换得到的模型使⽤以下命令将程序和模型传输到开发板/data ⽬录:

adb push rknn_DeepSeek-R1-0528-Qwen3-8B_demo /data/

在这里插入图片描述

设置systemd 服务

找到rknn_DeepSeek-R1-0528-Qwen3-8B_demo在开发板的位置

编辑 systemd 服务文件:

bashvim /etc/systemd/system/rkllm-server.service

示例(假设你的模型文件路径如下,请替换为实际路径):

[Unit]
Description=RKLLM Server for DeepSeek-R1
After=network.target

[Service]
Type=simple
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/rkllm3-server \
    -m /home/firefly/rknn_DeepSeek-R1-0528-Qwen3-8B_demo/DeepSeek-R1-0528-Qwen3-8B.rknn \
    --vocab /home/firefly/rknn_DeepSeek-R1-0528-Qwen3-8B_demo/tokenizer.gguf \
    --embed /home/firefly/rknn_DeepSeek-R1-0528-Qwen3-8B_demo/DeepSeek-R1.embed.bin \
    --host 0.0.0.0 \
    --port 8080 \
    -c 768
Restart=always
User=root

[Install]
WantedBy=multi-user.target

重新加载配置并启动

systemctl daemon-reload
systemctl start rkllm-server.service

查看状态:

systemctl status rkllm-server.service

# 如果启动失败,请查看日志:
journalctl -u rkllm-server.service -n 50 --no-pager

验证新服务

# 查看进程
ps aux | grep rkllm3-server

# 查看服务支持的端点(如果有)
curl http://localhost:8080/v1/models
curl http://localhost:8080/health

# 测试 API(假设服务支持 OpenAI 风格)
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [{"role": "user", "content": "你好,请简单介绍一下你自己"}],
    "max_tokens": 100
  }'
 

五、推荐配置

项目 规格 备注
机器 RTX PRO 6000 AutoDL 云实例
内存 、数据盘 120GB RAM、120GB 关键瓶颈,60GB 不够用
显存 48GB VRAM
Python 环境 toolkit3 (conda) rknn-toolkit3 专用环境
模型来源 ModelScope 路径 ~/.cache/modelscope/models/deepseek-ai/

六、产出文件清单

文件 大小 用途
DeepSeek-R1-0528-Qwen3-8B.rknn 30MB NPU 推理模型(量化权重)
DeepSeek-R1-0528-Qwen3-8B.embed.bin 1.2GB Embedding 权重(CPU 侧)
DeepSeek-R1-0528-Qwen3-8B.tokenizer.gguf 5.7MB 分词器(GGUF 格式)

三个文件都需要部署到 RK3588 板子上才能完整推理。

常见问题汇总

Q1:转换卡在 module optimization: 0/16 不动

原因:内存不足,RSS 峰值超过 60GB。
解决:换 120GB+ 内存的机器(RTX PRO 6000 实测可行)。


Q2:convert_hf_to_gguf.py 报 BPE pre-tokenizer 未识别

NotImplementedError: BPE pre-tokenizer was not recognized - update get_vocab_base_pre()
chkhsh: b0f33aec525001c9de427a8f9958d1c8a3956f476bec64403680521281c032e2

原因:SDK 版本旧,未收录 Qwen3 的 hash。
解决:手动在 get_vocab_base_pre() 函数中添加上述映射

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐