Skip to main content
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

パート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パイプラインのセットアップに進む前に、この側面の設定を優先することをお勧めします。

  1. ライフサイクル構成を設定するには、* Sagemaker パネルを開き、 Admin configurations セクションの Lifecycle configurations *に移動します。

    SageMakerパネル

  2. [Notebook Instance]タブを選択し、[Create configuration]ボタンをクリックします。

    ライフサイクル設定のようこそページ

  3. 次のコードを入力領域に貼り付けます。

    #!/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
  4. このスクリプトは、推論のためのモデルの再トレーニングと再配置を処理するJupyter Notebookを実行します。実行が完了すると、ノートブックは5分以内に自動的にシャットダウンされます。問題点とコード実装の詳細については、を参照してください"パート2 - SageMakerのモデルトレーニングのデータソースとしてAmazon FSx for NetApp ONTAP(FSx ONTAP)を活用"

    ライフサイクル構成を作成します

  5. 作成後、Notebook Instances(ノートブックインスタンス)に移動してターゲットインスタンスを選択し、Actions(アクション)ドロップダウンの* Update settings(設定の更新)*をクリックします。

    "[Update settingsドロップダウン"]

  6. 作成した* Lifecycle configuration を選択し、 Update notebook instance *をクリックします。

    ノートブックのライフサイクル構成の更新

AWS Lambdaサーバレス関数

前述したように、* AWS Lambda関数*は* AWS SageMaker Notebookインスタンス*のスピンアップを担当します。

  1. AWS Lambda Function を作成するには、該当するパネルに移動し、 Functions タブに切り替えて Create Function *をクリックします。

    AWS Lambda関数のようこそページ

  2. ページに必要なすべてのエントリをファイルし、ランタイムを*Python 3.10*に切り替えることを忘れないでください。

    AWS Lambda関数の作成

  3. 指定されたロールに必要な権限* AmazonSageMakerFullAccess*があることを確認し、* Create Function *ボタンをクリックしてください。

    実行ロールを選択

  4. 作成した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}'
        }
  5. このコード変更を適用するには、*配布*ボタンをクリックします。

    導入

  6. このAWS Lambda関数をトリガーする方法を指定するには、Add Triggerボタンをクリックします。

    AWS Functionトリガーの追加

  7. ドロップダウンメニューから[EventBridge]を選択し、[Create a new rule]というラベルの付いたラジオボタンをクリックします。[スケジュール式]フィールドに、次のように入力します。 `rate(1 day)`をクリックし、[追加]ボタンをクリックして、この新しいcronジョブルールを作成し、AWS Lambda関数に適用します。

    finalizeトリガ

2段階の設定が完了すると、* AWS Lambda関数*が毎日* SageMaker Notebook を開始し、 FSx ONTAP リポジトリのデータを使用してモデルの再トレーニングを実行し、更新されたモデルを本番環境に再導入し、 SageMaker Notebook *インスタンスを自動的にシャットダウンしてコストを最適化します。これにより、モデルが常に最新の状態に保たれます。

これで、MLOpsパイプラインを開発するためのチュートリアルは終了です。