パート3 -簡易化されたMLOpsパイプラインの構築(CI/CT/CD)
この記事では、自動モデル再トレーニング、導入、コスト最適化に焦点を当てて、AWSサービスを使用してMLOpsパイプラインを構築するためのガイドを提供します。
- - -
作成者:
NetAppシニアデータ&アプリケーションサイエンティスト、Jian Jian(Ken)
はじめに
このチュートリアルでは、さまざまなAWSサービスを活用して、継続的統合(CI)、継続的トレーニング(CT)、継続的導入(CD)を含むシンプルなMLOpsパイプラインを構築する方法を学習します。従来のDevOpsパイプラインとは異なり、MLOpsでは運用サイクルを完了するために追加の考慮事項が必要です。このチュートリアルに従うことで、CTをMLOpsループに組み込む方法についての洞察を得ることができ、モデルの継続的なトレーニングと推論のためのシームレスな導入が可能になります。このチュートリアルでは、AWSサービスを利用してこのエンドツーエンドのMLOpsパイプラインを確立するプロセスをガイドします。
マニフェスト
機能性 | 名前 | コメント( Comment ) |
---|---|---|
データストレージ |
AWS FSX ONTAP の略 |
を参照してください "パート1 - Amazon FSx for NetApp ONTAP(FSx ONTAP)をプライベートS3バケットとしてAWS SageMakerに統合する"。 |
データサイエンスIDE |
AWS SageMaker |
このチュートリアルは、に示すJupyterノートブックに基づいて"パート2 - SageMakerのモデルトレーニングのデータソースとしてAmazon FSx for NetApp ONTAP(FSx ONTAP)を活用"います。 |
MLOpsパイプラインをトリガーする機能 |
AWS Lambda関数 |
- |
cronジョブトリガー |
AWSイベントブリッジ |
- |
ディープラーニングフレームワーク |
PyTorch |
- |
AWS Python SDK |
ボット3 |
- |
プログラミング言語 |
Python |
v3.10 |
前提条件
-
構成済みのFSx ONTAPファイルシステム。このチュートリアルでは、FSx ONTAPに保存されているデータをトレーニングプロセスに利用します。
-
前述のFSx ONTAPファイルシステムと同じVPCを共有するように設定された* SageMakerノートブックインスタンス*。
-
* AWS Lambda関数*をトリガーする前に、* SageMaker Notebookインスタンス*が*停止*ステータスになっていることを確認してください。
-
ディープニューラルネットワークの計算に必要なGPUアクセラレーションを利用するには、* ml.g4dn.xlarge *インスタンスタイプが必要です。
アーキテクチャ
このMLOpsパイプラインは、cronジョブを利用してサーバレス関数をトリガーし、ライフサイクルコールバック関数に登録されたAWSサービスを実行する実用的な実装です。AWS EventBridge はcronジョブとして機能します。モデルの再トレーニングと再デプロイを担当する AWS Lambda関数*を定期的に呼び出します。このプロセスでは、* AWS SageMaker Notebook *インスタンスをスピンアップして必要なタスクを実行します。
ステップバイステップ構成
ライフサイクル設定
AWS SageMaker Notebookインスタンスのライフサイクルコールバック関数を設定するには、ライフサイクル設定*を使用します。このサービスでは、ノートブックインスタンスをスピンアップするときに実行する必要のあるアクションを定義できます。具体的には、 Lifecycle configurations *内にシェルスクリプトを実装して、トレーニングおよび展開プロセスが完了するとノートブックインスタンスを自動的にシャットダウンすることができます。MLOpsではコストが重要な考慮事項の1つであるため、これは必須の設定です。
重要なのは、*ライフサイクル構成*の構成は事前に設定する必要があることです。したがって、他のMLOpsパイプラインのセットアップに進む前に、この側面の設定を優先することをお勧めします。
-
ライフサイクル構成を設定するには、* Sagemaker パネルを開き、 Admin configurations セクションの Lifecycle configurations *に移動します。
-
[Notebook Instance]タブを選択し、[Create 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 - SageMakerのモデルトレーニングのデータソースとしてAmazon FSx for NetApp ONTAP(FSx ONTAP)を活用"。
-
作成後、Notebook Instances(ノートブックインスタンス)に移動してターゲットインスタンスを選択し、Actions(アクション)ドロップダウンの* Update settings(設定の更新)*をクリックします。
ドロップダウン"]
-
作成した* Lifecycle configuration を選択し、 Update notebook instance *をクリックします。
AWS Lambdaサーバレス関数
前述したように、* AWS Lambda関数*は* AWS SageMaker Notebookインスタンス*のスピンアップを担当します。
-
AWS Lambda Function を作成するには、該当するパネルに移動し、 Functions タブに切り替えて Create Function *をクリックします。
-
ページに必要なすべてのエントリをファイルし、ランタイムを*Python 3.10*に切り替えることを忘れないでください。
-
指定されたロールに必要な権限* AmazonSageMakerFullAccess*があることを確認し、* Create Function *ボタンをクリックしてください。
-
作成した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関数をトリガーする方法を指定するには、Add Triggerボタンをクリックします。
-
ドロップダウンメニューから[EventBridge]を選択し、[Create a new rule]というラベルの付いたラジオボタンをクリックします。[スケジュール式]フィールドに、次のように入力します。 `rate(1 day)`をクリックし、[追加]ボタンをクリックして、この新しいcronジョブルールを作成し、AWS Lambda関数に適用します。
2段階の設定が完了すると、* AWS Lambda関数*が毎日* SageMaker Notebook を開始し、 FSx ONTAP リポジトリのデータを使用してモデルの再トレーニングを実行し、更新されたモデルを本番環境に再導入し、 SageMaker Notebook *インスタンスを自動的にシャットダウンしてコストを最適化します。これにより、モデルが常に最新の状態に保たれます。
これで、MLOpsパイプラインを開発するためのチュートリアルは終了です。