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

在找 OpenVINO 的資料時,剛好看到 IPEX-LLM
於是乎就也研究了一下…
IPEX-LLM
IPEX-LLM 是 Intel 推出針對 intel 的 CPU、iGPU、GPU 和 NPU 的 LLM 大語言模型的函式庫,跟目前主流的框架都有整合,能無縫地使用,另外也支持許多的 LLM 模型,模型也支持 low-bit (FP8/FP6/FP4/INT4) 的量化。本篇主要著重在 NPU 的部分,其他部分有興趣的讀者可以去 IPEX-LLM 的 Github 官網看看。
Prerequisites
NPU 在使用前要先安裝驅動,目前 IPEX-LLM 推薦的版本為 32.0.100.3104,這版本有經過驗證過,建議使用這個版本,關於 NPU 的驅動安裝方法,在這篇文章有詳細介紹,大家可以去這裡觀看。
Intel NPU Driver (32.0.100.3104) Download Link
使用 Intel NPU 加速推理 LLM Model - TinyLlama
利用 Intel AI Boost NPU 提升 LLM 推理效能,透過 TinyLlama 測試 Intel NPU 加速 AI 運算,並提供完整技術指南,涵蓋驅動安裝與模型編譯。
閱讀全文接著在執行前,我們要針對不同的 NPU 設定環境變數,小心注意 CMD 和 PowerShell 的指令是不同的。
CPU | Process Number | Code Name | Env Var |
---|---|---|---|
Intel Core™ Ultra 7 Processors (Series 2) | 258V | Lunar Lake | X |
Intel Core™ Ultra 5 Processors (Series 2) | 228V / 226V | Lunar Lake | set IPEX_LLM_NPU_DISABLE_COMPILE_OPT=1 |
Intel Core™ Ultra Processors (Series 2) | 2xxK / 2xxH | Arrow Lake | set IPEX_LLM_NPU_ARL=1 |
Intel Core™ Ultra Processors (Series 1) | 1xxH | Meteor Lake | set IPEX_LLM_NPU_MTL=1 |
CPU | Process Number | Code Name | Env Var |
---|---|---|---|
Intel Core™ Ultra 7 Processors (Series 2) | 258V | Lunar Lake | X |
Intel Core™ Ultra 5 Processors (Series 2) | 228V / 226V | Lunar Lake | $env:IPEX_LLM_NPU_DISABLE_COMPILE_OPT = "1" |
Intel Core™ Ultra Processors (Series 2) | 2xxK / 2xxH | Arrow Lake | $env:IPEX_LLM_NPU_ARL = "1" |
Intel Core™ Ultra Processors (Series 1) | 1xxH | Meteor Lake | $env:IPEX_LLM_NPU_MTL = "1" |
Llama.cpp
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
Download
我們可以先下載最新的 2.3.0 版本:
Protable Llama.cpp Windows NPU Download
下載後一共有這些檔案:

Inference
我們這邊測試 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?"
Result
我們可以看到有在轉換 GGUF 模型到 NPU Model,這個 NPU Model 會儲存在硬碟上,會額外建立資料夾來存放,後續就可以直接使用,不用再次轉換了。

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

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

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

Transformers
除了 Llama.cpp 之外,我們可以透過 Transformers 來使用 NPU 推理。
Download
由於要使用 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
Inference
這裡我們示範推理 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
還有一些其他的參數可以設定,像是 low-bit
可以調整模型使用的精度,這些都可以到 Github - Run HuggingFace transformers Models on Intel NPU 了解,上面也有列出不同的模型對應的 Python script!
Result
過程中一樣有有轉換模型,並將轉換好的模型輸出到硬碟上

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

Conclusion
Intel 有針對一些主流的框架提供透過 NPU 裝置推理的方法,有 Intel NPU 裝置的讀者,不妨試用看看,雖然我測試下來速度都差強人意,但說不定你能得到意想不到的結果!
Reference
- https://github.com/intel/ipex-llm/blob/main/docs/mddocs/Quickstart/llama_cpp_npu_portable_zip_quickstart.md
- https://github.com/intel/ipex-llm/blob/main/docs/mddocs/Quickstart/npu_quickstart.md#experimental-llamacpp-support
- https://github.com/ipex-llm/ipex-llm/releases/tag/v2.3.0-nightly
- https://github.com/intel/ipex-llm
- https://github.com/intel/ipex-llm/tree/main/python/llm/example/NPU/HF-Transformers-AutoModels/LLM
如果你覺得這篇文章有用 可以考慮贊助飲料給大貓咪