—— 用于加速基礎(chǔ)模型創(chuàng)新的云原生開源軟件棧
作者:
Talia Gershon, IBM 研究院混合云架構(gòu)研究總監(jiān)
Priya Nagpurkar, IBM 研究院混合云平臺研發(fā)副總裁
Carlos Costa, IBM 研究院基礎(chǔ)模型和多云首席研究科學(xué)家
Darrell Reimer, IBM 研究院杰出工程師
北京2023年5月15日 /美通社/ -- 基礎(chǔ)模型和生成式 AI 激發(fā)人類的集體想象力,推動我們發(fā)現(xiàn)改善生活和工作方式的新方法。 從通過自然語言實現(xiàn)更加無縫的技術(shù)交互,到自動生成代碼或其他數(shù)據(jù),再到跨科學(xué)各個領(lǐng)域的用例,基礎(chǔ)模型的應(yīng)用場景與日俱增。 IBM 的目標(biāo)是將該技術(shù)融入我們的產(chǎn)品組合,幫助我們的客戶快速高效且安全地將基礎(chǔ)模型應(yīng)用到他們自己的產(chǎn)品中。
在這一過程中,我們分享了為什么在 IBM Cloud 中構(gòu)建 AI 超級計算機(jī) Vela。 這項工作大力推動我們重構(gòu)整個技術(shù)堆棧,從而加快我們訓(xùn)練、微調(diào)和部署尖端 AI 模型的步伐。 通過這個過程,我們成功構(gòu)建了一個面向基礎(chǔ)模型時代進(jìn)行優(yōu)化的現(xiàn)代化、靈活的 AI 軟件棧。
本博文將介紹在 Red Hat OpenShift Container Platform 上運(yùn)行的高性能云原生 AI 訓(xùn)練堆棧,該平臺是新推出的 watsonx 平臺的構(gòu)建基礎(chǔ)。
作為訓(xùn)練堆棧的補(bǔ)充,我們的技術(shù)??山档统杀九c優(yōu)化性能,對基礎(chǔ)模型進(jìn)行調(diào)整并為其提供服務(wù)。 以下多項技術(shù)已貢獻(xiàn)給開源社區(qū),如 PyTorch、Ray、Kserve 和 Open Data Hub (ODH) (一個可在 Kubernetes 上構(gòu)建、部署和管理數(shù)據(jù)密集型應(yīng)用的開源平臺)。 在 ODH 上發(fā)展成熟的技術(shù)隨后被引入 Red Hat 的 OpenShift AI,IBM 目前的新一代 AI 平臺 watsonx.ai 使用 Red Hat OpenShift AI。 借助這種方法,IBM 和 Red Hat 為客戶提供最先進(jìn)的開源基礎(chǔ)模型棧,以支持在他們選擇的任何環(huán)境(本地、IBM Cloud 或其他公有云)中運(yùn)行。
我們的基礎(chǔ)模型訓(xùn)練方法
我們在開始重構(gòu) AI 訓(xùn)練堆棧時有兩個目標(biāo)。 首先,希望保持傳統(tǒng) HPC 系統(tǒng)的實用性:最大程度提高硬件利用率,并高效利用高性能基礎(chǔ)架構(gòu)。 其次,希望提供混合云開發(fā)體驗的靈活性和生產(chǎn)力優(yōu)勢:提高開發(fā)敏捷性和代碼重用率,簡化基礎(chǔ)架構(gòu)和軟件的管理與擴(kuò)展。 為了實現(xiàn)第二個目標(biāo),我們使用 Kubernetes 構(gòu)建解決方案,通過容器復(fù)用代碼以及擴(kuò)展軟件。 但這一決定意味著我們需要將 Kubernetes 轉(zhuǎn)化為可處理高性能工作負(fù)載的平臺。
我們還需要一個可以應(yīng)對每一步 AI 訓(xùn)練工作流程的解決方案:進(jìn)行數(shù)據(jù)預(yù)處理、分布式訓(xùn)練和模型驗證。 我們確定了合作的關(guān)鍵開源社區(qū),共同處理端到端工作流程,確定了需要克服的關(guān)鍵用戶體驗障礙,以便用戶啟動、運(yùn)行和擴(kuò)展工作。
下圖 1 的左側(cè)介紹了我們的訓(xùn)練軟件堆棧的整體情況,該堆棧自 2022 年底以來一直在 IBM Cloud 的 Vela 上運(yùn)行,由 IBM 研究院使用。 圖 1 右側(cè)描述了我們用于調(diào)整和提供基礎(chǔ)模型的堆棧,稍后將在博客中詳細(xì)討論。
高級 Kubernetes 原生資源利用與管理
這項工作伊始,Kubernetes 生態(tài)系統(tǒng)在大規(guī)模和高性能 AI 工作負(fù)載方面仍然存在重大差距。 早期關(guān)注的領(lǐng)域之一是將基礎(chǔ)架構(gòu)功能(如網(wǎng)絡(luò)資源)應(yīng)用于工作負(fù)載,而不會產(chǎn)生額外的開銷。 為此,我們創(chuàng)建了一個多 NIC CNI 操作程序,消除了封裝,可配置底層網(wǎng)絡(luò)接口并將網(wǎng)絡(luò)延遲減少了一半,同時與開箱即用的容器網(wǎng)絡(luò)解決方案相比帶寬增加了七倍。 這些改進(jìn)對最終用戶完全透明。
我們嘗試填補(bǔ)的第二個空白領(lǐng)域是使用正確的云原生作業(yè)調(diào)度程序。 由于大量 AI 開發(fā)人員希望提交作業(yè)以在 Vela 上運(yùn)行,我們需要一個調(diào)度程序來分配資源并確定作業(yè)的優(yōu)先級,以最大限度地提升資源利用率。 為了解決這個問題,IBM 研究人員創(chuàng)建了多集群應(yīng)用進(jìn)程調(diào)度程序 (MCAD),可提供作業(yè)隊列、作業(yè)優(yōu)先級與搶占、超時以及系統(tǒng)用戶之間的資源共享編排。 此外,我們啟用了工作負(fù)載打包和分組調(diào)度,以消除資源碎片,這些都通過 OpenShift 實現(xiàn)。 我們進(jìn)一步開發(fā)了 InstaScale,它與 MCAD 共同動態(tài)擴(kuò)展云托管的 OpenShift 集群。 通過自動從云提供商獲取 GPU 并按需發(fā)布,InstaScale 讓從業(yè)者不必?fù)?dān)心基礎(chǔ)架構(gòu)管理和成本問題。
高效、可擴(kuò)展的數(shù)據(jù)預(yù)處理,模型訓(xùn)練與驗證
為了使 AI 管道中的所有運(yùn)行步驟簡單高效,我們主要運(yùn)用 和貢獻(xiàn)PyTorch 和 Ray 這兩項關(guān)鍵的開源技術(shù)。 借助 Ray,我們使用數(shù)據(jù)科學(xué)家友好的 Python API 實現(xiàn)了可擴(kuò)展的數(shù)據(jù)預(yù)處理(例如使用仇恨、濫用和褻瀆過濾器過濾數(shù)據(jù))和后處理步驟(例如模型微調(diào)和驗證)。 通過運(yùn)行 Ray with MCAD,我們支持并發(fā)運(yùn)行的異構(gòu) Ray 作業(yè)高效共享資源池。
我們正與 PyTorch 合作推進(jìn)對分布式訓(xùn)練的支持,包括通過引入 rate_limiter 來改進(jìn)對完全分片數(shù)據(jù)并行 (FSDP) 訓(xùn)練 API 的支持。 我們最近展示了在基于以太網(wǎng)的環(huán)境(如 IBM Cloud 中的 Vela)上為參數(shù)為 10B+ 的模型高效擴(kuò)展分布式訓(xùn)練作業(yè)。 此外,通過集成 MCAD 與 TorchX(TorchX 是 PyTorch 應(yīng)用的通用作業(yè)啟動器),我們能夠使用不同 API 和框架以透明方式支持多種基于 PyTorch 的作業(yè)。 這些工作都受底層工作管理系統(tǒng)的支持,無需 AI 從業(yè)者修改代碼。
簡化用戶體驗
工作流程本身的訓(xùn)練分為以下三個步驟:模型探索(通常是使用一些 GPU 運(yùn)行的縮小試驗)、擴(kuò)展分布式訓(xùn)練作業(yè)(消耗數(shù)百個 GPU)以及模型驗證。 對于許多 AI 從業(yè)者來說,編排這些步驟可能很復(fù)雜,而且配置和管理的時間長。 我們通過 CodeFlare 項目解決了這一挑戰(zhàn),它能夠提供引導(dǎo)式、簡化的用戶體驗,以有效地提高訓(xùn)練、測試和監(jiān)控模型訓(xùn)練生命周期的效率。
CodeFlare CLI (基于控制臺和 UI)指導(dǎo)用戶應(yīng)對復(fù)雜的遠(yuǎn)程 OpenShift 集群運(yùn)行,同時自動執(zhí)行作業(yè)配置、存儲設(shè)置、日志記錄以及管理用于監(jiān)控和分析的端點(diǎn)。CodeFlare SDK(基于 Jupyter)為用戶提供直觀的 Python 界面,進(jìn)行批處理資源請求處理、作業(yè)提交和觀察。 借助這些功能,我們大大降低了 AI 研究同事進(jìn)入云原生堆棧的門檻。
在 Vela 上運(yùn)行我們的軟件棧
到 2022 年底,IBM 的所有基礎(chǔ)模型訓(xùn)練工作都過渡到在 IBM Cloud 的 Vela 上運(yùn)行此軟件棧。 如今,MCAD 管理這些 AI 作業(yè)的隊列,從單 GPU 作業(yè)到利用超過 512 個 GPU 的作業(yè),并處理作業(yè)優(yōu)先級和配額管理。 我們在過程中發(fā)現(xiàn)了其他方法,可以讓團(tuán)隊在以 GPU 為中心的環(huán)境中(如 Vela)中管理 OpenShift 集群更輕松,例如,通過增強(qiáng) OpenShift Installer 配置基礎(chǔ)架構(gòu) (IPI),以便更輕松地在高性能基礎(chǔ)架構(gòu)上部署和管理 OpenShift。
我們的基礎(chǔ)模型調(diào)優(yōu)和服務(wù)方法
訓(xùn)練和驗證最先進(jìn)的基礎(chǔ)模型是 AI 價值鏈的關(guān)鍵早期階段,但當(dāng)模型在 AI 工作流程的調(diào)優(yōu)和推理步驟中投入生產(chǎn)使用時,最終會捕獲真正的價值。 我們用于推理和模型調(diào)優(yōu)的軟件棧主要是在底層硬件上高效執(zhí)行模型,以最佳方式批處理傳入的請求,簡化 AI 與應(yīng)用的集成,并提供最先進(jìn)的模型適應(yīng)技術(shù)。 上圖 1 的右側(cè)介紹了我們的基礎(chǔ)模型調(diào)優(yōu)和服務(wù)棧,以下是更為詳細(xì)的描述。
推理性能
用于優(yōu)化基礎(chǔ)模型在給定硬件平臺上運(yùn)行方式的軟件庫可以將吞吐量和延遲提高 10-100 倍。 我們的服務(wù)軟件棧中有一組精心設(shè)計的成熟優(yōu)化路徑(包括 ONNX 和 Hugging Face Optimum),用于推理常見模型架構(gòu),并且可擴(kuò)展,以適應(yīng)新的推理服務(wù)器或優(yōu)化。 考慮到 AI 和開源社區(qū)的快速創(chuàng)新步伐,可擴(kuò)展性是我們軟件棧的關(guān)鍵設(shè)計點(diǎn)。 此外,真正的 AI 服務(wù)會同時收到來自多個用戶的、針對多個模型的大量推理請求。 我們的服務(wù)堆棧動態(tài)批處理傳入的請求,并通過構(gòu)建和反饋 Hugging Face、Kserve 和 Model Mesh 社區(qū),有效地在模型之間進(jìn)行多路復(fù)用。
簡化應(yīng)用程序集成
目前可用于運(yùn)行 AI 模型的推理服務(wù)器需要用戶具備大量的 AI 專業(yè)知識。 模型的輸入和輸出都是張量。 對于希望利用這些模型完成任務(wù)的應(yīng)用開發(fā)人員來說,這種格式并不易于理解。 為了使此過程對開發(fā)人員更加友好,必須將模型輸出轉(zhuǎn)換為更易于使用的內(nèi)容。 我們創(chuàng)建了 Caikit 抽象層,可為應(yīng)用開發(fā)人員提供直觀的 API 和數(shù)據(jù)模型,并提供一個穩(wěn)定的接口,支持模型和應(yīng)用獨(dú)立發(fā)展。 這一抽象層在 IBM 的 Watson 模型中使用,用于提供基礎(chǔ)架構(gòu),并將很快貢獻(xiàn)給開源。
基礎(chǔ)模型調(diào)優(yōu)
基礎(chǔ)模型的關(guān)鍵價值主張之一是能夠利用預(yù)訓(xùn)練的基礎(chǔ)模型,并使用專用數(shù)據(jù)"調(diào)優(yōu)"或"適應(yīng)",以提高其下游任務(wù)的性能。 我們的目標(biāo)是打包最先進(jìn)的技術(shù),以實現(xiàn)計算效率高的模型自適應(yīng),讓不甚了解其工作原理的人也能夠使用。 我們的可擴(kuò)展堆棧目前支持多任務(wù)提示調(diào)優(yōu) (MPT) 和微調(diào),通過開源項目參數(shù)高效微調(diào) (PEFT) 集成。 在接下來的幾個月里,我們將開源一些提示調(diào)優(yōu)算法和實現(xiàn)。
和 Red Hat合作
IBM 研究院正在與 Red Hat 合作,我們將開發(fā)的功能貢獻(xiàn)給主要開源社區(qū),直接發(fā)布在 Open Data Hub (ODH),讓其他人也從這項工作中受益。 ODH 是一個全面的開源工具集合,旨在利用 OpenShift 的優(yōu)勢來推動整個 AI 開發(fā)生命周期。 Open Data Hub 中引入的許多技術(shù)已發(fā)展成為 Red Hat OpenShift AI 的一部分,并作為 watsonx.ai 的中間件基礎(chǔ)提供服務(wù)。 圖 2 顯示了本博客中描述的對各種開源貢獻(xiàn)將如何匯集到 ODH 中以支持基礎(chǔ)模型用例。
后續(xù)工作
面向基礎(chǔ)模型時代重構(gòu)我們的端到端軟件棧對我們的 AI 社區(qū)具有相當(dāng)大的價值。 AI 研究人員不再需要非常深入的基礎(chǔ)架構(gòu)知識,就可以讓作業(yè)高性能運(yùn)行。 他們不再需要弄清楚如何將作業(yè)從幾個 GPU 擴(kuò)展到數(shù)百個,或者如何精確地分配作業(yè)以實現(xiàn)高工作負(fù)載性能,現(xiàn)在這些任務(wù)都可以交給軟件棧處理。 代碼可跨團(tuán)隊重用,試驗也易于重現(xiàn)。 我們還大幅簡化了 AI 開發(fā)人員如何以高計算效率和開發(fā)人員友好的方式提供和調(diào)整基礎(chǔ)模型的方式。
或許最重要的是,在 OpenShift 上構(gòu)建此堆棧提供了對其他環(huán)境的可移植性,讓合作伙伴可以在本地和任何公有云中使用這些功能。 我們很高興與紅帽一起通過開放數(shù)據(jù)中心將這些創(chuàng)新引入開源社區(qū),在 Kubernetes 上推進(jìn) AI 工作流程方面的最新技術(shù),并為在 Red Hat OpenShift AI 和 watsonx.ai 中使用這些創(chuàng)新內(nèi)容奠定了基礎(chǔ)。 通過這種方法,我們?yōu)榛A(chǔ)模型的端到端生命周期啟用了一個企業(yè)級平臺。 我們期待與您在上游社區(qū)進(jìn)行合作。