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