RK3588 DeepSeek-R1-Distill-Qwen-1.5B移植
RK3588 DeepSeek-R1-Distill-Qwen-1.5B移植
环境搭建
环境要求:
rkllm-toolkit==1.1.4
rkllm-runtime==1.1.4
python==3.8 or python==3.10
安装 Anaconda
下载安装包
- 官网手动下载
官网连接:https://repo.anaconda.com/archive
选择合适的版本下载

- linux上直接下载
wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh
安装
需要首先赋权再执行安装程序,依次输入下面两句命令:
chmod +x Anaconda3-2021.11-Linux-x86_64.sh
./Anaconda3-2021.11-Linux-x86_64.sh
- 然后出现下面图所示:

- 点击enter(回车键),此时显示Anaconda的信息,并且会出现More,继续按Enter,直到如下图所示:

- 输入 yes

- 继续点击 enter

- 输入 yes,添加环境变量

确认安装成功
安装完成后使用如下命令,anaconda才能生效,命令行前方出现(base)字样。
source ~/.bashrc

创建 conda 环境
(base) jijc@u20:~$ conda create -n rkllm python=3.8.2
***
Proceed ([y]/n)? y
Downloading and Extracting Packages
***
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate test
#
# To deactivate an active environment, use
#
# $ conda deactivate
查看虚拟环境列表
conda info -e
*是正在使用的虚拟环境

进入 rkllm conda 环境
conda activate rkllm
退出环境
conda deactivate
RKLLM 安装
RKLLM-Toolkit是一套软件开发包,供用户在 PC 上进行 Huggingface 格式的 LLM 模型转换和量化
git clone -b release-v1.1.4 https://github.com/airockchip/rknn-llm.git
pip3 install ./rknn-llm/rkllm-toolkit/packages/rkllm_toolkit-1.1.4-cp38-cp38-linux_x86_64.whl
模型转换
模型编译
模型文件下载
下载 DeepSeek-R1-Distill-Qwen-1.5B 权重文件
git clone https://www.modelscope.cn/radxa/DeepSeek-R1-Distill-Qwen-1.5B_RKLLM.git
激活 rkllm conda 环境
conda activate rkllm
修改路径
更改 rknn-llm/rkllm-toolkit/examples/test.py 中 modelpath 模型路径, dataset路径, rkllm 导出路径
15 modelpath = 'Your DeepSeek-R1-Distill-Qwen-1.5B Folder Path'
29 datasert = None # 默认是 "./data_quant.json", 如无可以填写 None
83 ret = llm.export_rkllm("./DeepSeek-R1-Distill-Qwen-1.5B.rkllm")
运行模块转换脚本
cd rknn-llm/rkllm-toolkit/examples/
python3 test.py
转换成功后即可在当前目录下得到 DeepSeek-R1-Distill-Qwen-1.5B.rkllm 模型。
编译可执行文件
编译工具链
下载交叉编译工具链gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu
最好将这个工具链放在 ~/opts/ 目录下,没有可 mkdir ~/opts,这样可以挑过 2.2.3 步骤。
修改代码
修改主程序 rknn-llm/examples/rkllm_api_demo/src/llm_demo.cpp 代码, 这里修改 PROMPT 格式的设置,和 PROMPT 的构造
24 #define PROMPT_TEXT_PREFIX "<|im_start|>system\nYou are a helpful assistant.\n<|im_end|>\n<|im_start|>user\n"
25 #define PROMPT_TEXT_POSTFIX "\n<|im_end|>\n<|im_start|>assistant\n<think>"
184 text = PROMPT_TEXT_PREFIX + input_str + PROMPT_TEXT_POSTFIX;
185 // text = input_str;
修改编译工具路径
修改 rknn-llm/examples/rkllm_api_demo/build-linux.sh 编译脚本中 GCC_COMPILER_PATH 路径,选择
GCC_COMPILER_PATH=$PATH/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu # $PATH 替换为工具链绝对路径
运行模型转换脚本
cd rknn-llm/examples/rkllm_api_demo/
bash build-linux.sh
生成的可执行文件在 build/build_linux_aarch64_Release/llm_demo
板端部署
升级 NPU 内核版本
RKLLM 所需要的 NPU 内核版本较高,用户在板端使用 RKLLM Runtime 进行模型推理前,首先需要确认板端的 NPU 内核是否为 v0.9.8 版本。
# 板端执行以下命令,查询 NPU 内核版本
cat /sys/kernel/debug/rknpu/version
版本过低可通过以下方法升级 npu 内核版本:
-
在之前下载的 rknn-llm 文件中就有 rknpu-driver ,支持5.10和6.1的内核版本,将 rknpu_driver_0.9.8_20241009.tar.bz2 解压,把驱动代码覆盖到 kernel/drivers/rknpu/
-
重新编译内核
编译错误:
1)

注释掉 .set_soc_info = rockchip_opp_set_low_length 即可

2)

打开源码目录下 include/linux/mm.h 文件,添加以下代码:
static inline void vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
{
vma->vm_flags |= flags;
}
static inline void vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags)
{
vma->vm_flags &= ~flags;
}
再次编译,成功
部署及使用
-
将转换成功后的 DeepSeek-R1-Distill-Qwen-1.5B.rkllm 模型放到/data/demo_Linux_aarch64/目录下,编译后的二进制文件 llm_demo 复制到/usr/bin/目录下,将 rknn-llm/rkllm-runtime/Linux/librkllm_api/arm64-v8a/librkllmrt.so 文件复制到 /lib 下。
-
导入环境变量
export LD_LIBRARY_PATH=./lib
- 运行模型
llm_demo '/userdata/DeepSeek-R1-Distill-Qwen-1.5B/DeepSeek-R1-Distill-Qwen-1.5B.rkllm' 2048 4096

UI 界面部署
server
前言
官方的server API大部分第三方工具无法直接连接,本仓库经过修改的代码可以兼容OpenAI API格式:
https://github.com/huonwe/rkllm_openai_like_api
部署
下载 server api
git clone https://github.com/huonwe/rkllm_openai_like_api.git
cd rkllm_openai_like_api
添加需要用到的动态库
cp lib/*.so /usr/lib
安装uv
curl -LsSf https://astral.sh/uv/install.sh | sh
安装python依赖
source $HOME/.local/bin/env
uv sync
运行
uv run server.py --rkllm_model_path=/userdata/DeepSeek-R1/DeepSeek-R1-Distill-Qwen-1.5B.rkllm
之后,可以通过 http://your.ip:8080/rkllm_chat/v1 来连接到本服务。
Chatbox UI
下载Chatbox
从Chatbox官网下载:https://chatboxai.app/zh

安装并配置
添加权限并运行
chmod +x Chatbox-1.11.5-arm64.AppImage
./Chatbox-1.11.5-arm64.AppImage --no-sandbox
配置模型
在设置中配置模型

在对话中关闭自动生成聊天标题

保存后即可开始与deepseek-1.5b开始对话。
开机自启动
server
运行脚本 etc/init.d/auto_start_server.sh
#!/bin/bash
cd /userdata/rkllm_openai_like_api || {
echo "Error: Failed to change directory to /userdata/rkllm_openai_like_api"
exit 1
}
source $HOME/.local/bin/env
uv run /userdata/rkllm_openai_like_api/server.py --rkllm_model_path=/userdata/DeepSeek-R1/DeepSeek-R1-Distill-Qwen-1.5B.rkllm > /dev/null 2>&1 &
echo DeepSeek-R1-Distill-Qwen-1.5B
自启动服务 /lib/systemd/system/auto_start_server.service
[Unit]
Description=auto statrt chatbox
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
User=root
Group=root
ExecStart=/etc/init.d/auto_start_server.sh
StandardOutput=journal+console
StandardError=journal+console
[Install]
WantedBy=multi-user.target
添加multi-user.target软链接
cd etc/systemd/system/multi-user.target.wants/
ln -s /lib/systemd/system/auto_start_server.service auto_start_server.service
chatbox
运行脚本 etc/init.d/auto_start_chatbox.sh
#!/bin/bash
chatbox_dir="/userdata"
chatbox_file=$(find "$chatbox_dir" -maxdepth 1 -name "Chatbox*" -type f)
echo $chatbox_file
sleep 3
"$chatbox_file" --no-sandbox > /dev/null 2>&1 &
自启动服务 /lib/systemd/system/auto_start_chatbox.service
[Unit]
Description=auto statrt chatbox
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
User=root
Group=root
Environment="DISPLAY=:0"
Environment="QT_QPA_PLATFORM=xcb"
ExecStart=/etc/init.d/auto_start_chatbox.sh
[Install]
WantedBy=multi-user.target
添加multi-user.target软链接
cd etc/systemd/system/multi-user.target.wants/
ln -s /lib/systemd/system/auto_start_chatbox.service auto_start_chatbox.service
本文来自博客园,作者:杨旭0324,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/19168878,个人邮箱:yaonie4444@foxmail.com

浙公网安备 33010602011771号