第 3 部分:建立簡化的 MLOps 管道( CI/CT/CD )
本文提供使用 AWS 服務建置 MLOps 管線的指南、著重於自動化模型重新訓練、部署和成本最佳化。
-
-
作者: *
NetApp 資深資料與應用科學家 Jian Jian ( Ken )
簡介
在本教學課程中、您將學習如何運用各種 AWS 服務來建構簡單的 MLOps 管道、其中包括持續整合( CI )、持續訓練( CT )和持續部署( CD )。與傳統的 DevOps 管線不同、 MLOps 需要額外考量才能完成營運週期。在本教學課程之後、您將深入瞭解如何將 CT 整合至 MLOps 迴圈、以便持續訓練您的模型、並進行無縫部署以進行推斷。本教學課程將引導您完成使用 AWS 服務建立此端點對端點 MLOps 管道的程序。
資訊清單
功能 | 名稱 | 留言 |
---|---|---|
資料儲存 |
AWS FSX ONTAP 功能 |
請參閱 "第 1 部分:將 Amazon FSX for NetApp ONTAP ( FSX ONTAP )整合為私有 S3 儲存區、並整合至 AWS SageMaker"。 |
資料科學 IDE |
AWS SageMaker |
本教學課程以 Jupyter 筆記型電腦"第 2 部分:運用 Amazon FSX for NetApp ONTAP ( FSX ONTAP )做為 SageMaker 模型訓練的資料來源"為基礎、如所示。 |
觸發 MLOps 管道的功能 |
AWS Lambda 功能 |
- |
cron 工作觸發程式 |
AWS EventBridge |
- |
深度學習架構 |
PyTorch |
- |
AWS Python SDK |
boto3. |
- |
程式設計語言 |
Python |
v3.10. |
先決條件
-
預先設定的 FSX ONTAP 檔案系統。本教學課程將儲存在 FSX ONTAP 中的資料用於訓練程序。
-
* SageMaker 筆記型電腦執行個體 * 、設定為與上述的 FSX ONTAP 檔案系統共用相同的 VPC 。
-
在觸發 *AWS Lambda 功能 * 之前、請確定 *SageMaker 筆記型電腦執行個體 * 處於 * 停止 * 狀態。
-
需要 * ml.g4dn.xlarg* 執行個體類型才能運用深度神經網路運算所需的 GPU 加速。
架構
此 MLOps 管道是一種實際實作、利用 cron 工作觸發無伺服器功能、進而執行以生命週期回撥功能登錄的 AWS 服務。AWS EventBridge 充當 cron 工作。它會定期調用一個負責重新訓練和重新部署模型的 * AWS Lambda 功能 * 。此程序涉及將 AWS SageMaker Notebook 執行個體旋轉、以執行必要的工作。
逐步組態
生命週期組態
若要設定 AWS SageMaker 筆記型電腦執行個體的生命週期回撥功能、您可以使用 * 生命週期組態 * 。此服務可讓您定義在啟動筆記型電腦執行個體時要執行的必要動作。具體而言、您可以在 * 生命週期組態 * 中實作 Shell 指令碼、以便在訓練與部署程序完成後、自動關閉筆記型電腦執行個體。這是必要的組態、因為成本是 MLOps 的主要考量之一。
請務必注意 * 生命週期組態 * 的組態必須事先設定。因此、建議您在繼續進行其他 MLOps 管道設定之前、先優先設定此方面的設定。
-
若要設定生命週期組態、請開啟 Sagemaker 面板、然後瀏覽至 * 管理組態 * 一節下的 * 生命週期組態 * 。
-
選取 * 筆記型電腦執行個體 * 標籤、然後按一下 * 建立組態 * 按鈕
-
將下列程式碼貼到輸入區。
#!/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 模型訓練的資料來源"、請參閱。
-
建立之後、請瀏覽至「筆記本執行個體」、選取目標執行個體、然後按一下「動作」下拉式清單下的「 * 更新設定 * 」。
-
選取建立的 * 生命週期組態 * 、然後按一下 * 更新筆記型電腦執行個體 * 。
AWS Lambda 無伺服器功能
如前所述、 * AWS Lambda Funct* 負責加速 *AWS SageMaker 筆記型電腦執行個體 * 。
-
若要建立 * AWS Lambda 功能 * 、請瀏覽至個別面板、切換至 * 功能 * 索引標籤、然後按一下 * 建立功能 * 。
-
請將所有必要項目歸檔在頁面上、並記得將執行時間切換為 * Python 3.10* 。
-
請驗證指定的角色是否具有所需的權限 amzonSageMakerFullAccess 、然後按一下 * 建立功能 * 按鈕。
-
選取建立的 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 筆記型電腦執行個體 * 以最佳化成本。如此可確保模型保持在最新狀態。
本課程將為您介紹如何開發 MLOps 管道。