編者按:本文作者是 Hugging Face 的機(jī)器學(xué)習(xí)工程師 Régis Pierrard,并于 2023 年 3 月 28 日發(fā)布于Hugging Face Blog[1]。感謝 Régis Pierrard 授權(quán)我們翻譯和轉(zhuǎn)發(fā)本文。本文介紹了如何在 Habana? Gaudi?2[2]上輕松部署參數(shù)量多達(dá)數(shù)十億的語(yǔ)言模型,披露了 Hugging Face 針對(duì) BLOOMZ 在 Gaudi?2 上的性能評(píng)估結(jié)果。
隨著大語(yǔ)言模型 (Large Language Model, LLM) 的規(guī)模越來(lái)越大,在生產(chǎn)環(huán)境部署和使用這些模型來(lái)進(jìn)行推理也變得越來(lái)越具挑戰(zhàn)性。為應(yīng)對(duì)這些挑戰(zhàn),無(wú)論硬件還是軟件,都經(jīng)歷了多次創(chuàng)新。
下面,我們將一同探索如何有效克服這些挑戰(zhàn)。
(資料圖片僅供參考)
BLOOM[3]是一個(gè)擁有 1760 億參數(shù)的自回歸模型,訓(xùn)練后可用于生成文本序列。它可以處理 46 種語(yǔ)言和 13 種編程語(yǔ)言。
作為 BigScience[4]計(jì)劃中的一個(gè)開(kāi)放科學(xué)項(xiàng)目,BLOOM 的設(shè)計(jì)和訓(xùn)練吸引了世界各地眾多研究人員和工程師的共同參與。
BLOOMZ[5]是最近發(fā)布的、與 BLOOM 架構(gòu)完全相同的模型,它是 BLOOM 基于多個(gè)任務(wù)的調(diào)優(yōu)版本,具有更出色的泛化和零樣本[6]能力。
無(wú)論是訓(xùn)練[7]還是推理[8]場(chǎng)景,這類大模型都對(duì)內(nèi)存和速度提出了新挑戰(zhàn)。
即便使用 16 位精度,一個(gè)實(shí)例所需的內(nèi)存仍高達(dá) 352 GB!目前具有如此大內(nèi)存的設(shè)備可能很難找到,但像 Habana? Gaudi?2 這樣的先進(jìn)硬件卻足以讓 BLOOM 和 BLOOMZ 模型以更低的時(shí)延執(zhí)行推理。
Habana? Gaudi?2Gaudi?2 是 Habana Labs 設(shè)計(jì)的第二代 AI 硬件加速器。單個(gè)服務(wù)器包含 8 張加速卡(稱為 Habana 處理單元,即 Habana Processing Unit,簡(jiǎn)稱為 HPU),每張卡內(nèi)存高達(dá) 96 GB,可提供足夠的空間來(lái)容納大模型。
然而,如果計(jì)算速度很慢,那么為大模型提供大內(nèi)存的意義也不大。所幸,Gaudi?2 的計(jì)算速度也非常出色。
Gaudi?2 與 GPU 的主要區(qū)別在于它的架構(gòu)能讓加速器并行執(zhí)行通用矩陣乘法 (GeMM) 和其他運(yùn)算,從而加快深度學(xué)習(xí)工作流。這些特性使 Gaudi?2 成為 LLM 訓(xùn)練和推理的理想選擇。
Habana 的 SDK SynapseAITM支持使用 PyTorch 和 DeepSpeed 來(lái)加速 LLM 訓(xùn)練和推理。SynapseAI 圖形編譯器[9]可優(yōu)化圖形中所累積的操作的執(zhí)行(如算子融合、數(shù)據(jù)布局管理、并行化、流水線、內(nèi)存管理、圖優(yōu)化等)。
此外,SynapseAI 最近引入了對(duì) HPU Graph[10]和DeepSpeed-inference[11]的支持,這兩者都非常適合時(shí)延敏感型應(yīng)用(參見(jiàn)下文基準(zhǔn)測(cè)試)。
以上所有功能均已集成至 Optimum Habana[12]庫(kù),因此在 Gaudi? 上部署模型非常簡(jiǎn)單。
訪問(wèn)此鏈接https://huggingface.co/docs/optimum/habana/quickstart,查看快速入門(mén)頁(yè)面。
如欲試用 Gaudi?2,請(qǐng)登錄英特爾? Developer Cloud[13]并按照本指南[14]操作。
基準(zhǔn)測(cè)試本節(jié)將提供 BLOOMZ 在 Gaudi?2 和第一代 Gaudi? 上的基準(zhǔn)測(cè)試結(jié)果。
雖然 Gaudi?2 和第一代 Gaudi? 的內(nèi)存都不小,但由于模型過(guò)大,單個(gè)設(shè)備仍無(wú)法容納單個(gè) BLOOMZ 實(shí)例。
為解決這一問(wèn)題,本文使用了深度學(xué)習(xí)優(yōu)化庫(kù) DeepSpeed[15]來(lái)實(shí)現(xiàn)多種內(nèi)存和速度優(yōu)化,進(jìn)而加速模型推理并使模型與設(shè)備適配。
本文方案需依賴 DeepSpeed-inference[16]:它引入了諸如模型(或流水線)并行[17]等多個(gè)功能特性,可充分利用可用設(shè)備。
對(duì)于 Gaudi?2,則使用了已添加 HPU 支持的 Habana 的 DeepSpeed[18]分支。
時(shí)延本文基于兩種不同規(guī)模但參數(shù)均達(dá)數(shù)十億的 BLOOMZ 模型(批大小為 1 個(gè)樣本)進(jìn)行了實(shí)驗(yàn)測(cè)試,兩種模型的參數(shù)大小分別為:
1760 億[19]參數(shù) (BLOOMZ-176B)70 億[20]參數(shù) (BLOOMZ-7B)本文使用 DeepSpeed-inference 以 16 位精度在 8 個(gè)設(shè)備上運(yùn)行推理,并且使用 key-value 緩存。值得注意的是,盡管 CUDA Graph 目前與 DeepSpeed 中的模型并行不兼容(DeepSpeed v0.8.2,參見(jiàn)文末[21]),但 Habana 的 DeepSpeed 分支是支持 HPU Graph 的。
所有基準(zhǔn)測(cè)試都使用貪心搜索 (Greedy Search)[22]生成 100 個(gè)詞元。輸入提示為:
DeepSpeed is a machine learning framework
BLOOM 分詞器會(huì)將該提示分為 7 個(gè)詞元。
推理時(shí)延測(cè)試結(jié)果如下圖所示(單位為秒):
△圖 1. BLOOMZ 在 Gaudi?2 和第一代 Gaudi? 上的推理時(shí)延測(cè)試結(jié)果
Habana 團(tuán)隊(duì)最近在 SynapseAI 1.8 中引入了 DeepSpeed-inference 支持,可快速賦能 1000 多億參數(shù)模型的推理。
根據(jù)圖 1 測(cè)試結(jié)果可知:對(duì)于參數(shù)量達(dá) 1760 億的模型 BLOOMZ,Gaudi?2 性能表現(xiàn)出色,時(shí)延僅為約 3.7 秒 ;對(duì)于參數(shù)量為 70 億的較小模型 BLOOMZ-7B,Gaudi?2 的時(shí)延優(yōu)勢(shì)更加顯著,單設(shè)備約為第一代 Gaudi? 的37.21%,而當(dāng)設(shè)備數(shù)量都增加為 8 后,這一百分比進(jìn)一步下降至約 24.33%。
Habana 團(tuán)隊(duì)會(huì)在后續(xù)發(fā)布的新 SynapseAI 版本中繼續(xù)優(yōu)化這些模型的性能。例如,在 SynapseAI 1.9 的預(yù)覽版中,BLOOMZ-176B 的時(shí)延從 3.7 秒進(jìn)一步降低到 3.5 秒。
在完整數(shù)據(jù)集上運(yùn)行推理我們編寫(xiě)的腳本支持模型在完整的數(shù)據(jù)集上完成所有句子的推理。這尤其適用于想在自有數(shù)據(jù)集上嘗試使用 Gaudi?2 進(jìn)行 BLOOMZ 推理的情況。
這里我們以 tldr_news 數(shù)據(jù)集為例。該數(shù)據(jù)集包含多篇文章的標(biāo)題和內(nèi)容(均可在 Hugging Face Hub 中對(duì)其進(jìn)行可視化處理)。前幾個(gè)樣本如下所示:
關(guān)鍵詞: