AWS-ML認證筆記 — Domain 4
ML Implementation and Operations(佔考試的20%)
任務一: 建立ML解決方案的效能、可用性、擴充性、韌性與容錯(fault tolerance)
- 記錄和監控 AWS 環境。例如運用CloudTrail 和CloudWatch
,並建立錯誤監控解決方案 - 部署到多個 AWS regions和AZ
- 建立 AMI 和golden images
- 建立 Docker 容器
- 部署 Auto Scaling group
- 調整資源大小(例如,instances、Provisioned IOPS、volumes)
- 運行load balancing
- 遵循 AWS 最佳實踐
任務二: 針對特定問題推薦並實施適當的 ML 服務和功能
- ML on AWS (application services),例如:Amazon Polly/ Amazon Lex/ Amazon Transcribe/ Amazon Q
- 認知到AWS有service quotas
- 決定何時建立客製模型以及何時使用 SageMaker 內建演算法
- 了解 AWS 基礎架構(例如instance type)和成本注意事項。如,使用 AWS Batch 訓練深度學習模型的作業可以使用Spot instance。
任務三: 將基本 AWS 安全性實務應用於 ML 解決方案
- IAM
- S3 bucket policies
- Security groups
- VPCs
- Encryption and anonymization
任務四: 部署和實施ML解決方案
- 設定Endpoint
- 了解ML模型
- 執行 A/B 測試
- 重新訓練流水線
- 對 ML 模型進行debug和故障排除。例如,偵測並緩解效能下降,監控模型的效能。
SageMaker and Docker Containers
SageMaker 中的所有模型都託管在 Docker 容器中,所以:
- 預先建構的深度學習
- 預先建置的 scikit-learn 和 Spark ML
- 預先建置的 Tensorflow、MXNet、Chainer、PyTorch。透過 Horovod 或參數伺服器進行分散式訓練
- 我們自己的訓練和推理代碼,或擴展預先建構的Image
這允許我們在 SageMaker 中使用任何腳本或演算法,無論執行時間或語言是甚麼。容器是隔離的,包含運行所需的所有相依性和資源。
- Docker 容器是從Image建立的
- Image是從 Dockerfile 建構的
- Image保存在儲存庫(ECR)中
SageMaker Containers使用於讓”容器與 SageMaker” 相容的函式庫。在我們的Dockfile執行"RUN pip install sagemaker-containers"。
Docker Image的結構
WORKDIR
- nginx.conf
- predictor.py
- serve/
- train/
- wsgi.py
將以上三個結構組合在Dockerfile中:
FROM tensorflow/tensorflow:2.0.0a0
RUN pip3 install sagemaker-training
# Copies the training code inside the container
COPY train.py /opt/ml/code/train.py
# Defines train.py as script entrypoint
ENV SAGEMAKER_PROGRAM train.py
環境變數(列舉):
- SAGEMAKER_PROGRAM(Run a script inside /opt/ml/code)
- SAGEMAKER_TRAINING_MODULE
- SAGEMAKER_SERVICE_MODULE
- SM_MODEL_DIR
- SM_CHANNELS / SM_CHANNEL_*
- SM_HPS / SM_HP_*
- SM_USER_ARGS
使用自己的Image(command line):
- cd dockerfile
- !docker build -t foo .
- from sagemaker.estimator import Estimator
estimator = Estimator(image_name=‘foo',
role='SageMakerRole',
train_instance_count=1,
train_instance_type='local')
estimator..fit()
Production Variants
我們可以使用 Production Variants 在即時流量上測試多個模型。Variant Weights會告訴 SageMaker 如何在它們之間分配流量。因此,我們可以以 10% 的Variant Weights推出模型的新迭代。一旦我們對新模型的效能能充滿信心,就可以將其流量100%轉移。
這就是 A/B test,並驗證實際設定中的效能,因為離線驗證並不總是有效。另外也可以使用Shadow Variants進行驗證,最後部署護欄(Guardrails)。
邊緣式的SageMaker
SageMaker Neo
Train once, run anywhere。基本上就是把模型部屬在遠端的裝置中。針對特定設備最佳化其代碼(Tensorflow, MXNet, PyTorch, ONNX, XGBoost, DarkNet, Keras)。由compiler與runtime所組成。
Neo + AWS IoT Greengrass
Neo-compiled models可以部署到 HTTPS 端點。端點通常Host在C5、M5、 M4、P3或P2。而且必須與用在編譯的instance type相同。
或者我們可以部屬在IoT Greengrass。這是將模型部署到實際邊緣設備的方法,這使用在雲端訓練的模型後在邊緣使用本地資料進行推理。使用 Lambda inference applications。
SageMaker Security
- 使用 IAM — — 只設定使用者帳戶所需的權限
- 使用MFA
- 連接到任何內容時使用 SSL/TLS
- 使用 CloudTrail 記錄 API 和使用者活動
- 使用加密
- 注意 PII
Data at Rest
AWS KMS:
Notebook和所有 SageMaker job都可以使用這一方式加密
- 如Training、tuning、batch transform、endpoints等作業
- Notebook以及 /opt/ml/ 和 /tmp 中的所有內容都可以使用 KMS key加密
S3:
- 可以使用加密的 S3 bucket來訓練資料和託管模型
- S3也可以使用KMS
Data in Transit
所有的流量都可以用TLS / SSL加密。另外用IAM role指派給 SageMaker 以授予其存取資源的權限。Inter-node training communication可以選擇加密:
- 透過深度學習會增加訓練時間和成本
- 也稱為inter-container traffic encryption
- 設定訓練或調整作業時可以透過Console或 API 啟用
SageMaker與VPC
- 在 VPC中執行的訓練作業
- 我們可以使用private VPC 以獲得更高的安全性,所以需要設定 S3 VPC endpoint。也需要自訂endpoint policies和 S3 bucket policies可以確保安全
- Notebook預設可以直連Internet(這可能是安全漏洞)。如果停用,VPC 需要interface endpoint (PrivateLink) 或 NAT gateway,並允許outbound connections,以便訓練和託管等作業
- 訓練和推理容器預設也直連Internet。網路隔離是一種選擇,但這也會阻止 S3 存取
SageMaker + IAM
User permissions for:
- CreateTrainingJob
- CreateModel
- CreateEndpointConfig
- CreateTransformJob
- CreateHyperParameterTuningJob
- CreateNotebookInstance
- UpdateNotebookInstance
Predefined policies:
- AmazonSageMakerReadOnly
- AmazonSageMakerFullAccess
- AdministratorAccess
- DataScientist
SageMaker Logging與Monitoring
CloudWatch 可以記錄、監控和警報:
- 端點(Endpoint)的呼叫和延遲
- Instance nodes健康狀況(CPU、Memory等)
- Ground Truth(努力的員工,他們做了多少工作)
CloudTrail 記錄 SageMaker 中使用者、角色和服務的操作,會將日誌檔傳送到 S3 進行稽核。
管理SageMaker的資源
儘管這是一個維運問題,但需要在「建模(Modeling)」下討論。一般來說,依賴深度學習的演算法將受益於 GPU Instance(P3、g4dn)進行訓練。推理(Inference)通常要求較低,通常可以使用CPU instance(如C5),因為用GPU instance可能非常貴。
用Spot instance來訓練
- 可以使用 EC2 Spot instances進行訓練,跟On-Demand來比節省高達 90%。
- Spot instance會被中斷,所以使用 S3 檢查點將之前的訓練狀態回復
- 可能會增加訓練時間,因為需要等待Spot instance是有得用的
Elastic Inference
這項服務在2023 四月之後不給新註冊的AWS account使用了。
- 加速深度學習推理。這是使用 GPU instance進行推理
- EI 加速器可以與 CPU instance一起新增(ml.eia1.medium / large / xlarge)
- EI加速器也可能應用於notebooks
- 可與 Tensorflow、PyTorch 和 MXNet 預先建置容器搭配使用(ONNX 可用於將模型匯出至 MXNet)
- 可與使用支援 EI 的 Tensorflow、PyTorch 或 MXNet 建置的自訂容器配合使用
- 使用影像分類和物件檢測的內建演算法
Serverless Inference
- 2022 年推出
- 指定容器、記憶體需求、併發(concurrency)要求
- 底層容量自動配置和擴展
- 適合不頻繁或不可預測的流量;當沒有請求時將縮小到零。
- 根據使用情況收費
- 透過 CloudWatch 監控
模型設定時間、呼叫、記憶體使用率
SageMaker Inference Recommender
為我們的模型推薦最佳Instance Type和配置。可以自動進行負載測試模型調整,並部署到最佳推理端點(inference endpoint)。
運作方式:
- 將模型註冊到model registry
- 對不同端點配置進行基準測試
- 收集並視覺化指標來決定Instance
- Zoos的現有模型可能已經有了基準
Instance Recommendations
- 對推薦的Instance type執行負載測試
- 大約需要45分鐘
Endpoint Recommendations
- 自訂負載測試
- 我們指定instance、流量模式、延遲需求、throughput需求
- 大約需要2小時
MLOps with SageMaker
K8S
- 將 SageMaker 與基於K8S的 ML 基礎設施整合
- 適用於K8S的 SageMaker Operators
- Kubeflow Pipleline 的組件
- 支援混合ML workflows(地端+雲端)
- 能夠整合基於 K8S/Kubeflow 建構的現有 ML 平台
SageMaker Projects
SageMaker Studio 的原生 MLOps 解決方案與 CI/CD:
- 建構Image
- 準備資料,特徵工程
- 訓練模型
- 評估模型
- 部署模型
- 監控和更新模型
使用代碼儲存庫建置和部署ML解決方案。使用 SageMaker Pipelines 定義步驟。
Inference Pipelines
- 2–15個容器的Linear sequence
- Docker 容器中預訓練的內建演算法或我們自己的演算法的任意組合
- 結合pre-processing、predictions、post-processing
- Spark ML 和 scikit-learn 容器也能運作
Spark ML 可以使用 Glue 或 EMR 來運作
序列化(Serialized)為 MLeap 格式 - 可以處理real-time inference與batch transforms