• 正文
    • 環(huán)境搭建
    • 1.1 Anaconda安裝及使用
    • 1.2 RKLLM-Toolkit安裝及使用
    • 1.3 交叉編譯工具安裝
    • 移植過程
    • 2.1 模型轉(zhuǎn)換
    • 2.2 交叉編譯
    • 2.3 模型本地部署
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

ElfBoard技術(shù)實(shí)戰(zhàn)|ELF 2開發(fā)板本地部署DeepSeek大模型的完整指南

05/16 15:10
29
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

DeepSeek作為國產(chǎn)大數(shù)據(jù)驅(qū)動的AI模型代表,憑借其卓越的推理能力和高效的文本生成技術(shù),在全球人工智能領(lǐng)域引發(fā)廣泛關(guān)注。

RK3588作為瑞芯微推出的旗艦級芯片,憑借多核異構(gòu)計(jì)算能力以及強(qiáng)大的CPU、GPU和NPU性能,成為嵌入式AI應(yīng)用的理想平臺。

DeepSeek與基于RK3588設(shè)計(jì)的ELF 2開發(fā)板的深度融合,標(biāo)志著國產(chǎn)AI大模型從云端向邊緣端的延伸。這種“先進(jìn)算法+定制化芯片”的協(xié)同模式,不僅解決了邊緣側(cè)實(shí)時(shí)性、隱私保護(hù)等關(guān)鍵需求,更構(gòu)建起從技術(shù)研發(fā)到產(chǎn)業(yè)賦能的完整價(jià)值鏈條。接下來,讓我們深入探討這一過程是如何具體實(shí)現(xiàn)的。

環(huán)境搭建

1.1 Anaconda安裝及使用

1.1.1 Anaconda介紹

Anaconda是一個流行的開源軟件包管理和環(huán)境管理系統(tǒng),用于科學(xué)計(jì)算、數(shù)據(jù)分析和大數(shù)據(jù)處理,特別是在Python環(huán)境中。它包含了許多常用的科學(xué)計(jì)算和數(shù)據(jù)分析的軟件包,并提供了一個方便的方式來管理這些軟件包的安裝、更新和環(huán)境配置。

以下是 Anaconda的一些主要特點(diǎn)和用途:

1、軟件包管理

?Anaconda提供了一個名為conda的包管理工具,可以輕松安裝、更新和刪除軟件包。它支持?jǐn)?shù)千個科學(xué)計(jì)算和數(shù)據(jù)分析相關(guān)的軟件包,如NumPy、Pandas、Matplotlib等。

2、環(huán)境管理

Anaconda允許用戶創(chuàng)建和管理多個獨(dú)立的Python環(huán)境。每個環(huán)境可以有不同版本的Python和不同的軟件包集合,這樣可以避免版本沖突和環(huán)境污染。

3、跨平臺

Anaconda可以在Windows、macOS和Linux上運(yùn)行,使其成為開發(fā)人員和研究人員之間共享和復(fù)制數(shù)據(jù)分析項(xiàng)目的理想工具。

4、集成開發(fā)環(huán)境(IDE)

Anaconda還包含了Jupyter Notebook等強(qiáng)大的交互式開發(fā)工具,使用戶能夠在瀏覽器中創(chuàng)建和分享文檔,結(jié)合代碼、公式、可視化和解釋性文本。

5、大數(shù)據(jù)支持

Anaconda 不僅適用于單機(jī)環(huán)境,還支持分布式計(jì)算平臺,如Apache Spark,從而能夠處理大規(guī)模數(shù)據(jù)和復(fù)雜的計(jì)算任務(wù)。

總之,Anaconda提供了一個全面的解決方案,使得科學(xué)計(jì)算和數(shù)據(jù)分析的開發(fā)和部署變得更加簡單和高效。

?

1.1.2 Anaconda安裝

我們提供的虛擬機(jī)系統(tǒng)內(nèi)已預(yù)裝了Python 3.10及RKNN-Toolkit 2.1.0,專為模型轉(zhuǎn)換與量化打造。若使用其他版本Python或相關(guān)工具的需求,推薦在虛擬機(jī)中另行安裝Anaconda,以此避免環(huán)境沖突實(shí)現(xiàn)環(huán)境的完全隔離。

虛擬機(jī)系統(tǒng)使用的是“ELF 2開發(fā)板資料包”中提供的開發(fā)環(huán)境(路徑:ELF 2開發(fā)板資料包8-開發(fā)環(huán)境)您可以選擇從網(wǎng)絡(luò)上下載Linux版本的Miniconda,推薦訪問清華大學(xué)的鏡像庫進(jìn)行下載。

具體網(wǎng)址為:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/

另外,您也可以在“ELF 2開發(fā)板資料包”的“06-常用工具6-2 環(huán)境搭建工具AI安裝腳本”路徑下找到名為“Miniconda3-4.7.12.1-Linux-x86_64.sh”的執(zhí)行腳本。您只需將該腳本上傳至虛擬機(jī)中,并執(zhí)行它即可完成Miniconda的安裝。

首先對執(zhí)行腳本賦予執(zhí)行權(quán)限并執(zhí)行腳本:

elf@ubuntu:~$ chmod +x Miniconda3-4.7.12.1-Linux-x86_64.sh 
elf@ubuntu:~$ ./Miniconda3-4.7.12.1-Linux-x86_64.sh

按enter按鍵,之后輸入yes,然后再設(shè)置安裝路徑,進(jìn)行安裝。

安裝完之后如下圖所示:

重新打開終端。命令行之前出現(xiàn)(base)代表安裝成功。

1.1.3 Anaconda基本使用

以下是關(guān)于conda操作指令的跨平臺說明及在虛擬機(jī)上的示范:conda的操作指令是跨平臺的,這意味著它們既可以在Linux系統(tǒng)上運(yùn)行,也可以在Windows系統(tǒng)上執(zhí)行。接下來將在虛擬機(jī)環(huán)境中進(jìn)行示范。

1、查看虛擬環(huán)境列表:

conda env list

2、創(chuàng)建新的虛擬環(huán)境:

conda create --name <虛擬環(huán)境名稱> python=<版本號>

例如:conda create --name myenv python=3.9

說明:此命令會創(chuàng)建一個名為<虛擬環(huán)境名稱>的新虛擬環(huán)境,并安裝指定版本的Python。如果不指定Python版本,則會安裝Anaconda發(fā)行版中附帶的Python版本。

3、激活虛擬環(huán)境:

conda activate <虛擬環(huán)境名稱>

例如:conda activate myenv

說明:激活虛擬環(huán)境后,在該環(huán)境下安裝的包將僅在該環(huán)境中可用,從而避免了不同項(xiàng)目之間的依賴沖突。

4、退出虛擬環(huán)境:

conda deactivate

說明:此命令用于退出當(dāng)前激活的虛擬環(huán)境,返回到基礎(chǔ)環(huán)境(base環(huán)境),如再次執(zhí)行命令。

?

5、給虛擬環(huán)境安裝庫:

pip install <包名>
conda install <包名>

例如:conda install numpy 或 pip install numpy

說明:通常推薦使用conda安裝庫,因?yàn)樗鼤詣犹幚硪蕾囮P(guān)系。但在某些情況下,如果conda中沒有可用的包版本,也可以使用pip進(jìn)行安裝。

6、 刪除虛擬環(huán)境:

conda env remove --name <虛擬環(huán)境名稱>

例如:conda env remove --name myenv

說明:此命令會刪除指定的虛擬環(huán)境及其下安裝的所有包。

1.1.4 創(chuàng)建用于部署的虛擬環(huán)境

查看虛擬環(huán)境列表:

elf@ubuntu:~$ conda env list

創(chuàng)建新的虛擬環(huán)境:

elf@ubuntu:~$ conda create --name RKLLM-Toolkit-pyth3.10 python=3.10

conda create --name <虛擬環(huán)境名稱> python=<版本號>

說明:此命令會創(chuàng)建一個名為<虛擬環(huán)境名稱>的新虛擬環(huán)境,并安裝指定版本的Python。如果不指定Python版本,則會安裝Anaconda發(fā)行版中附帶的Python版本。

激活虛擬環(huán)境:

elf@ubuntu:~$ conda activate RKLLM-Toolkit-pyth3.10

說明:激活虛擬環(huán)境后,在該環(huán)境下安裝的包將僅在該環(huán)境中可用,從而避免了不同項(xiàng)目之間的依賴沖突。

1.2 RKLLM-Toolkit安裝及使用

1.2.1 RKLLM-Toolkit介紹

RKLLM-Toolkit 提供模型的轉(zhuǎn)換、量化功能。作為RKLLM-Toolkit的核心功能之一,它允許用戶將Hugging Face或GGUF格式的大語言模型轉(zhuǎn)換為RKLLM模型,從而將RKLLM模型在Rockchip NPU上加載運(yùn)行。

1.2.1 RKLLM-Toolkit 安裝

在虛擬環(huán)境安裝RKLLM-Toolkit,以便將DeepSeek R1 大語言模型轉(zhuǎn)換為RKLLM模型格式和編譯板端推理的可執(zhí)行程序。在發(fā)布的RKLLM工具鏈壓縮文件中,包含了 RKLLM-Toolkit的whl安裝包。

鏈接:GitHub - airockchip/rknn-llm

也可以在ELF 2開發(fā)板資料包3-例程源碼3-4 AI例程源碼路徑下找到rknn-llm-main.zip。

將下載成功的rknn-llm-main.zip 壓縮包放到/home/elf/work/deepseek目錄下,并解壓。

(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/deepseek$ unzip rknn-llm-main.zip

進(jìn)入到rknn-llm-main/rkllm-toolkit/目錄下,進(jìn)行安裝RKLLM-Toolkit工具

(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/deepseek$ cd rknn-llm-main/rkllm-toolkit/
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/deepseek/rknn-llm-main/rkllm-toolkit$ pip install rkllm_toolkit-1.1.4-cp310-cp310-linux_x86_64.whl  -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package

注意:如果出現(xiàn)庫版本沖突問題,再次執(zhí)行

pip install rkllm_toolkit-1.1.4-cp310-cp310-linux_x86_64.whl-i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package?命令重新安裝RKLLM工具會解決庫版本沖突的報(bào)錯問題。

安裝完成如下圖所示:

1.3 交叉編譯工具安裝

推薦使用交叉編譯工具 gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu;交叉編譯工具往往向下兼容而無法向上兼容,因此不要使用 10.2 以下的版本。

鏈接:Downloads | 10.2-2020.11 – Arm Developer。

也可以在ELF 2開發(fā)板資料包3-例程源碼3-4 AI例程源碼路徑下找到gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz。

?

移植過程

2.1 模型轉(zhuǎn)換

1、下載DeepSeek-R1源碼

在ubuntu虛擬機(jī)上從DeepSeek-R1官網(wǎng)地址下載DeepSeek-R1-Distill-Qwen-1.5B權(quán)重文件。

鏈接:deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B at main (huggingface.co)

也可以在ELF 2開發(fā)板資料包3-例程源碼3-4 AI例程源碼路徑下找到DeepSeek-R1-Distill-Qwen-1.5B.zip。

2、模型轉(zhuǎn)換

使用RKLLM-Toolkit對模型進(jìn)行轉(zhuǎn)換,RKLLM-Toolkit提供模型的轉(zhuǎn)換、量化功能。作為RKLLM-Toolkit的核心功能之一,它允許用戶將Hugging Face或GGUF格式的大語言模型轉(zhuǎn)換為RKLLM模型,從而將RKLLM模型在Rockchip NPU 上加載運(yùn)行。

進(jìn)入到rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export目錄下,生成data_quant.json,data_quant.json文件以對rkllm模型進(jìn)行量化處理,我們將fp16模型生成結(jié)果用作量化校準(zhǔn)數(shù)據(jù)。目錄下默認(rèn)已存在data_quant.json文件。

(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/deepseek$ cd rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export
(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/deepseek/rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export$ python generate_data_quant.py -m /home/elf/work/deepseek/DeepSeek-R1-Distill-Qwen-1.5B

/home/elf/work/deepseek/DeepSeek-R1-Distill-Qwen-1.5B為權(quán)重文件所在的路徑。

在export_rkllm.py中指定權(quán)重文件所在路徑

(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/deepseek/rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export$ vi export_rkllm.py

導(dǎo)出RKLLM模型:

(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/deepseek/rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export$ python export_rkllm.py

轉(zhuǎn)換成功的模型:rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/export/DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm。

?

2.2 交叉編譯

進(jìn)入到rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy目錄下,在build-linux.sh文件指定交叉編譯工具。

注意:改為實(shí)際安裝的路徑

(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/deepseek/rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy$ vi build-linux.sh

修改完成,進(jìn)行編譯:

(RKLLM-Toolkit-pyth3.10) elf@ubuntu:~/work/deepseek/rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy$ ./build-linux.sh

編譯生成的庫文件:rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/install/demo_Linux_aarch64/lib/librkllmrt.so。

可執(zhí)行文件:rknn-llm-main/examples/DeepSeek-R1-Distill-Qwen-1.5B_Demo/deploy/install/demo_Linux_aarch64/llm_demo。

2.3 模型本地部署

將編譯好的rkllm模型、可執(zhí)行文件以及庫文件上傳至板端即可執(zhí)行,這樣我們在本地就可和DeepSeek-R1對話了,而且無需聯(lián)網(wǎng)。

elf@elf2-desktop:~$ ./llm_demo DeepSeek-R1-Distill-Qwen-1.5B_W8A8_RK3588.rkllm 10000 10000

執(zhí)行應(yīng)用后效果如下圖所示:

注意:本次測試使用的desktop系統(tǒng)NPU驅(qū)動為0.9.6,更新驅(qū)動請參考《Rockchip_RKLLM_SDK_CN_1.1.4.pdf》文件。

通過上述標(biāo)準(zhǔn)化部署流程,即可在ELF 2開發(fā)板上實(shí)現(xiàn)DeepSeek大數(shù)據(jù)模型的高效本地化運(yùn)行。期待本文所分享的技術(shù)實(shí)踐,能為從事嵌入式AI開發(fā)的工程師與高校師生提供有價(jià)值的參考,助力各位在邊緣計(jì)算與人工智能交叉領(lǐng)域的技術(shù)探索與項(xiàng)目落地。

相關(guān)推薦