在 RK3588 + RK1828 上部署 DeepSeek-R1-0528-Qwen3-8B 模型
前言:大致分为两个阶段
- 在pc端将原始模型转换为rknn模型;(建议pc端转换设备配置内存不低于120G,磁盘不低于120G)
- 将转换得到的模型文件推送部署到板端,开启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() 函数中添加上述映射
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)