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

本文將展示如何在?Habana? Gaudi?2?上使用 ???Optimum Habana。Optimum Habana 是 Gaudi2 和 ??? Transformers 庫之間的橋梁。本文設計并實現了一個大模型推理基準測試,證明了通過使用 Optimum Habana 你將能夠在 Gaudi2 上獲得?比目前市面上任何可用的 GPU 都快的推理速度。
Habana? Gaudi?2:
https://habana.ai/training/gaudi2/Optimum Habana:
https://hf.co/docs/optimum/habana/index
隨著模型越來越大,將它們部署到生產環(huán)境中以用于推理也變得越來越具有挑戰(zhàn)性。硬件和軟件都需要很多創(chuàng)新來應對這些挑戰(zhàn),讓我們來深入了解 Optimum Habana 是如何有效地克服這些挑戰(zhàn)的!
BLOOMZ
BLOOM 是一個 1760 億參數的自回歸模型,經訓練后可用于文本生成。它可以處理 46 種不同的語言以及 13 種編程語言。作為 BigScience 計劃的一部分,BLOOM 作為一個開放科學項目,來自全球的大量的研究人員和工程師參與了模型的設計和訓練。最近,我們又發(fā)布了架構與 BLOOM 完全相同的模型: BLOOMZ,它是 BLOOM 在多個任務上的微調版本,具有更好的泛化和零樣本 [^1] 能力。
BLOOM:
https://arxiv.org/abs/2211.05100BigScience:
https://bigscience.huggingface.co/BLOOMZ:
https://arxiv.org/abs/2211.01786
如此大的模型在 訓練 和 推理 兩個場景下都對內存和速度提出了新的挑戰(zhàn)。即使是使用 16 位精度,一個模型也需要 352 GB 的內存!目前你可能很難找到一個具有如此大內存的設備,但像 Habana Gaudi2 這樣先進的硬件已能讓低延遲 BLOOM 和 BLOOMZ 模型推理變得可能。
訓練場景:
https://hf.co/blog/zh/bloom-megatron-deepspeed推理場景:
https://hf.co/blog/zh/bloom-inference-optimization
Habana Gaudi2
Gaudi2 是 Habana Labs 設計的第二代 AI 硬件加速器。單個服務器包含 8 張加速卡 (稱為 Habana 處理單元 (Habana Processing Units),或 HPU),每張卡有 96GB 的內存,這為容納超大模型提供了可能。但是,如果僅僅是內存大,而計算速度很慢,也沒辦法將其用于模型托管服務。幸運的是,Gaudi2 在這方面證明了自己,大放異彩: 它與 GPU 的不同之處在于,它的架構使加速器能夠并行執(zhí)行通用矩陣乘法 (General Matrix Multiplication,GeMM) 和其他操作,從而加快了深度學習工作流。這些特性使 Gaudi2 成為 LLM 訓練和推理的理想方案。
https://habana.ai/training/gaudi2/
Habana 的 SDK SynapseAI? 支持 PyTorch 和 DeepSpeed 以加速 LLM 訓練和推理。SynapseAI 圖編譯器 會優(yōu)化整個計算圖的執(zhí)行過程 (如通過算子融合、數據布局管理、并行化、流水線、內存管理、圖優(yōu)化等手段)。
SynapseAI 圖編譯器介紹:
https://docs.habana.ai/en/latest/Gaudi_Overview/SynapseAI_Software_Suite.html
此外,最近 SynapseAI 還引入了 HPU graphs 和 DeepSpeed-inference 的支持,這兩者非常適合延遲敏感型的應用,下面的基準測試結果即很好地說明了這一點。
HPU graphs:
https://docs.habana.ai/en/latest/PyTorch/Inference_on_PyTorch/Inference_Using_HPU_Graphs.htmlDeepSpeed-inference:
https://docs.habana.ai/en/latest/PyTorch/DeepSpeed/Inference_Using_DeepSpeed.html
以上所有功能都集成進了 ?? Optimum Habana 庫,因此在 Gaudi 上部署模型非常簡單。你可以閱讀 相應文檔 快速起步。
Optimum Habana 庫地址:
https://github.com/huggingface/optimum-habana快速入門鏈接:
https://hf.co/docs/optimum/habana/quickstart
如果你想試試 Gaudi2,請登錄 英特爾開發(fā)者云 (Intel Developer Cloud) ?并按照 指南 申請。
英特爾開發(fā)者云 (Intel Developer Cloud):
https://www.intel.com/content/www/us/en/secure/developer/devcloud/cloud-launchpad.html申請指南:
https://hf.co/blog/zh/habana-gaudi-2-benchmark
測試基準
在本節(jié)中,我們將提供 BLOOMZ 在 Gaudi2、第一代 Gaudi 和 Nvidia A100 80GB 上的早期基準測試。雖然這些設備內存都不小,但由于模型太大,單個設備還是放不下整個 BLOOMZ 模型。為了解決這個問題,我們要使用 DeepSpeed,這是一個深度學習優(yōu)化庫,它實現了很多內存優(yōu)化和速度優(yōu)化以加速模型推理。特別地,我們在這里依賴 DeepSpeed-inference,它引入了幾個特性,如 模型 (或管道) 并行 以充分利用可用設備。對 Gaudi2,我們使用 Habana 的 DeepSpeed 分支,其添加了對 HPU 的支持。
DeepSpeed:
https://www.deepspeed.ai/DeepSpeed-inference 論文鏈接:
https://arxiv.org/abs/2207.00032模型 (或管道) 并行介紹:
https://hf.co/blog/zh/bloom-megatron-deepspeedHabana 的 DeepSpeed 分支:
https://github.com/HabanaAI/deepspeed
延遲
我們測量了兩種不同大小的 BLOOMZ 模型的延遲 (batch size 為 1),兩者參數量都有數十億:
1760 億 參數
https://hf.co/bigscience/bloomz70 億 參數
https://hf.co/bigscience/bloomz-7b1
我們使用 DeepSpeed-inference 以 16 位精度在 8 張卡上運行推理,同時我們開啟了 key-value 緩存 優(yōu)化。請注意,盡管 CUDA graphs 當前與 DeepSpeed 中的模型并行不兼容 (DeepSpeed v0.8.2,請參見 腳本第 158 行的內容,但 Habana 的 DeepSpeed 分支是支持 HPU graphs 的。所有基準測試都使用 貪心搜索 生成 100 個詞元。輸入提示為:
key-value 緩存:
https://hf.co/docs/transformers/v4.27.1/en/model_doc/bloomCUDA graphs:
https://developer.nvidia.com/blog/cuda-graphs/參考腳本:
https://github.com/microsoft/DeepSpeed/blob/v0.8.2/deepspeed/inference/engine.py貪心搜索:
https://hf.co/blog/zh/how-to-generate
DeepSpeed is a machine learning framework” 該提示會被 BLOOM 分詞器分成 7 個詞元。
推理延遲測試結果如下表所示 (單位為?秒)。
模型卡數Gaudi2 延遲 (秒)A100-80GB 延遲 (秒)第一代 Gaudi 延遲 (秒)BLOOMZ83.7174.402/BLOOMZ-7B80.7372.4173.029BLOOMZ-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 團隊將在即將發(fā)布的新 SynapseAI 版本中繼續(xù)優(yōu)化這些模型的性能。在我們上一個基準測試中,我們看到 Gaudi2 的 Stable Diffusion 推理速度比 A100 快 2.2 倍,這個優(yōu)勢在隨后 Habana 提供的最新優(yōu)化中進一步提高到了 2.37 倍。在 SynapseAI 1.9 的預覽版中,我們看到 BLOOMZ-176B 的推理延遲進一步降低到了 3.5 秒。當新版本的 SynapseAI 發(fā)布并集成到 Optimum Habana 中時,我們會更新最新的性能數字。
https://hf.co/blog/zh/habana-gaudi-2-benchmark
在完整數據集上進行推理
我們的腳本允許支持模型整個數據集上逐句進行文本補全。如果你想在自己的數據集上嘗試用 Gaudi2 進行 BLOOMZ 推理,這個腳本就很好用。
這里我們以?tldr_news?數據集為例。該數據每一條都包含文章的標題和內容 (你可以在 Hugging Face Hub 上可視化一下數據)。這里,我們僅保留?content?列 (即內容) 并對每個樣本只截前 16 個詞元,然后讓模型來生成后 50 個詞元。前 5 條數據如下所示:
https://hf.co/datasets/JulesBelveze/tldr_news/viewer/all/test
下一節(jié),我們將展示如何用該腳本來執(zhí)行基準測試,我們還將展示如何將其應用于 Hugging Face Hub 中任何你喜歡的數據集!
如何復現這些結果?
示例腳本 提供了用于在 Gaudi2 和第一代 Gaudi 上對 BLOOMZ 進行基準測試的腳本。在運行它之前,請確保按照 Habana 給出的指南 安裝了最新版本的 SynapseAI 和 Gaudi 驅動程序。
示例腳本:
https://github.com/huggingface/optimum-habana/tree/main/examples/text-generationHabana 給出的指南:
https://docs.habana.ai/en/latest/Installation_Guide/index.html
然后,運行以下命令:
最后,你可以按如下方式運行腳本:
對于多節(jié)點推理,你可以遵循 Optimum Habana 文檔中的 參考指南。
https://hf.co/docs/optimum/habana/usage_guides/multi_node_training
你還可以從 Hugging Face Hub 加載任何數據集作為文本生成任務的提示,只需使用參數?--dataset_name my_dataset_name
。
此基準測試基于 Transformers v4.27.1、SynapseAI v1.8.0,而 Optimum Habana 是從源碼安裝的。
對于 GPU,此代碼庫 里包含了 可用于復現這篇文章結果的腳本。要使用 CUDA graphs,需要使用靜態(tài)數據尺寸,而 ?? Transformers 中不支持這一用法。你可以使用 Habana 團隊的 參考代碼 來使能 CUDA graphs 或 HPU graphs。
代碼庫地址:
https://github.com/huggingface/transformers-bloom-inference/tree/main/bloom-inference-scripts腳本地址:
https://hf.co/blog/zh/bloom-inference-pytorch-scripts參考代碼:
https://github.com/HabanaAI/Model-References/tree/1.8.0/PyTorch/nlp/bloom
總結
通過本文,我們看到,?Habana Gaudi2 執(zhí)行 BLOOMZ 推理的速度比 Nvidia A100 80GB 更快。并且無需編寫復雜的腳本,因為 ?? Optimum Habana 提供了易于使用的工具用于在 HPU 上運行數十億參數模型的推理。Habana 的 SynapseAI SDK 的后續(xù)版本有望提高性能,因此隨著 SynapseAI 上 LLM 推理優(yōu)化的不斷推進,我們將定期更新此基準。我們也期待 FP8 推理在 Gaudi2 上帶來的性能優(yōu)勢。
https://hf.co/docs/optimum/habana/index
我們還介紹了在第一代 Gaudi 上的結果。對于更小的模型,它的性能與 A100 比肩,甚至更好,而價格僅為 A100 的近三分之一。對于像 BLOOMZ 這樣的大模型,它是替代 GPU 推理的一個不錯的選擇。
如果你有興趣使用最新的 AI 硬件加速器和軟件庫來加速你的機器學習訓練和推理工作流,請查看我們的 專家加速計劃。要了解有關 Habana 解決方案的更多信息,可以 從后面的鏈接了解我們雙方的相關合作并聯系他們。要詳細了解 Hugging Face 為使 AI 硬件加速器易于使用所做的工作,請查看我們的 硬件合作伙伴計劃。
專家加速計劃:
https://hf.co/support關于雙方相關合作的介紹和聯系方式:
https://hf.co/hardware/habana硬件合作伙伴計劃:
https://hf.co/hardware
相關話題
更快訓推: Habana Gaudi-2 與 Nvidia A100 80GB
https://hf.co/blog/zh/habana-gaudi-2-benchmark在 Hugging Face 和 Habana Labs Gaudi 上用 DeepSpeed 訓練更快、更便宜的大規(guī)模 Transformer 模型
https://developer.habana.ai/events/leverage-deepspeed-to-train-faster-and-cheaper-large-scale-transformer-models-with-hugging-face-and-habana-labs-gaudi/
感謝閱讀!如果你有任何問題,請隨時通過 Github 或 論壇 與我聯系。你也可以在 LinkedIn 上找到我。
Github:
https://github.com/huggingface/optimum-habanaHugging Face 論壇:
https://discuss.huggingface.co/c/optimum/59LinkedIn:
https://www.linkedin.com/in/regispierrard/
[^1]: “零樣本”是指模型在新的或未見過的輸入數據上完成任務的能力,即訓練數據中完全不含此類數據。我們輸給模型提示和以自然語言描述的指令 (即我們希望模型做什么)。零樣本分類不提供任何與正在完成的任務相關的任何示例。這區(qū)別于單樣本或少樣本分類,因為這些任務還是需要提供有關當前任務的一個或幾個示例的。
英文原文:?https://hf.co/blog/habana-gaudi-2-bloom
作者: Régis Pierrard
譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態(tài)數據上的應用及大規(guī)模模型的訓練推理。
審校、排版: zhongdongy (阿東)