大型語言模型(LLM)通過其卓越的文本理解與生成能力,為機器智能帶來了革命性的進步。然而,這些模型的運行通常需要消耗大量的計算資源,因此它們主要部署在性能強大的服務器上。
隨著技術的發展和邊緣計算的興起,現在有潛力在更小巧、便攜的設備上部署這些模型。例如,Raspberry Pi 樹莓派和 Intel 哪吒開發套件等單片機。盡管體積小巧,但它們具備足夠的能力運行某些精簡版本的模型。本文就兩款單片機上運行LLM做一個對比,先嘗試在Raspberry Pi 4B運行大模型,然后將該方案在Intel哪吒開發板重建。
1
Raspberry Pi4上運行大模型Qwen2 0.5B
一般情況下,模型需要兩倍內存大小才能正常運行。因此,本方案使用的8GB的Raspberry Pi4 4B來做推理。
1.1環境部署
#部署虛擬環境 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 #編譯環境 cd llama.cpp make
1.2 模型下載
樹莓派4b的8GB RAM,即使樹莓派5,都不太適合做模型的量化。只能在PC機上做好量化后,再把量化后的模型文件拷貝到樹莓派上部署。具體方式是使用LLaMA.cpp中的convert-hf-to-gguf.py將原模型轉化成GGUF格式。
鑒于Raspberry Pi只有CPU,我們需要優先考慮可以在CPU上運行的模型。本次選擇的大模型是Qwen2 0.5B。
Qwen2 0.5B是阿里云開源的新一代大語言模型,模型規模為0.49B參數,支持最長達32K tokens的上下文長度,在多個評測基準上表現優異,超越了Meta的Llama-3-70B。
這里我們直接從魔搭社區魔搭社區下載已經量化過的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,實現模型推理對話。
./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 總結
經過一番折騰,配置環境和編譯,耗去了幾天時間,樹莓派終于成功運行大模型了。雖然可以,但比較吃力??戳司W上其他人的嘗試,即使換用具有更強大處理能力的樹莓派5,運行作為資源有限設備設計的Phi-2-Q4(27億參數),由于沒有GPU支撐,所以速度也只有5.13 tokens/s。
所以說,樹莓派5在處理速度上相較于4B有了顯著提升,但在處理大型LLM時仍受到諸多限制??偨Y樹莓派跑大模型的痛點:一是它無法做模型量化,要么在本地PC機上做好量化再拷貝過來,要么直接下載使用GGUF模型文件。二是它只有CPU,計算能力的提升空間基本被鎖死了。如果要在樹莓派上跑模型,只能選用內存占用較小且僅在 CPU 上運行的模型。
看網上有高人設想了一些解決方案,比如:
將樹莓派上的小GPU用起來。樹莓派5有個VideoCore GPU,支持Vulkan編程,而llama.cpp也有Vulkan后端,理論上是有可能的。但運行上有些問題,包括死鎖、輸出亂碼等,推測可能和shader有關,還需要進一步研究。
用類似T-MAC的方法,加速樹莓派CPU的推理。T-MAC提出用look-up table (LUT) 代替計算,對于低比特量化的模型會很有幫助。例如4-bit相乘,只需要一個16x16的表就能預存所有可能的結果,把乘法變成了查表。
采用新的更高效的模型架構,例如RWKV?
但這些方法都還只是停留在理論設想階段,沒有落地實踐,那為什么不直接試下Intel 哪吒呢?
2
Intel哪吒開發套件上運行大模型Qwen 2.5
Intel 哪吒開發套件搭載了英特爾N97處理器(3.6GHz),配備64GB eMMC存儲和8GB LPDDR5內存。英特爾N97處理器屬于 Intel Alder Lake-N 系列,采用僅 E-Core 的設計,專為輕量級辦公、教育設備和超低功耗筆記本電腦設計,成本和功耗更低,更適合嵌入式設備。
關鍵點來了!Intel 哪吒最大的優勢就是自帶集成顯卡,Intel UHD Graphics,我們可以在iGPU上使用OpenVINO來運行大模型。
說干就干!
2.1安裝OpenVINO配置環境
2.1.1 安裝OpenVINO
從OpenVINO官網下載linux版本的壓縮包,再解壓,安裝依賴,配置環境變量。
#解壓 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 #配置環境變量 source ./setupvars.sh
2.1.2安裝OpenCL runtime packages
既然我們要充分發揮Intel 哪吒的集成顯卡優勢,就還要另外安裝OpenCL runtime packages來把模型部署到iGPU上。具體參考官方文檔,Configurations for Intel Processor Graphics (GPU) with OpenVINO — OpenVINO documentation參考網上經驗,我使用deb包的方式進行安裝,從https://github.com/intel/compute-runtime/releases/tag/24.35.30872.22先下載11個deb包到開發板上,然后再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模型下載和轉換量化
2.2.1 模型下載
本次采用的大模型是Qwen 2.5-0.5B。Qwen2.5是阿里通義團隊近期最新發布的文本生成系列模型,基于更富的語料數據集訓練,相較于 Qwen2,Qwen2.5 獲得了顯著更多的知識(MMLU:85+),并在編程能力(HumanEval 85+)和數學能力(MATH 80+)方面有了大幅提升。此外,新模型在指令執行、生成長文本(超過 8K 標記)、理解結構化數據(例如表格)以及生成結構化輸出特別是 JSON 方面取得了顯著改進。Qwen2.5 模型總體上對各種 system prompt 更具適應性,增強了角色扮演實現和聊天機器人的條件設置功能。Qwen2.5 語言模型支持高達 128K tokens,并能生成最多 8K tokens 的內容。本次使用的是指令調優的0.5B模型,其特點如下:
類型:因果語言模型
訓練階段:預訓練與后訓練
架構:使用RoPE、SwiGLU、RMSNorm、注意力QKV偏置和綁定詞嵌入的transformers
參數數量:0.49億
非嵌入參數數量:0.36億
層數:24
注意力頭數(GQA):查詢14個,鍵值對2個
上下文長度:完整32,768token,生成最多8192token
下載模型首選魔搭社區,直接下載到Intel哪吒開發板上。
#安裝lfs git lfs install #下載模型 git clone https://www.modelscope.cn/qwen/Qwen2.5-0.5B-Instruct.git
2.2.2模型轉換量化
在部署模型之前,我們首先需要將原始的 PyTorch 模型轉換為 OpenVINO的 IR 靜態圖格式,并對其進行壓縮,以實現更輕量化的部署和最佳的性能表現。
(1)環境配置
新建一個虛擬環境,安裝依賴。
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)轉換和量化
通過 Optimum 提供的命令行工具 optimum-cli,我們可以一鍵完成模型的格式轉換和權重量化任務。
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
我們也可以根據模型的輸出結果,調整其中的量化參數,包括:
--weight-format:量化精度,可以選擇fp32,fp16,int8,int4,int4_sym_g128,int4_asym_g128,int4_sym_g64,int4_asym_g64
--group-size:權重里共享量化參數的通道數量
--ratio:int4/int8 權重比例,默認為1.0,0.6表示60%的權重以 int4 表,40%以 int8 表示
--sym:是否開啟對稱量化
經過一個稍微漫長的等待,終于,轉換成功!
2.2.3 模型部署
OpenVINO 目前提供兩種針對大語言模型的部署方案,一種是基于 Python 接口的 Optimum-intel 工具來進行部署,可以直接用 Transformers 庫的接口來部署模型;另一種是GenAI API 方式,它同時支持 Python 和 C++ 兩種編程語言,安裝容量不到200MB,提供更極致的性能和輕量化的部署方式,更適合邊緣設備上部署大模型。
本文采用的是后者,即GenAI API 方式。GenAI API 提供了 chat 模式的構建方法,通過聲明 pipe.start_chat()以及pipe.finish_chat(),多輪聊天中的歷史數據將被以 kvcache 的形態,在內存中進行管理,從而提升運行效率。
1.創建一個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 - 運行推理的設備。例如:"CPU","GPU"。
我們來問它一個簡單的問題吧,讓它自我介紹一下,看看它能不能答出來。
可以,它對自己有個清晰的認識,阿里巴巴開發的大語言人工智能模型。
3
Intel 哪吒開發套件上運行大模型Phi-3.5-mini
還不死心,繼續上難度,再換一個尺寸更大的模型,看看Intel哪吒是否hold住?
這次我們選用的是Phi-3.5-mini,它是微軟推出的新一代 AI 模型系列中的輕量級模型,專為資源受限的環境設計,特別適合在資源受限的環境中進行復雜的語言處理任務。該模型具有以下特點:
(1)模型參數和結構:
Phi-3.5-mini 擁有38億參數,是一個密集的僅解碼器Transformer模型,使用與Phi-3 Mini相同的分詞器。
該模型基于Phi-3的數據集構建,包括合成數據和經過篩選的公開網站數據,重點關注高質量、推理密集的數據。
(2)應用和性能:
Phi-3.5-mini 特別適合在嵌入式系統和移動應用中進行快速文本處理和代碼生成。
該模型在基準測試中的表現超越了GPT4o、Llama 3.1、Gemini Flash等同類模型,顯示出其強大的性能。
(3)設計目標和適用場景:
針對基礎快速推理任務設計,適合在內存和算力受限的環境中運行,支持128k上下文長度。
該模型在處理長達128K個token的長上下文方面表現出色,這使其在多種語言處理任務中都非常有效。
(4)技術優勢:
經過嚴格的增強過程,包括監督微調和直接首選項優化,以確保精確地遵循指令和實施可靠的安全措施。
支持多語言處理和多輪對話能力,優化了處理高質量、推理密集數據的能力。
3.1下載模型
這次我們偷懶一下,直接下載已經轉換好的IR文件到Intel哪吒開發板上。
huggingface-cli download --resume-download OpenVINO/Phi-3-mini-4k-instruct-int4-ov --local-dir Phi-3-mini-4k-instruct-int4-ov
參數規模3.8B的Phi-3.5-mini,轉換成IR格式后,模型大小為2.5G。
3.2運行流式聊天機器人
繼續采用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兩種編程語言的優劣。
Phi-3.5模型真的名不虛傳!簡直人生開掛了,輸出速度目測每秒10個token,整整持續輸出了二十多分鐘,共2903字,算上標點符合16285個。
令人難以想象這是在一個單片機上跑大模型的效果,要么是Phi-3.5模型,要么是Intel 哪吒厲害,要么是微軟和英特爾聯手特別厲害!
4
總結與鳴謝
在Intel哪吒開發套件上,配合OpenVINO,可以非??焖俦憬莸碾x線部署大模型,特別是一些SLM模型,非常適合做智能硬件的開發,很好地賦能創客基于成熟硬件,打造端云協同的AI應用?;蛘咧匦露x全新硬件,開發軟硬件一體的AI產品。
最后,再次感謝Intel組織的這次2024 Intel“走近開發者”互動活動讓我有機會能試用到哪吒開發套件,也感謝OpenVINO的實戰workshop,給我們這么好用的大模型工具。
參考文檔:
1、實戰精選| 5分鐘利用OpenVINO部署Qwen2.5
https://community.modelscope.cn/66f10c6b2db35d1195eed3c8.html
2、開發者實戰丨如何利用 OpenVINO 部署 Phi-3.5 全家桶
https://mp.weixin.qq.com/s/yROq_Zu3G1a5x8eV7TUmDA
-
intel
+關注
關注
19文章
3482瀏覽量
185918 -
開發板
+關注
關注
25文章
5032瀏覽量
97371 -
樹莓派
+關注
關注
116文章
1706瀏覽量
105607
原文標題:開發者實戰|樹莓派跑LLM難上手?也許你可以試試Intel哪吒開發板
文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論