目錄

廣告 AD

IPEX-LLM:如何使用 Intel NPU 推理大型語言模型?

在找 OpenVINO 的資料時,剛好看到 IPEX-LLM

於是乎就也研究了一下…

廣告 AD

Github - IPEX-LLM

IPEX-LLM 是 Intel 推出針對 intel 的 CPU、iGPU、GPU 和 NPU 的 LLM 大語言模型的函式庫,跟目前主流的框架都有整合,能無縫地使用,另外也支持許多的 LLM 模型,模型也支持 low-bit (FP8/FP6/FP4/INT4) 的量化。本篇主要著重在 NPU 的部分,其他部分有興趣的讀者可以去 IPEX-LLM 的 Github 官網看看。


NPU 在使用前要先安裝驅動,目前 IPEX-LLM 推薦的版本為 32.0.100.3104,這版本有經過驗證過,建議使用這個版本,關於 NPU 的驅動安裝方法,在這篇文章有詳細介紹,大家可以去這裡觀看。

Intel NPU Driver (32.0.100.3104) Download Link

使用 Intel NPU 加速推理 LLM Model - TinyLlama

使用 Intel NPU 加速推理 LLM Model - TinyLlama

利用 Intel AI Boost NPU 提升 LLM 推理效能,透過 TinyLlama 測試 Intel NPU 加速 AI 運算,並提供完整技術指南,涵蓋驅動安裝與模型編譯。

閱讀全文

接著在執行前,我們要針對不同的 NPU 設定環境變數,小心注意 CMD 和 PowerShell 的指令是不同的。

CPUProcess NumberCode NameEnv Var
Intel Core™ Ultra 7 Processors (Series 2)258VLunar LakeX
Intel Core™ Ultra 5 Processors (Series 2)228V / 226VLunar Lakeset IPEX_LLM_NPU_DISABLE_COMPILE_OPT=1
Intel Core™ Ultra Processors (Series 2)2xxK / 2xxHArrow Lakeset IPEX_LLM_NPU_ARL=1
Intel Core™ Ultra Processors (Series 1)1xxHMeteor Lakeset IPEX_LLM_NPU_MTL=1
CPUProcess NumberCode NameEnv Var
Intel Core™ Ultra 7 Processors (Series 2)258VLunar LakeX
Intel Core™ Ultra 5 Processors (Series 2)228V / 226VLunar Lake$env:IPEX_LLM_NPU_DISABLE_COMPILE_OPT = "1"
Intel Core™ Ultra Processors (Series 2)2xxK / 2xxHArrow Lake$env:IPEX_LLM_NPU_ARL = "1"
Intel Core™ Ultra Processors (Series 1)1xxHMeteor Lake$env:IPEX_LLM_NPU_MTL = "1"

IPEX-LLM 目前有推出 NPU 版本的 Llama.cpp 版本,有給 protable 版本,下載就可以使用了,但目前只有 llama-cli 沒有 llama-server,且模型也只支援以下三個:

  • meta-llama/Llama-3.2-3B-Instruct
  • deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
  • deepseek-ai/DeepSeek-R1-Distill-Qwen-7B

我們可以先下載最新的 2.3.0 版本:

Protable Llama.cpp Windows NPU Download

下載後一共有這些檔案:


我們這邊測試 Llama-3.2-3B-Instruct 的模型,直接下載 GGUF 的格式 Huggingface - Llama-3.2-3B-Instruct-Q4_K_M.gguf,然後運行下列指令,記得要先完成 IPEX-LLM - Prerequisites 的步驟。

llama-cli-npu.exe -m Llama-3.2-3B-Instruct-Q4_K_M.gguf -n 32 --prompt "What is the future of AI?"

我們可以看到有在轉換 GGUF 模型到 NPU Model,這個 NPU Model 會儲存在硬碟上,會額外建立資料夾來存放,後續就可以直接使用,不用再次轉換了。

並且 NPU 在推理過程中是有在使用的:

NPU 的速度大約是這個樣子,沒有很快,但可能是目前這個還在實驗階段,後續可能會提升效能,等之後再試試看了。

補個 CPU 的速度,比 NPU 快多了 XD


除了 Llama.cpp 之外,我們可以透過 Transformers 來使用 NPU 推理。


由於要使用 IPEX-LLM 的 package,所以我們要先下載

pip install --pre --upgrade ipex-llm[npu]

有些模型需要更新的 transformers 版本和 accelerate 版本,所以需要額外的升級

  • Llama-3.2-1B-Instruct / Llama-3.2-3B-Instruct
    pip install transformers==4.45.0 accelerate==0.33.0
  • glm-edge-1.5b-chat / glm-edge-4b-chat
    pip install transformers==4.47.0 accelerate==0.26.0

這裡我們示範推理 Llama-3.2-3B-Instruct,IPEX-LLM 對不同的模型提供不同的 Python script,Llama 3.2 3B 的檔案為 Github - llama3.py,記得下載下來後執行下列的指令。save-directory 是用來儲存 NPU 格式的模型檔案,如果 save-directory 的路徑不存在或是模型不存在,則會讀取 repo-id-or-model-path 所設定的檔案,並轉換成 NPU 格式後儲存到 save-directory 上。repo-id-or-model-path 記得設定為自己模型的路徑,save-directory 可以根據需求更換。

python llama3.py --repo-id-or-model-path Llama-3.2-3B-Instruct --save-directory ./llama_3.2_3B_converted
注意
記得要先完成 IPEX-LLM - Prerequisites 的步驟~

還有一些其他的參數可以設定,像是 low-bit 可以調整模型使用的精度,這些都可以到 Github - Run HuggingFace transformers Models on Intel NPU 了解,上面也有列出不同的模型對應的 Python script!


過程中一樣有有轉換模型,並將轉換好的模型輸出到硬碟上

最後輸出如下,一切運作正常!


Intel 有針對一些主流的框架提供透過 NPU 裝置推理的方法,有 Intel NPU 裝置的讀者,不妨試用看看,雖然我測試下來速度都差強人意,但說不定你能得到意想不到的結果!



廣告 AD