掘力計(jì)劃第21期 – Ray: 大模型時(shí)代的AI計(jì)算基礎(chǔ)設(shè)施
Ray 往往不以產(chǎn)品的形態(tài)出現(xiàn),而是作為產(chǎn)品的支撐

在最近的掘力計(jì)劃 21 期中,我們帶來(lái)了大家非常期待的大模型專場(chǎng),邀請(qǐng)了四位大模型領(lǐng)域的專家來(lái)為我們做一些分享。
今天給大家?guī)?lái)其中一位主講人——宋顧楊的分享主題:《Ray: 大模型時(shí)代的AI計(jì)算基礎(chǔ)設(shè)施》。
大家可能對(duì)于宋顧楊和他的主題比較陌生,我們先來(lái)介紹一下宋顧楊本人的經(jīng)歷:
- 螞蟻(計(jì)算智能技術(shù)部)Ray團(tuán)隊(duì)開(kāi)源負(fù)責(zé)人,Ray開(kāi)源社區(qū)Committer。
- 2017年以來(lái)主要參與和推動(dòng)了Ray在螞蟻從0到1再到萬(wàn)臺(tái)服務(wù)器規(guī)模的落地。
- Ray C++分布式框架的作者和Runtime Environments框架的主要開(kāi)發(fā)者,也是Ray中文社區(qū)的布道師。
他這次分享的主題是 Ray 這個(gè)分布式計(jì)算引擎框架,可能很多人都沒(méi)有聽(tīng)說(shuō)過(guò) Ray 這個(gè)框架,主要是原因作為一個(gè)基礎(chǔ)設(shè)施,Ray 往往不以產(chǎn)品的形態(tài)出現(xiàn),而是作為產(chǎn)品的支撐。
如果我們來(lái)說(shuō)一些基于 Ray 來(lái)支撐的一些產(chǎn)品,大家肯定就耳熟能詳了,比如:OpenAI,OpenAI 在今年揭露了一些他們的 GPT 系列產(chǎn)品底層訓(xùn)練所使用到的分布式計(jì)算框架,其中 Ray 框架就被他們重點(diǎn)指出了其所發(fā)揮的作用。
Ray 的演進(jìn)
Ray 從誕生之初,其實(shí)是作為一款強(qiáng)化學(xué)習(xí)方面的框架被創(chuàng)造出來(lái),隨著時(shí)代的不斷變化,Ray 也被加入了更多的功能,其定位也在慢慢發(fā)生改變,我們先來(lái)看一下 Ray 的發(fā)展歷程:

從誕生到現(xiàn)在,Ray 經(jīng)歷了七年的發(fā)展,從一開(kāi)始的強(qiáng)化學(xué)習(xí)方向到現(xiàn)在的AI方向,Ray 的團(tuán)隊(duì)及其開(kāi)源社區(qū)也做了很多的努力,其中宋顧楊所在的螞蟻集團(tuán)從 2017 年就開(kāi)始采用 Ray 框架作為支撐,并為 Ray 內(nèi)核貢獻(xiàn)了超過(guò) 26% 的代碼,所以 Ray 框架其實(shí)在螞蟻的各個(gè)場(chǎng)景內(nèi)都有涉及,并且螞蟻集團(tuán)也為其發(fā)展也貢獻(xiàn)了不小的力量:

到目前為止,Ray 的定位就是一款面向 AI 的新一代 AI 計(jì)算框架,同時(shí)也是一款通用分布式計(jì)算框架。
Ray 在計(jì)算系統(tǒng)中解決的核心問(wèn)題我們可以用一張圖來(lái)概括:

對(duì)于任何一個(gè)分布式系統(tǒng)研發(fā)團(tuán)隊(duì)來(lái)講,他們會(huì)面臨一些很重復(fù)的問(wèn)題,就是上圖右邊的這些問(wèn)題,這些問(wèn)題會(huì)耗費(fèi)整個(gè)研發(fā)團(tuán)隊(duì)很多不必要的經(jīng)歷,Ray 來(lái)解決的就是這么一個(gè)問(wèn)題,讓研發(fā)團(tuán)隊(duì)更專注于自身的業(yè)務(wù)系統(tǒng)上而非通用問(wèn)題上。
Ray 核心能力

通過(guò)上面分享人給的例子圖,我們可以看出 Ray 對(duì)于整個(gè)計(jì)算任務(wù)有很強(qiáng)的優(yōu)化,無(wú)論是從效率還是功能上,都遠(yuǎn)遠(yuǎn)超過(guò)傳統(tǒng)的云原生計(jì)算方式。
Ray 能有這么大的提高,離不開(kāi)它的一些核心設(shè)計(jì)點(diǎn):
- 不綁定計(jì)算模式:把單機(jī)編程中的基本概念分布式化。
- 無(wú)狀態(tài)計(jì)算單元:通過(guò)簡(jiǎn)單的注解就可以讓一個(gè)本地方法放到遠(yuǎn)程機(jī)器上執(zhí)行。
- 有狀態(tài)的計(jì)算單元:輕松將一個(gè)本地類部署到遠(yuǎn)程機(jī)器上,類serverless。
- 分布式 Object:多節(jié)點(diǎn)之前 Object 傳輸,自動(dòng)垃圾回收。
- 多語(yǔ)言和跨語(yǔ)言:Ray 支持 Java、Python、C++,并且可以做跨語(yǔ)言調(diào)用。
- 資源調(diào)度:注解聲明式任務(wù)需要分配的資源,比如 CPU,是否同一節(jié)點(diǎn)。
- 自動(dòng)故障恢復(fù):Ray 所有組件都具有自動(dòng)恢復(fù)功能,用戶無(wú)需關(guān)心其底層細(xì)節(jié),聲明其實(shí)現(xiàn)即可。
- 運(yùn)行時(shí)環(huán)境依賴:針對(duì)不同的任務(wù)可以直接聲明不同的運(yùn)行環(huán)境,比如需要一個(gè)帶 tensorflow 的 python 環(huán)境。
- 運(yùn)維:完善的運(yùn)維與監(jiān)控功能與可視化頁(yè)面。
雖然實(shí)現(xiàn)了這么多強(qiáng)大的功能,Ray 的架構(gòu)卻是非常的簡(jiǎn)潔高效:

具體想要了解具體 Ray 的架構(gòu)協(xié)作方式可以參考他們的官方文檔,我們?cè)谶@里就不多做闡述了。
Ray 的開(kāi)源生態(tài)與案例

上圖就是 Ray 支持的 AI 生態(tài)的全景圖,幾乎涵蓋了市面上所有主流框架,也就是說(shuō),在 Ray 里面可以很方便的上面這些框架做集成。
通過(guò)這些框架集成,Ray 也可以將整個(gè)AI pipeline執(zhí)行過(guò)程串聯(lián)成以下四個(gè)大步驟:

Data -> train -> tune -> serve,這四步涵蓋了所有分布式訓(xùn)練的主要功能:
- 數(shù)據(jù)預(yù)處理。
- 深度學(xué)習(xí)。
- 深度調(diào)優(yōu)。
- 在線推理。
在 Ray 中,你可以通過(guò)短短百行代碼完成以上所有步驟。
在開(kāi)源大模型訓(xùn)練方面,也有許多大型項(xiàng)目在使用 Ray:

在企業(yè)級(jí)應(yīng)用方面,大家最耳熟能詳?shù)膽?yīng)該就是 ChatGPT-4了:

除了 OpenAI 之外,還有許多來(lái)自全球各地的公司在深度使用 Ray:
