|

星标+置顶,掌握嵌入式AIoT前沿技术资讯
- ^4 B! w8 v" w1 Z& D) X点赞+关注,一起变得更加优秀!
! v0 G+ h/ J. d, i8 B" j$ p6 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
: 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
& 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
# 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* Nfrom 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
, 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
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 yadb 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
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
* n: H% y' K3 H嵌入式AI入坑第二步,模型转换与部署!9 @; |7 @+ @1 H* |( P; y+ R
bdhtxqk0vte6403251421.jpg
+ m3 r4 `+ B. ]8 k8 d
嵌入式AI入坑第一步,先把开发环境搭建起来!
6 v1 e& O# w2 d
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点赞+关注,一起变得更加优秀! |
|