Hugging Face 在 AMD Instinct MI300 GPU 上
加入 6 月 6 日的下一次 Hugging Cast,向帖子作者提問,觀看在 Azure 上將 Llama 3 部署到 MI300X 的現場演示,以及在 Ryzen AI PC 上本地部署模型的額外演示!
引言
在 Hugging Face,我們致力於讓使用者使用開放模型和開源輕鬆構建 AI,無論您想使用哪種框架、雲和堆疊。其中一個關鍵組成部分是能夠在多種硬體上部署 AI 模型。透過與 AMD 合作大約一年,我們正在投資多種不同的加速器,例如 AMD Instinct™ 和 Radeon™ GPU、EPYC™ 和 Ryzen™ CPU 以及 Ryzen AI NPU,以確保總能找到一個裝置來在 AMD 機群上執行最大的 AI 社群。今天,我們很高興地宣佈,Hugging Face 和 AMD 共同努力,使最新一代的 AMD GPU 伺服器,即 AMD Instinct MI300,在整個 Hugging Face 平臺中實現了一流的整合。從在本地環境中進行原型設計,到在 Azure ND Mi300x V5 VM 上將模型投入生產,您無需使用 transformers[1]、text-generation-inference 和其他庫進行任何程式碼更改,也無需使用 Hugging Face 產品和解決方案——我們希望讓在 Hugging Face 上使用 AMD MI300 並獲得最佳效能變得非常簡單。讓我們深入瞭解!
開源和生產啟用
在 Transformers 和 text-generation-inference 中維護對 AMD Instinct GPU 的支援
在 AI 領域當前發生如此多的事情,確保 MI300 系列得到正確的長期測試和監控是絕對必要的。為了實現這一目標,我們一直與 Hugging Face 的基礎設施團隊密切合作,以確保我們為需要啟用持續整合和部署 (CI/CD) 的任何人提供強大的構建模組,並且能夠輕鬆實現而不影響其他已有的功能。
為了實現這些,我們與 AMD 和 Microsoft Azure 團隊合作,利用最近推出的 Azure ND MI300x V5 作為針對 MI300 的構建模組。在幾個小時內,我們的基礎設施團隊就能夠部署、設定並讓所有功能正常執行,以便我們能夠著手使用 MI300!
我們還從舊的基礎設施遷移到了託管的 Kubernetes 叢集,負責排程所有 Hugging Face 協作者希望在特定硬體 Pod 上執行的 Github 工作流。這種遷移現在允許我們在各種硬體平臺上執行完全相同的 CI/CD 流水線,而開發人員無需關注底層細節。我們能夠在幾天內輕鬆地在 Azure MI300X VM 上啟動並執行 CI/CD。
因此,Transformers 和 text-generation-inference 現在定期在上一代 AMD Instinct GPU(即 MI250)以及最新的 MI300 上進行測試。實際上,有數萬個單元測試定期驗證這些儲存庫的狀態,確保長期整合的正確性和健壯性。
提高生產 AI 工作負載的效能
推理效能
如前所述,我們一直在努力使新的 AMD Instinct MI300 GPU 能夠透過我們的開源推理解決方案 text-generation-inference (TGI) 高效執行推理工作負載。TGI 可以看作由三個不同元件組成:- 傳輸層,主要為 HTTP,用於暴露和接收客戶端的 API 請求 - 排程層,確保這些請求能夠潛在地批次處理(即連續批次處理),以在不影響使用者體驗的情況下提高硬體上的計算密度 - 模型層,負責在裝置上執行實際計算,利用模型中涉及的高度最佳化例程
在這裡,在 AMD 工程師的幫助下,我們專注於最後一個元件,即模型,以有效地設定、執行和最佳化工作負載,用於服務 Meta Llama 系列等模型。特別是,我們專注於:- Flash Attention v2 - Paged Attention - GPTQ/AWQ 壓縮技術 - ROCm TunableOp 的 PyTorch 整合 - 最佳化融合核的整合
其中大多數已經存在了一段時間,例如 FlashAttention v2、PagedAttention 和 GPTQ/AWQ 壓縮方法(特別是它們的最佳化例程/核心)。我們不會詳細介紹上述三項,我們邀請您訪問其原始實現頁面以瞭解更多資訊。
儘管如此,對於一個全新的硬體平臺、新的 SDK 版本來說,仔細驗證、分析和最佳化每一個環節都非常重要,以確保使用者能夠從這個新平臺獲得全部效能。
最後但同樣重要的是,作為此次 TGI 釋出的一部分,我們正在整合 PyTorch 2.3 中最新發布的 AMD TunableOp。TunableOp 提供了一種多功能機制,它將根據形狀和資料型別,尋找執行通用矩陣乘法(即 GEMM)的最有效方式。TunableOp 已整合到 PyTorch 中,目前仍在積極開發中,但正如您將在下面看到的,它可以在不顯著影響使用者體驗的情況下提高 GEMM 操作的效能。具體來說,對於小型輸入序列,我們使用 TunableOp 可以將延遲提高 8-10%,這對應於自迴歸模型生成的解碼階段。
實際上,當建立一個新的 TGI 例項時,我們會啟動一個初始預熱步驟,該步驟會載入一些虛擬負載,並確保模型及其記憶體已分配並準備就緒。
透過 TunableOp,我們讓 GEMM 例程調優器分配一些時間來尋找最最佳化設定,該設定基於使用者提供給 TGI 的引數,例如序列長度、最大批大小等。當預熱階段完成後,我們停用調優器,並在伺服器的剩餘生命週期內利用最佳化後的例程。
如前所述,我們使用 Azure ND MI300x V5 進行了所有基準測試,該產品最近在 Microsoft BUILD 釋出,集成了八個 AMD Instinct GPU。與上一代 MI250 相比,在 Meta Llama 3 70B 部署上,我們觀察到首次令牌延遲(也稱為預填充)加快了 2-3 倍,以及後續自迴歸解碼階段的延遲加快了 2 倍。
Meta Llama 3 70B 的 TGI 延遲結果,比較了 Azure VM 上的 AMD Instinct MI300X 與上一代 AMD Instinct MI250
模型微調效能
Hugging Face 庫也可以用於微調模型。我們使用 Transformers 和 PEFT 庫來使用低秩介面卡 (LoRA) 微調 Llama 3 70B。為了處理多個裝置上的並行性,我們透過 Accelerate 庫利用了 DeepSpeed Zero3。
在 Llama 3 70B 上,我們的工作負載包含批次大小為 2 的 448 個令牌批次。使用低秩介面卡,模型的原始 70,570,090,496 個引數被凍結,我們反而透過 低秩介面卡額外訓練了 16,384,000 個引數。
根據我們對 Llama 3 70B 的比較,在由 MI300X 提供支援的 Azure VM 上,我們能夠將訓練速度提高約 2 倍,而使用上一代 AMD Instinct MI250 的 HPC 伺服器則無法達到這個速度。
此外,由於 MI300X 受益於其 192 GB HBM3 記憶體(MI250 為 128 GB),我們設法在單個裝置上完全載入並微調 Meta Llama 3 70B,而 MI250 GPU 無法在單個裝置上以 float16 或 bfloat16 格式完全容納約 140 GB 的模型。 因為能夠複製和挑戰基準總是很重要的,所以我們釋出了一個配套的 Github 儲存庫,其中包含我們用於收集本部落格中展示的效能的所有工件和原始碼。
未來展望
我們為這些新的 AMD Instinct MI300 GPU 準備了許多令人興奮的功能。在未來幾周,我們將投入大量精力在迷你浮點(即 float8 及更低精度)領域。這些資料佈局具有以非均勻方式壓縮資訊的固有優勢,從而緩解了整數面臨的一些問題。
在諸如 LLM 推理等場景中,這將使 LLM 中常用的鍵值快取大小減半。稍後,將 float8 儲存的鍵值快取與 float8/float8 矩陣乘法相結合,將帶來額外的效能優勢以及更小的記憶體佔用。
結論
正如您所看到的,AMD MI300 在 AI 用例上帶來了顯著的效能提升,涵蓋了從訓練到推理的端到端用例。我們 Hugging Face 很高興看到社群和企業將能夠透過這些新硬體和整合實現什麼。我們渴望聽到您的意見並幫助您解決用例。
請務必訪問 optimum-AMD 和 text-generation-inference Github 儲存庫,以獲取針對 AMD GPU 的最新效能最佳化!