膝上型電腦上的聊天機器人: 在英特爾 Meteor Lake 上執行 Phi-2

HuggingFace發表於2024-04-16

重新審視大衛與歌利亞的故事

對應於其強大的能力,大語言模型 (LLM) 需要強大的算力支撐,而個人計算機上很難滿足這一需求。因此,我們別無選擇,只能將它們部署至由本地或雲端託管的效能強大的定製 AI 伺服器上。

為何需要將 LLM 推理本地化

如果我們可以在典配個人計算機上執行最先進的開源 LLM 會如何?好處簡直太多了:

  • 增強隱私保護: 私有資料不需要傳送至外部 API 進行推理。
  • 降低延遲: 節省網路往返的次數。
  • 支援離線工作: 使用者可以在沒有網路連線的情況下使用 LLM (常旅客的夢想!)。
  • 降低成本: 無需在 API 呼叫或模型託管上花一分錢。
  • 可定製: 每個使用者都可以找到最適合他們日常工作任務的模型,甚至可以對其進行微調或使用本地檢索增強生成 (RAG) 來提高適配度。

這一切的一切都太誘人了!那麼,為什麼我們沒有這樣做呢?回到我們的開場白,一般典配膝上型電腦沒有足夠的計算能力來執行具有可接受效能的 LLM。它們既沒有數千核的 GPU,也沒有快如閃電的高記憶體頻寬。

接受失敗,就此放棄?當然不!

為何現在 LLM 推理本地化有戲了

聰明的人類總能想到法子把一切東西變得更小、更快、更優雅、更具價效比。近幾個月來,AI 社群一直在努力在不影響其預測質量的前提下縮小模型。其中,有三個領域的進展最振奮人心:

  • 硬體加速: 現代 CPU 架構內建了專門用於加速最常見的深度學習運算元 (如矩陣乘或卷積) 的硬體,這使得在 AI PC 上使能新的生成式 AI 應用並顯著提高其速度和效率成為可能。

  • 小語言模型 (Small Language Models,SLMs): 得益於在模型架構和訓練技術上的創新,這些小模型的生成質量與大模型相當甚至更好。同時,由於它們的引數較少,推理所需的計算和記憶體也較少,因此非常適合資源受限的裝置。

  • 量化: 量化技術透過減少模型權重和啟用的位寬來降低記憶體和計算要求,如將權重和啟用從 16 位浮點 ( fp16 ) 降至 8 位整型 ( int8 )。減少位寬意味著模型推理時的記憶體需求更少,因而能加速記憶體受限步驟 (如文字生成的解碼階段) 的延遲。此外,權重和啟用量化後,能充分利用 AI 加速器的整型運算加速模組,因而可以加速矩陣乘等運算。

本文,我們將綜合利用以上三種技術對微軟 Phi-2 模型進行 4 位元權重量化,隨後在搭載英特爾 Meteor Lake CPU 的中端膝上型電腦上進行推理。在此過程中,我們主要使用整合了英特爾 OpenVINO 的 Hugging Face Optimum Intel 庫。

注意: 如果你想同時量化權重和啟用的話,可參閱 該文件

我們開始吧。

英特爾 Meteor Lake

英特爾 Meteor Lake 於 2023 年 12 月推出,現已更名為 Core Ultra,其是一個專為高效能膝上型電腦最佳化的全新 架構

Meteor Lake 是首款使用 chiplet 架構的英特爾客戶端處理器,其包含:

  • 高至 16 核的 高能效 CPU

  • 整合顯示卡 (iGPU): 高至 8 個 Xe 核心,每個核心含 16 個 Xe 向量引擎 (Xe Vector Engines,XVE)。顧名思義,XVE 可以對 256 位元的向量執行向量運算。它還支援 DP4a 指令,該指令可用於計算兩個寬度為 4 位元組的向量的點積,將結果儲存成一個 32 位整數,並將其與另一個 32 位整數相加。

  • 神經處理單元 (Neural Processing Unit,NPU),是英特爾架構的首創。NPU 是專為客戶端 AI 打造的、高效專用的 AI 引擎。它經過最佳化,可有效處理高計算需求的 AI 計算,從而釋放主 CPU 和顯示卡的壓力,使其可處理其他任務。與利用 CPU 或 iGPU 執行 AI 任務相比,NPU 的設計更加節能。

為了執行下面的演示,我們選擇了一臺搭載了 Core Ultra 7 155H CPU中端膝上型電腦。現在,我們選一個可愛的小語言模型到這檯膝上型電腦上跑跑看吧!

注意: 要在 Linux 上執行此程式碼,請先遵照 此說明 安裝 GPU 驅動。

微軟 Phi-2 模型

微軟於 2023 年 12 月 釋出Phi-2 模型,它是一個 27 億引數的文字生成模型。

微軟給出的基準測試結果表明,Phi-2 並未因其較小的尺寸而影響生成質量,其表現優於某些最先進的 70 億引數和 130 億引數的 LLM,甚至與更大的 Llama-2 70B 模型相比也僅有一步之遙。

這使其成為可用於膝上型電腦推理的有利候選。另一個候選是 11 億引數的 TinyLlama 模型。

現在,讓我們看看如何縮小模型以使其更小、更快。

使用英特爾 OpenVINO 和 Optimum Intel 進行量化

英特爾 OpenVINO 是一個開源工具包,其針對許多英特爾硬體平臺對 AI 推理工作負載進行最佳化 (Github文件),模型量化是其重要特性之一。

我們與英特爾合作,將 OpenVINO 整合至 Optimum Intel 中,以加速 Hugging Face 模型在英特爾平臺上的效能 (Github文件)。

首先,請確保你安裝了最新版本的 optimum-intel 及其依賴庫:

pip install --upgrade-strategy eager optimum[openvino,nncf]

optimum-intel 支援使用者很容易地把 Phi-2 量化至 4 位元。我們定義量化配置,設定最佳化引數,並從 Hub 上載入模型。一旦量化和最佳化完成,我們可將模型儲存至本地。

from transformers import AutoTokenizer, pipeline
from optimum.intel import OVModelForCausalLM, OVWeightQuantizationConfig

model_id = "microsoft/phi-2"
device = "gpu"
# Create the quantization configuration with desired quantization parameters
q_config = OVWeightQuantizationConfig(bits=4, group_size=128, ratio=0.8)

# Create OpenVINO configuration with optimal settings for this model
ov_config = {"PERFORMANCE_HINT": "LATENCY", "CACHE_DIR": "model_cache", "INFERENCE_PRECISION_HINT": "f32"}

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = OVModelForCausalLM.from_pretrained(
    model_id,
    export=True, # export model to OpenVINO format: should be False if model already exported
    quantization_config=q_config,
    device=device,
    ov_config=ov_config,
  )

# Compilation step : if not explicitly called, compilation will happen before the first inference
model.compile()
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
results = pipe("He's a dreadful magician and")

save_directory = "phi-2-openvino"
model.save_pretrained(save_directory)
tokenizer.save_pretrained(save_directory)

ratio 引數用於控制將多少權重量化為 4 位元 (此處為 80%),其餘會量化至 8 位元。 group_size 引數定義了權重量化組的大小 (此處為 128),每個組都具有獨立的縮放因子。減小這兩個值通常會提高準確度,但同時會犧牲模型尺寸和推理延遲。

你可以從我們的 文件 中獲取更多有關權重量化的資訊。

注意: 你可在 Github 上 找到完整的文字生成示例 notebook。

那麼,在我們的膝上型電腦上執行量化模型究竟有多快?請觀看以下影片親自體驗一下!播放時,請選擇 1080p 解析度以獲得最大清晰度。

在第一個影片中,我們向模型提了一個高中物理問題: “Lily has a rubber ball that she drops from the top of a wall. The wall is 2 meters tall. How long will it take for the ball to reach the ground?

在第二個影片中,我們向模型提了一個編碼問題: “Write a class which implements a fully connected layer with forward and backward functions using numpy. Use markdown markers for code.

如你所見,模型對這兩個問題生成的答案質量都非常高。量化加快了生成速度,但並沒有降低 Phi-2 的質量。我本人很願意在我的膝上型電腦上每天使用這個模型。

總結

藉助 Hugging Face 和英特爾的工作,現在你可以在膝上型電腦上執行 LLM,並享受本地推理帶來的諸多優勢,如隱私、低延遲和低成本。我們希望看到更多好模型能夠針對 Meteor Lake 平臺及其下一代平臺 Lunar Lake 進行最佳化。Optimum Intel 庫使得在英特爾平臺上對量化模型變得非常容易,所以,何不試一下並在 Hugging Face Hub 上分享你生成的優秀模型呢?多多益善!

下面列出了一些可幫助大家入門的資源:

  • Optimum Intel 文件
  • 來自英特爾及 Hugging Face 的 開發者資源
  • 深入探討模型量化的影片: 第 1 部分第 2 部分

如若你有任何問題或反饋,我們很樂意在 Hugging Face 論壇 上解答。

感謝垂閱!


英文原文: https://hf.co/blog/phi2-intel-meteor-lake
原文作者: Julien Simon,Ella Charlaix,Ofir Zafrir,Igor Margulis,Guy Boudoukh,Moshe Wasserblat
譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態資料上的應用及大規模模型的訓練推理。

相關文章