![]() |
—— 用于加(jia)速基礎模型(xing)創新的云原生開源(yuan)軟(ruan)件(jian)棧
作者:
Talia Gershon, IBM 研(yan)究院混合(he)云架構研(yan)究總監
Priya Nagpurkar, IBM 研究院混(hun)合云平(ping)臺研發副總裁
Carlos Costa, IBM 研(yan)究院基(ji)礎模型和多云首席研(yan)究科學(xue)家(jia)
Darrell Reimer, IBM 研(yan)究院杰出工程師
北(bei)京2023年5月15日 /美通社/ -- 基礎模型和生成式 AI 激發(fa)人類的(de)(de)集體想象力,推動我們(men)(men)發(fa)現改善(shan)生活和工作方式的(de)(de)新方法(fa)。 從(cong)通過自然(ran)語言實現更加(jia)無縫的(de)(de)技(ji)術交(jiao)互,到(dao)自動生成代碼(ma)或(huo)其(qi)他數據,再到(dao)跨(kua)科學各個領(ling)域(yu)的(de)(de)用(yong)例,基礎(chu)模(mo)型的(de)(de)應用(yong)場景(jing)與日俱增。 IBM 的(de)(de)目標是將該技(ji)術融入我們(men)(men)的(de)(de)產品(pin)組合,幫助我們(men)(men)的(de)(de)客戶(hu)快速高效(xiao)且安(an)全地將基礎(chu)模(mo)型應用(yong)到(dao)他們(men)(men)自己的(de)(de)產品(pin)中。
在這一過程中,我們分享了為什么在 IBM Cloud 中構建 AI 超級計算機 Vela。 這項工作大力推動我們重構整個技術堆棧,從而加快我們訓練、微調和部署尖端 AI 模型的步伐。 通過這個過程,我們成功構建了一個面向基礎模型時代進行優化的(de)現代化、靈(ling)活(huo)的(de) AI 軟件棧。
本博文將介紹在 Red Hat OpenShift Container Platform 上運行的高性能云原生 AI 訓練堆棧,該平臺是新推出的 watsonx 平臺的構建基礎。
作為訓練堆棧的補充,我們的技術棧可降低成本與優化性能,對基礎模型進行調整并為其提供服務。 以下多項技術已貢獻給開源社區,如 PyTorch、Ray、Kserve 和 Open Data Hub (ODH) (一個可在(zai) Kubernetes 上構建(jian)、部署和(he)管理數(shu)據密(mi)集型(xing)應用(yong)的(de)(de)開源平(ping)臺(tai))。 在(zai) ODH 上發展成熟的(de)(de)技術(shu)隨后被(bei)引入(ru) Red Hat 的(de)(de) OpenShift AI,IBM 目前的(de)(de)新一代 AI 平(ping)臺(tai) watsonx.ai 使用(yong) Red Hat OpenShift AI。 借助(zhu)這種(zhong)方法,IBM 和(he) Red Hat 為客(ke)戶(hu)提(ti)供最先(xian)進的(de)(de)開源基礎模型(xing)棧,以支(zhi)持在(zai)他們選擇的(de)(de)任(ren)何環境(本地、IBM Cloud 或其(qi)他公有云)中運行。
我們的基礎模型訓練方法
我們(men)在開(kai)始重構 AI 訓練(lian)堆棧時有兩(liang)個(ge)目標。 首先,希望保持傳統 HPC 系(xi)統的(de)(de)實(shi)(shi)用(yong)性:最大程度提(ti)高硬件(jian)利用(yong)率,并高效利用(yong)高性能(neng)基(ji)礎架(jia)構。 其次,希望提(ti)供混合云開(kai)發體驗的(de)(de)靈活性和(he)生產(chan)力優勢(shi):提(ti)高開(kai)發敏捷(jie)性和(he)代(dai)碼重用(yong)率,簡化基(ji)礎架(jia)構和(he)軟件(jian)的(de)(de)管(guan)理與擴(kuo)展(zhan)。 為(wei)(wei)了實(shi)(shi)現第二個(ge)目標,我們(men)使用(yong) Kubernetes 構建解決方案,通過容器復用(yong)代(dai)碼以及擴(kuo)展(zhan)軟件(jian)。 但這一決定意味著我們(men)需要將 Kubernetes 轉化為(wei)(wei)可(ke)處(chu)理高性能(neng)工作負(fu)載(zai)的(de)(de)平臺。
我們還需要一(yi)個可以(yi)應對每一(yi)步(bu) AI 訓練(lian)工作(zuo)流(liu)程的解決方案(an):進行數(shu)據預處理、分布式訓練(lian)和模型驗(yan)證。 我們確定了(le)合(he)作(zuo)的關鍵開源社區,共(gong)同(tong)處理端(duan)到端(duan)工作(zuo)流(liu)程,確定了(le)需要克服的關鍵用戶體驗(yan)障礙,以(yi)便用戶啟動、運行和擴展工作(zuo)。
下(xia)圖 1 的(de)左側(ce)介紹(shao)了我們的(de)訓練(lian)軟件堆(dui)棧的(de)整體情(qing)況,該堆(dui)棧自 2022 年底以來一(yi)直(zhi)在 IBM Cloud 的(de) Vela 上(shang)運行,由 IBM 研究院(yuan)使用。 圖 1 右側(ce)描述(shu)了我們用于(yu)調(diao)整和(he)提供基礎(chu)模型的(de)堆(dui)棧,稍后(hou)將(jiang)在博(bo)客(ke)中(zhong)詳細討論(lun)。
高級 Kubernetes 原生資源利用與管理
這項工作伊始,Kubernetes 生態系統在大規模和高性能 AI 工作負載方面仍然存在重大差距。 早期關注的領域之一是將基礎架構功能(如網絡資源)應用于工作負載,而不會產生額外的開銷。 為此,我們創建了一個多 NIC CNI 操作程序,消除(chu)了(le)封(feng)裝,可(ke)配置底層(ceng)網絡接(jie)口并將網絡延遲(chi)減(jian)少(shao)了(le)一(yi)半,同時與開箱即(ji)用的容(rong)器(qi)網絡解決(jue)方案相比(bi)帶寬(kuan)增加(jia)了(le)七倍。 這些(xie)改進對最終用戶完(wan)全透明(ming)。
我們嘗試填補的第二個空白領域是使用正確的云原生作業調度程序。 由于大量 AI 開發人員希望提交作業以在 Vela 上運行,我們需要一個調度程序來分配資源并確定作業的優先級,以最大限度地提升資源利用率。 為了解決這個問題,IBM 研究人員創建了多集群應用進程調度程序 (MCAD),可提供作業隊列、作業優先級與搶占、超時以及系統用戶之間的資源共享編排。 此外,我們啟用了工作負載打包和分組調度,以消除資源碎片,這些都通過 OpenShift 實現。 我們進一步開發了 InstaScale,它(ta)與(yu) MCAD 共同動(dong)(dong)態擴(kuo)展云(yun)托(tuo)管(guan)的 OpenShift 集群(qun)。 通過自動(dong)(dong)從云(yun)提供商獲(huo)取 GPU 并按(an)需(xu)發(fa)布,InstaScale 讓從業者不必(bi)擔心基礎架構管(guan)理和(he)成(cheng)本問(wen)題。
高效、可擴展的數據預處理,模型訓練與驗證
為了使 AI 管道中的所有運行步驟簡單高效,我們主要運用 和貢獻PyTorch 和 Ray 這兩項關鍵的開源技術。 借助 Ray,我們使用數據科學家友好的 Python API 實現了可擴展的數據預處理(例如使用仇恨、濫用和褻瀆過濾器過濾數據)和后處理步驟(例如模型微調和驗證)。 通過運行 Ray with MCAD,我們(men)支持并發運(yun)行的異構 Ray 作業高效(xiao)共享資源池。
我們正與 PyTorch 合作推進對分布式訓練的支持,包括通過引入 rate_limiter 來改進對完全分片數據并行 (FSDP) 訓練 API 的支持。 我們最近展示了在基于以太網的環境(如 IBM Cloud 中的 Vela)上為參數為 10B+ 的模型高效擴展分布式訓練作業。 此外,通過集成 MCAD 與 TorchX(TorchX 是 PyTorch 應(ying)用(yong)的通用(yong)作(zuo)(zuo)業(ye)啟動器),我們能夠(gou)使用(yong)不同(tong) API 和框(kuang)架以(yi)透明方式(shi)支持多種基于 PyTorch 的作(zuo)(zuo)業(ye)。 這些工作(zuo)(zuo)都受底層(ceng)工作(zuo)(zuo)管(guan)理系統的支持,無(wu)需 AI 從(cong)業(ye)者修改代碼。
簡化用戶體驗
工作流程本身的訓練分為以下三個步驟:模型探索(通常是使用一些 GPU 運行的縮小試驗)、擴展分布式訓練作業(消耗數百個 GPU)以及模型驗證。 對于許多 AI 從業者來說,編排這些步驟可能很復雜,而且配置和管理的時間長。 我們通過 CodeFlare 項(xiang)目(mu)解決了這一(yi)挑戰,它能夠(gou)提供(gong)引導式、簡化的用戶體驗,以有效地提高訓練、測試和監控模(mo)型訓練生命周(zhou)期的效率。
CodeFlare CLI (基于控制臺和 UI)指導用戶應對復雜的遠程 OpenShift 集群運行,同時自動執行作業配置、存儲設置、日志記錄以及管理用于監控和分析的端點。CodeFlare SDK(基于 Jupyter)為用戶提供直觀(guan)的(de) Python 界(jie)面,進行(xing)批(pi)處理(li)(li)資源請(qing)求處理(li)(li)、作(zuo)業提交和觀(guan)察。 借助這些功能(neng),我們(men)大大降(jiang)低了 AI 研究(jiu)同事(shi)進入云原生堆棧的(de)門檻。
在 Vela 上運行我們的軟件棧
到 2022 年底,IBM 的(de)所有基(ji)(ji)礎模型訓練工作都(dou)過(guo)渡到在(zai) IBM Cloud 的(de) Vela 上運(yun)行此(ci)軟(ruan)件棧(zhan)。 如(ru)今(jin),MCAD 管(guan)理(li)這(zhe)些 AI 作業的(de)隊列,從(cong)單(dan) GPU 作業到利用超過(guo) 512 個 GPU 的(de)作業,并處理(li)作業優(you)先級和(he)配額管(guan)理(li)。 我們在(zai)過(guo)程中(zhong)發現了其他方法(fa),可以(yi)讓團隊在(zai)以(yi) GPU 為中(zhong)心的(de)環境中(zhong)(如(ru) Vela)中(zhong)管(guan)理(li) OpenShift 集群更輕(qing)松,例如(ru),通(tong)過(guo)增強 OpenShift Installer 配置基(ji)(ji)礎架(jia)構(gou) (IPI),以(yi)便更輕(qing)松地(di)在(zai)高性能基(ji)(ji)礎架(jia)構(gou)上部署(shu)和(he)管(guan)理(li) OpenShift。
我們的基礎模型調優和服務方法
訓練和(he)驗證最(zui)(zui)(zui)先(xian)進(jin)的(de)(de)基礎(chu)模型是 AI 價(jia)值(zhi)鏈的(de)(de)關鍵早期階段,但當模型在 AI 工作流程的(de)(de)調(diao)優(you)(you)(you)和(he)推(tui)理(li)步(bu)驟中投入生(sheng)產使用(yong)時(shi),最(zui)(zui)(zui)終會捕獲真正的(de)(de)價(jia)值(zhi)。 我們用(yong)于推(tui)理(li)和(he)模型調(diao)優(you)(you)(you)的(de)(de)軟件(jian)棧(zhan)主要是在底層硬件(jian)上(shang)高效執(zhi)行模型,以最(zui)(zui)(zui)佳方式(shi)批處理(li)傳入的(de)(de)請求,簡化 AI 與應(ying)用(yong)的(de)(de)集成,并提(ti)供最(zui)(zui)(zui)先(xian)進(jin)的(de)(de)模型適(shi)應(ying)技術。 上(shang)圖 1 的(de)(de)右側介紹了我們的(de)(de)基礎(chu)模型調(diao)優(you)(you)(you)和(he)服務棧(zhan),以下是更(geng)為詳細(xi)的(de)(de)描(miao)述(shu)。
推理性能
用于(yu)優化基礎(chu)模型在給(gei)定硬件(jian)(jian)平(ping)臺(tai)上運行(xing)方式的(de)軟件(jian)(jian)庫(ku)可(ke)(ke)以將吞吐(tu)量(liang)和(he)延遲提高(gao) 10-100 倍。 我(wo)們的(de)服務(wu)軟件(jian)(jian)棧中有一組(zu)精(jing)心設計的(de)成熟(shu)優化路(lu)徑(包括 ONNX 和(he) Hugging Face Optimum),用于(yu)推理(li)常見(jian)模型架構,并且(qie)可(ke)(ke)擴(kuo)展,以適(shi)應新的(de)推理(li)服務(wu)器或優化。 考慮到 AI 和(he)開源社(she)區的(de)快(kuai)速創新步伐,可(ke)(ke)擴(kuo)展性是我(wo)們軟件(jian)(jian)棧的(de)關鍵設計點(dian)。 此(ci)外,真正的(de) AI 服務(wu)會同時收(shou)到來自多個用戶的(de)、針對多個模型的(de)大量(liang)推理(li)請求(qiu)。 我(wo)們的(de)服務(wu)堆棧動態批處(chu)理(li)傳入的(de)請求(qiu),并通(tong)過(guo)構建(jian)和(he)反饋 Hugging Face、Kserve 和(he) Model Mesh 社(she)區,有效(xiao)地在模型之(zhi)間進行(xing)多路(lu)復用。
簡化應用程序集成
目前可(ke)用(yong)(yong)于(yu)(yu)運行 AI 模(mo)型(xing)的(de)推理(li)服務器需要用(yong)(yong)戶具(ju)備(bei)大量的(de) AI 專業知識。 模(mo)型(xing)的(de)輸入和輸出都是張量。 對(dui)于(yu)(yu)希望利用(yong)(yong)這(zhe)些模(mo)型(xing)完成任務的(de)應(ying)用(yong)(yong)開發(fa)人(ren)員來說(shuo),這(zhe)種格式并不易于(yu)(yu)理(li)解。 為(wei)(wei)了使(shi)(shi)此過程對(dui)開發(fa)人(ren)員更加友(you)好,必須將(jiang)(jiang)模(mo)型(xing)輸出轉換(huan)為(wei)(wei)更易于(yu)(yu)使(shi)(shi)用(yong)(yong)的(de)內(nei)容。 我們創(chuang)建了 Caikit 抽(chou)象層,可(ke)為(wei)(wei)應(ying)用(yong)(yong)開發(fa)人(ren)員提供直觀的(de) API 和數據模(mo)型(xing),并提供一個穩定的(de)接口,支(zhi)持(chi)模(mo)型(xing)和應(ying)用(yong)(yong)獨立發(fa)展。 這(zhe)一抽(chou)象層在 IBM 的(de) Watson 模(mo)型(xing)中使(shi)(shi)用(yong)(yong),用(yong)(yong)于(yu)(yu)提供基礎架構,并將(jiang)(jiang)很(hen)快貢獻給開源(yuan)。
基礎模型調優
基礎模型的關鍵價值主張之一是能夠利用預訓練的基礎模型,并使用專用數據"調優"或"適應",以提高其下游任務的性能。 我們的目標是打包最先進的技術,以實現計算效率高的模型自適應,讓不甚了解其工作原理的人也能夠使用。 我們的可擴展堆棧目前支持多任務提示調優 (MPT) 和(he)微調,通過開源(yuan)(yuan)項(xiang)目參(can)數高效微調 (PEFT) 集成。 在接下(xia)來的(de)幾個月里(li),我們將開源(yuan)(yuan)一(yi)些提示(shi)調優算法(fa)和(he)實現。
和 Red Hat合作
IBM 研究院正在與 Red Hat 合作,我們將開發的功能貢獻給主要開源社區,直接發布在 Open Data Hub (ODH),讓其他人(ren)也從這項(xiang)工作中(zhong)(zhong)受益(yi)。 ODH 是一個(ge)全面的(de)開(kai)源(yuan)工具集(ji)合,旨在利用 OpenShift 的(de)優勢來(lai)推動整個(ge) AI 開(kai)發生命周期。 Open Data Hub 中(zhong)(zhong)引入的(de)許(xu)多技(ji)術已發展成為 Red Hat OpenShift AI 的(de)一部分,并作為 watsonx.ai 的(de)中(zhong)(zhong)間件(jian)基礎(chu)提供服務。 圖 2 顯(xian)示了(le)本博客中(zhong)(zhong)描述的(de)對各種開(kai)源(yuan)貢獻將如何(he)匯集(ji)到 ODH 中(zhong)(zhong)以支持基礎(chu)模型(xing)用例。
后續工作
面向基(ji)礎(chu)模(mo)型時代(dai)重構(gou)(gou)我(wo)們的端到(dao)端軟件棧(zhan)對我(wo)們的 AI 社區具(ju)有相當大的價值。 AI 研究人(ren)員不再需(xu)(xu)要(yao)非常深入的基(ji)礎(chu)架構(gou)(gou)知識,就可以讓作(zuo)(zuo)業高性(xing)能運行。 他們不再需(xu)(xu)要(yao)弄(nong)清楚如何將作(zuo)(zuo)業從幾(ji)個(ge) GPU 擴展到(dao)數百個(ge),或(huo)者如何精確地分(fen)配作(zuo)(zuo)業以實現(xian)高工作(zuo)(zuo)負載性(xing)能,現(xian)在這(zhe)些任務都可以交給軟件棧(zhan)處理。 代(dai)碼可跨(kua)團隊重用,試驗(yan)也(ye)易于(yu)重現(xian)。 我(wo)們還大幅簡化了 AI 開發人(ren)員如何以高計算效(xiao)率和開發人(ren)員友好的方式(shi)提供和調整基(ji)礎(chu)模(mo)型的方式(shi)。
或許(xu)最重(zhong)要的是,在 OpenShift 上構建此堆棧提供了(le)對其他環(huan)境(jing)的可移植性(xing),讓合作伙(huo)伴可以在本地和(he)任何公(gong)有云中(zhong)(zhong)使用這(zhe)(zhe)些(xie)(xie)(xie)功能。 我們(men)很高(gao)興與(yu)紅帽一起通(tong)過(guo)開(kai)放數據中(zhong)(zhong)心將(jiang)這(zhe)(zhe)些(xie)(xie)(xie)創(chuang)新引入開(kai)源社區,在 Kubernetes 上推進 AI 工(gong)作流(liu)程方(fang)面的最新技術,并為(wei)在 Red Hat OpenShift AI 和(he) watsonx.ai 中(zhong)(zhong)使用這(zhe)(zhe)些(xie)(xie)(xie)創(chuang)新內容奠(dian)定了(le)基(ji)礎。 通(tong)過(guo)這(zhe)(zhe)種方(fang)法,我們(men)為(wei)基(ji)礎模型的端到端生命周期(qi)啟用了(le)一個企業級平(ping)臺。 我們(men)期(qi)待與(yu)您在上游社區進行合作。