Amazon SageMaker JumpStart PlatoBlockchainDataIntelligenceを使用したインクリメンタルトレーニング。 垂直検索。 愛。

AmazonSageMakerJumpStartを使用したインクリメンタルトレーニング

12月の2020では、 AWS は、Amazon SageMaker JumpStart の一般提供を発表しました、の機能 アマゾンセージメーカー これにより、機械学習 (ML) をすばやく簡単に開始できます。 SageMaker ジャンプスタート 一般的な ML タスク全体でさまざまな事前トレーニング済みモデルをワンクリックで微調整およびデプロイできるほか、一般的なビジネス上の問題を解決するエンドツーエンド ソリューションを選択できます。 これらの機能により、ML プロセスの各ステップから重労働が取り除かれ、高品質のモデルの開発が容易になり、デプロイまでの時間が短縮されます。

すべてのJumpStartコンテンツは、以前は Amazon SageMakerスタジオこれは ユーザーフレンドリーなグラフィカルインターフェイス 機能を操作します。 最近、私たちも 打ち上げを発表 使いやすい JumpStart API SageMaker Python SDK の拡張機能として、独自のデータセットに JumpStart でサポートされている事前トレーニング済みモデルの膨大な選択肢をプログラムでデプロイし、微調整することができます。 このローンチにより、コード ワークフロー、MLOps パイプライン、および SDK を介して SageMaker と対話しているその他のあらゆる場所で、JumpStart 機能を使用できるようになります。

この投稿では、トレーニング可能なすべての JumpStart モデルがインクリメンタル トレーニングをサポートするようになったことをお知らせします。 インクリメンタル トレーニングを使用すると、以前の微調整の実行では考慮されていない基本的なパターンを含む拡張データセットを使用して、既に微調整したモデルをトレーニングできます。これにより、モデルのパフォーマンスが低下します。 増分トレーニングでは、モデルを最初から再トレーニングする必要がないため、時間とリソースの両方を節約できます。 この投稿で説明する JumpStart API コードに直接ジャンプしたい場合は、 サンプルノート.

JumpStartの概要

JumpStartは、SageMakerでMLをすばやく開始するのに役立つさまざまな機能を含む多面的な製品です。 これを書いている時点では、JumpStartを使用すると次のことができます。

  • 一般的なMLタスク用に事前トレーニング済みモデルを展開する – JumpStart を使用すると、公開されている大規模なデータセットで事前トレーニングされたモデルを簡単にデプロイできるため、開発作業を行うことなく一般的な ML タスクに対処できます。 ML 研究コミュニティは、最近開発されたモデルの大部分を公開して使用できるようにするために多大な努力を払ってきました。 JumpStart は、オブジェクト検出、テキスト分類、テキスト生成など、最も一般的な 300 の ML タスクにまたがる 15 を超えるモデルのコレクションをホストしているため、初心者でも簡単に使用できます。 これらのモデルは、TensorFlow、PyTorch、Hugging Face、MXNet Hub などの一般的なモデル ハブから抽出されています。
  • 事前にトレーニングされたモデルを微調整する – JumpStart を使用すると、独自のトレーニング アルゴリズムを作成する必要なく、事前トレーニング済みのモデルを微調整できます。 ML では、あるドメインで学んだ知識を別のドメインに移す能力を呼びます。 転移学習. 転移学習を使用すると、元のモデルのトレーニングにかかる​​コストよりもはるかに低いトレーニング コストで、小規模なデータセットで正確なモデルを生成できます。 JumpStart には、LightGBM、CatBoost、XGBoost、Scikit-learn に基づく一般的なトレーニング アルゴリズムも含まれており、表形式の回帰と分類のためにゼロからトレーニングできます。
  • 構築済みのソリューションを使用する – JumpStart は、需要予測や産業および金融アプリケーションなどの一般的な ML ユースケース向けの 17 のソリューションのセットを提供し、数回クリックするだけでデプロイできます。 ソリューションは、特定のビジネス ユースケースを解決するためにさまざまな AWS サービスを結び付けるエンドツーエンドの ML アプリケーションです。 彼らは使用します AWS CloudFormation 迅速な展開のためのテンプレートとリファレンスアーキテクチャ。つまり、完全にカスタマイズ可能です。
  • SageMakerアルゴリズムのノートブックの例を使用する – SageMaker は一連の組み込みアルゴリズムを提供し、データ サイエンティストと ML 実践者が ML モデルのトレーニングとデプロイを迅速に開始できるようにします。 JumpStart には、これらのアルゴリズムをすばやく適用するために使用できるサンプル ノートブックが用意されています。
  • トレーニングビデオとブログを確認する – JumpStartは、SageMaker内でさまざまな機能を使用する方法を教える多数のブログ投稿とビデオも提供します。

JumpStartはカスタムVPC設定を受け入れ、 AWSキー管理サービス (AWS KMS)暗号化キー。これにより、エンタープライズ環境内で利用可能なモデルとソリューションを安全に使用できます。 セキュリティ設定は、Studio内またはSageMakerPythonSDKを介してJumpStartに渡すことができます。

画像分類

画像分類とは、トレーニング データセット内のクラス ラベルの XNUMX つに画像を分類することです。 任意の数のクラスに属する画像を含む任意のデータセットにモデルを微調整できます。 JumpStart で微調整に使用できるモデルは、分類レイヤーを対応する特徴抽出モデルにアタッチし、レイヤー パラメーターをランダムな値に初期化します。 分類層の出力次元は、入力データのクラス数に基づいて決定されます。 微調整ステップでは、特徴抽出モデルのパラメーターを固定したまま、分類レイヤーのパラメーターを調整し、微調整されたモデルを返します。 目的は、入力データの予測誤差を最小限に抑えることです。

このデータセットの場合、入力は、クラスの数と同じ数のサブディレクトリを持つディレクトリです。 各サブディレクトリには、そのクラスに属する画像が .jpg 形式で含まれている必要があります。 トレーニング データに XNUMX つのクラスの画像が含まれている場合、入力ディレクトリは次の階層のようになります。 roses & dandelion:

input_directory |--roses |--abc.jpg |--def.jpg |--dandelion |--ghi.jpg |--jkl.jpg

フォルダー、クラス、および .jpg ファイル名の名前は何でもかまいません。

私たちは提供します tf_flowers1 モデルを微調整するためのデフォルト データセットとしてのデータセット。 このデータセットは、XNUMX 種類の花の画像で構成されています。 データセットはからダウンロードされました TensorFlow.

ウォークスルーの概要

次のセクションでは、Studio UI と JumpStart API の両方を使用して、JumpStart で画像分類を実行するための段階的なデモを提供します。

次の手順を実行します。

  1. StudioUIからJumpStartにアクセスします。
    1. 事前にトレーニングされたモデルを微調整します。
    2. 微調整されたモデルをデプロイします。
    3. 微調整されたモデルを段階的にトレーニングし、再デプロイします。
  2. プログラムでSageMakerPythonSDKを使用してJumpStartを使用します。
    1. 事前にトレーニングされたモデルを微調整します。
    2. 微調整されたモデルをデプロイします。
    3. 微調整されたモデルを段階的にトレーニングし、再デプロイします。

StudioUIからJumpStartにアクセスします

このセクションでは、Studio UI を使用して JumpStart モデルを微調整およびデプロイする方法を示します。 さらに、以前に微調整したモデルを段階的にトレーニングする方法を示します。

事前にトレーニングされたモデルを微調整します

次のビデオは、JumpStart で事前トレーニング済みの画像分類モデルを見つけて微調整する方法を示しています。 モデル ページには、モデル、その使用方法、予想されるデータ形式、微調整の詳細に関する貴重な情報が含まれています。

デモンストレーションのために、デフォルトで提供されるデータセットを使用してモデルを微調整します。 tf_flowers さまざまな種類の花で構成されるデータセット。 独自のデータセットの微調整には、(モデル ページで説明されているように) データの正しい形式を取得し、それを にアップロードすることが含まれます。 Amazon シンプル ストレージ サービス (Amazon S3)、およびデータソース構成でその場所を指定します。

デフォルトで設定されているのと同じハイパーパラメータ値 (エポック数、学習率、バッチ サイズ) を使用します。 また、GPU を利用した ml.p3.2xlarge インスタンスを SageMaker トレーニング インスタンスとして使用します。

トレーニング ジョブは Studio コンソールで直接監視でき、完了時に通知されます。

微調整されたモデルを展開する

トレーニングが完了したら、トレーニング ジョブの詳細を保持している同じページから、微調整されたモデルをデプロイできます。 モデルをデプロイするには、別のインスタンス タイプ ml.p2.xlarge を選択します。 推論のレイテンシーを低く抑えるために必要な GPU アクセラレーションを引き続き提供しますが、価格は低くなります。 SageMaker ホスティングインスタンスを設定したら、選択します 配備します。 永続的なエンドポイントが稼働するまで、5〜10分かかる場合があります。

これで、エンドポイントが操作可能になり、推論リクエストに応答する準備が整いました!

推論までの時間を短縮するために、JumpStartは、新しくデプロイされたエンドポイントで推論を実行する方法を示すサンプルノートブックを提供します。 選ぶ ノートブックを開くエンドポイントを使用 スタジオから。

微調整されたモデルを段階的にトレーニングしてデプロイする

微調整が完了したら、モデルをさらにトレーニングしてパフォーマンスを向上させることができます。 このステップは、最初の微調整プロセスと非常によく似ていますが、出発点として既に微調整されたモデルを使用する点が異なります。 新しいデータを使用することもできますが、データセットの形式は同じ (同じクラスのセット) である必要があります。

SageMakerSDKでJumpStartをプログラムで使用する

前のセクションでは、JumpStart UI を使用して、数回クリックするだけでインタラクティブにモデルを微調整、デプロイ、および増分トレーニングする方法を示しました。 また、SageMaker SDK に統合された API を使用して、JumpStart のモデルと簡単な微調整をプログラムで使用することもできます。 ここで、前のプロセスを再現する方法の簡単な例を見ていきます。 このデモのすべての手順は、付属のノートブックで利用できます JumpStartの概要–画像分類.

事前にトレーニングされたモデルを微調整します

選択したモデルを微調整するには、そのモデルの URI と、トレーニング スクリプトの URI、およびトレーニングに使用されるコンテナー イメージを取得する必要があります。 ありがたいことに、これら XNUMX つの入力は、モデル名、バージョンのみに依存します (使用可能なモデルのリストについては、 JumpStart使用可能なモデルテーブル)、およびトレーニングするインスタンスのタイプ。 これは、次のコード スニペットに示されています。

from sagemaker import image_uris, model_uris, script_uris model_id, model_version = "pytorch-ic-mobilenet-v2", "1.0.0"
training_instance_type = "ml.p3.2xlarge" # Retrieve the docker image
train_image_uri = image_uris.retrieve( region=None, framework=None, model_id=model_id, model_version=model_version, image_scope="training", instance_type=training_instance_type,
) # Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training") # Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

を取得します model_id 以前に使用したのと同じモデルに対応します。 識別子の ic は画像分類に対応します。

SageMaker SDK を使用して、独自のカスタム データセットでこの JumpStart モデルを微調整できるようになりました。 同じものを使用しています tf_flowers Amazon S3 でパブリックにホストされているデータセットであり、都合よく感情分析に焦点を当てています。 前のセクションで説明したように、データセットは微調整用に構造化する必要があります。 次のコード例を参照してください。

# URI of your training dataset
training_dataset_s3_path = "s3://jumpstart-cache-prod-us-west-2/training-datasets/tf_flowers/"
training_job_name = name_from_base(f"jumpstart-example-{model_id}-transfer-learning") # Create SageMaker Estimator instance
ic_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location,
) # Launch a SageMaker Training job by passing s3 path of the training data
ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)

選択したモデルに対して、前のセクションで見たものと同じデフォルトのハイパーパラメータを使用して取得します。 sagemaker.hyperparameters.retrieve_default(). 次に、SageMaker estimator をインスタンス化し、.fit メソッドを呼び出してモデルの微調整を開始し、トレーニング データの Amazon S3 URI を渡します。 ご覧のとおり、 entry_point 提供されるスクリプトの名前は transfer_learning.py (他のタスクやモデルでも同じ)、およびに渡される入力データチャネル .fit 名前を付ける必要があります training.

微調整されたモデルのデプロイ

トレーニングが完了すると、微調整されたモデルを展開できます。 そのために必要なのは、推論スクリプトURI(デプロイ後にモデルが推論にどのように使用されるかを決定するコード)と、選択したモデルをホストする適切なモデルサーバーを含む推論コンテナイメージURIだけです。 次のコードを参照してください。

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve( region=None, framework=None, image_scope="inference", model_id=model_id, model_version=model_version, instance_type=inference_instance_type,
)
# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve( model_id=model_id, model_version=model_version, script_scope="inference"
) endpoint_name = name_from_base(f"jumpstart-example-FT-{model_id}-") # Use the estimator from the previous step to deploy to a SageMaker endpoint
finetuned_predictor = ic_estimator.deploy( initial_instance_count=1, instance_type=inference_instance_type, entry_point="inference.py", image_uri=deploy_image_uri, source_dir=deploy_source_uri, endpoint_name=endpoint_name,
)

数分後、モデルがデプロイされ、リアルタイムでモデルから予測を取得できます。

次に、エンドポイントを呼び出して、サンプル画像に存在する花の種類を予測します。 私たちは、 query_endpoint & parse_response 付随するで定義されているヘルパー関数 ノート.

query_response = finetuned_predictor.predict( img, {"ContentType": "application/x-image", "Accept": "application/json;verbose"} )
model_predictions = json.loads(query_response)
predicted_label = model_predictions["predicted_label"]
display( HTML( f'<img src={image_filename} alt={image_filename} align="left" style="width: 250px;"/>' f"<figcaption>Predicted Label: {predicted_label}</figcaption>" )
)

微調整されたモデルを段階的にトレーニングして再デプロイする

新しい画像でさらにトレーニングすることで、微調整されたモデルのパフォーマンスを向上させることができます。 これには新しい画像または古い画像をいくつでも使用できますが、データセットの形式は同じ (同じクラスのセット) のままにする必要があります。 インクリメンタル トレーニング ステップは微調整プロセスと似ていますが、重要な違いがあります。最初の微調整では、事前にトレーニングされたモデルから開始しますが、インクリメンタル トレーニングでは、既存の微調整されたモデルから開始します。 次のコードを参照してください。

last_trained_model_path = f"{s3_output_location}/{last_training_job_name}/output/model.tar.gz"
incremental_s3_output_location = f"s3://{output_bucket}/{incremental_output_prefix}/output"incremental_train_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=last_trained_model_path, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=incremental_s3_output_location, base_job_name=incremental_training_job_name,
) incremental_train_estimator.fit({"training": training_dataset_s3_path}, logs=True)

トレーニングが完了したら、前のセクションで説明したのと同じ手順を使用してモデルをデプロイできます。

まとめ

JumpStartは、SageMakerの機能であり、MLをすばやく開始できます。 JumpStartは、オープンソースの事前トレーニング済みモデルを使用して、画像分類、オブジェクト検出、テキスト分類、文ペア分類、質問応答などの一般的なML問題を解決します。

この記事では、事前トレーニング済みの画像分類モデルを微調整してデプロイする方法を紹介しました。 また、画像分類のために微調整されたモデルを段階的にトレーニングする方法も示しました。 JumpStart を使用すると、このプロセスをコーディングなしで簡単に実行できます。 自分で解決策を試してみて、コメントでそれがどうなるか教えてください. JumpStart の詳細については、AWS re:Invent 2020 ビデオをご覧ください。 AmazonSageMakerJumpStartを使用してMLを数分で始めましょう.

参考文献

  1. TensorFlow チーム、2019

著者について

Amazon SageMaker JumpStart PlatoBlockchainDataIntelligenceを使用したインクリメンタルトレーニング。 垂直検索。 愛。ヴィヴェック・マダン博士 Amazon SageMaker JumpStart チームの応用科学者です。 彼は博士号を取得しました。 イリノイ大学アーバナ シャンペーン校で博士号を取得し、ジョージア工科大学で博士研究員を務めました。 彼は機械学習とアルゴリズム設計の活発な研究者であり、EMNLP、ICLR、COLT、FOCS、および SODA カンファレンスで論文を発表しています。

Amazon SageMaker JumpStart PlatoBlockchainDataIntelligenceを使用したインクリメンタルトレーニング。 垂直検索。 愛。ジョアンモウラ アマゾン ウェブ サービスの AI/ML スペシャリスト ソリューション アーキテクトです。 彼は主に NLP のユース ケースに焦点を当てており、顧客が深層学習モデルのトレーニングと展開を最適化するのを支援しています。 また、ローコード ML ソリューションと ML に特化したハードウェアの積極的な支持者でもあります。

Amazon SageMaker JumpStart PlatoBlockchainDataIntelligenceを使用したインクリメンタルトレーニング。 垂直検索。 愛。アシッシュ・ケタン博士 の上級応用科学者です Amazon SageMaker ジャンプスタート & AmazonSageMakerの組み込みアルゴリズム 機械学習アルゴリズムの開発に役立ちます。 彼は機械学習と統計的推論の活発な研究者であり、NeurIPS、ICML、ICLR、JMLR、ACL、およびEMNLP会議で多くの論文を発表しています。

タイムスタンプ:

より多くの AWS機械学習