大語言模型快速推理: 在 Habana Gaudi2 上推理 BLOOMZ

HuggingFace發表於2023-04-06

本文將展示如何在 Habana® Gaudi®2 上使用 ? Optimum Habana。Optimum Habana 是 Gaudi2 和 ? Transformers 庫之間的橋樑。本文設計並實現了一個大模型推理基準測試,證明瞭透過使用 Optimum Habana 你將能夠在 Gaudi2 上獲得 比目前市面上任何可用的 GPU 都快的推理速度

隨著模型越來越大,將它們部署到生產環境中以用於推理也變得越來越具有挑戰性。硬體和軟體都需要很多創新來應對這些挑戰,讓我們來深入瞭解 Optimum Habana 是如何有效地克服這些挑戰的!

BLOOMZ

BLOOM 是一個 1760 億引數的自迴歸模型,經訓練後可用於文字生成。它可以處理 46 種不同的語言以及 13 種程式語言。作為 BigScience 計劃的一部分,BLOOM 作為一個開放科學專案,來自全球的大量的研究人員和工程師參與了模型的設計和訓練。最近,我們又釋出了架構與 BLOOM 完全相同的模型: BLOOMZ,它是 BLOOM 在多個任務上的微調版本,具有更好的泛化和零樣本 1 能力。

如此大的模型在 訓練推理 兩個場景下都對記憶體和速度提出了新的挑戰。即使是使用 16 位精度,一個模型也需要 352 GB 的記憶體!目前你可能很難找到一個具有如此大記憶體的裝置,但像 Habana Gaudi2 這樣先進的硬體已能讓低延遲 BLOOM 和 BLOOMZ 模型推理變得可能。

Habana Gaudi2

Gaudi2 是 Habana Labs 設計的第二代 AI 硬體加速器。單個伺服器包含 8 張加速卡 (稱為 Habana 處理單元 (Habana Processing Units),或 HPU),每張卡有 96GB 的記憶體,這為容納超大模型提供了可能。但是,如果僅僅是記憶體大,而計算速度很慢,也沒辦法將其用於模型託管服務。幸運的是,Gaudi2 在這方面證明瞭自己,大放異彩: 它與 GPU 的不同之處在於,它的架構使加速器能夠並行執行通用矩陣乘法 (General Matrix Multiplication,GeMM) 和其他操作,從而加快了深度學習工作流。這些特性使 Gaudi2 成為 LLM 訓練和推理的理想方案。

Habana 的 SDK SynapseAI™ 支援 PyTorch 和 DeepSpeed 以加速 LLM 訓練和推理。SynapseAI 圖編譯器 會最佳化整個計算圖的執行過程 (如透過運算元融合、資料佈局管理、並行化、流水線、記憶體管理、圖最佳化等手段)。

此外,最近 SynapseAI 還引入了 HPU graphsDeepSpeed-inference 的支援,這兩者非常適合延遲敏感型的應用,下面的基準測試結果即很好地說明瞭這一點。

以上所有功能都整合進了 ? Optimum Habana 庫,因此在 Gaudi 上部署模型非常簡單。你可以閱讀 相應檔案 快速起步。

如果你想試試 Gaudi2,請登入 英特爾開發者雲 (Intel Developer Cloud) 並按照 指南 申請。

測試基準

在本節中,我們將提供 BLOOMZ 在 Gaudi2、第一代 Gaudi 和 Nvidia A100 80GB 上的早期基準測試。雖然這些裝置記憶體都不小,但由於模型太大,單個裝置還是放不下整個 BLOOMZ 模型。為瞭解決這個問題,我們要使用 DeepSpeed,這是一個深度學習最佳化庫,它實現了很多記憶體最佳化和速度最佳化以加速模型推理。特別地,我們在這裡依賴 DeepSpeed-inference,它引入了幾個特性,如 模型 (或管道) 並行 以充分利用可用裝置。對 Gaudi2,我們使用 Habana 的 DeepSpeed 分支,其新增了對 HPU 的支援。

延遲

我們測量了兩種不同大小的 BLOOMZ 模型的延遲 (batch size 為 1),兩者引數量都有數十億:

我們使用 DeepSpeed-inference 以 16 位精度在 8 張卡上執行推理,同時我們開啟了 key-value 快取 最佳化。請注意,儘管 CUDA graphs 當前與 DeepSpeed 中的模型並行不相容 (DeepSpeed v0.8.2,請參見 指令碼第 158 行的內容,但 Habana 的 DeepSpeed 分支是支援 HPU graphs 的。所有基準測試都使用 貪心搜尋 生成 100 個詞元。輸入提示為:

“DeepSpeed is a machine learning framework”
該提示會被 BLOOM 分詞器分成 7 個詞元。

推理延遲測試結果如下表所示 (單位為 )。

模型卡數Gaudi2 延遲 (秒)A100-80GB 延遲 (秒)第一代 Gaudi 延遲 (秒)
BLOOMZ83.7174.402/
BLOOMZ-7B80.7372.4173.029
BLOOMZ-7B11.0662.1192.865

Habana 團隊最近在 SynapseAI 1.8 中引入了對 DeepSpeed-inference 的支援,從而快速支援了 1000 多億引數模型的推理。 對於 1760 億引數的模型,Gaudi2 比 A100 80GB 快 1.2 倍。較小模型上的結果更有意思: 對於 BLOOMZ-7B,Gaudi2 比 A100 快 3 倍。 有趣的是,BLOOMZ-7B 這種尺寸的模型也能受益於模型並行。

我們還在第一代 Gaudi 上執行了這些模型。雖然它比 Gaudi2 慢,但從價格角度看很有意思,因為 AWS 上的 DL1 例項每小時大約 13 美元。BLOOMZ-7B 在第一代 Gaudi 上的延遲為 2.865 秒。因此, 對 70 億引數的模型而言,第一代 Gaudi 比 A100 的價效比更高,每小時能省 30 多美元

我們預計 Habana 團隊將在即將釋出的新 SynapseAI 版本中繼續最佳化這些模型的效能。在我們上一個基準測試中,我們看到 Gaudi2 的 Stable Diffusion 推理速度比 A100 快 2.2 倍,這個優勢在隨後 Habana 提供的最新最佳化中進一步提高到了 2.37 倍。在 SynapseAI 1.9 的預覽版中,我們看到 BLOOMZ-176B 的推理延遲進一步降低到了 3.5 秒。當新版本的 SynapseAI 釋出並整合到 Optimum Habana 中時,我們會更新最新的效能數字。

在完整資料集上進行推理

我們的指令碼允許支援模型整個資料集上逐句進行文字補全。如果你想在自己的資料集上嘗試用 Gaudi2 進行 BLOOMZ 推理,這個指令碼就很好用。

這裡我們以 tldr_news 資料集為例。該資料每一條都包含文章的標題和內容 (你可以在 Hugging Face Hub 上視覺化一下資料)。這裡,我們僅保留 content 列 (即內容) 並對每個樣本只截前 16 個詞元,然後讓模型來生成後 50 個詞元。前 5 條資料如下所示:

Batch n°1
Input: ['Facebook has released a report that shows what content was most widely viewed by Americans between']
Output: ['Facebook has released a report that shows what content was most widely viewed by Americans between January and June of this year. The report, which is based on data from the company’s mobile advertising platform, shows that the most popular content on Facebook was news, followed by sports, entertainment, and politics. The report also shows that the most']
--------------------------------------------------------------------------------------------------
Batch n°2
Input: ['A quantum effect called superabsorption allows a collection of molecules to absorb light more']
Output: ['A quantum effect called superabsorption allows a collection of molecules to absorb light more strongly than the sum of the individual absorptions of the molecules. This effect is due to the coherent interaction of the molecules with the electromagnetic field. The superabsorption effect has been observed in a number of systems, including liquid crystals, liquid crystals in']
--------------------------------------------------------------------------------------------------
Batch n°3
Input: ['A SpaceX Starship rocket prototype has exploded during a pressure test. It was']
Output: ['A SpaceX Starship rocket prototype has exploded during a pressure test. It was the first time a Starship prototype had been tested in the air. The explosion occurred at the SpaceX facility in Boca Chica, Texas. The Starship prototype was being tested for its ability to withstand the pressure of flight. The explosion occurred at']
--------------------------------------------------------------------------------------------------
Batch n°4
Input: ['Scalene is a high-performance CPU and memory profiler for Python.']
Output: ['Scalene is a high-performance CPU and memory profiler for Python. It is designed to be a lightweight, portable, and easy-to-use profiler. Scalene is a Python package that can be installed on any platform that supports Python. Scalene is a lightweight, portable, and easy-to-use profiler']
--------------------------------------------------------------------------------------------------
Batch n°5
Input: ['With the rise of cheap small "Cube Satellites", startups are now']
Output: ['With the rise of cheap small "Cube Satellites", startups are now able to launch their own satellites for a fraction of the cost of a traditional launch. This has led to a proliferation of small satellites, which are now being used for a wide range of applications. The most common use of small satellites is for communications,']

下一節,我們將展示如何用該指令碼來執行基準測試,我們還將展示如何將其應用於 Hugging Face Hub 中任何你喜歡的資料集!

如何復現這些結果?

示例指令碼 提供了用於在 Gaudi2 和第一代 Gaudi 上對 BLOOMZ 進行基準測試的指令碼。在執行它之前,請確保按照 Habana 給出的指南 安裝了最新版本的 SynapseAI 和 Gaudi 驅動程式。

然後,執行以下命令:

git clone https://github.com/huggingface/optimum-habana.git
cd optimum-habana && pip install . && cd examples/text-generation
pip install git+https://github.com/HabanaAI/DeepSpeed.git@1.8.0

最後,你可以按如下方式執行指令碼:

python ../gaudi_spawn.py --use_deepspeed --world_size 8 run_generation.py --model_name_or_path bigscience/bloomz --use_hpu_graphs --use_kv_cache --max_new_tokens 100

對於多節點推理,你可以遵循 Optimum Habana 檔案中的 參考指南

你還可以從 Hugging Face Hub 載入任何資料集作為文字生成任務的提示,只需使用引數 --dataset_name my_dataset_name

此基準測試基於 Transformers v4.27.1、SynapseAI v1.8.0,而 Optimum Habana 是從原始碼安裝的。

對於 GPU,此程式碼庫 裡包含了 可用於復現這篇文章結果的指令碼。要使用 CUDA graphs,需要使用靜態資料尺寸,而 ? Transformers 中不支援這一用法。你可以使用 Habana 團隊的 參考程式碼 來使能 CUDA graphs 或 HPU graphs。

總結

透過本文,我們看到, Habana Gaudi2 執行 BLOOMZ 推理的速度比 Nvidia A100 80GB 更快。並且無需編寫複雜的指令碼,因為 ? Optimum Habana 提供了易於使用的工具用於在 HPU 上執行數十億引數模型的推理。Habana 的 SynapseAI SDK 的後續版本有望提高效能,因此隨著 SynapseAI 上 LLM 推理最佳化的不斷推進,我們將定期更新此基準。我們也期待 FP8 推理在 Gaudi2 上帶來的效能優勢。

我們還介紹了在第一代 Gaudi 上的結果。對於更小的模型,它的效能與 A100 比肩,甚至更好,而價格僅為 A100 的近三分之一。對於像 BLOOMZ 這樣的大模型,它是替代 GPU 推理的一個不錯的選擇。

如果你有興趣使用最新的 AI 硬體加速器和軟體庫來加速你的機器學習訓練和推理工作流,請檢視我們的 專家加速計劃。要了解有關 Habana 解決方案的更多資訊,可以 從後面的連結瞭解我們雙方的相關合作並聯系他們。要詳細瞭解 Hugging Face 為使 AI 硬體加速器易於使用所做的工作,請檢視我們的 硬體合作伙伴計劃

相關話題

感謝閱讀!如果你有任何問題,請隨時透過 Github論壇 與我聯絡。你也可以在 LinkedIn 上找到我。


英文原文: https://huggingface.co/blog/habana-gaudi-2-bloom

作者: Régis Pierrard

譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態資料上的應用及大規模模型的訓練推理。

審校、排版: zhongdongy (阿東)


  1. “零樣本”是指模型在新的或未見過的輸入資料上完成任務的能力,即訓練資料中完全不含此類資料。我們輸給模型提示和以自然語言描述的指令 (即我們希望模型做什麼)。零樣本分類不提供任何與正在完成的任務相關的任何示例。這區別於單樣本或少樣本分類,因為這些任務還是需要提供有關當前任務的一個或幾個示例的。

相關文章