大型語言模型(LLM)通過其卓越的文本理解與生成能力,為機器智能帶來了革命性的進步。然而,這些模型的運行通常需要消耗大量的計算資源,因此它們主要部署在性能強大的服務(wù)器上。
隨著技術(shù)的發(fā)展和邊緣計算的興起,現(xiàn)在有潛力在更小巧、便攜的設(shè)備上部署這些模型。例如,Raspberry Pi 樹莓派和 Intel 哪吒開發(fā)套件等單片機。盡管體積小巧,但它們具備足夠的能力運行某些精簡版本的模型。本文就兩款單片機上運行LLM做一個對比,先嘗試在Raspberry Pi 4B運行大模型,然后將該方案在Intel哪吒開發(fā)板重建。
1
Raspberry Pi4上運行大模型Qwen2 0.5B
一般情況下,模型需要兩倍內(nèi)存大小才能正常運行。因此,本方案使用的8GB的Raspberry Pi4 4B來做推理。
1.1環(huán)境部署
#部署虛擬環(huán)境 sudo apt update && sudo apt install git mkdir my_project cd my_project python -m venv env source env/bin/activate #下載依賴庫 python3 -m pip install torch numpy sentencepiece sudo apt install g++ build-essential #下載llama.cpp代碼庫 git clone https://github.com/ggerganov/llama.cpp #編譯環(huán)境 cd llama.cpp make
1.2 模型下載
樹莓派4b的8GB RAM,即使樹莓派5,都不太適合做模型的量化。只能在PC機上做好量化后,再把量化后的模型文件拷貝到樹莓派上部署。具體方式是使用LLaMA.cpp中的convert-hf-to-gguf.py將原模型轉(zhuǎn)化成GGUF格式。
鑒于Raspberry Pi只有CPU,我們需要優(yōu)先考慮可以在CPU上運行的模型。本次選擇的大模型是Qwen2 0.5B。
Qwen2 0.5B是阿里云開源的新一代大語言模型,模型規(guī)模為0.49B參數(shù),支持最長達32K tokens的上下文長度,在多個評測基準上表現(xiàn)優(yōu)異,超越了Meta的Llama-3-70B。
這里我們直接從魔搭社區(qū)魔搭社區(qū)下載已經(jīng)量化過的GGUF模型文件。
#模型下載 wget https://www.modelscope.cn/models/qwen/Qwen2-0.5B-Instruct-GGUF/resolve/master/qwen2-0_5b-instruct-q5_k_m.gguf
1.3 模型運行
大模型推理引擎使用的是llama.cpp,實現(xiàn)模型推理對話。
./llama-cli -m /home/pi/qwen2-0_5b-instruct-q5_k_m.gguf -n 512 -co -i -if -f ../../prompts/chat-with-qwen.txt --in-prefix "<|im_start|>user " --in-suffix "<|im_end|> <|im_start|>assistant " -ngl 24 -fa
1.4 總結(jié)
經(jīng)過一番折騰,配置環(huán)境和編譯,耗去了幾天時間,樹莓派終于成功運行大模型了。雖然可以,但比較吃力??戳司W(wǎng)上其他人的嘗試,即使換用具有更強大處理能力的樹莓派5,運行作為資源有限設(shè)備設(shè)計的Phi-2-Q4(27億參數(shù)),由于沒有GPU支撐,所以速度也只有5.13 tokens/s。
所以說,樹莓派5在處理速度上相較于4B有了顯著提升,但在處理大型LLM時仍受到諸多限制??偨Y(jié)樹莓派跑大模型的痛點:一是它無法做模型量化,要么在本地PC機上做好量化再拷貝過來,要么直接下載使用GGUF模型文件。二是它只有CPU,計算能力的提升空間基本被鎖死了。如果要在樹莓派上跑模型,只能選用內(nèi)存占用較小且僅在 CPU 上運行的模型。
看網(wǎng)上有高人設(shè)想了一些解決方案,比如:
將樹莓派上的小GPU用起來。樹莓派5有個VideoCore GPU,支持Vulkan編程,而llama.cpp也有Vulkan后端,理論上是有可能的。但運行上有些問題,包括死鎖、輸出亂碼等,推測可能和shader有關(guān),還需要進一步研究。
用類似T-MAC的方法,加速樹莓派CPU的推理。T-MAC提出用look-up table (LUT) 代替計算,對于低比特量化的模型會很有幫助。例如4-bit相乘,只需要一個16x16的表就能預(yù)存所有可能的結(jié)果,把乘法變成了查表。
采用新的更高效的模型架構(gòu),例如RWKV?
但這些方法都還只是停留在理論設(shè)想階段,沒有落地實踐,那為什么不直接試下Intel 哪吒呢?
2
Intel哪吒開發(fā)套件上運行大模型Qwen 2.5
Intel 哪吒開發(fā)套件搭載了英特爾N97處理器(3.6GHz),配備64GB eMMC存儲和8GB LPDDR5內(nèi)存。英特爾N97處理器屬于 Intel Alder Lake-N 系列,采用僅 E-Core 的設(shè)計,專為輕量級辦公、教育設(shè)備和超低功耗筆記本電腦設(shè)計,成本和功耗更低,更適合嵌入式設(shè)備。
關(guān)鍵點來了!Intel 哪吒最大的優(yōu)勢就是自帶集成顯卡,Intel UHD Graphics,我們可以在iGPU上使用OpenVINO來運行大模型。
說干就干!
2.1安裝OpenVINO配置環(huán)境
2.1.1 安裝OpenVINO
從OpenVINO官網(wǎng)下載linux版本的壓縮包,再解壓,安裝依賴,配置環(huán)境變量。
#解壓 tar -zxvf l_openvino_toolkit_ubuntu22_2024.3.0.16041.1e3b88e4e3f_x86_64.tgz #安裝依賴包 cd l_openvino_toolkit_ubuntu22_2024.3.0.16041.1e3b88e4e3f_x86_64/ sudo -E ./install_dependencies/install_openvino_dependencies.sh #配置環(huán)境變量 source ./setupvars.sh
2.1.2安裝OpenCL runtime packages
既然我們要充分發(fā)揮Intel 哪吒的集成顯卡優(yōu)勢,就還要另外安裝OpenCL runtime packages來把模型部署到iGPU上。具體參考官方文檔,Configurations for Intel Processor Graphics (GPU) with OpenVINO — OpenVINO documentation參考網(wǎng)上經(jīng)驗,我使用deb包的方式進行安裝,從https://github.com/intel/compute-runtime/releases/tag/24.35.30872.22先下載11個deb包到開發(fā)板上,然后再dpkg安裝。
#Create temporary directory mkdir neo #Download all *.deb packages cd neo wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.20/intel-igc-core_1.0.17537.20_amd64.deb wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17537.20/intel-igc-opencl_1.0.17537.20_amd64.deb wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-level-zero-gpu-dbgsym_1.3.30872.22_amd64.ddeb wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-level-zero-gpu-legacy1-dbgsym_1.3.30872.22_amd64.ddeb wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-level-zero-gpu-legacy1_1.3.30872.22_amd64.deb wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-level-zero-gpu_1.3.30872.22_amd64.deb wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-opencl-icd-dbgsym_24.35.30872.22_amd64.ddeb wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-opencl-icd-legacy1-dbgsym_24.35.30872.22_amd64.ddeb wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-opencl-icd-legacy1_24.35.30872.22_amd64.deb wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/intel-opencl-icd_24.35.30872.22_amd64.deb wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/libigdgmm12_22.5.0_amd64.deb #Verify sha256 sums for packages wget https://github.com/intel/compute-runtime/releases/download/24.35.30872.22/ww35.sum sha256sum -c ww35.sum #install required dependencies apt install ocl-icd-libopencl1 #Install all packages as root sudo dpkg -i *.deb
2.2模型下載和轉(zhuǎn)換量化
2.2.1 模型下載
本次采用的大模型是Qwen 2.5-0.5B。Qwen2.5是阿里通義團隊近期最新發(fā)布的文本生成系列模型,基于更富的語料數(shù)據(jù)集訓(xùn)練,相較于 Qwen2,Qwen2.5 獲得了顯著更多的知識(MMLU:85+),并在編程能力(HumanEval 85+)和數(shù)學(xué)能力(MATH 80+)方面有了大幅提升。此外,新模型在指令執(zhí)行、生成長文本(超過 8K 標記)、理解結(jié)構(gòu)化數(shù)據(jù)(例如表格)以及生成結(jié)構(gòu)化輸出特別是 JSON 方面取得了顯著改進。Qwen2.5 模型總體上對各種 system prompt 更具適應(yīng)性,增強了角色扮演實現(xiàn)和聊天機器人的條件設(shè)置功能。Qwen2.5 語言模型支持高達 128K tokens,并能生成最多 8K tokens 的內(nèi)容。本次使用的是指令調(diào)優(yōu)的0.5B模型,其特點如下:
類型:因果語言模型
訓(xùn)練階段:預(yù)訓(xùn)練與后訓(xùn)練
架構(gòu):使用RoPE、SwiGLU、RMSNorm、注意力QKV偏置和綁定詞嵌入的transformers
參數(shù)數(shù)量:0.49億
非嵌入?yún)?shù)數(shù)量:0.36億
層數(shù):24
注意力頭數(shù)(GQA):查詢14個,鍵值對2個
上下文長度:完整32,768token,生成最多8192token
下載模型首選魔搭社區(qū),直接下載到Intel哪吒開發(fā)板上。
#安裝lfs git lfs install #下載模型 git clone https://www.modelscope.cn/qwen/Qwen2.5-0.5B-Instruct.git
2.2.2模型轉(zhuǎn)換量化
在部署模型之前,我們首先需要將原始的 PyTorch 模型轉(zhuǎn)換為 OpenVINO的 IR 靜態(tài)圖格式,并對其進行壓縮,以實現(xiàn)更輕量化的部署和最佳的性能表現(xiàn)。
(1)環(huán)境配置
新建一個虛擬環(huán)境,安裝依賴。
python3 -m venv openvino_env source openvino_env/bin/activate python3 -m pip install --upgrade pip pip install wheel setuptools pip install -r requirements.txt
(2)轉(zhuǎn)換和量化
通過 Optimum 提供的命令行工具 optimum-cli,我們可以一鍵完成模型的格式轉(zhuǎn)換和權(quán)重量化任務(wù)。
optimum-cli export openvino --model './local_dir' --task text-generation-with-past --weight-format int4 --group-size 128 --ratio 0.8 Qwen2.5-0.5B-Instruct-int4-ov
我們也可以根據(jù)模型的輸出結(jié)果,調(diào)整其中的量化參數(shù),包括:
--weight-format:量化精度,可以選擇fp32,fp16,int8,int4,int4_sym_g128,int4_asym_g128,int4_sym_g64,int4_asym_g64
--group-size:權(quán)重里共享量化參數(shù)的通道數(shù)量
--ratio:int4/int8 權(quán)重比例,默認為1.0,0.6表示60%的權(quán)重以 int4 表,40%以 int8 表示
--sym:是否開啟對稱量化
經(jīng)過一個稍微漫長的等待,終于,轉(zhuǎn)換成功!
2.2.3 模型部署
OpenVINO 目前提供兩種針對大語言模型的部署方案,一種是基于 Python 接口的 Optimum-intel 工具來進行部署,可以直接用 Transformers 庫的接口來部署模型;另一種是GenAI API 方式,它同時支持 Python 和 C++ 兩種編程語言,安裝容量不到200MB,提供更極致的性能和輕量化的部署方式,更適合邊緣設(shè)備上部署大模型。
本文采用的是后者,即GenAI API 方式。GenAI API 提供了 chat 模式的構(gòu)建方法,通過聲明 pipe.start_chat()以及pipe.finish_chat(),多輪聊天中的歷史數(shù)據(jù)將被以 kvcache 的形態(tài),在內(nèi)存中進行管理,從而提升運行效率。
1.創(chuàng)建一個python文件。命名為chat_genai.py
import argparse import openvino_genai def streamer(subword): print(subword, end='', flush=True) return False if __name__ == "__main__": parser = argparse.ArgumentParser(add_help=False) parser.add_argument('-h', '--help', action='help', help='Show this help message and exit.') parser.add_argument('-m', '--model_path', required=True, type=str, help='Required. model path') parser.add_argument('-l', '--max_sequence_length', default=256, required=False, type=int, help='Required. maximun length of output') parser.add_argument('-d', '--device', default='CPU', required=False, type=str, help='Required. device for inference') args = parser.parse_args() pipe = openvino_genai.LLMPipeline(args.model_path, args.device) config = openvino_genai.GenerationConfig() config.max_new_tokens = args.max_sequence_length pipe.start_chat() while True: try: prompt = input('question: ') except EOFError: break pipe.generate(prompt, config, streamer) print(' ----------') pipe.finish_chat()
2.運行流式聊天機器人
python3 chat_genai.py --model_path {your_path}/Qwen2.5-0.5B-Instruct-ov --max_sequence_length 4096 --device GPU
--model_path - OpenVINO IR 模型所在目錄的路徑。
--max_sequence_length - 輸出標記的最大大小。
--device - 運行推理的設(shè)備。例如:"CPU","GPU"。
我們來問它一個簡單的問題吧,讓它自我介紹一下,看看它能不能答出來。
可以,它對自己有個清晰的認識,阿里巴巴開發(fā)的大語言人工智能模型。
3
Intel 哪吒開發(fā)套件上運行大模型Phi-3.5-mini
還不死心,繼續(xù)上難度,再換一個尺寸更大的模型,看看Intel哪吒是否hold住?
這次我們選用的是Phi-3.5-mini,它是微軟推出的新一代 AI 模型系列中的輕量級模型,專為資源受限的環(huán)境設(shè)計,特別適合在資源受限的環(huán)境中進行復(fù)雜的語言處理任務(wù)。該模型具有以下特點:
(1)模型參數(shù)和結(jié)構(gòu):
Phi-3.5-mini 擁有38億參數(shù),是一個密集的僅解碼器Transformer模型,使用與Phi-3 Mini相同的分詞器。
該模型基于Phi-3的數(shù)據(jù)集構(gòu)建,包括合成數(shù)據(jù)和經(jīng)過篩選的公開網(wǎng)站數(shù)據(jù),重點關(guān)注高質(zhì)量、推理密集的數(shù)據(jù)。
(2)應(yīng)用和性能:
Phi-3.5-mini 特別適合在嵌入式系統(tǒng)和移動應(yīng)用中進行快速文本處理和代碼生成。
該模型在基準測試中的表現(xiàn)超越了GPT4o、Llama 3.1、Gemini Flash等同類模型,顯示出其強大的性能。
(3)設(shè)計目標和適用場景:
針對基礎(chǔ)快速推理任務(wù)設(shè)計,適合在內(nèi)存和算力受限的環(huán)境中運行,支持128k上下文長度。
該模型在處理長達128K個token的長上下文方面表現(xiàn)出色,這使其在多種語言處理任務(wù)中都非常有效。
(4)技術(shù)優(yōu)勢:
經(jīng)過嚴格的增強過程,包括監(jiān)督微調(diào)和直接首選項優(yōu)化,以確保精確地遵循指令和實施可靠的安全措施。
支持多語言處理和多輪對話能力,優(yōu)化了處理高質(zhì)量、推理密集數(shù)據(jù)的能力。
3.1下載模型
這次我們偷懶一下,直接下載已經(jīng)轉(zhuǎn)換好的IR文件到Intel哪吒開發(fā)板上。
huggingface-cli download --resume-download OpenVINO/Phi-3-mini-4k-instruct-int4-ov --local-dir Phi-3-mini-4k-instruct-int4-ov
參數(shù)規(guī)模3.8B的Phi-3.5-mini,轉(zhuǎn)換成IR格式后,模型大小為2.5G。
3.2運行流式聊天機器人
繼續(xù)采用GenAI API 方式,用iGPU推理。
python3 chat_genai.py --model_path {your_path}/Phi-3-mini-4k-instruct-int4-ov --max_sequence_length 4096 --device GPU
這次問它一個難一點的問題,比較一下python和rust兩種編程語言的優(yōu)劣。
Phi-3.5模型真的名不虛傳!簡直人生開掛了,輸出速度目測每秒10個token,整整持續(xù)輸出了二十多分鐘,共2903字,算上標點符合16285個。
令人難以想象這是在一個單片機上跑大模型的效果,要么是Phi-3.5模型,要么是Intel 哪吒厲害,要么是微軟和英特爾聯(lián)手特別厲害!
4
總結(jié)與鳴謝
在Intel哪吒開發(fā)套件上,配合OpenVINO,可以非??焖俦憬莸碾x線部署大模型,特別是一些SLM模型,非常適合做智能硬件的開發(fā),很好地賦能創(chuàng)客基于成熟硬件,打造端云協(xié)同的AI應(yīng)用。或者重新定義全新硬件,開發(fā)軟硬件一體的AI產(chǎn)品。
最后,再次感謝Intel組織的這次2024 Intel“走近開發(fā)者”互動活動讓我有機會能試用到哪吒開發(fā)套件,也感謝OpenVINO的實戰(zhàn)workshop,給我們這么好用的大模型工具。
參考文檔:
1、實戰(zhàn)精選| 5分鐘利用OpenVINO部署Qwen2.5
https://community.modelscope.cn/66f10c6b2db35d1195eed3c8.html
2、開發(fā)者實戰(zhàn)丨如何利用 OpenVINO 部署 Phi-3.5 全家桶
https://mp.weixin.qq.com/s/yROq_Zu3G1a5x8eV7TUmDA
-
intel
+關(guān)注
關(guān)注
19文章
3482瀏覽量
185994 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97456 -
樹莓派
+關(guān)注
關(guān)注
116文章
1707瀏覽量
105629
原文標題:開發(fā)者實戰(zhàn)|樹莓派跑LLM難上手?也許你可以試試Intel哪吒開發(fā)板
文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論