电子产业一站式赋能平台

PCB联盟网

搜索
查看: 241|回复: 0
收起左侧

嵌入式AI入坑第三步,在开发板上部署DeepSeek-R1大模型

[复制链接]

561

主题

561

帖子

3987

积分

四级会员

Rank: 4

积分
3987
发表于 2025-3-10 17:50:00 | 显示全部楼层 |阅读模式
星标+置顶,掌握嵌入式AIoT前沿技术资讯
- ^4 B! w8 v" w1 Z& D) X点赞+关注,一起变得更加优秀!
! v0 G+ h/ J. d, i8 B" j$ p
6 p/ v+ J/ Z$ t2 j# x* x, I
开发环境的软硬件设备描述
- E# ]) P3 ^  z, o; b3 v  |2 P2 |5 Y0 E/ l' I
  @* V4 ^# L) D& I$ a9 v
PC主机:Windows11(32GB内存,1TB 固态硬盘), W: G% I& a8 b6 y3 T8 Z/ q
虚拟机:Ubuntu22.04(分配16GB内存,512GB硬盘)
: w1 s$ U4 Y# G1 R8 j开发板:ELF2(RK3588 4G+32G),运行Ubuntu22.04 Desktop系统. c# w  U) n9 Y+ x0 W! z

2 W" f1 _8 s- |9 i5 a: ?DeepSeek火遍朋友圈之后,工程师们都知道DeepSeek具有部署门槛低的优点,很多科技爱好者都尝试在本地设备部署DeepSeek,并且对其离线使用。
! c; N) D6 c2 S+ B, f; [& n' `! c8 b0 z* l
ELF2开发板搭载的是瑞芯微RK3588高性能处理器,该处理器包含四核ARM Cortex-A76和四核ARM Cortex-A55,4GB内存和32GB EMMC,; ~9 v4 q- |2 Q8 \
! I- e/ [+ M9 G& V+ R  S; N1 w! P
还带有一个6TOPS算力的神经网络处理器,其性能配置是可以满足DeepSeek-R1-1.5B模型运行的。6 X- H$ C- L. m7 z! c; Q: N! _+ N
- J  h. z2 O" y
以下是DeepSeek-R1-1.5B在 ELF2 开发板上部署的详细过程。
7 F2 s0 w) j% ]9 k
' h5 N6 ]3 U* |1 x创建Anaconda虚拟环境
$ j6 P' J1 k0 y. V6 U
) H0 f) S. M2 _7 n

8 \; H! O* {2 x# }5 T1、按照前面开发环境搭建的章节内容,先在虚拟机Ubuntu22.04上搭建好Anaconda,并且创建一个名为“py3.10-rkllm-1.1.4”的conda虚拟环境,这个开发环境专门用来部署DeepSeek大语言模型。5 O* X0 z4 Z' U" O8 b

+ J% N  ]) N$ D% b/ `执行以下命令创建python3.10的conda虚拟环境:0 U4 Z5 T+ R' s
  • conda create -n py3.10-rkllm-1.1.4 python=3.10
    ; @0 x/ D( m3 T

    usuo0op0tuc6403250720.png

    usuo0op0tuc6403250720.png
    : U- {, o6 |4 y. l

    4 s  X! P; e0 _9 U& ]; ]4 t4 E2、在虚拟机Ubuntu22.04上面,安装rkllm_toolkit工具,rknn-llm-release-v1.1.4工具包可以直接在以下链接进行下载,下载完成后上传到虚拟机,并且进行解压。: M0 s  E9 L# `* ?% v
  • 下载链接:https://github.com/airockchip/rknn-llm/tree/release-v1.1.4
    1 T, ]# z( C) n; o* r! T! m安装rkllm_toolkit工具
    ( B3 S- \1 w% S+ l9 q( e1 H( m5 f8 s, n1 b; z- X- g& P1 s2 a& ^5 c
    3、虚拟机Ubuntu22.04进入conda虚拟环境,执行以下命令安装rkllm_toolkit-1.1.4相关的Python依赖包,完成conda虚拟环境的搭建。$ y! j. {. {  ^2 v5 V
  • conda activate py3.10-rkllmcd rknn-llm-release-v1.1.4/rkllm-toolkit/packages/pip3 install rkllm_toolkit-1.1.4-cp310-cp310-linux_x86_64.whl6 O+ f0 C* O9 g
    4、可以执行以下命令,进入Python3,然后导入rkllm的API接口,如果命令没有报错,则表示虚拟机Ubuntu22.04的rkllm_toolkit环境搭建成功。# T8 N* ?0 `6 a& {& I9 C' @% d% }

    - Y) [* j8 m' `* q) x" Q! Y% \

    k3osj5ive526403250820.png

    k3osj5ive526403250820.png
    & C8 v: ?& d* [1 [

    " N% d! t1 t% s下载DeepSeek-R1-1.5B模型5 w  Z' [! K/ Z

      B( V8 A6 W+ J3 b6 Z+ r3 x) f
    ( j! \2 s; `/ d, y, {* j$ n4 c
    5、先安装huggingface-cli工具,这是一个huggingface大模型下载的客户端工具,在conda虚拟环境中执行以下命令:" T: n- n8 f7 a* D/ a! l- v' G1 c
  • pip3 install huggingface-cli -i https://mirrors.huaweicloud.com/repository/pypi/simple. e: ?1 j  n1 Y; W6 C) L
    6、在rknn-llm-release-v1.1.4/rkllm-toolkit/examples/目录下新建一个huggingface文件夹,然后把DeepSeek-R1-1.5B的模型下载到此目录下,执行以下命令。0 ~! W3 O: A+ a4 I, B( d
  • mkdir rknn-llm-release-v1.1.4/rkllm-toolkit/examples/huggingface -pcd rknn-llm-release-v1.1.4/rkllm-toolkit/examples/huggingfaceexport HF_ENDPOINT=https://hf-mirror.comhuggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B --local-dir . --local-dir-use-symlinks False
    - q9 R' T# l  I. h( Z7、上一步配置的HF_ENDPOINT环境变量,会使用国内的加速节点进行下载,但有时候也会下载失败,有时候直接在官网点击下载链接会更快,也可以搜索一下网上的网盘,也有该模型提供,模型下载完成后,如下图所示。9 [) E; c/ t& j

    # r2 c) f) T( ]0 s

    wm0fihnehb56403250920.png

    wm0fihnehb56403250920.png

    # o, J" e4 b+ c# Z% `" t
    ! U! D( r; Z- w2 _# q转换DeepSeek-R1-1.5B模型& T8 N- U5 q: ?1 Z# _  t
    ' x! Y9 C) ?" B

    8 J: C( X" p$ q9 c# T4 `: E8、创建一个Python脚本,名为“export_deepseek_1.5b_rkllm.py”,并且把该脚本放在rkllm-toolkit/examples/目录下,脚本的内容如下。
    ; d& Q% w' V$ z9 m. z. t6 Z* N
  • from rkllm.api import RKLLMimport os#os.environ['CUDA_VISIBLE_DEVICES']='0'modelpath = './huggingface/deepseek-r1-1.5b'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 modeldataset = "./data_quant.json"qparams = Noneret = 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 modelret = llm.export_rkllm(f"./deepseek-1.5b-w8a8-rk3588.rkllm")if ret != 0:    print('Export model failed!')    exit(ret)
    $ o# M; H1 f1 U( D4 v0 B& E' N0 q
    , Q5 o  U. F# g, F# {+ ^! o9、在rkllm-toolkit/examples/目录下还需要一个data_quant.json文件,这个文件在网上可以搜索到,关于export_deepseek_1.5b_rkllm.py文件和data_quant.json文件,也可以联系我这边获取。4 H/ }8 \& L) E  U# V% v
    " \5 @& H' c/ a8 _& d# a0 Z0 q
    10、在conda虚拟环境下,执行以下命令,开始把DeepSeek-R1-1.5B模型转换为rkllm格式的模型,1 y! h( R- U, |( T
  • python3 export_deepseek_1.5b_rkllm.py5 T% T' O- g- ~+ l( s
    模型转换成功后,如下图所示。! c; J! Q: f" h- o# l: J  C, d8 }
    . d8 x- M% J! ?( S* q7 [

    whkfbuqjhup6403251020.png

    whkfbuqjhup6403251020.png
    , v* S1 c+ a! E3 ?6 n( G/ W3 j

      s" ~- v6 B' u( S: B0 T11、需要注意的是,虚拟机Ubuntu22.04在转换huggingface模型的时候,需要先为电脑创建swap分区,使用一部分硬盘空间用作运行内存,防止出现无法转换而出现转换进程挂掉的情况,关于虚拟机Ubuntu22.04创建交换分区的方法,请查阅网络资料。
    : H; w( t0 a) c; }  x3 e7 [
    7 C) k. Y9 M1 n  T编译和部署DeepSeek应用程序+ o5 d- v& K4 q

    , ?" g6 s2 I, P# [

    9 X- \+ x# E6 X# C12、创建一个例程elf2_deepseek_demo,这个例程在开发板的Ubuntu22.04上运行,把上一步转换成功的.rkllm模型,复制到例程的rkllm_model文件夹里面,然后执行./build-linux.sh脚本进行编译。; {$ C2 z8 |' K% H" U' Z
    ! F' T- b' L/ x* _0 j2 Z+ ~6 W1 B
    注意:编译前要确保已经搭建好ELF2的交叉编译环境。
    / u  {; I4 ~' \" E7 ~3 n+ n! ~9 D- c9 g$ b6 c. o9 q

    0fbgtarmmll6403251120.png

    0fbgtarmmll6403251120.png
    1 N5 @) \$ L8 }0 t  g/ f& ]) B
    (应用程序源码请后台联系作者获取)# Y; u' Q$ X7 m5 S

    8 i$ F' |/ U' R+ _13、编译成功后,可执行文件存放在install/elf2_deepseek_rkllm_demo目录下,把elf2_deepseek_rkllm_demo文件夹上传到ELF2开发板,此外,还需要把一些动态库上传到开发板的usr/lib目录。
    # w$ P  O- C4 y
  • adb push elf2_deepseek_demo/lib/libgomp/libgomp.so  /usr/lib/libgomp.so.1adb push elf2_deepseek_demo/lib/librkllm_api/librkllmrt.so /usr/lib0 }  T; u( i% z2 M
    运行测试, O2 z+ h& G# X- o- i7 d5 Q% ^$ ?
      W1 z# L$ o6 t& l, D- \
    4 Q; H2 _; I" }0 @  H6 V
    14、在开发板的elf2_deepseek_rkllm_demo目录下,执行以下命令启动DeepSeek应用程序,等待加载完毕后,就可以在终端输入界面进行提问交互,并且是完全离线运行,如下图所示。
    & O: s5 _* q' E, X4 k: @) V$ x) X8 I  E

    3e5vxnkcud56403251221.png

    3e5vxnkcud56403251221.png
    7 c. r, L- t/ {% A# ?$ W; t3 g
    0 R9 [) t! e8 i+ m  N
    感谢阅读!, S/ ~5 Q" C' s( c, L% F, }

    & r" k+ [- B: B- a) ?-END-5 t8 P' c/ ?/ v
    往期推荐:点击图片即可跳转阅读
    2 o  p3 e, L  [9 H

    xvvnxzry53c6403251321.jpg

    xvvnxzry53c6403251321.jpg

    * n: H% y' K3 H嵌入式AI入坑第二步,模型转换与部署!9 @; |7 @+ @1 H* |( P; y+ R

    bdhtxqk0vte6403251421.jpg

    bdhtxqk0vte6403251421.jpg
    + m3 r4 `+ B. ]8 k8 d
    嵌入式AI入坑第一步,先把开发环境搭建起来!
    6 v1 e& O# w2 d

    vcn3ptmufaj6403251521.jpg

    vcn3ptmufaj6403251521.jpg

    . C$ V7 s! l! a; e6 ^! S- e0 D好玩的嵌入式 AI ,机器视觉和音视频处理- r& p8 o/ j% q
    星标+置顶,掌握嵌入式AIoT前沿技术资讯
      S. o# ?* w% k3 ^4 [7 y点赞+关注,一起变得更加优秀!
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表