500人在線(xiàn)網(wǎng)站建設(shè)配置國(guó)家市場(chǎng)監(jiān)管總局官網(wǎng)
如果你喜歡哲學(xué)并且你是一個(gè) IT 從業(yè)者,那么你很可能對(duì)軟件哲學(xué)感興趣,你能發(fā)現(xiàn)存在于軟件領(lǐng)域的哲學(xué)之美。本文我們就從軟件哲學(xué)的角度來(lái)了解一下亞馬遜云科技的拳頭級(jí)產(chǎn)品?Amazon SageMaker,有兩個(gè)出發(fā)點(diǎn):一是 SageMaker 本身設(shè)計(jì)所遵循的軟件哲學(xué);二是從軟件哲學(xué)的角度我們應(yīng)該如何使用 SageMaker 提供的功能。SageMaker 是一個(gè)全托管的機(jī)器學(xué)習(xí)平臺(tái)(包括傳統(tǒng)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)),它覆蓋了整個(gè)機(jī)器學(xué)習(xí)的生命周期,如下圖所示:
亞馬遜云科技開(kāi)發(fā)者社區(qū)為開(kāi)發(fā)者們提供全球的開(kāi)發(fā)技術(shù)資源。這里有技術(shù)文檔、開(kāi)發(fā)案例、技術(shù)專(zhuān)欄、培訓(xùn)視頻、活動(dòng)與競(jìng)賽等。幫助中國(guó)開(kāi)發(fā)者對(duì)接世界最前沿技術(shù),觀點(diǎn),和項(xiàng)目,并將中國(guó)優(yōu)秀開(kāi)發(fā)者或技術(shù)推薦給全球云社區(qū)。如果你還沒(méi)有關(guān)注/收藏,看到這里請(qǐng)一定不要匆匆劃過(guò),點(diǎn)這里讓它成為你的技術(shù)寶庫(kù)! |
我們從如下的幾個(gè)方面來(lái)展開(kāi)討論:
- 天下沒(méi)有免費(fèi)的午餐——權(quán)衡之道
- 簡(jiǎn)單之美——大道至簡(jiǎn)
- 沒(méi)有規(guī)矩不成方圓——循規(guī)蹈矩
- 沒(méi)有“銀彈”——對(duì)癥下藥
- 變化之本——進(jìn)化本質(zhì)
- 知其所以然——心中有數(shù)
- 保持一致性——質(zhì)量可控
天下沒(méi)有免費(fèi)的午餐——權(quán)衡之道
軟件有很多的品質(zhì)(品質(zhì)也叫非功能性需求):性能(比如時(shí)間性能,空間性能,模型性能),可用性,易用性,可擴(kuò)展性,兼容性,可移植性,靈活性,安全性,可維護(hù)性,成本等。一個(gè)軟件沒(méi)有辦法滿(mǎn)足所有的品質(zhì),因此我們?cè)诤陀脩?hù)交流的過(guò)程中,要真的弄清楚用戶(hù)想要的是什么(沒(méi)有想象中那么簡(jiǎn)單),哪個(gè)或者哪些軟件的品質(zhì)是用戶(hù)當(dāng)前最關(guān)心的。很多軟件品質(zhì)經(jīng)常會(huì)互相制約(一個(gè)經(jīng)典的例子就是安全性和時(shí)間性能,安全這個(gè)品質(zhì)就是一個(gè)讓人又愛(ài)又恨的東西,一般來(lái)說(shuō)需要加入安全性的時(shí)候,在其他上下文不變的情況下,基本上時(shí)間性能就會(huì)變差了),所以我們需要權(quán)衡,而在權(quán)衡的時(shí)候一定要把握好“度“。
對(duì)于 SageMaker 來(lái)說(shuō):
- SageMaker Processing job 要求數(shù)據(jù)的輸入和輸出都需要在 S3,基本原理圖如下:
SageMaker Processing job 提供了托管的單個(gè)實(shí)例或者集群來(lái)做數(shù)據(jù)預(yù)處理,特征工程以及模型評(píng)估。如果你的原始數(shù)據(jù)并沒(méi)有存放在 S3,這個(gè)時(shí)候你需要權(quán)衡空間性能與可托管性(可托管性的好處是很多運(yùn)維的工作就不需要你關(guān)心了,交給了亞馬遜云科技來(lái)運(yùn)維),是把數(shù)據(jù)從源拷貝到 S3 來(lái)使用托管的 Processing job 服務(wù)還是就地來(lái)用自建的集群來(lái)處理;如果你的原始數(shù)據(jù)本身就存放在 S3,那么直接用 Processing job 來(lái)使用 SkLearn 或者 SparkML 來(lái)進(jìn)行數(shù)據(jù)預(yù)處理或者特征工程是你的首選。
- SageMaker 的內(nèi)建算法對(duì)數(shù)據(jù)輸入格式的要求以及可配置的有限的超參數(shù)。SageMaker 提供的內(nèi)建算法(SageMaker 對(duì)常見(jiàn)的 ML 任務(wù)基本都提供了一種或者多種算法)對(duì)數(shù)據(jù)輸入格式的要求以及提供的超參數(shù)可能與開(kāi)源界的算法的數(shù)據(jù)輸入格式和提供的超參數(shù)略有區(qū)別。這里你需要權(quán)衡易用性與靈活性:如果你只是想實(shí)現(xiàn)一個(gè) ML 的任務(wù)并且不想關(guān)注算法的實(shí)現(xiàn)細(xì)節(jié),那么可以?xún)?yōu)先嘗試 SageMaker 的內(nèi)建算法;如果你想更深入了解算法的實(shí)現(xiàn)細(xì)節(jié)以及更靈活的超參數(shù)設(shè)置,那么建議的選擇是把你的算法或者開(kāi)源的算法遷移到 SageMaker 中。
- SageMaker 訓(xùn)練時(shí)的 HPO 自動(dòng)超參數(shù)優(yōu)化功能的使用。自動(dòng)超參數(shù)優(yōu)化的初衷是為了減輕算法工程師/數(shù)據(jù)科學(xué)家/應(yīng)用科學(xué)家們手工調(diào)參的痛苦。SageMaker 的 HPO 自動(dòng)超參數(shù)優(yōu)化對(duì)于內(nèi)建算法和非內(nèi)建算法都支持,并提供了貝葉斯搜索和隨機(jī)搜索兩種方式供你選擇。不是所有的算法都需要走自動(dòng)超參數(shù)調(diào)優(yōu),需要權(quán)衡模型性能(就是指模型效果)與成本。一般來(lái)說(shuō),對(duì)于深度學(xué)習(xí)模型或者海量數(shù)據(jù)集的情況下可能做自動(dòng)超參數(shù)調(diào)優(yōu)的時(shí)間代價(jià)和成本代價(jià)太大。因此在實(shí)際的 ML 項(xiàng)目中,用戶(hù)很少對(duì)深度學(xué)習(xí)模型或者海量數(shù)據(jù)集做自動(dòng)超參數(shù)調(diào)優(yōu);對(duì)于傳統(tǒng)的機(jī)器學(xué)習(xí)模型并且在數(shù)據(jù)集不大的情況下,可以考慮用自動(dòng)超參數(shù)調(diào)優(yōu)來(lái)找到可能的最優(yōu)解。
- SageMaker 內(nèi)建的 inference pipeline 的數(shù)據(jù)流。SageMaker Inference pipeline 可以把多個(gè)容器(容器中可以跑特征處理邏輯或者跑模型 serving 邏輯)串接起來(lái),它的目的是把推理時(shí)的特征處理模塊和模型串接起來(lái),或者把多個(gè)模型做成上下游串接起來(lái)。它的數(shù)據(jù)流是這樣的:
也就是說(shuō),每個(gè)容器的輸出由 SageMaker 內(nèi)部組件做中轉(zhuǎn),該組件把上一個(gè)容器的輸出做為新的 request 發(fā)送到下一個(gè)容器。通過(guò)使用 Inference pipeline 這個(gè)功能可以簡(jiǎn)單方便的實(shí)現(xiàn)模型的上下游串接或者特征處理模塊和模型的串接,但從上面的數(shù)據(jù)流可以看到會(huì)帶入一些延遲,這個(gè)時(shí)候你需要考慮延遲是否在可以接受的范圍內(nèi)并使用 Inference pipeline,也就是需要權(quán)衡易用性與時(shí)間性能。
- SageMaker 中對(duì)于 Tensorflow 和 Pytorch 兩種框架都提供了多種訓(xùn)練方式。訓(xùn)練方式包括開(kāi)源框架原生的方式以及 SageMaker 專(zhuān)門(mén)實(shí)現(xiàn)的針對(duì)這兩種框架的數(shù)據(jù)并行和模型并行兩種方式。SageMaker 的數(shù)據(jù)并行訓(xùn)練方式適合每個(gè) GPU 卡可以跑完整的模型訓(xùn)練但是數(shù)據(jù)集是海量的情況;SageMaker 的模型并行訓(xùn)練方式適合單個(gè) GPU 卡無(wú)法直接跑模型訓(xùn)練的情況(比如模型太大了)。也就是說(shuō),在海量數(shù)據(jù)集大規(guī)模訓(xùn)練或者超大模型訓(xùn)練的場(chǎng)景,使用 SageMaker 的這兩種專(zhuān)有的訓(xùn)練方式比框架原生的訓(xùn)練方式會(huì)更高效,但是使用 SageMaker 的數(shù)據(jù)并行和模型并行的訓(xùn)練方式的話(huà),對(duì)于框架的版本有要求并且需要一定的代碼修改,因此需要你權(quán)衡代碼的可移植性與時(shí)間性能。
簡(jiǎn)單之美——大道至簡(jiǎn)
“簡(jiǎn)單”可能的含義有很多,比如精簡(jiǎn),簡(jiǎn)樸,可讀性好等?!昂?jiǎn)單”的度量標(biāo)準(zhǔn)可能每個(gè)人的理解都不一樣,但是一個(gè)通用的原則是,“您”在設(shè)計(jì)軟件的時(shí)候盡量多想著:“軟件需要?jiǎng)e人來(lái)用,還需要?jiǎng)e人來(lái)迭代和維護(hù)”,您一定要高抬貴手。“簡(jiǎn)單”的對(duì)立面就是“復(fù)雜”,業(yè)界的共識(shí)是通過(guò)降低復(fù)雜度來(lái)得到高質(zhì)量長(zhǎng)生命期的軟件,而如何降低復(fù)雜度是每個(gè)軟件設(shè)計(jì)人員以及開(kāi)發(fā)人員無(wú)時(shí)無(wú)刻需要關(guān)注的事情。
在 SageMaker 中的體現(xiàn):
- SageMaker 是基于 container 的設(shè)計(jì),到目前為止沒(méi)有選擇 Kubernetes。在當(dāng)前業(yè)界大興 Kubernetes 的情況下,SageMaker 并沒(méi)有隨大流。Kubernetes 的功能很強(qiáng)大但是很復(fù)雜,對(duì)于 SageMaker 來(lái)說(shuō),很多 Kubernetes 的功能用不上,那么為了減少軟件依賴(lài)以及降低復(fù)雜度,SageMaker 選擇了更輕量的設(shè)計(jì)(殺雞真的沒(méi)有必要用牛刀)。
- SageMaker high level API(high level API 指的是SageMaker Python SDK,這個(gè) API 的使用習(xí)慣類(lèi)似常見(jiàn)的 ML 框架比如SKLearn)設(shè)計(jì)很簡(jiǎn)潔,類(lèi)層次也很清晰(分層就是一種降低復(fù)雜度的方法),很多 feature 通過(guò)簡(jiǎn)單的參數(shù)設(shè)置就能搞定。比如通過(guò)簡(jiǎn)單的設(shè)置distribution 參數(shù)就把底層復(fù)雜的分布式環(huán)境部署隱藏掉了(信息隱藏也是降低復(fù)雜度的一種方法),讓 API 調(diào)用者的關(guān)注點(diǎn)更集中在訓(xùn)練腳本本身;比如簡(jiǎn)單的設(shè)置模型的 S3 保存位置,SageMaker 就會(huì)幫助你在訓(xùn)練結(jié)束或者訓(xùn)練中斷時(shí)把對(duì)應(yīng)目錄下的模型壓縮打包并上傳到 S3 指定路徑;比如通過(guò)設(shè)置 git_config 參數(shù),你就可以直接用 github 中的代碼在 SageMake 中來(lái)訓(xùn)練,而不需要你關(guān)心代碼的拉取過(guò)程。
- SageMaker 提供了多種算法選擇:內(nèi)建算法,BYOS(基于預(yù)置的機(jī)器學(xué)習(xí)框架來(lái)自定義算法),BYOC(自定義算法設(shè)計(jì)并自己來(lái)打包容器鏡像)和第三方應(yīng)用市場(chǎng)(在 Amazon Marketplace 中挑選第三方算法包,直接在 Amazon SageMaker 中使用)。而 BYOS 和 BYOC 是 SageMaker 中實(shí)際用的最多的兩種選擇。那如何選擇 BYOS 和 BYOC?總的來(lái)說(shuō),優(yōu)先看 BYOS 是否能滿(mǎn)足需求。BYOS 相對(duì)于 BYOC 要容易,需要遷移到 SageMaker 的工作量也少。而選擇 BYOC,常見(jiàn)的是如下的情景:
除了上面這些情景,盡量?jī)?yōu)先考慮 BYOS 的方式,它使用方式簡(jiǎn)單,學(xué)習(xí)曲線(xiàn)也相對(duì)平緩。
- SageMaker 提供了兩個(gè)可用于超參數(shù)的變量 sagemaker_program 和 sagemaker_submit_directory 來(lái)幫助你輕松的完成 BYOC 的調(diào)試。前者告知 SageMaker 把這個(gè)參數(shù)的值作為 user entry point(就是用戶(hù)提供的需要 SageMaker 調(diào)用的腳本),后者則是這個(gè) entry_point 對(duì)應(yīng)的代碼以及它所依賴(lài)的代碼打包(tar.gz)后的 S3 路徑。通過(guò)設(shè)置這兩個(gè)參數(shù),在調(diào)試代碼的時(shí)候只是需要把修改后的代碼重新打包上傳就可以,而不是每次都 build docker file,簡(jiǎn)單方便而且很節(jié)省時(shí)間。
沒(méi)有規(guī)矩不成方圓——循規(guī)蹈矩
擁有豐富經(jīng)驗(yàn)的你可能聽(tīng)過(guò)或者踐行過(guò)契約式編程,而契約式編程簡(jiǎn)單說(shuō)就是,你需要按照對(duì)方的一些約定來(lái) coding。一般來(lái)說(shuō),只要是提供給別人使用的軟件/工具,或多或少都會(huì)有一些約定。SageMaker 從盡量減少代碼侵入性和最小代碼遷移工作量的思路出發(fā),提供了很多約定。
在 SageMaker 中的體現(xiàn):
訓(xùn)練時(shí),數(shù)據(jù) Channel 相關(guān)的約定:
- 訓(xùn)練容器本地路徑相關(guān)的約定,如下圖所示:
我們重點(diǎn)關(guān)注下表中的四種路徑(除了下面這些路徑,訓(xùn)練過(guò)程中放置在其他路徑下的文件,在訓(xùn)練結(jié)束后都會(huì)被丟棄):
SageMaker 給容器提供了很多方便使用的環(huán)境變量,包括 SageMaker 相關(guān)的和內(nèi)建框架相關(guān)的。比如 SageMaker 相關(guān)的一部分環(huán)境變量如下:
SageMaker 內(nèi)建的 TF serving 框架的 service side batch 相關(guān)的環(huán)境變量如下:
- SageMaker 內(nèi)建算法對(duì)輸入數(shù)據(jù)格式的要求。SageMaker 內(nèi)建算法對(duì)輸入數(shù)據(jù)的格式要求可能和開(kāi)源算法對(duì)數(shù)據(jù)格式的要求不同,如果不注意這個(gè),在調(diào)試模型的時(shí)候可能會(huì)出現(xiàn)比較奇怪的結(jié)果。比如 SageMaker 目標(biāo)檢測(cè)算法對(duì) BBOX 的格式要求如下:對(duì)于 json 格式的輸入標(biāo)注文件, 要求的坐標(biāo)格式是 [top, left, width, height],如果你的數(shù)據(jù)集的標(biāo)注是PASCAL VOC 格式的(xmin,ymin,xmax,ymax)或者是 COCO 格式的(x,y,width,height),都需要做不同的轉(zhuǎn)換;對(duì)于 recordIO 格式的輸入文件, 要求坐標(biāo)格式是相對(duì)坐標(biāo),[xmin/width,ymin/height,xmax/width,ymax/height]。
- Spot 實(shí)例與 SageMaker checkpoint 機(jī)制的配合。為了節(jié)省成本,使用 spot 實(shí)例進(jìn)行訓(xùn)練是首選。為了讓 spot 實(shí)例被回收對(duì)你的訓(xùn)練任務(wù)造成的影響最小化,SageMaker 通過(guò)兩個(gè)參數(shù) checkpoint_local_path 和checkpoint_s3_uri 來(lái)助你一臂之力(當(dāng)然你不使用 spot 實(shí)例,也仍然可以利用 SageMaker 的 checkpoint 機(jī)制)。這樣訓(xùn)練 job 被 spot 回收中斷以后并自動(dòng)重新開(kāi)始訓(xùn)練后,就不用從頭開(kāi)始訓(xùn)練了,而是從最新的 checkpoint 開(kāi)始接著訓(xùn)練(SageMaker 提供了 checkpoint 上傳和下載的機(jī)制,你需要修改你的代碼來(lái)配合,也就是你需要從約定的 checkpoint local 路徑來(lái)初始化你的模型參數(shù),否則是空談),從而在節(jié)省成本的同時(shí)節(jié)省訓(xùn)練時(shí)間。
沒(méi)有“銀彈”——對(duì)癥下藥
可能我們自己腦海中或者遇到過(guò)別人問(wèn)我們?nèi)缦碌膯?wèn)題:對(duì)于XX任務(wù)當(dāng)前哪個(gè)模型效果最好?使用 AutoML 是不是就不需要我們做特征工程和樣本工程了?自動(dòng)超參調(diào)優(yōu)是不是就徹底解放我們的手動(dòng)超參調(diào)優(yōu)了?如果真的是這樣的話(huà),那就太美好了。在軟件界,“沒(méi)有銀彈”這句話(huà)流行很久了,對(duì)于人工智能領(lǐng)域也是同樣道理,都需要 case by case 來(lái)分析每一個(gè)目標(biāo)任務(wù)。
現(xiàn)在 Bert 以及 bert-like 的模型比如 GPT3,T5 等很火,恨不得只要是 NLP 的任務(wù)都用這樣的模型。我覺(jué)得還是應(yīng)該至少要考慮具體的目標(biāo)任務(wù)是什么,目標(biāo)任務(wù)的建模難度這兩個(gè)因素來(lái)進(jìn)行模型選型。如果在語(yǔ)料充足的情況下,做一個(gè)簡(jiǎn)單的文本分類(lèi)任務(wù),這個(gè)時(shí)候可能用一個(gè)簡(jiǎn)單的模型比如 fasttext 來(lái)就夠用了,而不用 bert 模型做 fine tuning 這么復(fù)雜;如果是針對(duì)用戶(hù)評(píng)論做細(xì)粒度情感分析任務(wù),這個(gè)任務(wù)就很復(fù)雜了,用簡(jiǎn)單模型就可能不合適了,這個(gè)時(shí)候用比如 T5 這樣的復(fù)雜模型才合適。盲目的追新和追熱點(diǎn),受傷的是你的項(xiàng)目(可能你能從中受益)。
對(duì)于 SageMaker 來(lái)說(shuō):
- SageMaker 有內(nèi)建算法,BYOS,BYOC 和 Marketplace 以及新出的 JumpStart 上面的算法可供你選擇,總有一款適合你。很有意思的一個(gè)現(xiàn)象是,SageMaker 在剛發(fā)布的時(shí)候 bulid 了17種內(nèi)建算法,很多年過(guò)后一直也沒(méi)有在增加新的內(nèi)建算法。我猜測(cè) SageMaker 的開(kāi)發(fā)團(tuán)隊(duì)會(huì)認(rèn)為,即使不斷的增加一些內(nèi)建算法,也沒(méi)有辦法及時(shí)對(duì)主流的一些算法進(jìn)行跟進(jìn)。正是因?yàn)獒槍?duì)任何一種細(xì)分場(chǎng)景,沒(méi)有包治百病的“算法”,SageMaker 就不在內(nèi)建算法上花費(fèi)更多的時(shí)間和精力,它提供更靈活的 BYOS 和 BYOC 讓用戶(hù)把開(kāi)源的算法方便的遷移過(guò)來(lái),或者通過(guò) Marketplace 讓買(mǎi)家和賣(mài)家都能?chē)L到使用算法的甜頭。
- SageMaker 提供了 Autopilot 和 Auto model tuning(即自動(dòng)超參數(shù)調(diào)優(yōu))這樣兩種 AutoML 機(jī)制。AutoML 一直是一個(gè)很熱門(mén)的研究方向,也是我們?nèi)祟?lèi)很期待的一個(gè)能大量落地的方向(誰(shuí)不喜歡簡(jiǎn)單省事就能完成一項(xiàng)任務(wù)呢?)。如果每個(gè)目標(biāo)任務(wù)都可以用 AutoML 來(lái)解決的很好,那么大部分人都可以騰出時(shí)間來(lái)攻克別的技術(shù)難題了。雖然 Autopilot 可以直接對(duì)結(jié)構(gòu)化數(shù)據(jù)來(lái)建模,它也能自動(dòng)做一些特征處理,但是它并不是銀彈,不是什么數(shù)據(jù)集直接丟給它就能出一個(gè)不錯(cuò)的效果的;要使用 Autopilot,自己提前做一些特征工程可能效果會(huì)更好(比如特征縮放,特征生成,特征交叉,甚至不同的缺失值處理方法,異常值處理等)。
而對(duì)于自動(dòng)超參數(shù)調(diào)優(yōu),如果使用默認(rèn)的超參數(shù)搜索空間,時(shí)間成本和金錢(qián)成本太大,那么還是需要人工首先限定每個(gè)需要搜索的超參數(shù)的區(qū)間的左右端點(diǎn),同樣這里沒(méi)有“銀彈”,左右端點(diǎn)的確定要么根據(jù)已有的經(jīng)驗(yàn),要么就是通過(guò)實(shí)驗(yàn)來(lái)大致選取。一定不要無(wú)條件的使用 Autopilot 或者自動(dòng)超參數(shù)調(diào)優(yōu)來(lái)解決你的問(wèn)題,三思而后行!
變化之本——進(jìn)化本質(zhì)
為什么要考慮“變化”?設(shè)計(jì)之初就應(yīng)該考慮到將來(lái)的可能變化,也就是說(shuō)系統(tǒng)框架要設(shè)計(jì)的比較有彈性(就像亞馬遜云科技的很多服務(wù)那樣彈),對(duì)于將來(lái)的需求的改動(dòng)不會(huì)付出很高代價(jià)。在軟件設(shè)計(jì)中,經(jīng)常會(huì)談到“面向變化編程”,即永遠(yuǎn)不要假設(shè)需求不變,現(xiàn)實(shí)中需求大大小小經(jīng)常變。變化是創(chuàng)新的必經(jīng)之路,永恒不變的東西只有變化。
在 SageMaker 中的體現(xiàn):
- SageMaker 早期的版本提供了 SageMaker-container 包供你使用來(lái)創(chuàng)建 SageMaker 兼容的容器和自定義的框架。后期的版本,為了讓基于 SageMaker-container 包的容器鏡像盡量更小更內(nèi)聚,SageMaker 把這個(gè) SageMaker-container 包拆分為 sagemaker-training toolkit(專(zhuān)為訓(xùn)練的容器)和 sagemaker inference toolkit(專(zhuān)為推理 /serving 的容器)兩個(gè)包來(lái)瘦身。
- 隨著不斷的進(jìn)化,SageMaker 現(xiàn)在是一個(gè)完全自洽的全生命周期的機(jī)器學(xué)習(xí)平臺(tái)。在早期的時(shí)候,SageMaker 只有三大核心功能:訓(xùn)練,推理(離線(xiàn)推理和線(xiàn)上推理),notebook 實(shí)例。為了能把ML生命周期中的數(shù)據(jù)預(yù)處理,特征工程,模型評(píng)估這些功能也納入,SageMaker 后續(xù)推出了 Processing job 來(lái)做這些事情。而隨著很多用戶(hù)對(duì)于多種機(jī)器學(xué)習(xí)任務(wù)的高質(zhì)量標(biāo)注需求的上升,SageMaker 推出了帶有人工標(biāo)注和機(jī)器自動(dòng)標(biāo)注的 Ground Truth 功能(這里又體現(xiàn)了客戶(hù)至上的企業(yè)文化)。而隨著 SageMaker Studio(它是用于機(jī)器學(xué)習(xí)的集成式開(kāi)發(fā)環(huán)境 IDE,可讓你構(gòu)建、訓(xùn)練、調(diào)試、部署和監(jiān)控機(jī)器學(xué)習(xí)模型)的推出,以及 MLOps 的更多功能的加入,現(xiàn)在的 SageMaker 變成了“超人”(短時(shí)間能增加如此多的功能并且還保持健壯,正是因?yàn)?SageMaker 的設(shè)計(jì)基因就是面向變化的)。
知其所以然——做到心中有數(shù)
我們可能知其然,但是所以然知道了嗎?可能有些感興趣的東西我們會(huì)去了解其深層的原因,但是軟件的問(wèn)題我們?nèi)パ芯苛藛?#xff1f;軟件是枯燥的,很多時(shí)候我們都是作為謀生的手段來(lái)應(yīng)付之,因此不知所以然也就很正常了。但是如果您是要真正的學(xué)習(xí)東西,或者更好的服務(wù)于用戶(hù),最好還是”再深一點(diǎn)“。
對(duì)于 SageMaker 來(lái)說(shuō):
- SageMaker 相關(guān)的代碼比較分散,為了滿(mǎn)足好奇心可以去閱讀源碼。比如有 SageMaker 平臺(tái)相關(guān)的開(kāi)源代碼包 sagemaker-container,sagemaker-training,sagemaker-inference;與內(nèi)建框架相關(guān)的開(kāi)源的代碼比如 SageMaker tensorflow training,SageMaker tensorflow serving;SageMaker Python SDK 的開(kāi)源實(shí)現(xiàn)代碼。通過(guò)閱讀這些代碼,你會(huì)對(duì) SageMaker 如何工作有更深刻的理解。
- 當(dāng)訓(xùn)練文件的數(shù)量比較多的時(shí)候,SageMaker Pipe mode 和 File mode 哪種方式訓(xùn)練 更快呢?拿Tensorflow 的 tfrecorddataset API 來(lái)舉例,在其他的 dataset API 基本一樣的前提下,File mode 更快(這個(gè)在多個(gè)實(shí)際用戶(hù)項(xiàng)目中測(cè)試過(guò))。主要的區(qū)別就是 pipemodedataset API 和 tfrecorddataset API。tfrecorddataset API 可以設(shè)置 num_parallel_reads 來(lái)并行讀取多個(gè)文件的數(shù)據(jù),還可以設(shè)置 buffer_size 來(lái)優(yōu)化數(shù)據(jù)讀取。 Pipemodedataset API 則沒(méi)有類(lèi)似上面的參數(shù)來(lái)加速數(shù)據(jù)的讀取。也就是說(shuō) Pipe mode 更適合讀取文件數(shù)量不多,但是每個(gè)文件都很大的場(chǎng)景(除了這里提到的 Pipe mode 和 File mode,SageMaker 訓(xùn)練的數(shù)據(jù)讀取方式還提供了 FastFile mode;SageMaker 訓(xùn)練支持的數(shù)據(jù)源除了 S3,還包括 Amazon Elastic File System 以及 Amazon FSX for Lustre,詳細(xì)內(nèi)容可以參考官方博客)。
- SageMaker Endpoint for TFS vs for Mxnet/Pytorch 的內(nèi)建serving 框架復(fù)雜性對(duì)比。SageMaker Endpoint for TFS 的介紹如下:
SageMaker Endpoint for Pytorch serving 的介紹如下(SageMaker Endpoint for Mxnet serving 是類(lèi)似的):只使用一個(gè)組件 torchserve,它的特點(diǎn)是,直接支持鉤子函數(shù);支持處理 /ping REST API;缺省會(huì)使用所有的GPU來(lái)做推理(而單個(gè) TFS 進(jìn)程只使用一個(gè) GPU 來(lái)推理)。
保持一致性——質(zhì)量可控
一致性是降低系統(tǒng)復(fù)雜度有利的手段。如果一個(gè)系統(tǒng)保持一致,意味著類(lèi)似的事情用類(lèi)似的方法去做,降低了認(rèn)知負(fù)荷。在ML機(jī)器學(xué)習(xí)領(lǐng)域,我們經(jīng)常會(huì)談到一致性,比如效果線(xiàn)上線(xiàn)下一致性(如果模型離線(xiàn)效果好,模型上線(xiàn)以后表現(xiàn)不好,這就是發(fā)生了效果線(xiàn)上線(xiàn)下不一致),特征的線(xiàn)上線(xiàn)下一致性(特征的線(xiàn)上線(xiàn)下不一致是效果線(xiàn)上線(xiàn)下不一致的一個(gè)常見(jiàn)原因;特征的線(xiàn)上線(xiàn)下不一致指的是線(xiàn)下訓(xùn)練時(shí)樣本中的特征的特征值可能會(huì)發(fā)生變化,并不和該樣本在線(xiàn)上生成時(shí)的特征值完全一樣。關(guān)于特征的線(xiàn)上線(xiàn)下一致性更詳細(xì)的討論請(qǐng)參考我的另一個(gè)文章)。保持一致性是模型質(zhì)量可控的一個(gè)重要因素。
對(duì)于 SageMaker 來(lái)說(shuō):
- 使用 SageMaker Processing job 對(duì)訓(xùn)練集做的一些特征工程比如某個(gè)特征 Z-score 標(biāo)準(zhǔn)化,那么為了讓預(yù)測(cè)時(shí)與訓(xùn)練時(shí)有一致的特征工程,需要如何處理呢?在對(duì)訓(xùn)練集做了某個(gè)特征的 Z-score 標(biāo)準(zhǔn)化以后,用到的該特征的均值和方差這些 metadata 需要保存起來(lái)(SparkML 和 Sklearn 都有相應(yīng)的 API 把這些 metadata 以文件的形式保存起來(lái));然后利用 SageMaker Inference pipeline 在第一個(gè)容器中把之前保存的 metadata 文件加載進(jìn)來(lái)對(duì)原始特征進(jìn)行 Z-score 標(biāo)準(zhǔn)化處理之后再送入第二個(gè)容器即模型推理容器。
- 如果在模型 serving 的時(shí)候,能及時(shí)知道每個(gè)特征的分布是否和訓(xùn)練時(shí)的數(shù)據(jù)集尤其是驗(yàn)證集的分布是否基本一致,對(duì)于模型才更可控。而 SageMaker 的 model monitor 的一個(gè)重要功能就是監(jiān)控特征的統(tǒng)計(jì)漂移,如果模型在生產(chǎn)過(guò)程中接收到的數(shù)據(jù)的統(tǒng)計(jì)性質(zhì)偏離了訓(xùn)練所依據(jù)的基準(zhǔn)數(shù)據(jù)的性質(zhì),則模型將開(kāi)始失去其預(yù)測(cè)的準(zhǔn)確性。Model Monitor 使用規(guī)則檢測(cè)數(shù)據(jù)漂移,并配合 Amazon 其他服務(wù)在發(fā)生數(shù)據(jù)漂移時(shí)向您發(fā)出警報(bào)。下圖說(shuō)明了此流程的工作方式:
總結(jié)
本文從軟件哲學(xué)角度來(lái)介紹了 SageMaker 的一些設(shè)計(jì)思想以及如何使用 SageMaker 的一些功能??傮w來(lái)講,不管你是否考慮采用 SageMaker 作為你的機(jī)器學(xué)習(xí)平臺(tái),至少它的這些實(shí)現(xiàn)的思路以及設(shè)計(jì)哲學(xué)都是可以用來(lái)參考的。SageMaker 作為全球使用量最大的機(jī)器學(xué)習(xí)平臺(tái),是值得你花時(shí)間來(lái)好好研究和探索以及實(shí)踐的。關(guān)于 SageMaker 更多詳細(xì)和更多深入的內(nèi)容請(qǐng)參考我的?github。感謝大家的耐心閱讀。
本篇作者
梁宇輝
亞馬遜云科技機(jī)器學(xué)習(xí)產(chǎn)品技術(shù)專(zhuān)家,負(fù)責(zé)基于亞馬遜云科技的機(jī)器學(xué)習(xí)方案的咨詢(xún)與設(shè)計(jì),專(zhuān)注于機(jī)器學(xué)習(xí)的推廣與應(yīng)用,深度參與了很多真實(shí)客戶(hù)的機(jī)器學(xué)習(xí)項(xiàng)目的構(gòu)建以及優(yōu)化。對(duì)于深度學(xué)習(xí)模型分布式訓(xùn)練,推薦系統(tǒng)和計(jì)算廣告等領(lǐng)域具有豐富經(jīng)驗(yàn)。
文章來(lái)源:https://dev.amazoncloud.cn/column/article/63098fa80c9a20404da79138?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=CSDN