|

星标+置顶,掌握嵌入式AIoT前沿技术资讯8 O9 g3 E, Z$ a; i. o* R( w
点赞+关注,一起变得更加优秀!& {7 e/ n8 C3 r) I
7 N5 b; h. ?, P6 c- Q) i) c开发环境的软硬件设备描述
! e) @3 ~0 P' t" F$ S( }$ w6 l" L) M& I
/ v3 @& |, h* u& f8 e; H% ^
PC主机:Windows11(32GB内存,1TB 固态硬盘)
4 H/ J& Z6 L/ O5 ]$ h虚拟机:Ubuntu22.04(分配16GB内存,512GB硬盘)( p2 B, m" a6 M. w, ? S5 y
开发板:ELF2(RK3588 4G+32G),运行Ubuntu22.04 Desktop系统8 u' s' B. X! u, @
' W8 [# f3 c/ [9 L& e8 d% E2 KDeepSeek火遍朋友圈之后,工程师们都知道DeepSeek具有部署门槛低的优点,很多科技爱好者都尝试在本地设备部署DeepSeek,并且对其离线使用。
& J, ~9 C+ m+ `! K2 m- Z- z9 w
1 n; e2 S, F. T _: B( H ?3 d* S1 E! IELF2开发板搭载的是瑞芯微RK3588高性能处理器,该处理器包含四核ARM Cortex-A76和四核ARM Cortex-A55,4GB内存和32GB EMMC,
2 x2 j, R& ]$ _6 C# x3 c( M! T7 I$ r. w% s5 k
还带有一个6TOPS算力的神经网络处理器,其性能配置是可以满足DeepSeek-R1-1.5B模型运行的。 k$ V$ f/ T6 k/ s e4 ?4 [
# M3 y* e; A6 r5 B1 ~0 q
以下是DeepSeek-R1-1.5B在 ELF2 开发板上部署的详细过程。! [( ?( c- }# V; j4 ?9 ]# \
: X+ j7 M: y0 b0 ]创建Anaconda虚拟环境
/ x- C2 C6 p2 D% u. ~' [" z0 L3 u6 }" m/ P: v" G
1 j7 R4 F% ]0 ]4 T2 ~1、按照前面开发环境搭建的章节内容,先在虚拟机Ubuntu22.04上搭建好Anaconda,并且创建一个名为“py3.10-rkllm-1.1.4”的conda虚拟环境,这个开发环境专门用来部署DeepSeek大语言模型。) z2 g* R( f% b8 ?, r
4 n3 o* v: ~1 P0 n9 a& R执行以下命令创建python3.10的conda虚拟环境:
9 C# y' a. {5 d, q: \conda create -n py3.10-rkllm-1.1.4 python=3.10# G1 c. K# u% R) j% y [
usuo0op0tuc6403250720.png
9 F T( Y' c, R* `
9 E. ]: H% M. v5 j) R2、在虚拟机Ubuntu22.04上面,安装rkllm_toolkit工具,rknn-llm-release-v1.1.4工具包可以直接在以下链接进行下载,下载完成后上传到虚拟机,并且进行解压。 r+ T: \7 t( H o, o: b5 ^
下载链接:https://github.com/airockchip/rknn-llm/tree/release-v1.1.49 B: f3 R2 L: J( u
安装rkllm_toolkit工具
6 n% U( J2 J$ {) J& M& U4 p/ l% @& v1 U# @$ D
3、虚拟机Ubuntu22.04进入conda虚拟环境,执行以下命令安装rkllm_toolkit-1.1.4相关的Python依赖包,完成conda虚拟环境的搭建。
6 D \, J; I' H; t' D& W; Aconda 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.whl4 H% m. M1 x& Y/ I9 g3 w7 }+ H
4、可以执行以下命令,进入Python3,然后导入rkllm的API接口,如果命令没有报错,则表示虚拟机Ubuntu22.04的rkllm_toolkit环境搭建成功。8 d+ s/ `# F c
# s; u9 b) S2 V, \1 n
k3osj5ive526403250820.png
4 S* F! ]" E4 V; \3 h
4 g4 b. d- O6 O# ^ H1 D$ o; S6 M下载DeepSeek-R1-1.5B模型
& M1 v+ z: ~, T! `0 p3 \) {' ~8 s' W1 `0 A! o$ i" E
+ L8 @" L J$ J! s+ X A' E/ r
5、先安装huggingface-cli工具,这是一个huggingface大模型下载的客户端工具,在conda虚拟环境中执行以下命令:% T$ u- f5 s! H8 E. w) M/ L/ J! j/ y
pip3 install huggingface-cli -i https://mirrors.huaweicloud.com/repository/pypi/simple
" i% J, v# b9 t! Z" G$ }* [6、在rknn-llm-release-v1.1.4/rkllm-toolkit/examples/目录下新建一个huggingface文件夹,然后把DeepSeek-R1-1.5B的模型下载到此目录下,执行以下命令。. r+ ^; x( V- ^* J( `9 c2 ]* Q
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 False3 W! w6 E* C# _! Z0 }+ S( W
7、上一步配置的HF_ENDPOINT环境变量,会使用国内的加速节点进行下载,但有时候也会下载失败,有时候直接在官网点击下载链接会更快,也可以搜索一下网上的网盘,也有该模型提供,模型下载完成后,如下图所示。# m- I# l' G: U0 S
1 N, l, {: ]/ z5 I! k8 a
wm0fihnehb56403250920.png
7 Y$ i! `& n5 H) U! l' U! B. I8 E( |, e, l, i1 v3 n" U
转换DeepSeek-R1-1.5B模型
7 |7 M+ O% Q/ h( }8 `0 A b2 s+ s; P7 o2 L
: z x+ m" l+ N( V" I0 @# z+ U' y. r. M2 D8 S' o: j
8、创建一个Python脚本,名为“export_deepseek_1.5b_rkllm.py”,并且把该脚本放在rkllm-toolkit/examples/目录下,脚本的内容如下。
8 w4 Q( Q. R1 z# m6 `6 r8 Lfrom 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)
3 ?& K$ l7 F8 r; P0 G- Y4 T
; O+ W3 g4 \! W+ F) n! t( P9、在rkllm-toolkit/examples/目录下还需要一个data_quant.json文件,这个文件在网上可以搜索到,关于export_deepseek_1.5b_rkllm.py文件和data_quant.json文件,也可以联系我这边获取。
, M d" H7 m* F1 `; w
+ b- ~( R+ W- S4 z0 P) B+ [10、在conda虚拟环境下,执行以下命令,开始把DeepSeek-R1-1.5B模型转换为rkllm格式的模型,
: ?: ~$ ^* f W* u3 i. N' {7 w2 Z gpython3 export_deepseek_1.5b_rkllm.py9 p3 E1 c- h y4 Q5 X3 l% S* Y
模型转换成功后,如下图所示。
+ A' G5 \" q( G* d% @- b* K+ ?; z7 {0 S+ K1 M+ @
whkfbuqjhup6403251020.png
6 g+ x* \0 j# ^! J
- b3 G+ o( V" D$ z( n0 M9 D11、需要注意的是,虚拟机Ubuntu22.04在转换huggingface模型的时候,需要先为电脑创建swap分区,使用一部分硬盘空间用作运行内存,防止出现无法转换而出现转换进程挂掉的情况,关于虚拟机Ubuntu22.04创建交换分区的方法,请查阅网络资料。
( \2 h/ U# t. h0 y0 G( W; h$ ^
0 o; K2 U3 _7 M2 I0 R编译和部署DeepSeek应用程序0 i2 y- {* F& P% \* K3 Y
7 e( W: u8 J0 F
; v4 R; V9 X, ~9 }12、创建一个例程elf2_deepseek_demo,这个例程在开发板的Ubuntu22.04上运行,把上一步转换成功的.rkllm模型,复制到例程的rkllm_model文件夹里面,然后执行./build-linux.sh脚本进行编译。 Z' v6 K: s o- c
9 ~0 ~, ~6 D d4 c
注意:编译前要确保已经搭建好ELF2的交叉编译环境。9 `' J$ T2 F* o% {
: Q* W5 \" U5 q z9 j$ i3 \" G$ _
0fbgtarmmll6403251120.png
6 W5 Z; @% H) w J6 _ V$ d9 B(应用程序源码请后台联系作者获取)( z* E- ?( T$ A5 m# [: C6 D) ]+ a
4 ]9 l1 M( R2 E! |13、编译成功后,可执行文件存放在install/elf2_deepseek_rkllm_demo目录下,把elf2_deepseek_rkllm_demo文件夹上传到ELF2开发板,此外,还需要把一些动态库上传到开发板的usr/lib目录。
) j6 q0 X; ^' ?adb push elf2_deepseek_demo/lib/libgomp/libgomp.so /usr/lib/libgomp.so.1adb push elf2_deepseek_demo/lib/librkllm_api/librkllmrt.so /usr/lib
* l) q9 n. b/ W! R3 l8 D! B运行测试( j6 H5 n; n9 S1 n% V( R+ W$ Z
8 U$ c) H4 S n" E4 ?/ K# F% s5 W, j. R2 b D& o6 T5 p& A! i! M
14、在开发板的elf2_deepseek_rkllm_demo目录下,执行以下命令启动DeepSeek应用程序,等待加载完毕后,就可以在终端输入界面进行提问交互,并且是完全离线运行,如下图所示。
# ^6 W( D# d/ i n+ T" w- x" A7 o; a4 K/ g5 L4 c7 g; [
3e5vxnkcud56403251221.png
) b7 [8 @5 v- v& ^& L
1 A2 B* \8 h* t! `! }4 _
感谢阅读!! W$ u9 W4 P1 L
0 o0 O7 ?+ ?! D* v! d/ J
-END-
7 v* N, m7 f6 r往期推荐:点击图片即可跳转阅读$ s- i& i; w& {
xvvnxzry53c6403251321.jpg
' x; B9 _: C% A; e$ N1 n: t
嵌入式AI入坑第二步,模型转换与部署!
# H5 U* I0 P5 v9 S- i( j7 J9 g; C
bdhtxqk0vte6403251421.jpg
5 G$ w2 r7 D+ x9 p3 ]& Y9 n2 b
嵌入式AI入坑第一步,先把开发环境搭建起来!
# T* G' O2 J6 [" M4 e; q6 n
vcn3ptmufaj6403251521.jpg
) S0 \" Y1 ? j; J/ [0 I& H, U4 B好玩的嵌入式 AI ,机器视觉和音视频处理& R9 K. j( N! O! J- L
星标+置顶,掌握嵌入式AIoT前沿技术资讯
+ @$ r% \: E" }: k# U2 y$ R- r7 ]+ m点赞+关注,一起变得更加优秀! |
|