近年來(lái),AI 領(lǐng)域?qū)椰F(xiàn)突破性進(jìn)展,吸引了全球企業(yè)爭(zhēng)相采用 AI 技術(shù)來(lái)培育新增長(zhǎng)、形成新動(dòng)能、加快產(chǎn)業(yè)與科技的創(chuàng)新融合。在這個(gè)背景下,AI 人才開(kāi)始供不應(yīng)求,AI 產(chǎn)品迎來(lái)爆發(fā)。 然而新技術(shù)總有一定壁壘,機(jī)器學(xué)習(xí)不僅需要算法科學(xué)家構(gòu)建新模型,工程師應(yīng)用新模型,還需要工程師合力建設(shè)機(jī)器學(xué)習(xí)平臺(tái)。而在應(yīng)用機(jī)器學(xué)習(xí)的企業(yè)和團(tuán)隊(duì)中,建設(shè)機(jī)器學(xué)習(xí)平臺(tái)正是重要一環(huán)。 那么機(jī)器學(xué)習(xí)平臺(tái)是什么呢?它又有什么突出特性?今天,才云科技 AI 平臺(tái)工程師 gaocegege 將為各位答疑解惑。 機(jī)器學(xué)習(xí)平臺(tái)對(duì)于不同工程師角色而言,有著不同的含義。在之前發(fā)布的關(guān)于 Kubeflow 的文章中,有不少網(wǎng)友私下詢(xún)問(wèn)到底什么是機(jī)器學(xué)習(xí)平臺(tái),它與機(jī)器學(xué)習(xí)框架有何不同。在這篇文章里,我將從不同的維度來(lái)介紹一直談?wù)摰臋C(jī)器學(xué)習(xí)平臺(tái)到底是什么。 01 如果你有一個(gè)算法工程師首先,我給大家講個(gè)故事: 小咩是 TooYoung 科技的算法工程師,最近他正在為公司實(shí)現(xiàn)一個(gè)圖像識(shí)別的模型。為了支持他的工作,公司 Infra 團(tuán)隊(duì)的工程師小嬸給了他四臺(tái)機(jī)器,每臺(tái)各自配有 4 塊英偉達(dá)顯卡。 臨走前,小嬸拍了拍小咩的肩膀:兄弟,之后一個(gè)月,這些機(jī)器隨便你用。小咩表面風(fēng)輕云淡,心里其實(shí)已經(jīng)樂(lè)開(kāi)了花,他已經(jīng)很久沒(méi)有在這么多顯卡的機(jī)器上放飛過(guò)自我了。 ![]() 拿到機(jī)器后,小咩需要做的第一件事是配環(huán)境。經(jīng)過(guò)簡(jiǎn)單的權(quán)衡,小咩決定使用自己熟悉的 TensorFlow 來(lái)進(jìn)行模型的開(kāi)發(fā)工作。盡管 TensorFlow 已經(jīng)發(fā)布 2.0 版本,但小咩是一個(gè)戀舊的人,他還是習(xí)慣使用經(jīng)典的 1.4 版本。他登錄到了機(jī)器上,發(fā)現(xiàn)事情并不簡(jiǎn)單。 四臺(tái)機(jī)器中: 機(jī)器 A 的 TensorFlow 只支持 CPU; 機(jī)器 B 的 TensorFlow 的版本是 1.13; 機(jī)器 C 是公司里的算法科學(xué)家小莎在投稿 NeurIPS 時(shí)做實(shí)驗(yàn)用的,只安裝了 PyTorch。 小咩嘆了一口氣,他飛快下樓買(mǎi)了一瓶快樂(lè)水,擼起了袖子,開(kāi)始環(huán)境配置之旅。 第一臺(tái)機(jī)器的問(wèn)題在于已裝的 TensorFlow 版本不支持 GPU。小咩熟練地卸載了機(jī)器 A 的環(huán)境,首先確認(rèn)機(jī)器 A 上沒(méi)有安裝開(kāi)源的英偉達(dá)驅(qū)動(dòng) Nouveau。之后,他開(kāi)始安裝英偉達(dá)的官方驅(qū)動(dòng)以及 cuDNN,最后安裝了支持 GPU 的 TensorFlow 版本。看著屏幕上打出的 Hello World,小咩嘴角揚(yáng)起了微笑。 第二臺(tái)機(jī)器的問(wèn)題在于 TensorFlow 的版本太新了。于是小咩依樣畫(huà)葫蘆,卸載了新版本,安裝了舊版本。但在這個(gè)過(guò)程中,他發(fā)現(xiàn) TensorFlow v1.4 不支持機(jī)器 B 上的 CUDA 9.0。雖然有些不情愿,小咩還是打開(kāi)了谷歌,熟練鍵入“Remove CUDA 9.0 and install CUDA 8.0”。按照網(wǎng)友的指示,他終于解決了這個(gè)問(wèn)題。 第三臺(tái)機(jī)器問(wèn)題比較少,小咩很快就處理好了。 接下來(lái),小咩就可以開(kāi)始自己的算法實(shí)驗(yàn)了。為了方便,他先在自己的筆記本電腦上建立了一個(gè) Jupyter Notebook,將數(shù)據(jù)下載到電腦上,進(jìn)行了小規(guī)模的實(shí)驗(yàn)。 經(jīng)過(guò)一天的努力,他覺(jué)得自己的算法效果還算不錯(cuò),可以放到服務(wù)器上進(jìn)行分布式訓(xùn)練,以期更快的訓(xùn)練速度。于是他利用 /etc/hosts 給四臺(tái)機(jī)器做了一個(gè)簡(jiǎn)單的服務(wù)發(fā)現(xiàn),利用 TensorFlow 的分布式訓(xùn)練功能進(jìn)行了分布式的訓(xùn)練。 經(jīng)過(guò)數(shù)天調(diào)參,小咩模型的各項(xiàng) metrics 都達(dá)到了公司的要求,于是他準(zhǔn)備將模型發(fā)布到公司的生產(chǎn)環(huán)境中。小咩利用了開(kāi)源項(xiàng)目 TensorFlow Serving,在公司內(nèi)部的 PaaS 平臺(tái)上新建了一個(gè)服務(wù),并將自己訓(xùn)練的模型發(fā)布到了公司的生產(chǎn)集群上??粗髁糠€(wěn)定地灌入自己的模型服務(wù),小咩深吸了一口氣。 02 如果你有一個(gè)機(jī)器學(xué)習(xí)平臺(tái)時(shí)間一天天過(guò)去了,這個(gè)模型不知不覺(jué)已經(jīng)在線(xiàn)上服務(wù)了數(shù)月,小咩也由工程師變成了公司里的 Tech Lead。最近,這一模型有了相關(guān)的增量模型,但小咩已經(jīng)沒(méi)有足夠的時(shí)間再參與到一線(xiàn)的開(kāi)發(fā)工作中了。為了進(jìn)一步提升模型性能,小咩團(tuán)隊(duì)里的新進(jìn)工程師小豆接起了這項(xiàng)任務(wù),利用新的數(shù)據(jù)集重新訓(xùn)練模型,并再次發(fā)布。 在幾個(gè)星期之前,Infra 團(tuán)隊(duì)利用開(kāi)源項(xiàng)目 Kubeflow 為算法工程師和算法科學(xué)家們搭建了一個(gè)麻雀雖小五臟俱全的機(jī)器學(xué)習(xí)平臺(tái)。小豆決定利用這一平臺(tái)對(duì)模型進(jìn)行訓(xùn)練。 他首先利用 Infra 團(tuán)隊(duì)已經(jīng)打包好的 TensorFlow v1.4 的 Docker 鏡像,用平臺(tái)發(fā)起了一次分布式訓(xùn)練。訓(xùn)練中的服務(wù)發(fā)現(xiàn),異常處理等都由平臺(tái)自動(dòng)完成。 訓(xùn)練間隙,小豆在查看文檔發(fā)現(xiàn)平臺(tái)還支持超參數(shù)訓(xùn)練,而且使用起來(lái)非常簡(jiǎn)單,只需要指定相應(yīng)的參數(shù)搜索空間即可。于是他又發(fā)起了一次超參數(shù)學(xué)習(xí)任務(wù),對(duì)模型的超參數(shù)選擇進(jìn)行了優(yōu)化。 模型訓(xùn)練結(jié)束后,小豆利用平臺(tái)上已有的模型服務(wù)功能,直接將訓(xùn)練好的模型上傳到分布式存儲(chǔ)中。平臺(tái)根據(jù)配置自動(dòng)完成了模型的部署,并針對(duì)算法工程師們關(guān)注的指標(biāo)進(jìn)行了細(xì)粒度監(jiān)控。 ![]() 通過(guò)以上故事,我們可以了解到,機(jī)器學(xué)習(xí)平臺(tái)的用戶(hù)往往是機(jī)器學(xué)習(xí)算法科學(xué)家或工程師。而機(jī)器學(xué)習(xí)平臺(tái)希望解決的是機(jī)器學(xué)習(xí)工程化落地的問(wèn)題。 在小咩第一次進(jìn)行模型開(kāi)發(fā)與部署的時(shí)候,他遇到了很多來(lái)自系統(tǒng)環(huán)境和服務(wù)發(fā)現(xiàn)等原本應(yīng)該由 Infra 來(lái)解決的問(wèn)題。這其中包括服務(wù)器上的顯卡驅(qū)動(dòng)問(wèn)題、TensorFlow 版本的問(wèn)題、服務(wù)發(fā)現(xiàn)的問(wèn)題、訓(xùn)練過(guò)程中的跟蹤與錯(cuò)誤恢復(fù)等。而當(dāng)小豆在機(jī)器學(xué)習(xí)平臺(tái)上進(jìn)行模型訓(xùn)練和模型發(fā)布時(shí),這些問(wèn)題已經(jīng)都交由平臺(tái)來(lái)自動(dòng)化處理,他可以專(zhuān)注于業(yè)務(wù)的開(kāi)發(fā)。 對(duì)于機(jī)器學(xué)習(xí)工程師,TensorFlow、PyTorch 這些框架改變的是機(jī)器學(xué)習(xí)的編程范式,而機(jī)器學(xué)習(xí)平臺(tái)改變的是機(jī)器學(xué)習(xí)的開(kāi)發(fā)與發(fā)布流程。 而從基礎(chǔ)架構(gòu)工程師的角度來(lái)看,機(jī)器學(xué)習(xí)平臺(tái)某種程度上類(lèi)似 PaaS,但又有所不同。兩者相同之處在于都涉及到資源的管理與調(diào)度、服務(wù)發(fā)現(xiàn)等功能,不同之處在于機(jī)器學(xué)習(xí)平臺(tái)對(duì)于 GPU 有極其強(qiáng)烈的需求,與此同時(shí),和傳統(tǒng)的應(yīng)用相比,機(jī)器學(xué)習(xí)有著不同的工作流程。 舉個(gè)例子,傳統(tǒng)應(yīng)用可以很好地抽象出持續(xù)集成與持續(xù)部署工作流,應(yīng)用的每一次提交都可以觸發(fā)對(duì)應(yīng)的測(cè)試與發(fā)布流程。而對(duì)于機(jī)器學(xué)習(xí)任務(wù)來(lái)說(shuō),測(cè)試往往并不是對(duì)代碼本身的測(cè)試,而是對(duì)模型效果的測(cè)試。 類(lèi)似的諸多差異導(dǎo)致了目前的 PaaS 等平臺(tái)不能很好地處理機(jī)器學(xué)習(xí)這一應(yīng)用場(chǎng)景的需求。換句話(huà)說(shuō),這時(shí)候我們需要一個(gè)新的平臺(tái),它既繼承了 PaaS 的某些功能,又針對(duì)更好地支持機(jī)器學(xué)習(xí)業(yè)務(wù),增加了大量新特性。 下面我們就來(lái)具體地談?wù)劊@些特性包括什么。 ![]() 準(zhǔn)備數(shù)據(jù)是一次機(jī)器學(xué)習(xí)任務(wù)的起點(diǎn),但數(shù)據(jù)準(zhǔn)備的平臺(tái)化,從實(shí)現(xiàn)上來(lái)說(shuō)應(yīng)該是比較困難的。因?yàn)閿?shù)據(jù)準(zhǔn)備是一個(gè)需求差異非常大、很難將其標(biāo)準(zhǔn)化的過(guò)程。目前開(kāi)源領(lǐng)域也有一些針對(duì)不同場(chǎng)景的打標(biāo)工具,如 labelme 等,但這一方面的工程實(shí)現(xiàn)和研究性工作其實(shí)都不太常見(jiàn)。 訓(xùn)練是機(jī)器學(xué)習(xí)任務(wù)中的重中之重。機(jī)器學(xué)習(xí)平臺(tái)的訓(xùn)練支持指的是,用戶(hù)通過(guò)指定使用的資源數(shù)量、分布式模型(AllReduce、ParameterServer 等)、分布式配置(ParameterServer 數(shù)量等)等,直接在平臺(tái)上進(jìn)行模型訓(xùn)練。 從平臺(tái)的角度來(lái)看,這一特性主要涉及到對(duì)不同類(lèi)型的框架、不同的分布式模型、不同的硬件的支持,以及分布式訓(xùn)練任務(wù)的服務(wù)發(fā)現(xiàn)、錯(cuò)誤處理,不同任務(wù)的資源隔離與復(fù)用等問(wèn)題。除此之外,有些場(chǎng)景對(duì)于在線(xiàn)訓(xùn)練也有需要,如何支持在線(xiàn)訓(xùn)練,是一個(gè)機(jī)器學(xué)習(xí)全流程都需要考慮的問(wèn)題。 再接下來(lái),就是模型服務(wù)。這一特性與傳統(tǒng)的 PaaS 比較類(lèi)似,因?yàn)槟P头?wù)目前多是以 RESTful API 暴露給外部的,與傳統(tǒng)的 Web 服務(wù)非常類(lèi)似。不過(guò)從實(shí)現(xiàn)角度而言,不同的框架訓(xùn)練的模型往往需要用不同的方式發(fā)布出去,而且模型服務(wù)關(guān)注的度量指標(biāo)與傳統(tǒng) Web 服務(wù)也有較大差別。 回到版本管理,傳統(tǒng)的應(yīng)用往往只涉及配置與代碼的管理,而機(jī)器學(xué)習(xí)則多了不少新的維度,如模型、版本等。這一部分的特性雖然比較 dirty work,但是卻與用戶(hù)的使用體驗(yàn)息息相關(guān)。除此之外,還有整個(gè)過(guò)程中的監(jiān)控問(wèn)題(訓(xùn)練過(guò)程監(jiān)控,服務(wù)過(guò)程監(jiān)控),也是同樣性質(zhì)的工作。 在解決完上面的問(wèn)題后,機(jī)器學(xué)習(xí)工作流的構(gòu)建這一特性就水到渠成地?cái)[到臺(tái)面上了。如何讓用戶(hù)用盡可能少的交互取得他 / 她想要的效果,以及如何加強(qiáng)這一過(guò)程的自動(dòng)化,是離不開(kāi)工作流方面的工作的。 至于超參數(shù)訓(xùn)練與模型結(jié)構(gòu)搜索,這是機(jī)器學(xué)習(xí)平臺(tái)的高級(jí)特性。雖然自動(dòng)機(jī)器學(xué)習(xí)聽(tīng)上去非常有前途,但相關(guān)技術(shù)目前仍處于研究階段。對(duì)于超參數(shù)訓(xùn)練來(lái)說(shuō),最難過(guò)的一關(guān)是性?xún)r(jià)比問(wèn)題。Random Search、Grid Search 和貝葉斯優(yōu)化方法是最常用的調(diào)參方法,它們找到的參數(shù)確實(shí)可能比人工調(diào)參有更好的效果,但與此同時(shí),它們也會(huì)需要更多的硬件資源。因此這一特性屬于錦上添花,而不能起到雪中送炭的作用。至于模型結(jié)構(gòu)搜索,就更遙遠(yuǎn)了。 05 小結(jié)上述的介紹是掛一漏萬(wàn)的,一個(gè)成熟的平臺(tái)系統(tǒng)一定有更多的細(xì)節(jié)值得去討論,限于篇幅關(guān)系,這里不再展開(kāi)。我撰寫(xiě)此文只是想大致說(shuō)明一下,機(jī)器學(xué)習(xí)平臺(tái)究竟是怎樣的一個(gè)存在,它可以幫助到用戶(hù)做到什么事情,提高了哪些方面的效率。 介紹完之后,再打一個(gè)小小的廣告。我們團(tuán)隊(duì)目前正在招聘中。如果你對(duì)構(gòu)建基于 Kubernetes 的 Cloud Native 機(jī)器學(xué)習(xí)平臺(tái)系統(tǒng)感興趣,可以了解下我司才云科技的產(chǎn)品 Caicloud Clever。一直以來(lái),我們始終在這一方面努力攻堅(jiān),目前才云科技在機(jī)器學(xué)習(xí)平臺(tái)開(kāi)源項(xiàng)目 Kubeflow 上的貢獻(xiàn)位列全球前三。 |
|
來(lái)自: flyk0tcfb46p9f > 《AI》