Amazon SageMaker测评分享,效果超出预期
一、前言
隨著科技的進(jìn)步和社會的發(fā)展,人工智能得到了愈加廣泛的重視,特別是最近大火的Chatgpt,充分展現(xiàn)了研發(fā)通用人工智能助手廣闊的研究和應(yīng)用前景。讓越來越多的組織和企業(yè)跟風(fēng)加入到人工智能領(lǐng)域的研究中,
但機(jī)器學(xué)習(xí)的實(shí)施是一項極其復(fù)雜的工作,不僅需要專業(yè)技能,還涉及大量的試錯。無論是“專業(yè)”,抑或是“試錯”,其背后都是高昂的成本。而且,通過傳統(tǒng)的方式創(chuàng)建機(jī)器學(xué)習(xí)模型,開發(fā)人員需要從高度手動的數(shù)據(jù)準(zhǔn)備過程開始,經(jīng)過可視化、選擇算法、設(shè)置框架、訓(xùn)練模型、調(diào)整數(shù)百萬個可能的參數(shù)、部署模型并監(jiān)視其性能,這個過程往往需要重復(fù)多次,是非常繁瑣且特別耗時的。所以說,究竟有多少公司能夠玩得起,想必很多人都會在心里打出一個大大的問號。
最近剛好受邀參與了亞馬遜云科技【云上探索實(shí)驗(yàn)室】活動,使用了它們推出的 Amazon SageMaker來開展機(jī)器學(xué)習(xí)的工作,體驗(yàn)下來的效果是讓我很滿意的,無論是在構(gòu)建,數(shù)據(jù)標(biāo)注還是模型訓(xùn)練部署等方面都帶來了巨大的效率提升,通過使用它預(yù)置的常用算法,以及自動模型調(diào)優(yōu)大大降低了模型構(gòu)建和訓(xùn)練的難度,讓我們更容易的使用ML。另外,Amazon SageMaker與其他亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)產(chǎn)品集成,如AWS S3、AWS Glue和AWS Lambda,讓我們能夠輕松構(gòu)建端到端的ML工作流程:
下面分享一下我體驗(yàn)官網(wǎng)的一個實(shí)驗(yàn)案例,在過程中遇到了什么問題和如何解決的,供大家參考。
二、體驗(yàn)分享
1、數(shù)據(jù)輸入
1)原理
SageMaker Processing job 要求數(shù)據(jù)的輸入和輸出都需要在 S3 ,基本原理圖如下:
2)實(shí)操
步驟1:創(chuàng)建Amazon SageMaker 筆記本實(shí)例
Amazon SageMaker 筆記本實(shí)例是運(yùn)行 Jupyter 筆記本應(yīng)用程序的完全托管的機(jī)器學(xué)習(xí) (ML) 亞馬遜彈性計算云 (Amazon EC2) 計算實(shí)例。我們可以使用筆記本實(shí)例創(chuàng)建和管理 Jupyter 筆記本來預(yù)處理數(shù)據(jù),以及訓(xùn)練和部署機(jī)器學(xué)習(xí)模型。
亞馬遜 SageMaker 筆記本實(shí)例創(chuàng)建好之后會在圖中的筆記本實(shí)例中新增一條狀態(tài)為Pending的數(shù)據(jù),稍等一會兒,狀態(tài)會自動變?yōu)镮nService,此時改實(shí)例為可使用狀態(tài)。
步驟2:將數(shù)據(jù)加載到筆記本實(shí)例,并上傳到Amazon S3
當(dāng)實(shí)例狀態(tài)變?yōu)镮nService之后,選擇打開 Jupyter,然后在 Jupyter notebook 中,為 New(新建)選擇 conda_python3,復(fù)制粘貼以下示例上傳數(shù)據(jù)代碼并運(yùn)行:
import sagemakersess = sagemaker.Session() bucket = sess.default_bucket()!aws s3 sync s3://sagemaker-sample-files/datasets/image/caltech-101/inference/ s3://{bucket}/ground-truth-demo/images/print('Copy and paste the below link into a web browser to confirm the ten images were successfully uploaded to your bucket:') print(f'https://s3.console.aws.amazon.com/s3/buckets/{bucket}/ground-truth-demo/images/')print('\nWhen prompted by Sagemaker to enter the S3 location for input datasets, you can paste in the below S3 URL')print(f's3://{bucket}/ground-truth-demo/images/')print('\nWhen prompted by Sagemaker to Specify a new location, you can paste in the below S3 URL')print(f's3://{bucket}/ground-truth-demo/labeled-data/')3)使用中遇到的問題及解決方案
1、S3 Bucket創(chuàng)建時需要按照這個命名規(guī)則:sagemaker-<your-Region>-<your-aws-account-id>,否則運(yùn)行上面的示例代碼時會報錯。
2、示例代碼運(yùn)行的時候遇到access is forbidden報錯信息:
這表明權(quán)限策略的設(shè)置有問題,需要我們?nèi)バ薷拇鎯ν皺?quán)限、配置存儲桶策略以及配置角色策略
2.1:修改存儲桶權(quán)限——進(jìn)入編輯“屏蔽公共訪問權(quán)限(存儲桶設(shè)置)”位置,把”阻止所有公開訪問“復(fù)選框標(biāo)記為未選中狀態(tài)
2.2:配置存儲桶策略——我們可以使用SageMaker自帶的策略生成器,正確填寫對應(yīng)信息后一鍵快捷生成Json策略:
上述步驟點(diǎn)擊”Add Statement“按鈕后會自動生成如下Json策略
{"Version": "2012-10-17","Id": "Policy1679391476168","Statement": [{"Sid": "Stmt1679391475056","Effect": "Allow","Principal": {"AWS": "arn:aws:iam::692273791570:role/service-role/SageMaker-tt"},"Action": "s3:*","Resource": "arn:aws:s3:::sagemaker-eu-north-1-692273791570"}] }上面的json策略生成成功后,直接復(fù)制粘貼到存儲桶權(quán)限策略中:
2.3:配置角色策略——我們可以在筆記本示例詳情中找到配置的IAM角色:
點(diǎn)擊進(jìn)入后,找到下面的策略項就可對存儲桶權(quán)限策略進(jìn)行編輯:
提供兩種編輯方式,這里建議使用可視化編輯更加的友好:
我這里將資源范圍設(shè)置為所有S3存儲桶(你們也可以指定剛剛創(chuàng)建的存儲桶)都放開,然后保存后就會生成json策略,如下所示:
{"Version": "2012-10-17","Statement": [{"Sid": "VisualEditor0","Effect": "Allow","Action": "s3:ListBucket","Resource": "arn:aws:s3:::*"},{"Sid": "VisualEditor1","Effect": "Allow","Action": ["s3:PutObject","s3:GetObject","s3:DeleteObject"],"Resource": "arn:aws:s3:::*/*"}] }這樣我們就把角色權(quán)限也配置好了,再次執(zhí)行示例上傳代碼就成功了:
在成功運(yùn)行代碼以后,打開 Amazon S3 控制臺并導(dǎo)航至 sagemaker-<your-Region>-<your-aws-account-id>/ground-truth-demo/images 位置,可以看到圖片已經(jīng)在你的默認(rèn)S3存儲桶文件列表了:
2、數(shù)據(jù)處理
1)創(chuàng)建標(biāo)記任務(wù)
打開 SageMaker 控制臺。在左側(cè)導(dǎo)航窗格中,選擇 Ground Truth、Labeling jobs(貼標(biāo)作業(yè))。然后選擇 Create labeling job(創(chuàng)建標(biāo)記任務(wù))。
在標(biāo)記任務(wù)詳細(xì)信息頁面,按照下圖進(jìn)行配置,圖中的兩個路徑也可以直接從我們早前所運(yùn)行 Jupyter notebook 的 print 語句里面去復(fù)制對應(yīng)的值,配置成功后,點(diǎn)擊”完成數(shù)據(jù)設(shè)置“,就會出現(xiàn)輸入數(shù)據(jù)鏈接成功的提示。
2)設(shè)置標(biāo)簽
在 Task type(任務(wù)類型)部分,為 Task category(任務(wù)類別)選擇 Image(圖像)。對于 Task selection(任務(wù)選擇),選擇 Image Classification (Single Label)(圖像分類(單標(biāo)簽)),然后選擇 Next(下一步)。
在 Select workers and configure tool(選擇工作人員并配置工具)部分中,對于Worker types(工作人員類型),選擇 Amazon Mechanical Turk。
選擇 The dataset does not contain adult content(數(shù)據(jù)集不包含成人內(nèi)容)。
選擇 You understand and agree that the Amazon Mechanical Turk workforce consists of independent contractors located worldwide and that you should not share confidential information, personal information or protected health information with this workforce(您了解并同意 Amazon Mechanical Turk 工作團(tuán)隊由分布在世界各地的獨(dú)立合約商組成,而且您不得與該工作團(tuán)隊分享機(jī)密信息、個人信息或受保護(hù)的健康信息。)
在 Image classification (Single Label) labeling tool(圖像分類(單標(biāo)簽)標(biāo)記工具)部分中,輸入以下信息:
對于 brief description of task(任務(wù)的簡短描述),輸入 Please select the label that best matches the image below(請在下方選擇與圖像最匹配的標(biāo)簽)。您可以為每張圖像僅選擇 1 個標(biāo)簽。
對于 Select an option(選擇選項),在單獨(dú)的框中輸入以下標(biāo)簽:Airplane(飛機(jī))、Car(汽車)、Ferry(渡輪)、Helicopter(直升機(jī))、Motorbike(摩托車)。
展開 Additional instructions(其他說明),添加以下文本到第 3 步:If there are multiple vehicles in a single image, choose the most prominent vehicle in the image(如果一張圖像中有多個交通工具,請選擇在圖像中最突出的交通工具)。
要了解標(biāo)注人員將看到怎樣的標(biāo)記工具,請選擇 Preview(預(yù)覽)。
選擇 Create(創(chuàng)建)。
創(chuàng)建成功后新的標(biāo)記任務(wù)被列在 SageMaker 控制臺 Labeling jobs(貼標(biāo)作業(yè))部分的下方,其 Status(狀態(tài))為 In progress,Task type(任務(wù)類型)為 Image Classification (Single Label)(圖像分類(單個標(biāo)簽))。標(biāo)記任務(wù)可能需要幾分鐘才能完成。 在 Amazon Mechanical Turk 公共工作人員標(biāo)記數(shù)據(jù)后,狀態(tài)變?yōu)?Complete。
標(biāo)記任務(wù)的創(chuàng)建及參數(shù)配置使用相對比較簡單,沒有像在筆記本實(shí)例中使用代碼上傳數(shù)據(jù)那樣遇到很多權(quán)限類的問題。
3)結(jié)果查看
在標(biāo)記任務(wù)的詳細(xì)信息頁面上,已標(biāo)記數(shù)據(jù)集對象將顯示您的數(shù)據(jù)集圖像的縮略圖,并以對應(yīng)標(biāo)簽作為標(biāo)題。
詳細(xì)結(jié)果可以通過標(biāo)記任務(wù)的摘要部分,打開輸出數(shù)據(jù)集位置鏈接,選擇 manifests(清單)、output(輸出)、output.manifest
其中output.manifest 清單包括以下數(shù)據(jù):
source-ref:在輸入清單文件中指定圖像條目的位置。由于您在第 2 步中選擇了 Automated data setup(自動數(shù)據(jù)設(shè)置),Amazon SageMaker Ground Truth 已自動創(chuàng)建這些條目以及輸入清單文件。
test-biaoji1:使用從 0 開始的編號數(shù)值來指定目標(biāo)標(biāo)簽。針對此示例中的五個圖像分類,標(biāo)簽分別為 0、1、2、3、4。
test-biaoji1-metadata:指定標(biāo)記元數(shù)據(jù),如置信度評分、作業(yè)名稱、標(biāo)簽字符串名稱(例如,飛機(jī)、汽車、渡輪、直升機(jī)和摩托車),以及人工或機(jī)器注釋(主動學(xué)習(xí))。
然后我們就可以在Amazon SageMaker 中使用 output.manifest 文件來進(jìn)行模型的訓(xùn)練。
3、模型訓(xùn)練
1)訓(xùn)練任務(wù)
我們的數(shù)據(jù)準(zhǔn)備好后,就可以在左側(cè)訓(xùn)練菜單欄中創(chuàng)建訓(xùn)練任務(wù):
然后對學(xué)習(xí)算法、訓(xùn)練集群規(guī)范和超參數(shù)進(jìn)行配置:
之后按下圖配置好輸入數(shù)據(jù):
之后點(diǎn)擊“創(chuàng)建訓(xùn)練作業(yè)”按鈕即可,該作業(yè)就會開始訓(xùn)練:
待訓(xùn)練完成后我們可以點(diǎn)擊右上角的創(chuàng)建模型按鈕來創(chuàng)建我們的訓(xùn)練模型。
2)超級參數(shù)配置
超參數(shù)調(diào)整可以通過嘗試模型的多種變體來提高工作效率。它通過聚焦在您指定范圍內(nèi)最有前途的超參數(shù)值組合來自動尋找最佳模型。為了獲得良好的結(jié)果,您必須選擇正確的范圍進(jìn)行探索。
下面列舉出了一些可以設(shè)置的可選超參數(shù)。包含 Amazon SageMaker XGBoost 算法必需或最常用的超參數(shù)子集。這些是由用戶設(shè)置的參數(shù),以便于從數(shù)據(jù)中評估模型參數(shù)。
參數(shù)名稱 | 描述 |
num_class | 類的數(shù)量。如果設(shè)置objective為 m ulti-softmax 或 mu lti-softprob 則為@@ 必填項。有效值:整數(shù) |
num_round | 運(yùn)行訓(xùn)練的輪數(shù)。必填有效值:整數(shù) |
alpha | 權(quán)重上的 L1 正則化項。增加此值會使模型更加保守。可選有效值:浮點(diǎn)值默認(rèn)值:0 |
base_score | 所有實(shí)例的初始預(yù)測分?jǐn)?shù),全局偏移。可選有效值:浮點(diǎn)值縮放細(xì)節(jié)凹凸法線強(qiáng)度。 |
booster | 要使用的助推程序。gbtree 和 dart 值使用基于樹的模型,而 gblinear 使用線性函數(shù)。可選有效值:字符串. gbtree、gblinear 或 dart。默認(rèn)值:gbtree |
colsample_bylevel | 每個級別中每個拆分的列的子樣本比率。可選有效值:浮點(diǎn)值。范圍:[0,1]。默認(rèn)值:1 |
colsample_bynode | 每個節(jié)點(diǎn)中列的子樣本比率。可選有效值:浮點(diǎn)值。范圍:(0,1]。默認(rèn)值:1 |
colsample_bytree | 構(gòu)造每個樹時列的子樣本比率。可選有效值:浮點(diǎn)值。范圍:[0,1]。默認(rèn)值:1 |
csv_weights | 啟用此標(biāo)志時,對于 csv 輸入,XGBoost 通過獲取訓(xùn)練數(shù)據(jù)中的第二列(標(biāo)簽后的一列)作為實(shí)例權(quán)重,以此來區(qū)分實(shí)例的重要性。可選有效值:0 或 1默認(rèn)值:0 |
deterministic_histogram | 啟用此標(biāo)志后,XGBoost 會確定性地在 GPU 上構(gòu)建直方圖。僅在 tree_method 設(shè)置為 gpu_hist 時才會使用。有關(guān)有效輸入的完整列表,請參閱 XGBoost 參數(shù)。可選有效值:字符串. 范圍:true 或 false默認(rèn)值:true |
early_stopping_rounds | 模型會一直訓(xùn)練直到驗(yàn)證分?jǐn)?shù)停止改善。驗(yàn)證錯誤需要至少在每個 early_stopping_rounds 減少才能繼續(xù)訓(xùn)練。 SageMaker 托管使用最佳模型進(jìn)行推理。可選有效值:整數(shù)默認(rèn)值: - |
eta | 在更新中用于防止過度適合的步驟大小收縮。在每個提升步驟之后,您可以直接獲得新特征的權(quán)重。eta 參數(shù)實(shí)際上縮小了特征權(quán)重,使提升過程更加保守。可選有效值:浮點(diǎn)值。范圍:[0,1]。默認(rèn)值:0.3 |
不是所有的算法都需要走自動超參數(shù)調(diào)優(yōu),需要權(quán)衡模型性能(就是指模型效果)與成本。一般來說,對于深度學(xué)習(xí)模型或者海量數(shù)據(jù)集的情況下可能做自動超參數(shù)調(diào)優(yōu)的時間代價和成本代價太大。因此在實(shí)際的 ML 項目中,用戶很少對深度學(xué)習(xí)模型或者海量數(shù)據(jù)集做自動超參數(shù)調(diào)優(yōu);對于傳統(tǒng)的機(jī)器學(xué)習(xí)模型并且在數(shù)據(jù)集不大的情況下,可以考慮用自動超參數(shù)調(diào)優(yōu)來找到可能的最優(yōu)解。
三、總結(jié)
本次的整體使用過程比較愉快,總的來說Amazon SageMaker的使用比較符合大眾習(xí)慣,框架設(shè)計也很簡潔,可讀性好,類層次清晰,能夠把使用者的關(guān)注點(diǎn)更集中在訓(xùn)練腳本本身。
而且,Amazon SageMaker針對當(dāng)前機(jī)器學(xué)習(xí)應(yīng)用瓶頸做了很多針對性的提升,比如大數(shù)據(jù)量的監(jiān)督訓(xùn)練,Amazon SageMaker則采用完全托管的服務(wù)模式;訓(xùn)練時間及資源消耗上,Amazon SageMaker則是秉持工具善其事,必先利其器的理念,在訓(xùn)練之前的數(shù)據(jù)標(biāo)記上提供了多種方式及算法,讓標(biāo)記數(shù)據(jù)的準(zhǔn)確性大大提高,從而省去重復(fù)訓(xùn)練調(diào)參等時間;工程實(shí)現(xiàn)上,Amazon SageMaker在模型開發(fā)全流程上都提供了相應(yīng)的功能幫助算法工程師們專注于業(yè)務(wù)和模型本身,提高開發(fā)效率。它是基于 container 的設(shè)計,相比于業(yè)界比較流行的Kubernetes來說,減少了軟件依賴和復(fù)雜度。相信Amazon SageMaker的落地,將會為更多的企業(yè)插上翅膀,讓機(jī)器學(xué)習(xí)無處不在,讓創(chuàng)新邁入新的時代。
亞馬遜最近也在開展相關(guān)的活動,給小伙伴們提供了云上探索實(shí)驗(yàn)室,大家通過云上探索實(shí)驗(yàn)室,可以學(xué)習(xí)實(shí)踐云上技術(shù),同時將自己的技術(shù)心得分享給其他小伙伴。
云上探索實(shí)驗(yàn)室出現(xiàn)的意義就是讓廣大開發(fā)者能夠一同創(chuàng)造分享,互助啟發(fā),玩轉(zhuǎn)云上技術(shù)。所以說,云上探索實(shí)驗(yàn)室不僅是體驗(yàn)的空間,更是分享的平臺。如果有有興趣快點(diǎn)擊活動鏈接試試吧:點(diǎn)我訪問
總結(jié)
以上是生活随笔為你收集整理的Amazon SageMaker测评分享,效果超出预期的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐一款 GitHub 星标 11.5K
- 下一篇: 投资学实务-郑商所比赛-交易记录7