AWS-ML認證筆記 — Domain 3 Part 3
SgaeMaker的內建演算法
SageMaker 中的強化式學習
- 使用具有 Tensorflow 和 MXNet 的深度學習框架
- 支援 Intel Coach 和 Ray Rllib toolkits
- 支援客製、開源或收錢的環境。例如:MATLAB/Simulink/EnergyPlus/RoboSchool/PyBullet/Amazon Sumerian/AWS RoboMaker
SageMaker RL的分散式訓練:
- 可以分散訓練和(或)環境部署
- Multi-core and multi-instance
關鍵字:
- Environment — 棋盤/迷宮這一類佈局
- State — 玩家/棋子在哪裡
- Action — 向特定方向移動等
- Reward — 與該狀態的操作關聯的值
- Observation — 即迷宮中的環境、棋盤的狀態
超參數調整
- 我們選擇的參數可能會被抽象化
- SageMaker 中的超參數調整可以最佳化它們
Instance Types
- 開發者指南中沒有給出具體指導
- 但是,這是深度學習 — — 所以 GPU 很有幫助
- 支援多個實例(instances)和多核心
SageMaker的Automatic Model Tuning
我們如何知道learning rate、batch size、depth等的最佳值?大多時候我們都必須嘗試。但當我們有一大堆的超參數時,問題很快就出現了;需要以某種方式嘗試每種可能值的每種組合,訓練模型並每次評估它。
我們應該定義我們聚焦的超參數和想要嘗試的範圍,以及要最佳化的指標。SageMaker 可以啟動“HyperParameter Tuning Job”,來訓練我們允許的盡可能多的組合。訓練實例根據需要來啟動,可能很多。然後可以將產生最佳結果的一組超參數部署為模型,它會不斷學習,因此不必嘗試所有可能的組合。
最佳實踐
- 不要一次優化太多超參數
- 將範圍限制在盡可能小的範圍內
- 適當時使用logarithmic scales
- 不要同時執行太多訓練作業,因為這限制了訓練作業的學習效果
- 確保在多個實例上執行的訓練作業最終可以報告正確的目標指標
SageMaker與Spark
SageMaker與Spark的整合:
- 使用 Spark 來預處理資料 — 這會產生DataFrames
- 使用 sagemaker-spark 函式庫
- SageMakerEstimator — KMeans、PCA、XGBoost
- SageMakerModel(用來推論)
Noetbook可以使用 SparkMagic (PySpark) kernel - 將Notebook連線到遠端 EMR cluster來執行 Spark (或使用 Zeppelin)
- 訓練Dataframe應具有:
— A features column that is a vector of Doubles
— An optional labels column of Doubles - 在 SageMakerEstimator 上呼叫 fit 來取得 SageMakerModel
- 對 SageMakerModel 呼叫transform以進行推論
- 也適用於 Spark Pipelines
SageMaker Studio
功能包含:
Notebooks
- 使用 SageMaker Studio 建立和分享 Jupyter notebooks
- 在硬體配置之間切換(無需管理基礎架構)
Experiments
在我們的ML作業中組織、擷取、比對與搜尋
Debugger
- 定期保存內部模型狀態
— 訓練模型時隨時間變化的梯度(Gradient)/張量(Tensors)
— 定義規則,該規則是在訓練時偵測不需要的條件
— 配置的每個規則執行debug job
— 滿足規則時記錄並觸發 CloudWatch event - SageMaker Studio Debugger dashboards
- 自動產生的訓練報告
- 內建的規則:
— 監控系統瓶頸
— Profile model framework operations
— Debug model parameters - 支援的Frameworksm與演算法
Tensorflow/PyTorch/MXNet/XGBoost/SageMaker generic estimator(用在我們客製化的訓練容器) - GitHub 中提供了Debugger API
— 為CreateTrainingJob和DescribeTrainingJob API建立hooks和rules
— SMDebug client library可讓我們register用於存取訓練資料的hooks - SageMaker Debugger Insights Dashboard
- Debugger ProfilerRule
— ProfilerReport
— Hardware system metrics (CPUBottlenck, GPUMemoryIncrease, etc)
— Framework Metrics (MaxInitializationTime, OverallFrameworkMetrics, StepOutlier) - 用於接收通知或停止訓練的內建操作
— StopTraining(), Email(), or SMS()
— 回應Debugger Rules
— 透過SNS傳送通知 - Profiling system resource usage and training
Autopilot
Auotpilot的作用在於透過自動化建置和部署機器學習模型的程序,簡化並加速機器學習工作流程的各個階段
能夠自動化的有:
- 所有的Infra管理
- 演算法選擇
- 資料預處裡
- 模型調整
Autopilot幫我們完成所有的trial & error。更廣泛地說,這稱為 AutoML。
Autopilot workflow
- 從 S3 載入資料進行訓練
- 選擇我們要預測的目標欄位(target column)
- 自動建立模型
- Model notebook可供檢視與控制
- 模型排行榜
它會產生一個排行榜,我們可以選擇其中一個 - 部署和監控模型,如果需要,可以透過notebook進行最佳化
- 能加入類指引
- SageMaker Studio 或 AWS SDK 中包含或不包含代碼
- 解決的問題類型 — Linear Learner/ XGBoost/ Deep Learning (MLP’s)/ Ensemble mode
- 資料格式必須是tabular CSV或Parquet
Autopilot Training Modes
有以下三種模式
HPO (Hyperparameter optimization):
- 選擇與我們的資料集最相關的演算法,如Linear Learner/ XGBoost/ Deep Learning
- 選擇最佳的超參數範圍來調整模型
運行達 100 次試驗(trial)以找到該範圍內的最佳超參數 - 如果資料集 < 100MB,則使用貝葉斯(Bayesian)最佳化
- 如果 > 100MB,則進行Multi-fidelity optimization
如果試驗表現不佳則提前停止(Early stopping)
Ensembling:
- 使用 AutoGluon 函式庫訓練多個基本模型
更廣泛的模型,包括更多tree-based的演算法和神經網路演算法 - 使用不同的模型和參數設定運行 10 次試驗
- 模型與堆疊整合方法結合
Auto:
- 資料> 100M,就使用HPO
- 資料<100M,會用Ensembling
- Autopilot 需要能夠讀取資料集的大小,否則將預設為 HPO。要注意:
— 隱藏在VPC內的S3 bucket
— S3 資料型態是 ManifestFile
— S3 Uri 包含超過 1000 個items
Autopilot可解釋性(Explainability)
- 與 SageMaker Clarify 整合
- 模型如何得出預測的透明度
- 特徵歸因(Feature attribution)
— 使用 SHAP Baselines/Shapley 值
— 合作賽局理論研究
— 為特定預測分配每個特徵的importance value
SageMaker Model Monitor
- 取得有關已部署模型的quality deviations的告警(透過 CloudWatch)
- 可視化資料漂移(data drift)。例如:由於輸入特徵漂移或缺失,貸款模型開始為客戶提供更多信貸
- 偵測異常值和離群值
- 偵測新特徵
- 無需代碼
- 監控資料儲存在 S3 中並受到保護
- 監控作業透過監控排程進行
- 指標發送到 CloudWatch
CloudWatch notifications可用於觸發告警,然後就可採取糾正措施(重新訓練模型、審核資料) - 與 Tensorboard、QuickSight、Tableau 整合,或只是在 SageMaker Studio 中進行視覺化
SageMaker Model Monitor 與Clarify的整合
- SageMaker Clarify 偵測潛在偏差(potential bias)。例如在不同群體/年齡/收入階層之間的資料不平衡
- 透過 Model Monitor,我們可以監控偏差並透過 CloudWatch 收到新的潛在偏差告警
- SageMaker Clarify 也有助於解釋模型行為。像是了解哪些特徵(features)對預測的貢獻度最大
Clarify 中的預訓練偏差指標(Pre-training Bias Metrics)
- Class Imbalance (CI)
如,一個facet(人口群體)的訓練價值比另一個facet少 - Difference in Proportions of Labels (DPL)
facet values之間positive outcomes的不平衡 - Kullback-Leibler Divergence (KL), Jensen-Shannon Divergence(JS)
Facets diverge的結果分佈有多少差異 - Lp-norm (LP)
Facets的結果分佈之間的 P-norm - Total Variation Distance (TVD)
Facets的結果分佈之間的 L1-norm - Kolmogorov-Smirnov (KS)
Facets的分佈結果之間的最大差異 - Conditional Demographic Disparity (CDD)
整體和subgroups之間的結果差異
SageMaker Model Monitor Types
- 資料品質漂移
相對於我們建立的基線(baseline),「Quality」只是特徵的統計屬性 - 模型品質的漂移(準確性等)
與model quality baseline的作業方式相同
可以與 Ground Truth labels整合 - 偏差漂移(Bias drift)
- 特徵歸因漂移(Feature attribution drift)
基於NDCG(Normalized Discounted Cumulative Gain)分數
這是比較訓練資料與實際資料的特徵排名
Deployment Safeguards
Deployment Guardrails:
- 針對asynchronous或real-time inference endpoints
- 可以在新舊模型之間控制流量。有幾種部屬模式
— Blue/Green
— All at once
— Canary
— Linear - 也能Auto-rollbacks
Shadow Tests:
- 將shadow variant與正式環境的效能進行比較
- 我們可以在 SageMaker console中進行監控並決定何時推廣它
以上介紹的所有SageMaker的功能(如下圖)
其他SageMaker功能
SageMaker Feature Store
- 尋找、發現和分享 Studio 中的特徵
- Online(低延遲)或offline(用於訓練或batch inference)模式
- 特徵被整理成Feature Groups
「特徵」只是用來訓練機器學習模型的屬性。例如,我們可能會根據某人的地址、收入、年齡等「特徵」來預測他的政治頃向。
機器學習模型需要快速、安全地存取特徵資料以進行訓練。保持組織有序並在不同模型之間共享功能也是一個挑戰。特徵的來源可能如下圖所示:
Feature Store對我們的資料整理如下圖所示:
Feature Store的資料擷取(streaming or batch):
透過 PutRecord / GetRecord API 進行STREAMING access。透過offline S3 進行大量存取(與任何存取 S3 的裝置一起分享資料,例如 Athena、Data Wrangler。自動建立 Glue Data Catalog。)
Feature Store的安全性:
- Encrypted at rest and in transit
- 與 KMS customer master keys配合使用
- 使用 IAM 進行Fine-grained access control
- 也可以透過 AWS PrivateLink 進行保護
SageMaker ML Lineage Tracking
- 建立並儲存 ML workflow (MLOps)
- 保存模型的運行歷史記錄
- 稽核和合規性的追蹤
- 自動或手動建立tracking entities
- 與 AWS Resource Access Manager 整合以實現cross-account lineage
- SageMaker 所建立的lineage graph範例:
Lineage Tracking Entities:
- Trial component(processing jobs, training jobs, transform jobs)
- Trial(由Trial component組成的模型)
- Experiment(針對特定用例的一組Trial)
- Context(entities的邏輯分組)
- Action(工作流程步驟、模型部署)
- Artifact(物件或資料,例如 S3 bucket或 ECR 中的image)
- Association(將entities連接在一起)-具有可選的AssociationType:
— ContributedTo
— AssociatedWith
— DerivedFrom
— Produced
— SameAs
Lineage Entities的查詢(Querying):
- 使用 Python 中的 LineageQuery API
這是Amazon SageMaker SDK針對Python的一部分 - 執行諸如查找使用給定工件的所有模型/端點等之類的操作
- 產生可視化
需要外部 Visualizer 幫助分類
SageMaker Data Wrangler
- 在 SageMaker Studio 中"匯入/轉換/分析/匯出/視覺化"資料
- 用於準備機器學習資料的視覺化介面(在 SageMaker Studio 中)
- 轉換資料(300 多種轉換可供選擇)
- 或將我們自訂的 xform 與 pandas、PySpark、PySpark SQL 整合
- 「Quick Model」用我們的資料訓練自己的模型並測量其結果
故障排除:
- 確保 Studio 使用者俱有適當的 IAM 角色
- 確保資料來源的權限允許 Data Wrangler 存取
新增 AmazonSageMakerFullAccess policy - EC2 instance 限制
— 如果看到“The following instance type is not available…””錯誤,可能需要請求quota increase
— 在 ml.m5.4xlarge 實例上執行的服務配額/Amazon SageMaker/Studio KernelGateway 應用程式
SageMaker JumpStart
— 來自model zoos的one-click modles和演算法
— 超過 150 個 NLP、object detections、image classification等領域的開源模型。
其他的功能:
- SageMaker Edge Manager
— 邊緣設備的software agent
— 使用 SageMaker Neo 最佳化的模型
— 收集和採樣資料以進行監控、標記、再訓練 - Asynchronous Inference endpoints
SageMaker Canvas
- 業務分析師的No-code ML
- 上傳 csv 資料(目前僅限 csv),選擇要預測的column,建立它並進行預測
- 還可以Join資料集
- 分類或迴歸
- 自動資料清理
— 缺失值
— 離群值
— 重複值 - 可與 SageMaker Studio 分享模型和資料集
其他要點:
- 本機檔案上傳必須「由 IT 管理員」設定。
設定具有適當 CORS 權限的 S3 bucket - 可以與 Okta SSO 整合
- Canvas 位於必須手動更新的 SageMaker Domain中
- 可以設定從 Redshift 導入
- 時間序列預測(Time series forecasting)必須透過 IAM 啟用
- 可以在VPC內運行
SageMaker Training Compiler
- 整合到 AWS DLC(Deep Learning Containers) 中,不能用自己的container
- 在 GPU 執行個體上編譯並最佳化訓練作業
- 可以將訓練加速高達 50%
- 將模型轉換為硬體最佳化指令
- 使用 Hugging Face transformers library進行測試,或用自己的模型
- 與 SageMaker distributed training libraries
- 最佳實踐:
— 確保使用 GPU 執行個體(ml.p3、ml.p4)
— PyTorch模型必須使用PyTorch/XLA的model儲存函數
— 在compiler_config參數中啟用debug flag進行debug