Amazon SageMakerノートブックのジョブをスケジュールし、APIを使用してマルチステップノートブックのワークフローを管理します

Amazon SageMakerノートブックのジョブをスケジュールし、APIを使用してマルチステップノートブックのワークフローを効率的に管理する方法

Amazon SageMaker Studioは、データサイエンティストがインタラクティブに構築、トレーニング、および展開するための完全に管理されたソリューションです。 Amazon SageMakerのノートブックジョブを使用すると、データサイエンティストはSageMaker Studioで数回クリックするだけで、ノートブックをオンデマンドまたはスケジュールで実行することができます。 この新機能では、Amazon SageMakerのパイプラインで提供されるAPIを使用して、ノートブックをジョブとしてプログラムで実行することができます。これは、Amazon SageMakerのMLワークフローオーケストレーション機能であるSageMaker Pipelinesになります。さらに、これらのAPIを使用して、複数の依存するノートブックを使用したマルチステップのMLワークフローを作成することもできます。

SageMaker Pipelinesは、直接のSageMaker統合を利用したMLパイプラインを構築するためのネイティブのワークフローオーケストレーションツールです。各SageMakerパイプラインは、ステップで構成されており、それぞれが処理、トレーニング、またはAmazon EMRを使用したデータ処理などの個々のタスクに対応しています。 SageMakerノートブックジョブは、SageMakerパイプライン内の組み込みステップタイプとして利用できます。これを使用すると、Amazon SageMaker Python SDKを使用してわずか数行のコードでノートブックをジョブとして簡単に実行することができます。さらに、複数の依存するノートブックを一続きに織り交ぜて、Directed Acyclic Graphs(DAG)の形式でワークフローを作成することもできます。その後、これらのノートブックジョブまたはDAGを実行し、SageMaker Studioを使用して管理および可視化することができます。

現在、データサイエンティストはSageMaker Studioを使用してJupyterノートブックをインタラクティブに開発し、SageMakerノートブックジョブを使用してこれらのノートブックをスケジュールジョブとして実行しています。これらのジョブは、データワーカーがPythonモジュールとしてコードを変更する必要なく、即座に実行するか定期的なスケジュールで実行することができます。これを行うための一般的なユースケースとしては、次のようなものがあります:

  • バックグラウンドで長時間実行されるノートブックを実行する
  • 定期的にモデルの推論を実行してレポートを生成する
  • 小規模なサンプルデータセットの準備からペタバイトスケールのビッグデータで作業するまでのスケーリングアップ
  • モデルの品質やデータドリフトのモニタリングのためのジョブのスケジュール
  • より良いモデルのためのパラメータスペースの探索

この機能により、データワーカーがスタンドアロンのノートブックを自動化するのは簡単ですが、MLワークフローはしばしば複数のノートブックで構成されており、それぞれが複雑な依存関係を持って特定のタスクを実行しています。たとえば、モデルのデータドリフトを監視するノートブックには、新しいデータの抽出、変換、ロード(ETL)および処理を可能にするプレステップと、重要なドリフトが検出された場合のモデルの更新とトレーニングのポストステップが必要です。さらに、データサイエンティストは、新しいデータに基づいてモデルを更新するために、このワークフロー全体を定期的なスケジュールでトリガーしたいと考えるかもしれません。ノートブックを簡単に自動化し、このような複雑なワークフローを作成するためのSageMakerノートブックジョブが、SageMakerパイプライン内のステップとして利用できるようになりました。この記事では、わずか数行のコードで以下のユースケースを解決する方法を示します:

  • スタンドアロンのノートブックを即座にまたは定期的なスケジュールでプログラム実行する
  • 連続的インテグレーションおよび連続的デリバリー(CI / CD)の目的で、ノートブックのマルチステップワークフローとしてDAGを作成し、SageMaker Studio UIを介して管理する

ソリューションの概要

次の図は、当社のソリューションアーキテクチャを示しています。 SageMaker Python SDKを使用して、単一のノートブックジョブまたはワークフローを実行することができます。この機能は、ノートブックを実行するためにSageMakerトレーニングジョブを作成します。

以下のセクションでは、サンプルMLユースケースを紹介し、ノートブックジョブのワークフローの作成手順、異なるノートブックステップ間でのパラメータの受け渡し、ワークフローのスケジュール設定、およびSageMaker Studioを介したモニタリングの方法を紹介します。

この例では、感情分析モデルを構築しています。感情分析はテキスト分類の一種であり、一般的な応用例にはソーシャルメディアのモニタリング、顧客サポート管理、および顧客フィードバックの分析があります。この例では、Stanford Sentiment Treebank(SST2)データセットを使用しています。このデータセットは、映画のレビューとレビューのポジティブまたはネガティブな感情を示す整数(0または1)から成ります。

次の例は、SST2データセットに対応するdata.csvファイルの例であり、その最初の2つの列の値が表示されています。ファイルにはヘッダーが含まれていないことに注意してください。

Column 1 Column 2
0 hide new secretions from the parental units
0 contains no wit , only labored gags
1 that loves its characters and communicates something rather beautiful about human nature
0 remains utterly satisfied to remain the same throughout
0 on the worst revenge-of-the-nerds clichés the filmmakers could dredge up
0 that ’s far too tragic to merit such superficial treatment
1 demonstrates that the director of such hollywood blockbusters as patriot games can still turn out a small , personal film with an emotional wallop .

このMLの例では、以下のタスクを実行する必要があります:

  1. データセットをモデルが理解できる形式にするための特徴エンジニアリングを実行する。
  2. 特徴エンジニアリング後、Transformersを使用したトレーニングステップを実行する。
  3. ファインチューニング済みモデルを使用したバッチ推論を設定し、新しいレビューの感情を予測するのを支援する。
  4. モデルの重みを再学習する必要がある品質のドリフトに備えて、新しいデータを定期的に監視するデータ監視ステップを設定する。

SageMakerパイプラインでノートブックジョブとしてのローンチを行うことで、このワークフローをオーケストレーションすることができます。ワークフローの各ステップは異なるノートブックで開発され、それぞれが独立したノートブックジョブステップとして変換され、パイプラインとして接続されます。

  • 前処理 – Amazon Simple Storage Service(Amazon S3)からパブリックのSST2データセットをダウンロードし、ステップ2のノートブック用のCSVファイルを作成します。SST2データセットは2つのラベル(0と1)とカテゴリー化するテキストの列を持つテキスト分類データセットです。
  • トレーニング – 形状が整ったCSVファイルを取り、Transformersライブラリを使用してテキスト分類のためのBERTのファインチューニングを実行します。このステップの一部としてテストデータ準備ノートブックを使用し、ファインチューニングとバッチ推論ステップの依存関係とします。ファインチューニングが完了したら、このノートブックはランマジックを使用して実行され、ファインチューニングされたモデルでのサンプル推論用のテストデータセットを準備します。
  • 変換とモニタリング – バッチ推論を実行し、モデルモニタリングでデータの品質を設定してベースラインのデータセットの提案を行います。

ノートブックを実行する

このソリューションのサンプルコードはGitHubで利用できます。

SageMakerのノートブックジョブステップの作成は、他のSageMakerパイプラインステップの作成と似ています。このノートブックの例では、SageMaker Python SDKを使用してワークフローをオーケストレーションします。SageMakerパイプラインでノートブックステップを作成するために、次のパラメータを定義することができます:

  • Input notebook – このノートブックステップがオーケストレーションするノートブックの名前です。ここでは、入力ノートブックのローカルパスを渡すことができます。オプションとして、このノートブックが実行する他のノートブックがある場合には、ノートブックジョブステップのAdditionalDependenciesパラメータにこれらを渡すことができます。
  • Image URI – ノートブックジョブステップの背後にあるDockerイメージです。これは、SageMakerが既に提供している事前定義済みのイメージまたはAmazon Elastic Container Registry(Amazon ECR)に定義してプッシュしたカスタムイメージである場合があります。サポートされているイメージについては、このポストの最後の考慮事項のセクションを参照してください。
  • Kernel name – SageMaker Studioで使用しているカーネルの名前です。このカーネル仕様は、提供したイメージに登録されています。
  • Instance type (optional) – 定義したノートブックジョブの背後にあるAmazon Elastic Compute Cloud(Amazon EC2)インスタンスタイプです。
  • Parameters (optional) – ノートブックでアクセス可能なパラメータを渡すことができます。これらはキーと値のペアで定義することができます。さらに、これらのパラメータは、ノートブックジョブの実行またはパイプラインの実行間で変更することができます。

この例では、合計5つのノートブックがあります:

  • nb-job-pipeline.ipynb – これはパイプラインとワークフローを定義するメインのノートブックです。
  • preprocess.ipynb – このノートブックはワークフローの最初のステップであり、パブリックなAWSデータセットを取得し、それをCSVファイルに変換します。
  • training.ipynb – このノートブックはワークフローの2番目のステップであり、前のステップのCSVを使用してローカルでトレーニングとファインチューニングを行うコードが含まれています。このステップはまた、prepare-test-set.ipynbノートブックに依存して、ファインチューニングされたモデルを使用したサンプル推論のためのテストデータセットを取得します。
  • prepare-test-set.ipynb – このノートブックでは、トレーニングノートブックで使用するテストデータセットを作成し、2つ目のパイプラインステップで使用し、ファインチューニングされたモデルを使用しサンプル推論を行います。
  • transform-monitor.ipynb – このノートブックはワークフローの3番目のステップであり、ベースのBERTモデルを取り、SageMakerバッチ変換ジョブを実行し、モデルモニタリングとデータ品質の設定を行います。

次に、メインノートブックであるnb-job-pipeline.ipynbを説明します。このノートブックでは、すべてのサブノートブックをパイプラインに組み込み、エンドツーエンドのワークフローを実行します。なお、以下の例ではノートブックを1回のみ実行していますが、パイプラインをスケジュールしてノートブックを繰り返し実行することもできます。詳しい手順については、SageMakerのドキュメントを参照してください。

最初のノートブックジョブステップでは、デフォルトのS3バケットをパラメータとして渡します。このバケットを使用して、他のパイプラインステップで使用可能なアーティファクトを保存することができます。最初のノートブック(preprocess.ipynb)では、AWSのパブリックなSST2トレーニングデータセットを取得し、それをS3バケットにCSVファイルとして保存します。以下のコードをご覧ください:

# Parametersprint(default_s3_bucket)!aws s3 cp s3://sagemaker-sample-files/datasets/text/SST2/sst2.train sst2.train# 500行目まで読み込みます。実行時間を短縮するためです。with open('sst2.train', 'r') as f:    lines = f.readlines()[:500] data = []for line in lines:    label, text = line.strip().split(' ', 1)    data.append((int(label), text))df = pd.DataFrame(data, columns=['label', 'text'])df.to_csv("train.csv", index=False) #小さなデータセットのcsvファイルの作成!aws s3 cp "train.csv" {default_s3_bucket}

このノートブックを以下のコードを使用してNotebookJobStepに変換できます:

# provide S3 Bucket to dump artifacts innb_job_params = {"default_s3_bucket": notebook_artifacts}preprocess_nb_step = NotebookJobStep(name=preprocess_step_name,description=preprocess_description,notebook_job_name=preprocess_job_name,image_uri=image_uri,kernel_name=kernel_name,display_name=display_name,role=role,input_notebook=preprocess_notebook,instance_type="ml.m5.4xlarge",parameters=nb_job_params,)

サンプルのCSVファイルがあるので、トレーニングノートブックでモデルのトレーニングを開始できます。トレーニングノートブックは、S3バケットと同じパラメータを受け取り、その場所からトレーニングデータセットをダウンロードします。次に、以下のコードスニペットを使用して、Transformersトレーナーオブジェクトを使用してファインチューニングを実行します:

from transformers import TrainingArguments, Trainertraining_args = TrainingArguments(output_dir="test_trainer", evaluation_strategy="epoch")trainer = Trainer(    model=model,    args=training_args,    train_dataset=small_train_dataset,    eval_dataset=small_eval_dataset,    compute_metrics=compute_metrics,)trainer.train()

ファインチューニング後、モデルのパフォーマンスを確認するために一部のバッチ推論を実行したいです。これは、トレーニング済みモデルを使用して推論を実行するテストデータセットを作成するのと同じ場所の別のノートブック(prepare-test-set.ipynb)を使用して行われます。以下のマジックセルを使用して、トレーニングノートブックで追加のノートブックを実行できます:

%run 'prepare-test-set.ipynb'

2番目のノートブックジョブステップで、この追加のノートブックの依存関係をAdditionalDependenciesパラメータで定義します:

train_nb_step = NotebookJobStep(name=training_step_name,description=training_description,notebook_job_name=training_job_name,input_notebook=training_notebook,additional_dependencies=[test_data_prep_notebook],image_uri=image_uri,kernel_name=kernel_name,display_name=display_name,instance_type="ml.m5.12xlarge",role=role,parameters=nb_job_params,)

さらに、トレーニングノートブックジョブステップ(ステップ2)がPreprocessノートブックジョブステップ(ステップ1)に依存することをadd_depends_on API呼び出しで指定する必要があります:

train_nb_step.add_depends_on([preprocess_nb_step])

最後のステップでは、BERTモデルを実行し、SageMaker Batch Transformを実行します。また、SageMakerモデルモニターを使用してデータキャプチャと品質をセットアップします。なお、これはPipelineを介して組み込みのTransformまたはCaptureステップを使用する場合とは異なります。このステップのノートブックでは、同じAPIを実行しますが、ノートブックジョブステップとしてトラッキングされます。このステップは、以前に定義したトレーニングジョブステップに依存しています。

batch_monitor_step = NotebookJobStep(name=batch_monitor_step_name,description=batch_monitor_description,notebook_job_name=batch_monitor_job_name,input_notebook=batch_monitor_notebook,image_uri=image_uri,kernel_name=kernel_name,display_name=display_name,instance_type="ml.m5.12xlarge",role=role,parameters=nb_job_params,)batch_monitor_step.add_depends_on([train_nb_step])

ワークフローの各ステップが定義された後、エンドツーエンドのパイプラインを作成し、実行できます:

# create pipelinepipeline = Pipeline(name=pipeline_name,steps=[preprocess_nb_step, train_nb_step, batch_monitor_step],)# execute pipelinepipeline.create(session.get_execution_role())execution = pipeline.start(parameters={})execution.wait(delay=30, max_attempts=60)execution_steps = execution.list_steps()print(execution_steps)

パイプラインの実行を監視する

SageMaker Pipelines DAGによってノートブックステップの実行を追跡および監視できます。以下のスクリーンショットで確認できます。

また、SageMaker Studio UIを介して作成された出力ファイルをトグルできる他、ノートブックジョブダッシュボードで個々のノートブックの実行をオプションで監視することもできます。SageMaker Studioの外部でこの機能を使用する場合、タグを使用してノートブックジョブダッシュボードで実行ステータスを追跡できるユーザーを定義することができます。関連する詳細については、「SageMaker Studio UIダッシュボードでノートブックジョブを表示して出力をダウンロードする」を参照してください。

この例では、パイプライン実行コード内のローカルパスに名前が「outputs」のディレクトリに結果のノートブックジョブを出力します。以下のスクリーンショットに示すように、ここでは入力ノートブックの出力を確認することができ、そのステップのために定義した任意のパラメータも表示されます。

クリーンアップ

この例に従った場合、作成したパイプライン、ノートブックジョブ、およびサンプルノートブックによってダウンロードされたs3データを削除してください。

考慮事項

この機能に関するいくつかの重要な考慮事項は次の通りです:

  • SDKの制約 – ノートブックジョブステップは、SageMaker Python SDKを使用してのみ作成できます。
  • イメージの制約 – ノートブックジョブステップは、次のイメージをサポートしています:
    • SageMakerディストリビューションイメージ
    • 前のリストのSageMakerディストリビューションイメージをベースにしたカスタムイメージ。SageMakerディストリビューションイメージをベースにしてください。
    • sagemaker-headless-execution-driverを含む、ノートブックジョブの依存関係が事前にインストールされたカスタムイメージ。SageMakerノートブックジョブのイメージ制約も満たす必要があります。

結論

このリリースにより、データ作業者はSageMaker Python SDKを使用してわずかなコードでノートブックをプログラム的に実行することができます。さらに、ノートブックを使用して複雑なマルチステップワークフローを作成することができ、ノートブックからCI/CDパイプラインへの移行にかかる時間を大幅に短縮することができます。パイプラインを作成した後、SageMaker Studioを使用してパイプラインのDAGを表示および実行し、実行を管理および比較することができます。エンドツーエンドのMLワークフローまたはその一部をスケジュールする場合、ノートブックベースのワークフローを試してみることをお勧めします。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AIニュース

フォートペック族のメンバーとグーグラーが集まり、社会的な利益をもたらす技術について学び、祝福し、支援するために出会います

「責任あるイノベーションに重点を置くGoogleチームが、モンタナ州のフォートペック族を訪れ、関係構築と双方向の学びを行い...

人工知能

「責任ある生成AIのための3つの新興プラクティス」

「中間報告として、私たちはこの指針に基づいて行った事前の設計、レビュー、および生成型AIの開発に基づいて、私たちのベス...

データサイエンス

このAIツールでデータを即座に視覚化する

ChatCSVは、データ分析を友人にメッセージを送るように簡単にするAIツールです

機械学習

「AIとML開発言語としてのPythonの利点」

「AIやMLなどのツールを使用して、ウェブ開発会社が業界を征服するためにPythonがますます使用されている理由を発見してくだ...

機械学習

「CLAMPに会ってください:推論時に新しい実験に適応できる分子活性予測のための新しいAIツール」

数十年にわたり、化学構造に基づいて分子の化学的、巨視的、または生物学的な特性を予測するタスクは、重要な科学的な研究課...

AIニュース

「IIT卒業生のAIによるカバーレターが皆を爆笑させる」

事件の風刺的な展開の中で、あるIIT(インド工科大学)の卒業生が人工知能を活用してカバーレターを作成しようとした結果、大...