|

星标+置顶,掌握嵌入式AIoT前沿技术资讯, l F; M ?3 n& m
点赞+关注,一起变得更加优秀!4 g0 t5 ]) \& {- |, u$ R
) Z' \3 p& U$ S/ L4 T# D开发环境的软硬件设备描述. T+ u( @- n7 T. g& ^0 W; ?) o: i
: H% p& v+ r* b5 z3 {/ v' y
$ V# L5 ~+ b% t, Z3 }! L
PC主机:Windows11(32GB内存,1TB 固态硬盘)3 ]" W/ R/ m4 j
虚拟机:Ubuntu22.04(分配16GB内存,512GB硬盘)
& J; e* g: k8 b开发板:ELF2(RK3588 4G+32G),运行Ubuntu22.04 Desktop系统$ K$ e$ C% Z7 n9 M$ c1 R$ z
k% x7 s" t2 V f
DeepSeek火遍朋友圈之后,工程师们都知道DeepSeek具有部署门槛低的优点,很多科技爱好者都尝试在本地设备部署DeepSeek,并且对其离线使用。3 H! `! [9 Z. h0 _3 |0 |( J% Q# `3 v
) [, L2 j4 Y6 u m. X$ NELF2开发板搭载的是瑞芯微RK3588高性能处理器,该处理器包含四核ARM Cortex-A76和四核ARM Cortex-A55,4GB内存和32GB EMMC,. \) j! H' N0 E$ N" A
8 y3 y/ X1 U! @2 O1 @% J还带有一个6TOPS算力的神经网络处理器,其性能配置是可以满足DeepSeek-R1-1.5B模型运行的。5 E% B+ x. i6 B* s+ X, ~5 I
( {& _/ Y. K4 }6 G: _
以下是DeepSeek-R1-1.5B在 ELF2 开发板上部署的详细过程。
/ [6 p0 t8 n# S( [3 ~0 I! E" E, Y4 P2 y/ J/ A; `+ {
创建Anaconda虚拟环境
1 G9 k3 ]$ R: l( s8 m/ f8 v* d3 q9 ^. d! i
/ ^4 \; M; I$ b1 o4 P" M1 `1、按照前面开发环境搭建的章节内容,先在虚拟机Ubuntu22.04上搭建好Anaconda,并且创建一个名为“py3.10-rkllm-1.1.4”的conda虚拟环境,这个开发环境专门用来部署DeepSeek大语言模型。
9 d" V7 l$ q* h& l# J m
+ D' N! n3 {* H" N执行以下命令创建python3.10的conda虚拟环境:
@/ N6 l2 ?" B+ {6 l! ` `( Cconda create -n py3.10-rkllm-1.1.4 python=3.10
% _8 n. K/ W$ u$ [
usuo0op0tuc6403250720.png
I! M5 K: ?1 ]) Z# O9 g- Y; T& k p% Q% P8 C# l! ?
2、在虚拟机Ubuntu22.04上面,安装rkllm_toolkit工具,rknn-llm-release-v1.1.4工具包可以直接在以下链接进行下载,下载完成后上传到虚拟机,并且进行解压。; v- [5 E! T% s" ?2 W4 s
下载链接:https://github.com/airockchip/rknn-llm/tree/release-v1.1.4, @4 D3 H0 k( q8 L, {; N- p
安装rkllm_toolkit工具
9 A8 u- h2 Q; q* I o* r
+ j$ [, t5 `. n' l3、虚拟机Ubuntu22.04进入conda虚拟环境,执行以下命令安装rkllm_toolkit-1.1.4相关的Python依赖包,完成conda虚拟环境的搭建。
/ E# I% U- d8 M, T- s( m6 wconda 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.whl" s. t* _3 @/ o* J7 E
4、可以执行以下命令,进入Python3,然后导入rkllm的API接口,如果命令没有报错,则表示虚拟机Ubuntu22.04的rkllm_toolkit环境搭建成功。" A7 x4 P: e2 ]3 C U9 F
- x' ]) K% l9 E* q v# V
k3osj5ive526403250820.png
4 l6 _; I5 e: e% `) F( z0 a
2 `/ q/ Y& Q% b/ J0 o# a; J下载DeepSeek-R1-1.5B模型
[2 c T B, N8 E- z
+ x9 S, C4 ?2 o, N r4 x* k
0 [- @4 P* J9 T) I R5、先安装huggingface-cli工具,这是一个huggingface大模型下载的客户端工具,在conda虚拟环境中执行以下命令:
y% K; P) R: f) spip3 install huggingface-cli -i https://mirrors.huaweicloud.com/repository/pypi/simple4 o o, ?; f. b( Y( v, [
6、在rknn-llm-release-v1.1.4/rkllm-toolkit/examples/目录下新建一个huggingface文件夹,然后把DeepSeek-R1-1.5B的模型下载到此目录下,执行以下命令。+ R5 ?& @% a0 [
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# p% W8 |& Y5 S+ @0 D
7、上一步配置的HF_ENDPOINT环境变量,会使用国内的加速节点进行下载,但有时候也会下载失败,有时候直接在官网点击下载链接会更快,也可以搜索一下网上的网盘,也有该模型提供,模型下载完成后,如下图所示。$ O4 B8 Q9 z9 U$ M7 E, \0 l
V' o2 d1 g0 Z, x1 z1 B
wm0fihnehb56403250920.png
. U6 J& C% `2 r$ H: D9 X* E' c+ z8 C' F6 b6 U+ C3 T: @
转换DeepSeek-R1-1.5B模型' V& j8 ?! ^9 f5 _5 U8 W4 u8 ?
. l& c8 N7 t: {
" [) {% c5 | P" [" I
8、创建一个Python脚本,名为“export_deepseek_1.5b_rkllm.py”,并且把该脚本放在rkllm-toolkit/examples/目录下,脚本的内容如下。
2 }( v/ V K" {# J( t' mfrom 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)
6 I" I- c& Y% R
3 l0 _* v* c) Y. |/ p, t) o* J9、在rkllm-toolkit/examples/目录下还需要一个data_quant.json文件,这个文件在网上可以搜索到,关于export_deepseek_1.5b_rkllm.py文件和data_quant.json文件,也可以联系我这边获取。" b6 H5 s* C5 V3 \& O' o/ q- `
' b( i" G: F( K7 q5 @6 N/ c& c$ a8 Y
10、在conda虚拟环境下,执行以下命令,开始把DeepSeek-R1-1.5B模型转换为rkllm格式的模型,& b* f" K: ?" ?; q. o1 G
python3 export_deepseek_1.5b_rkllm.py
- m/ G" i' h! ~( d/ j模型转换成功后,如下图所示。
4 T& X5 v# b' q2 r4 o
: n6 }& p7 P! | |4 [
whkfbuqjhup6403251020.png
; d( U7 }4 t: x8 H9 ^3 o: n5 J; E
7 [& ~! t& n3 B4 M
11、需要注意的是,虚拟机Ubuntu22.04在转换huggingface模型的时候,需要先为电脑创建swap分区,使用一部分硬盘空间用作运行内存,防止出现无法转换而出现转换进程挂掉的情况,关于虚拟机Ubuntu22.04创建交换分区的方法,请查阅网络资料。
( K, K6 ?$ H# c7 Y2 r* B& q( w w# `% j* v" g+ K0 }- J
编译和部署DeepSeek应用程序" x+ Z; b' H: A3 N9 z1 N
7 t5 i% `# E, Q+ {/ v$ d4 \# |: x4 W0 B) m* Y
12、创建一个例程elf2_deepseek_demo,这个例程在开发板的Ubuntu22.04上运行,把上一步转换成功的.rkllm模型,复制到例程的rkllm_model文件夹里面,然后执行./build-linux.sh脚本进行编译。
4 s& G* B9 ?) y' k
' B( S8 G9 A) v0 n% D7 q7 s注意:编译前要确保已经搭建好ELF2的交叉编译环境。% l$ B! \" {- n& ]4 I
5 k# S2 u6 _8 N! h9 t/ i/ M3 l& [
0fbgtarmmll6403251120.png
3 r2 o9 v. o3 e; i9 J
(应用程序源码请后台联系作者获取)
5 G9 v7 H( _( r+ P- {& l/ X: ?" F7 m: }* M8 q: r8 q- E
13、编译成功后,可执行文件存放在install/elf2_deepseek_rkllm_demo目录下,把elf2_deepseek_rkllm_demo文件夹上传到ELF2开发板,此外,还需要把一些动态库上传到开发板的usr/lib目录。
4 p2 |+ S& @( ?. K' ]/ yadb push elf2_deepseek_demo/lib/libgomp/libgomp.so /usr/lib/libgomp.so.1adb push elf2_deepseek_demo/lib/librkllm_api/librkllmrt.so /usr/lib
U7 i0 Z9 _. `+ H8 w$ r运行测试
4 a. _& w2 j/ H4 Y, y$ T& ]! p0 `3 o* ~7 q- b
1 B1 X9 Y4 W9 M7 U14、在开发板的elf2_deepseek_rkllm_demo目录下,执行以下命令启动DeepSeek应用程序,等待加载完毕后,就可以在终端输入界面进行提问交互,并且是完全离线运行,如下图所示。
$ t" e5 W/ R7 s+ Q" Y. Q% |( e3 p) d6 {3 G5 m; Q% S0 \
3e5vxnkcud56403251221.png
% C; a h# v3 R4 p, ^
6 T! E2 l' c, k* I0 c: {感谢阅读!
( V1 V5 y0 M; j( g. v* `0 R" p$ U. Z
-END-
8 i2 C. v. b& B7 S0 E往期推荐:点击图片即可跳转阅读
' F/ }2 \/ H& B1 _
xvvnxzry53c6403251321.jpg
, v! Y$ ^8 m; L- C; {! H( r嵌入式AI入坑第二步,模型转换与部署!
% y: i/ s+ y% F0 I
bdhtxqk0vte6403251421.jpg
; y* M' c+ z" b& V9 ~7 A嵌入式AI入坑第一步,先把开发环境搭建起来!
- n0 |! ^4 h4 ~8 T* _: Q. c0 K
vcn3ptmufaj6403251521.jpg
( l* `8 X. q3 L4 Y. a; q. K' Z
好玩的嵌入式 AI ,机器视觉和音视频处理
& ~- F$ p, N' F: P星标+置顶,掌握嵌入式AIoT前沿技术资讯 p8 v* H- d' q4 q; l$ G0 R+ `
点赞+关注,一起变得更加优秀! |
|