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