第 3 部分 - 建立簡化的 MLOps 管道 (CI/CT/CD)
本文提供了使用 AWS 服務建立 MLOps 管道的指南,重點在於自動模型再訓練、部署和成本最佳化。
介紹
在本教程中,您將學習如何利用各種 AWS 服務建立一個包含持續整合 (CI)、持續訓練 (CT) 和持續部署 (CD) 的簡單 MLOps 管道。與傳統的 DevOps 管道不同,MLOps 需要額外的考慮才能完成操作週期。透過學習本教程,您將深入了解如何將 CT 納入 MLOps 循環,從而實現模型的持續訓練和推理的無縫部署。本教學將引導您完成利用 AWS 服務建立此端對端 MLOps 管道的過程。
顯現
功能 | Name | 評論 |
---|---|---|
資料儲存 |
AWS FSx ONTAP |
請參閱"第 1 部分 - 將Amazon FSx for NetApp ONTAP (FSx ONTAP) 作為私有 S3 儲存桶整合到 AWS SageMaker" 。 |
數據科學 IDE |
AWS SageMaker |
本教程基於"第 2 部分 - 利用Amazon FSx for NetApp ONTAP (FSx ONTAP) 作為 SageMaker 模型訓練的資料來源"。 |
觸發 MLOps 管道的函數 |
AWS Lambda 函數 |
- |
Cron 作業觸發器 |
AWS EventBridge |
- |
深度學習框架 |
PyTorch |
- |
AWS Python 開發工具包 |
boto3 |
- |
程式設計語言 |
Python |
v3.10 |
先決條件
-
預先設定的 FSx ONTAP檔案系統。本教學利用 FSx ONTAP中儲存的資料進行訓練程序。
-
配置為與上面提到的 FSx ONTAP檔案系統共用相同 VPC 的 SageMaker Notebook 實例。
-
在觸發 AWS Lambda 函數 之前,請確保 SageMaker Notebook 實例 處於 已停止 狀態。
-
需要 ml.g4dn.xlarge 執行個體類型來利用深度神經網路運算所需的 GPU 加速。
架構
這個 MLOps 管道是一個實際的實現,它利用 cron 作業來觸發無伺服器功能,進而執行使用生命週期回呼函數註冊的 AWS 服務。 AWS EventBridge 充當 cron 作業。它會定期呼叫負責重新訓練和重新部署模型的 AWS Lambda 函數。此程序涉及啟動 AWS SageMaker Notebook 實例以執行必要的任務。
逐步配置
生命週期配置
若要為 AWS SageMaker Notebook 實例配置生命週期回呼函數,您需要使用*生命週期配置*。此服務可讓您定義啟動筆記本執行個體時需要執行的必要操作。具體來說,可以在*生命週期配置*中實現一個 shell 腳本,以便在訓練和部署過程完成後自動關閉筆記本實例。這是必要的配置,因為成本是 MLOps 中的主要考慮因素之一。
值得注意的是,*生命週期配置*的配置需要事先設定。因此,建議在繼續其他 MLOps 管道設定之前優先配置這一方面。
-
若要設定生命週期配置,請開啟 Sagemaker 面板並導覽至 Admin configuration 部分下的 Lifecycle configuration。
-
選擇“筆記本實例”選項卡,然後按一下“建立配置”按鈕
-
將以下程式碼貼到輸入區域。
#!/bin/bash set -e sudo -u ec2-user -i <<'EOF' # 1. Retraining and redeploying the model NOTEBOOK_FILE=/home/ec2-user/SageMaker/tyre_quality_classification_local_training.ipynb echo "Activating conda env" source /home/ec2-user/anaconda3/bin/activate pytorch_p310 nohup jupyter nbconvert "$NOTEBOOK_FILE" --ExecutePreprocessor.kernel_name=python --execute --to notebook & nbconvert_pid=$! conda deactivate # 2. Scheduling a job to shutdown the notebook to save the cost PYTHON_DIR='/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/python3.10' echo "Starting the autostop script in cron" (crontab -l 2>/dev/null; echo "*/5 * * * * bash -c 'if ps -p $nbconvert_pid > /dev/null; then echo \"Notebook is still running.\" >> /var/log/jupyter.log; else echo \"Notebook execution completed.\" >> /var/log/jupyter.log; $PYTHON_DIR -c \"import boto3;boto3.client(\'sagemaker\').stop_notebook_instance(NotebookInstanceName=get_notebook_name())\" >> /var/log/jupyter.log; fi'") | crontab - EOF
-
該腳本執行 Jupyter Notebook,用於處理模型的重新訓練和重新部署以進行推理。執行完成後,筆記本將在5分鐘內自動關機。要了解有關問題陳述和代碼實現的更多信息,請參閱"第 2 部分 - 利用Amazon FSx for NetApp ONTAP (FSx ONTAP) 作為 SageMaker 模型訓練的資料來源"。
-
建立後,導覽至 Notebook 實例,選擇目標實例,然後按一下「動作」下拉式功能表下的「更新設定」。
-
選擇已建立的*生命週期配置*,然後按一下*更新筆記本實例*。
AWS Lambda 無伺服器函數
如前所述,AWS Lambda 函數*負責啟動 *AWS SageMaker Notebook 實例。
-
若要建立 AWS Lambda 函數,請導覽至對應的面板,切換至 函數 選項卡,然後按一下 建立函數。
-
請在頁面上提交所有必需的條目,並記得將運行時切換為 Python 3.10。
-
請驗證指定的角色是否具有所需的權限*AmazonSageMakerFullAccess*,然後按一下*建立功能*按鈕。
-
選擇已建立的Lambda函數。在代碼標籤中,將以下程式碼複製並貼上到文字區域中。此程式碼啟動名為 fsxn-ontap 的筆記本實例。
import boto3 import logging def lambda_handler(event, context): client = boto3.client('sagemaker') logging.info('Invoking SageMaker') client.start_notebook_instance(NotebookInstanceName='fsxn-ontap') return { 'statusCode': 200, 'body': f'Starting notebook instance: {notebook_instance_name}' }
-
按一下“部署”按鈕以套用此程式碼變更。
-
若要指定如何觸發此 AWS Lambda 函數,請按一下新增觸發器按鈕。
-
從下拉式選單中選擇 EventBridge,然後按一下標示為「建立新規則」的單選按鈕。在計劃表達式欄位中,輸入
rate(1 day)
,然後按一下新增按鈕以建立並將此新的 cron 作業規則套用至 AWS Lambda 函數。
完成這兩步驟配置後,每天,AWS Lambda 函數*都會啟動 *SageMaker Notebook,使用 FSx ONTAP 儲存庫中的資料執行模型重新訓練,將更新後的模型重新部署到生產環境,並自動關閉 *SageMaker Notebook 實例*以優化成本。這確保模型保持最新。
開發 MLOps 管道的教學到此結束。