在rk3588上部署并使用NPU/CPU方式运行Deepseek-R1-1.5b/7b模型(全流程实操)

开发环境:

主机环境:windows下vmware中的ubuntu22.04版本

注意:转换7B模型的时候需要用到32G的运行内存,本人实测,建议最少给虚拟机分配40G的运存才能稳定转换。不建议使用swap交换空间,会经常卡死。如果电脑内存不够建议加内存条

1.5b模型转换成rkllm格式后的大小为1.9G,7b模型转换后为7.7G左右,请保证ubuntu下磁盘空间剩余充足

目标机(orangepi5pro开发板)环境:

注意:如果想使用rk3588的npu运行和推理deepseek-r1-1.5b/7b模型,npu版本最低为0.9.8,本人亲测0.9.6版本不支持。进入到开发板的系统中,执行cat /proc/rknpu/version或者cat /sys/kernel/debug/rknpu/version可查看当前的版本。如果不知道如何更换npu版本,请参照香橙派5 RK3588S NPU驱动升级0.9.8_香橙派3588安装github系统linux-优快云博客

部署步骤(以下1-6步都在虚拟机的ubuntu里操作)

1,安装anaconda软件环境,详细可参考在Ubuntu中安装Anaconda和创建虚拟环境(保姆级教学,值得借鉴与信任)_ubuntu anaconda创建虚拟环境-优快云博客

2,anaconda安装完成后,执行conda create -n RKLLM-Toolkit python=3.8新建conda环境
,然后用conda env list命令可验证是否创建成功

conda环境创建成功后,执行conda activate RKLLM-Toolkit,激活并进入到RKLLM-Toolkit环境(退出已激活的conda环境到默认的base的命令为conda deactivate)

下图为正确安装anaconda和正确激活RKLLM-Toolkit环境的示例

3,获取rkllm转换工具

airockchip/rknn-llm at release-v1.1.4将此网站的仓库git clone下来,进入到rknn-llm-release-v1.1.4/rkllm-toolkit/packages目录下并执行pip install rkllm_toolkit-1.1.4-cp38-cp38-linux_x86_64.whl,耐心等待安装完成

4,下载DeepSeek-R1-Distill-Qwen-1.5B/DeepSeek-R1-Distill-Qwen-7B原始模型

方法一:直接通过浏览器打开并下载​​​​​​deepseek-ai/DeepSeek-R1-Distill-Qwen-7B at main (huggingface.co)

 方法二:在ubuntu终端通过命令下载

安装huggingface工具并指定源镜像地址:

pip3 install huggingface-cli -i https://mirrors.huaweicloud.com/repository/pypi/simple

export HF_ENDPOINT=https://hf-mirror.com

将deepseek-ai/DeepSeek-R1-xx模型资源下载到本地当前目录下:

huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --local-dir . --local-dir-use-symlinks False

5,创建必要的文件,保证后面能正常执行转换

克隆的仓库里的rknn-llm-release-v1.1.4/rkllm-toolkit/examples目录下只有一个test.py文件,我们需要在这里新建data_quant.json和export_deepseek_7b_rkllm.py这两个文件,

data_quant.json文件内容示例如下:

[{"input":"Human: 你好!\nAssistant: ", "target": "你好!我是人工智能助手KK!"},{"input":"Human: 你可以干什么?\nAssistant: ", "target": "我可以唱跳rap"}]

export_deepseek_7b_rkllm.py文件内容示例如下:

rom rkllm.api import RKLLM
import os
#os.environ['CUDA_VISIBLE_DEVICES']='0'


#注意这里替换成第四步下载的deepseek模型存放的实际目录
modelpath = './huggingface/deepseek-r1-7b'
llm = RKLLM()

# Load model
# Use 'export CUDA_VISIBLE_DEVICES=0' to specify GPU device
# options ['cpu', 'cuda']
ret = llm.load_huggingface(model=modelpath, model_lora = None, device='cpu')
if ret != 0:
    print('Load model failed!')
    exit(ret)

# Build model
dataset = "./data_quant.json"
qparams = None
ret = llm.build(do_quantization=True, optimization_level=1, quantized_dtype='w8a8',
                quantized_algorithm='normal', target_platform='rk3588', num_npu_core=3,
                extra_qparams=qparams,dataset=dataset)
if ret != 0:
    print('Build model failed!')
    exit(ret)

# Export rkllm model
ret = llm.export_rkllm(f"./deepseek-7b-w8a8-rk3588.rkllm")
if ret != 0:
    print('Export model failed!')
    exit(ret)

6,使用rknn-toolkit工具将原始的huggingface格式的DeepSeek-R1-xx模型转化为瑞芯微支持的rkllm格式,这样才能使用瑞芯微的npu进行推理(注意:需要在conda activate RKLLM-Toolkit环境下运行,请先激活)

执行python export_deepseek_7b_rkllm.py命令,开始转换,整个过程大概要20-30分钟

转换过程如图所示:这是一个相当大的任务,cpu和磁盘以及内存的利用率很高

转换完成后会生成deepseek-7b-w8a8-rk3588.rkllm这个文件,将它传到开发板的LINUX系统里

7,部署开发板环境,以便使用rk3588的npu运行转换后的deepseek模型(下面步骤都在开发板的ubuntu系统中操作

git clone GitHub - airockchip/rknn-llm

sudo cp rkllm-runtime/Linux/librkllm_api/aarch64/librkllmrt.so  /usr/lib/librkllmrt.so

cd examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy

chmod a+x build-linux.sh

./build-linux.sh

执行完上面的脚本后,会在当前文件夹会出现install/demo_Linux_aarch64目录,将第六步生成的转换后的模型拷贝到这里

cd install/demo_Linux_aarch64

diff  lib/librkllmrt.so  /usr/lib/librkllmrt.so //验证一下刚生成的这个库文件是不是和rknn-llm-main/rkllm-runtime/Linux/librkllm_api/aarch64/librkllmrt.so的一样,要保证它们是1.1.4版本的才能满足这个模型的运行要求

8,在开发板上使用rk3588的npu推理和运行转换后的deepseek模型

cd rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/install/demo_Linux_aarch64

执行命令taskset 0xf0 ./llm_demo ./deepseek-7b-w8a8-rk3588.rkllm  5000 5000

命令解释:在 RK3588S 芯片的全部 4 个 Cortex-A76 大核心上,运行一个名为 llm_demo 的程序。该程序会加载并使用一个名为 deepseek-7b-w8a8-rk3588.rkllm 的 70 亿参数、经过 8 位量化并为 RK3588 优化的 DeepSeek 模型,同时传递了两个值为 5000 的数字参数给这个演示程序。通过将计算密集型的 LLM 推理任务绑定到性能更强的大核心上,通常是为了获得更好的执行性能和更快的响应速度

命令成功运行界面如下:

使用watch sudo cat /sys/kernel/debug/rknpu/load命令实时监控npu利用率,此时正在使用npu进行推理和运算,NPU的三个核心负载率比较均衡,都是70%+,而且CPU参与率明显下降(相比使用ollama方式的时候cpu占用率为100%),内存占用大概9G

至此,大功告成!!!

以上1-8步实现了通过rk3588的NPU运行ds的方法,另外分享另一种可以在3588上运行deepseek的方法(只使用CPU推理运行)

直接在开发板系统中执行ollama run deepseek-r1:1.5b或者ollama run deepseek-r1:7b 命令,默默等待就行了。他会去下载ollama工具以及deepseek-r1模型,下载完之后会自动运行该模型。后期如果再次运行,再次执行这条命令就行,他不会重复去下载的​​​​​

我试过用这种方式,一旦让他开始回答你的问题,cpu的八个核心负载一下全部飙到100%,CPU发烫严重,如果使用NPU的话,就不会有感觉。我认为使用ollama运行deepseek的方式只适合自己玩一下,不适合在生产中使用,因为在用cpu进行AI推理的时候吧cpu全占满了,其他的进程任务就别想执行了

<think>好的,我现在需要帮助用户评估RK3576 4G设备能否部署deepseek-R1 1.5B模型。首先,我得先了解RK3576的硬件参数,尤其是处理器性能、内存容量和存储情况。用户提到是4G版本,可能指的是内存4GB,但需要确认是否还有其他因素,比如GPU或NPU的支持。 接下来是模型部分,deepseek-R1 1.5B应该是一个拥有15亿参数的语言模型。参数数量直接影响模型大小,通常一个参数需要4字节存储,所以1.5B参数大约是6GB。但用户设备只有4G内存,显然直接加载完整模型会有困难。这时候需要考虑模型压缩技术,比如量化。将模型从32位浮点量化到8位整数,可以将内存占用减少到1.5B * 1字节 = 1.5GB,这样4G内存可能足够。不过量化可能会影响模型精度,需要确认是否支持。 然后看RK3576的处理器性能。如果该芯片有AI加速模块,比如NPU,能有效提升推理速度。但如果是纯CPU推理,15亿参数的模型即使量化后,推理速度可能较慢,延迟较高,尤其是生成较长文本时。需要确认RK3576的计算能力是否足够支持时推理。 另外,存储空间方面,量化后的模型1.5GB,4G存储应该没问题,但还要考虑作系统和其他应用占用的空间,际可用空间可能更少,需要用户检查剩余空间。 软件支持也很重要,是否支持常用的推理框架,如TensorFlow Lite、PyTorch Mobile等。如果RK3576有专用的SDK或优化库,能进一步提升性能。 最后,应用场景。如果用户需要时响应,比如聊天机器人,可能需要更高的性能;如果是离线批量处理,延迟要求较低,可能可行。用户需要权衡速度和精度,决定是否采用量化或其他优化方法。 总结下来,4G内存的设备部署1.5B模型有一定挑战,但通过量化和优化有可能现,需具体测试验证。建议用户先尝试量化模型,检查内存占用和推理速度是否达标,同时考虑应用场景的际需求。</think>评估RK3576芯片的4G版本能否部署deepseek-R1 1.5B语言模型,需要分以下步骤分析: --- ### **一、硬件能力分析** 1. **内存限制** - 1.5B参数模型在FP32精度下需约$1.5B \times 4 \text{字节} = 6\text{GB}$内存 - **4GB RAM**无法直接加载原精度模型 - **解决方案**:需使用量化技术(如INT8量化,内存降至约$1.5B \times 1 \text{字节}=1.5\text{GB}$) 2. **计算单元性能** - RK3576的CPU主频与架构(如Cortex-A76/A55)决定推理速度 - 若含NPU(如1-2TOPS算力),可加速矩阵运算 - **测参考**:1.5B模型在2GHz四核A76上推理速度约100-300ms/token --- ### **二、部署可行性验证** #### **关键公式** $$ \text{最大可部署参数量} = \frac{\text{可用内存}}{\text{参数量存储开销}} \times \text{量化系数} $$ 以4GB内存+INT8量化为例: $$ \frac{4\text{GB}}{1\text{字节/参数}} \approx 4B \ \text{参数} \gg 1.5B \ \text{参数} $$ #### **际限制** 1. **内存碎片**:需预留200-500MB给系统进程 2. **推理中间状态**:Attention矩阵等临时数据占用额外内存 --- ### **三、优化方案** 1. **量化压缩** - 使用LLM.int8()或GPTQ量化工具 - 量化后模型体积减少75%,精度损失约1-3% 2. **内存映射加载** - 通过`mmap`分块加载模型参数 - 减少单次内存峰值占用 3. **算子优化** - 使用ARM NEON指令加速矩阵乘 - 针对RK3576的NPU编写定制kernel --- ### **四、测建议** 1. **基准测试工具** ```python import transformers model = AutoModelForCausalLM.from_pretrained("deepseek-R1-1.5B", load_in_8bit=True) ``` 2. **监控指标** - 内存占用:`nvidia-smi`或`adb shell dumpsys meminfo` - 推理延迟:端到端token生成时间 --- ### **五、结论** ✅ **理论可行**:通过INT8量化可将模型内存需求压缩至1.5GB,剩余内存满足系统开销 ⚠️ **注意事项**: - 需验证RK3576的NPU是否支持LLM算子 - 生成长文本时可能出现OOM(需限制max_length) - 推荐使用C/C++推理框架(如ONNX Runtime)而非Python
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值