当前位置: 首页 > web >正文

快速在RK3588上部署运行DeepSeek-R1-Distill-Qwen-1.5B模型并进行板端推理调用流程记录

RK3588

    • 下载
    • 简介
    • 安装anaconda
    • 安装RKLLM-Toolkit
    • 更新NPU版本
    • 模型转换
    • 编译模型推理调用的示例代码
    • 推送相关的文件到板端
    • 板端推理调用

下载

DeepSeek-R1-Distill-Qwen-1.5B
RKLLM-Toolkit(rknn-llm-release-v1.2.1)
交叉编译工具
参考正点原子

简介

RKLLM-Toolkit 是为用户提供在计算机上进行大语言模型的量化、 转换的开发套件。 通过该工具提供的 Python 接口可以便捷地完成以下功能:
1) 模型转换: 支持将 Hugging Face 和 GGUF 格式的大语言模型( Large Language Model,LLM) 转换为 RKLLM 模型,转换后的 RKLLM 模型能够在 Rockchip NPU 平台上加载使用。
2) 量化功能: 支持将浮点模型量化为定点模型。

RKLLM-Toolkit和RKNN_Toolkit2区别(来自豆包):
RKLLM-Toolkit:主要聚焦于大语言模型(LLM)相关的推理和应用开发 。它为在瑞芯微芯片平台上高效运行大语言模型提供支持,例如对像 LLaMA、ChatGLM 等常见大语言模型进行适配和优化,让开发者能够基于瑞芯微硬件,进行大语言模型相关的应用开发,比如开发端侧的智能对话机器人、文本生成应用等。
RKNN_Toolkit2:是用于将各类深度学习模型(不限于大语言模型,像图像识别模型、目标检测模型等)转换为瑞芯微神经计算内核(RKNPU)可执行的 RKNN 格式,并在瑞芯微设备上进行推理计算。它涵盖了模型转换、量化、性能评估、推理加速等一系列功能,方便开发者将基于 TensorFlow、PyTorch 等框架训练好的模型部署到瑞芯微的芯片平台,以实现图像分类、目标检测、语义分割等多种计算机视觉和其他深度学习应用。

安装anaconda

在自己需要的文件夹下执行命令:

wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.03-1-Linux-x86_64.sh

下载完成后使用bash命令安装:

bash Anaconda3-2023.03-1-Linux-x86_64.sh

创建python环境:

conda create -n RKLLM-Toolkit python=3.8

我使用3.12版本的话安装auto_gptq会报错。换回官方推荐的3.8版本没问题
在这里插入图片描述
如果激活conda环境报错,提示需要初始化,可以使用:

source activate RKLLM-Toolkit

安装RKLLM-Toolkit

以下将rknn-llm-release-v1.2.1解压后命名为rkllm。路径:rkllm/rkllm-toolkit :
在这里插入图片描述
cpxxx中xxx为创建的conda环境中python版本,以下需要在conda环境中运行,使用https://pypi.tuna.tsinghua.edu.cn/simple源安装RKLLM-Toolkit 和RKNN-Toolkit2 都没有问题。

pip install rkllm_toolkit-1.2.1-cp38-cp38-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

请添加图片描述
安装好后进入python命令行,输入from rkllm.api import RKLLM命令不提示没有RKLLM模块就可以:
在这里插入图片描述

更新NPU版本

查询NPU版本:

cat /sys/kernel/debug/rknpu/version

在这里插入图片描述
NPU驱动文件路径:rkllm/rknpu-driver/rknpu_driver_0.9.8_20241009/drivers/rknpu
将rknpu文件复制到SDK中,rk3588_linux_sdk/kernel/drivers/rknpu
修改kernel/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;
}

修改kernel/drivers/rknpu/rknpu_devfreq.c,屏蔽237行,否则编译内核会报错:
drivers/rknpu/rknpu_devfreq.c:237:18: error: ‘rockchip_opp_set_low_length’ undeclared here (not in a function); did you mean ‘rockchip_pvtpll_add_length’?
在这里插入图片描述

然后编译内核:

./build.sh kernel

将编译完成后的boot.img下载到开发板。

模型转换

修改rkllm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export/export_rkllm.py,把modelpath替换为实际的模型路径:
在这里插入图片描述
然后输入下面命令开始转换:

python export_rkllm.py

请添加图片描述
转换完成后在rkllm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export文件夹下会生成一个rkllm格式的文件。

如果转换时出现下面的错误提示:
在这里插入图片描述
使用下面命令查看系统内核日志最新 7 条记录:

sudo dmesg | tail -7

在这里插入图片描述
若运行后看到类似 Out of memory: Killed process 3238(XXXXX) 的日志,说明 Python 进程因内存不足被内核终止。
在ubuntu下创建10g的交换分区,使用硬盘的空间作为运存。

# 创建指定大小的交换文件
# if=/dev/zero:从空字符设备读取数据(用于生成空白文件)
# of=/tmp/swapfile:输出到 /tmp/swapfile(交换文件路径)
# bs=1M:每次读写的块大小为 1MB
# count=10240:共写入 10240 个块,总大小为 10GB(1M×10240)
sudo dd if=/dev/zero of=/tmp/swapfile bs=1M count=10240
# 设置交换文件权限
sudo chmod 0600 /tmp/swapfile
# 格式化交换文件为 Swap 文件系统,将普通文件转换为 Swap 格式,使其能被系统识别为交换空间。
sudo mkswap /tmp/swapfile
# 启用交换文件,立即激活该交换文件,系统会开始使用它作为虚拟内存补充。
sudo swapon /tmp/swapfile
# 查看分区情况,输出所有已启用的 Swap 设备 / 文件信息,包括路径、类型、大小和使用情况,确认新创建的 Swap 是否生效。
swapon -s

编译模型推理调用的示例代码

交叉编译工具使用官方推荐的版本:
在这里插入图片描述

修改rkllm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/build-linux.sh,把交叉编译工具的路径替换为自己的实际路径。
在这里插入图片描述
执行下面命令编译,编译后会在deploy文件夹下生成install文件夹,文件夹下会有一个demo_Linux_aarch64文件夹。

./build-linux.sh

推送相关的文件到板端

硬件:正点原子RK3588开发板
复制gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/lib64路径下的libgomp.so和libgomp.so.1文件到rkllm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/install/demo_Linux_aarch64/lib文件夹下。这两个是链接文件,使用下面命令复制:

cp -LR libgomp.so libgomp.so.1 /path/to/software/rkllm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/install/demo_Linux_aarch64/lib/

libgomp.so是GCC(GNU Compiler Collection)所使用的自由软件编译器的一部分,也是GCC并行(OpenMP)库的一部分。它是一个可以与GCC链接的动态共享库,可以提供并行计算的支持。 在GCC编译期间,链接器将libgomp.so作为一个库链接到可执行文件中。在运行时,程序会加载libgomp.so,从而使用并行计算功能。

复制完成后lib文件夹下有3个lib文件:
在这里插入图片描述
如果没有libgomp文件会报错./llm_demo: error while loading shared libraries: libgomp.so.1: cannot open shared object file: No such file or directory:
在这里插入图片描述
使用adb工具将可执行文件、 函数库文件夹 lib ,定频文件及 RKLLM 模型(RKLLM-Toolkit 工具转换后的)推送至板端:

# 推送可执行文件、 函数库文件夹 lib
adb push rkllm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/install/demo_Linux_aarch64 /userdata/Qwen_1.5b
# 推送RKLLM 模型
adb push rkllm/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export/DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm /userdata/Qwen_1.5b/demo_Linux_aarch64
# 推送定频文件
adb push rkllm/scripts/fix_freq_rk3588.sh /userdata/Qwen_1.5b/demo_Linux_aarch64

推送完成后文件如下:
在这里插入图片描述

板端推理调用

调用前先修改一下当前进程的最大文件描述符数量,默认应该是1024。

# 查询
ulimit -n
# 修改
ulimit -n 65500

在这里插入图片描述
否则可能会出现段错误:
在这里插入图片描述
调用前准备:

# 通过环境变量指定函数库路径
export LD_LIBRARY_PATH=./lib
# 运行定频文件
sh fix_freq_rk3588.sh
# 开启日志(可选)
export RKLLM_LOG_LEVEL=1 //仅查看 TTFT、 TPS 和内存数据
export RKLLM_LOG_LEVEL=2 //除了性能数据, 还会打印 cache 长度等更多信息

在这里插入图片描述
执行下面命令开始板端推理:

./llm_demo DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm 2048 4096

在这里插入图片描述
至此,就能在RK3588上部署运行DeepSeek-R1-Distill-Qwen-1.5B模型并进行板端推理调用。

http://www.xdnf.cn/news/19954.html

相关文章:

  • 重生之IOday4————多进程通信
  • Python学习笔记--使用Django修改和删除数据
  • Python学习笔记--使用Django查询数据
  • 网络协议之https?
  • 智能开发新突破:大模型驱动的QAC与TESSY助手实战分享
  • 【工具变量】上市公司绿色供应链管理示范企业DID数据(2010-2024年)
  • phpstorm 操作git 另外的操作在 我的收藏
  • Maven动态控制版本号秘籍:高效发包部署,版本管理不再头疼!
  • Top 10 Kali Linux Tools for Hacking 2025.2
  • 《WINDOWS 环境下32位汇编语言程序设计》第11章 动态链接库和钩子
  • nano banana官方最强Prompt模板来了!六大场景模板详解
  • GEM5学习(4): 运行全系统模式的ARM系统
  • 如何构建企业级RAG知识库?实战方法、关键细节与平台选型
  • 只会刷App?大学生学透Android开发,直接开挂!
  • 【沉浸式解决问题】浮点数计算精度误差,round后值错误,0.1+0.2不等于0.3?
  • Ai Qwen3解答epochs多少为最佳 仅共参考
  • 机器视觉opencv总结
  • NuttX编译流程与config.h生成解析
  • 插入排序及希尔排序
  • AR智慧运维系统介绍
  • 【机器学习】实战:市场增长点分析挖掘项目
  • 算法模板(Java版)_链表(单链表、双链表)、栈和队列
  • HarmonyOS Stage 模型深度解析:构建现代化、高性能应用
  • IotDB批量数据脱敏DEMO
  • wpf 自定义控件,只能输入小数点,并且能控制小数点位数
  • 微服务多级缓存:从问题到实战(小白也能看懂的亿级流量方案)
  • FastJson
  • 技术框架之脚手架实现
  • .vsdx文件转pdf、word、ppt等文件在线分享(免费版)
  • Linux的墙上时钟和单调时钟的区别