Amazon SageMaker ノートブックジョブをスケジュールし、API を使用して複数ステップのノートブックワークフローを管理する | アマゾン ウェブ サービス

Amazon SageMaker ノートブックジョブをスケジュールし、API を使用して複数ステップのノートブックワークフローを管理する | アマゾン ウェブ サービス

ソースノード: 2985648

Amazon SageMakerスタジオ は、データ サイエンティストが機械学習 (ML) モデルを対話的に構築、トレーニング、デプロイできるフルマネージド ソリューションを提供します。 Amazon SageMaker ノートブックのジョブ データ サイエンティストは、SageMaker Studio で数回クリックするだけで、オンデマンドまたはスケジュールに従ってノートブックを実行できるようになります。今回のリリースにより、提供される API を使用してノートブックをプログラムでジョブとして実行できるようになります。 AmazonSageMakerパイプラインの ML ワークフロー オーケストレーション機能 アマゾンセージメーカー。さらに、これらの API を使用して、複数の依存ノートブックを含むマルチステップ ML ワークフローを作成できます。

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

データ サイエンティストは現在、SageMaker Studio を使用して Jupyter ノートブックを対話的に開発し、SageMaker ノートブック ジョブを使用してこれらのノートブックをスケジュールされたジョブとして実行します。これらのジョブは、データ ワーカーがコードを Python モジュールとしてリファクタリングする必要がなく、すぐに実行することも、定期的なタイム スケジュールで実行することもできます。これを行うための一般的な使用例には次のようなものがあります。

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

この機能により、データ ワーカーはスタンドアロン ノートブックを簡単に自動化できますが、ML ワークフローは多くの場合、複数のノートブックで構成され、それぞれが複雑な依存関係を持つ特定のタスクを実行します。たとえば、モデル データのドリフトを監視するノートブックには、新しいデータの抽出、変換、ロード (ETL) と処理を可能にする前ステップと、重大なドリフトが見つかった場合に備えたモデルの更新とトレーニングの後ステップが必要です。 。さらに、データ サイエンティストは、このワークフロー全体を定期的なスケジュールでトリガーして、新しいデータに基づいてモデルを更新したい場合があります。ノートブックを簡単に自動化し、このような複雑なワークフローを作成できるようにするために、SageMaker ノートブック ジョブが SageMaker Pipelines のステップとして利用できるようになりました。この投稿では、数行のコードで次のユースケースを解決する方法を示します。

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

ソリューションの概要

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

次のセクションでは、サンプル ML ユースケースを説明し、ノートブック ジョブのワークフローを作成する手順、さまざまなノートブック ステップ間でパラメーターを渡す手順、ワークフローのスケジュール設定方法、および SageMaker Studio を介した監視手順を紹介します。

この例の ML 問題では、テキスト分類タスクの一種である感情分析モデルを構築しています。感情分析の最も一般的な用途には、ソーシャル メディアの監視、顧客サポート管理、顧客フィードバックの分析などがあります。この例で使用されているデータセットは、Stanford Sentiment Treebank (SST2) データセットです。このデータセットは、映画レビューと、そのレビューの肯定的または否定的な感情を示す整数 (0 または 1) で構成されています。

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

列1 列2
0 親機からの新しい分泌物を隠す
0 ウィットはなく、苦労したギャグだけが含まれています
1 登場人物を愛し、人間の本性についてかなり美しいものを伝えます
0 ずっと変わらないことに完全に満足している
0 映画製作者たちが考えた最悪のオタクへの復讐の常套句について
0 それはそのような表面的な扱いに値しないほど悲劇的です
1 パトリオット・ゲームのようなハリウッド大作の監督でも、感情を揺さぶる小規模で個人的な映画を制作できることを証明しています。

この ML の例では、いくつかのタスクを実行する必要があります。

  1. 特徴量エンジニアリングを実行して、モデルが理解できる形式でこのデータセットを準備します。
  2. 特徴量エンジニアリングの後、Transformers を使用するトレーニング ステップを実行します。
  3. 微調整されたモデルを使用してバッチ推論を設定し、受信する新しいレビューに対するセンチメントを予測できるようにします。
  4. データ監視ステップを設定して、モデルの重みの再トレーニングが必要になる可能性のある品質の変動がないか新しいデータを定期的に監視できるようにします。

SageMaker パイプラインのステップとしてノートブック ジョブを開始することで、3 つの異なるステップで構成されるこのワークフローを調整できます。ワークフローの各ステップは異なるノートブックで開発され、その後、独立したノートブック ジョブ ステップに変換され、パイプラインとして接続されます。

  • 前処理 – 公開 SST2 データセットを次からダウンロードします。 Amazon シンプル ストレージ サービス (Amazon S3) を実行し、ステップ 2 でノートブックを実行するための CSV ファイルを作成します。 SST2 データセットは、0 つのラベル (1 と XNUMX) と分類するテキストの列を持つテキスト分類データセットです。
  • トレーニング – 整形された CSV ファイルを取得し、Transformers ライブラリを利用してテキスト分類のために BERT で微調整を実行します。このステップの一部としてテスト データ準備ノートブックを使用します。これは、微調整およびバッチ推論ステップの依存関係です。微調整が完了すると、このノートブックは実行マジックを使用して実行され、微調整されたモデルによるサンプル推論用のテスト データセットが準備されます。
  • 変換と監視 – バッチ推論を実行し、モデル監視を使用してデータ品質を設定して、ベースライン データセットの提案を行います。

ノートブックを実行する

このソリューションのサンプル コードは、次の場所から入手できます。 GitHubの.

SageMaker ノートブック ジョブ ステップの作成は、他の SageMaker Pipeline ステップの作成と似ています。このノートブックの例では、SageMaker Python SDK を使用してワークフローを調整します。 SageMaker Pipelines でノートブック ステップを作成するには、次のパラメータを定義できます。

  • 入力ノート – このノートブック ステップがオーケストレーションするノートブックの名前。ここで、入力ノートブックへのローカル パスを渡すことができます。オプションで、このノートブックに実行中の他のノートブックがある場合は、これらを AdditionalDependencies ノートブック ジョブ ステップのパラメータ。
  • 画像URI – ノートブック ジョブ ステップの背後にある Docker イメージ。これは、SageMaker がすでに提供している事前定義されたイメージ、または定義してプッシュしたカスタム イメージです。 Amazon エラスティック コンテナ レジストリ (アマゾンECR)。サポートされているイメージについては、この投稿の最後にある考慮事項セクションを参照してください。
  • カーネル名 – SageMaker Studio で使用しているカーネルの名前。このカーネル仕様は、提供されたイメージに登録されています。
  • インスタンスタイプ (オプション) - アマゾン エラスティック コンピューティング クラウド 定義して実行するノートブック ジョブの背後にある (Amazon EC2) インスタンス タイプ。
  • パラメータ (オプション) – ノートブックでアクセスできる、渡すことができるパラメーター。これらはキーと値のペアで定義できます。さらに、これらのパラメーターは、さまざまなノートブック ジョブの実行間またはパイプラインの実行間で変更できます。

この例には合計 5 つのノートブックがあります。

  • nb-ジョブ-パイプライン.ipynb – これはパイプラインとワークフローを定義するメインのノートブックです。
  • 前処理.ipynb – このノートブックはワークフローの最初のステップであり、パブリック AWS データセットを取得し、そこから CSV ファイルを作成するコードが含まれています。
  • トレーニング.ipynb – このノートブックはワークフローの 2 番目のステップであり、前のステップから CSV を取得してローカル トレーニングと微調整を行うためのコードが含まれています。このステップには、 prepare-test-set.ipynb ノートブックを使用して、微調整されたモデルによるサンプル推論用のテスト データセットをプルダウンします。
  • 準備-テスト-セット.ipynb – このノートブックは、トレーニング ノートブックが 2 番目のパイプライン ステップで使用し、微調整されたモデルによるサンプル推論に使用するテスト データセットを作成します。
  • 変換モニター.ipynb – このノートブックはワークフローの 3 番目のステップであり、基本 BERT モデルを使用して SageMaker バッチ変換ジョブを実行すると同時に、モデル監視によるデータ品質も設定します。

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

最初のノートブック ジョブ ステップでは、デフォルトの S3 バケットを含むパラメーターを渡します。このバケットを使用して、他のパイプライン ステップで使用できるアーティファクトをダンプできます。最初のノートブックの場合 (preprocess.ipynb)、AWS パブリック SST2 トレーニング データセットをプルダウンし、そこからトレーニング CSV ファイルを作成し、この S3 バケットにプッシュします。次のコードを参照してください。

# Parameters
print(default_s3_bucket)

!aws s3 cp s3://sagemaker-sample-files/datasets/text/SST2/sst2.train sst2.train

# will read just the first 500 lines for quicker execution
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) #create csv file with smaller dataset
!aws s3 cp "train.csv" {default_s3_bucket}

次に、このノートブックを次のように変換できます。 NotebookJobStep メインノートブックに次のコードを追加します。

# provide S3 Bucket to dump artifacts in
nb_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, Trainer
training_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'

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

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) がノートブックの前処理ジョブ ステップ (ステップ 1) に依存することも指定する必要があります。 add_depends_on 次のようなAPI呼び出し:

train_nb_step.add_depends_on([preprocess_nb_step])

最後のステップでは、BERT モデルで SageMaker バッチ変換を実行し、同時に SageMaker モデル モニターを介してデータ キャプチャと品質を設定します。これは組み込みの使用とは異なることに注意してください。 最適化の適用 or キャプチャ パイプライン経由のステップ。このステップのノートブックは同じ API を実行しますが、ノートブック ジョブ ステップとして追跡されます。このステップは、以前に定義したトレーニング ジョブ ステップに依存しているため、depends_on フラグを使用してそれもキャプチャします。

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 pipeline
pipeline = Pipeline(
name=pipeline_name,
steps=[preprocess_nb_step, train_nb_step, batch_monitor_step],
)

# execute pipeline
pipeline.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 の外部でこの機能を使用する場合、タグを使用してノートブック ジョブ ダッシュボードで実行ステータスを追跡できるユーザーを定義できます。含めるタグの詳細については、「 Studio UI ダッシュボードでノートブック ジョブを表示し、出力をダウンロードします.

この例では、結果のノートブック ジョブを というディレクトリに出力します。 outputs ローカルパスにパイプライン実行コードを含めます。次のスクリーンショットに示すように、ここでは入力ノートブックの出力と、そのステップで定義したパラメーターを確認できます。

クリーンアップ

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

考慮事項

この機能に関する重要な考慮事項は次のとおりです。

  • SDKの制約 – ノートブック ジョブ ステップは、SageMaker Python SDK を介してのみ作成できます。
  • 画像の制約 –ノートブックのジョブ ステップは、次のイメージをサポートします。

まとめ

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


著者について

アンチット・グプタ Amazon SageMaker Studio のシニアプロダクトマネージャーです。彼女は、SageMaker Studio IDE 内からインタラクティブなデータ サイエンスとデータ エンジニアリングのワークフローを実現することに重点を置いています。余暇には、料理、ボード/カード ゲーム、読書を楽しんでいます。

ラム・ベギラージュ SageMaker サービスチームの ML アーキテクトです。 彼は、お客様が Amazon SageMaker で AI/ML ソリューションを構築および最適化するのを支援することに重点を置いています。 余暇には、旅行と執筆が大好きです。

エドワードサン アマゾン ウェブ サービスの SageMaker Studio で働くシニア SDE です。 彼は、インタラクティブな ML ソリューションを構築し、カスタマー エクスペリエンスを簡素化して、SageMaker Studio をデータ エンジニアリングおよび ML エコシステムの一般的なテクノロジーと統合することに重点を置いています。 余暇には、エドワードはキャンプ、ハイキング、釣りの大ファンで、家族と過ごす時間を楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習