大型語言模型上的快速推理:Habana Gaudi2 加速器上的 BLOOMZ
本文將向您展示如何使用 🤗 Optimum Habana(它是 Gaudi2 和 🤗 Transformers 庫之間的橋樑)在 Habana® Gaudi®2 上輕鬆部署像 BLOOM 這樣擁有數千億引數的大型語言模型。正如本文中提供的基準測試所示,這將使您能夠以比目前市場上任何 GPU 都快的速度執行推理。
隨著模型越來越大,將其部署到生產環境中進行推理變得越來越具有挑戰性。硬體和軟體都出現了許多創新來解決這些挑戰,所以讓我們深入瞭解如何有效地克服它們!
BLOOMZ
BLOOM 是一個擁有 1760 億引數的自迴歸模型,經過訓練可完成文字序列。它可以處理 46 種不同的語言和 13 種程式語言。作為 BigScience 計劃的一部分,BLOOM 是一個由世界各地大量研究人員和工程師參與的開放科學專案。最近,另一個具有完全相同架構的模型釋出了:BLOOMZ,它是 BLOOM 在多項任務上的微調版本,可實現更好的泛化和零樣本[^1]能力。
如此龐大的模型在訓練和推理方面都帶來了新的記憶體和速度挑戰。即使採用 16 位精度,一個例項也需要 352 GB 才能容納!您現在可能很難找到擁有如此多記憶體的裝置,但 Habana Gaudi2 等最先進的硬體確實使得在 BLOOM 和 BLOOMZ 模型上以低延遲執行推理成為可能。
Habana Gaudi2
Gaudi2 是 Habana Labs 設計的第二代 AI 硬體加速器。單個伺服器包含 8 個加速器裝置(稱為 Habana 處理單元,或 HPU),每個裝置有 96GB 記憶體,這為容納非常大的模型提供了空間。然而,如果計算速度慢,那麼託管模型就沒有多大意義。幸運的是,Gaudi2 在這方面表現出色:它的架構與 GPU 不同,因為它使加速器能夠並行執行通用矩陣乘法 (GeMM) 和其他操作,從而加速深度學習工作流。這些特性使 Gaudi2 成為 LLM 訓練和推理的絕佳選擇。
Habana 的 SDK SynapseAI™ 支援 PyTorch 和 DeepSpeed,以加速 LLM 訓練和推理。SynapseAI 圖編譯器將最佳化圖中累積的操作的執行(例如,運算元融合、資料佈局管理、並行化、流水線和記憶體管理以及圖級最佳化)。
此外,SynapseAI 最近引入了對 HPU 圖和 DeepSpeed 推理的支援,如我們下面的基準測試所示,這些非常適合延遲敏感型應用程式。
所有這些功能都整合到 🤗 Optimum Habana 庫中,因此在 Gaudi 上部署模型非常簡單。請參閱此處的快速入門頁面。
如果您想訪問 Gaudi2,請訪問 Intel 開發人員雲並按照本指南操作。
基準測試
在本節中,我們將提供 BLOOMZ 在 Gaudi2、第一代 Gaudi 和 Nvidia A100 80GB 上的早期基準測試。儘管這些裝置有相當多的記憶體,但模型太大,單個裝置不足以容納 BLOOMZ 的單個例項。為了解決這個問題,我們將使用 DeepSpeed,這是一個深度學習最佳化庫,它能夠實現許多記憶體和速度改進,以加速模型並使其適應裝置。特別是,我們這裡依賴於 DeepSpeed 推理:它引入了幾個功能,例如模型(或流水線)並行,以充分利用可用裝置。對於 Gaudi2,我們使用 Habana 的 DeepSpeed 分支,它增加了對 HPU 的支援。
延遲
我們測量了兩種不同大小的 BLOOMZ(均具有數十億引數)的延遲(單樣本批次)
執行是在 16 位精度下,使用 8 個裝置和 鍵值快取,透過 DeepSpeed 推理執行的。請注意,雖然 CUDA 圖目前與 DeepSpeed 中的模型並行不相容(DeepSpeed v0.8.2,參見此處),但 Habana 的 DeepSpeed 分支支援 HPU 圖。所有基準測試都進行 100 個 token 輸出的貪婪生成。輸入提示是
"DeepSpeed is a machine learning framework"
使用 BLOOM 的 tokenizer 包含 7 個 token。
推理延遲結果顯示在下表中(單位為秒)。
模型 | 裝置數量 | Gaudi2 延遲(秒) | A100-80GB 延遲(秒) | 第一代 Gaudi 延遲(秒) |
---|---|---|---|---|
BLOOMZ | 8 | 3.103 | 4.402 | / |
BLOOMZ-7B | 8 | 0.734 | 2.417 | 3.321 |
BLOOMZ-7B | 1 | 0.772 | 2.119 | 2.387 |
更新:上述數字已根據 Optimum Habana 1.6 和 SynapseAI 1.10 的釋出進行了更新,使得 Gaudi2 上的 BLOOMZ 速度比 A100 快 1.42 倍。
Habana 團隊最近在 SynapseAI 1.8 中引入了對 DeepSpeed 推理的支援,從而迅速實現了對 1000 億以上引數模型的推理。對於 1760 億引數的模型,Gaudi2 比 A100 80GB 快 1.42 倍。較小的模型也呈現出有趣的結果。Gaudi2 對於 BLOOMZ-7B 比 A100 快 2.89 倍!值得注意的是,它也能從模型並行中受益,而 A100 在單個裝置上速度更快。
我們還在第一代 Gaudi 上運行了這些模型。雖然它比 Gaudi2 慢,但從價格角度來看它很有趣,因為 AWS 上的 DL1 例項每小時大約花費 13 美元。第一代 Gaudi 上 BLOOMZ-7B 的延遲為 2.387 秒。因此,第一代 Gaudi 對於 70 億引數的模型提供了比 A100 更好的價效比,而 A100 每小時花費超過 30 美元!
我們預計 Habana 團隊將在即將釋出的 SynapseAI 版本中最佳化這些模型的效能。例如,在我們上次的基準測試中,我們發現 Gaudi2 執行 Stable Diffusion 推理比 A100 快 2.2 倍,此後透過 Habana 提供的最新最佳化,這一數字已進一步提高到 2.37 倍。隨著 SynapseAI 新版本的釋出並整合到 Optimum Habana 中,我們將定期更新這些數字。
在完整資料集上執行推理
我們編寫的指令碼可以在整個資料集上使用您的模型來完成句子。這對於在您自己的資料上嘗試 Gaudi2 上的 BLOOMZ 推理很有用。
以下是 tldr_news 資料集的示例。它包含幾篇文章的標題和內容(您可以在 Hugging Face Hub 上檢視)。我們只保留了 content 列,並將每個樣本截斷為前 16 個 token,以便模型生成序列的其餘部分,包含 50 個新 token。前五個樣本如下所示
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.9.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.28.1、SynapseAI v1.9.0 和 Optimum Habana v1.5.0 進行。
對於 GPU,此處是導致之前在此部落格文章中呈現的結果的指令碼(以及此處是使用它的說明)。要使用 CUDA 圖,需要靜態形狀,而 🤗 Transformers 中不支援此功能。您可以使用 Habana 團隊編寫的此儲存庫來啟用它們。
結論
我們從本文中看出,Habana Gaudi2 在 BLOOMZ 推理方面比 Nvidia A100 80GB 效能更優。而且無需編寫複雜的指令碼,因為 🤗 Optimum Habana 提供了易於使用的工具,可在 HPU 上執行數十億引數模型的推理。預計 Habana 的 SynapseAI SDK 的未來版本將提高效能,因此隨著 SynapseAI 上 LLM 推理最佳化的不斷推進,我們將定期更新此基準測試。我們還期待 Gaudi2 上 FP8 推理帶來的效能優勢。
我們還展示了第一代 Gaudi 所取得的成果。對於較小的模型,它的效能可以與 A100 相媲美甚至更優,而價格僅為其三分之一左右。對於執行像 BLOOMZ 這樣的大型模型的推理,它是使用 GPU 的一個很好的替代方案。
如果您有興趣使用最新的 AI 硬體加速器和軟體庫來加速您的機器學習訓練和推理工作流程,請檢視我們的在此處閱讀我們的合作關係並聯系他們。要了解有關 Hugging Face 致力於使 AI 硬體加速器易於使用的努力,請檢視我們的硬體合作伙伴計劃。
。要了解有關 Habana 解決方案的更多資訊,請相關主題
- 更快的訓練和推理:Habana Gaudi-2 與 Nvidia A100 80GB
- 利用 DeepSpeed 與 Hugging Face 和 Habana Labs Gaudi 更快更便宜地訓練大規模 Transformer 模型
感謝您的閱讀!如果您有任何問題,請隨時聯絡我,可以透過 Github 或在論壇上。您也可以在 LinkedIn 上與我聯絡。
[^1]:“零樣本”指的是模型對新的或未見過的資料執行任務的能力,即無需提供任何此類資料的訓練示例。我們向模型提供一個提示和一段文字序列,用自然語言描述我們希望模型做什麼。零樣本分類不包括任何已完成所需任務的示例。這與單樣本或少樣本分類不同,因為這些任務包含一個或幾個選定任務的示例。