PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。

PyTorch Model Zoo を使用して Amazon SageMaker モデルを作成する

高品質でトレーニング済みの機械学習 (ML) モデルをデプロイして、バッチまたはリアルタイムの推論を実行することは、顧客に価値をもたらす上で重要です。 ただし、ML の実験プロセスは退屈な場合があります。実装にかなりの時間を必要とする多くのアプローチがあります。 そのため、 PyTorch モデル動物園 とても役に立ちます。 アマゾンセージメーカー さまざまな ML モデルを試すための統一されたインターフェイスを提供し、PyTorch Model Zoo を使用すると、標準化された方法でモデルを簡単に交換できます。

このブログ投稿では、SageMaker 内の PyTorch Model Zoo のオブジェクト検出モデルを使用して ML 推論を実行する方法を示します。 PyTorch Model Zoo の事前トレーニング済み ML モデルは既製で、ML アプリケーションの一部として簡単に使用できます。 これらの ML モデルを SageMaker エンドポイントとして設定するか、 SageMakerバッチ変換 オンラインまたはオフラインの推論のジョブは、このブログ投稿で概説されている手順で簡単に実行できます。 使用します より高速なR-CNN 事前定義されたオブジェクト クラスの境界ボックスを予測するオブジェクト検出モデル。

Faster R-CNN オブジェクト検出モデルの重みの読み込みから、それらを Amazon Simple Storage Service(Amazon S3) バケット、エントリポイント ファイルの作成、および PyTorchModel API の主要なパラメーターの理解について説明します。 最後に、ML モデルをデプロイし、SageMaker Batch Transform を使用して推論を実行し、ML モデルの出力を調べて、結果を解釈する方法を学びます。 このソリューションは、PyTorch Model Zoo の他の事前トレーニング済みモデルに適用できます。 利用可能なモデルのリストについては、 PyTorch Model Zoo のドキュメント.

ソリューションの概要

このブログ投稿では、次の手順について説明します。 すべてのステップの完全な作業バージョンについては、を参照してください。 create_pytorch_model_sagemaker.ipynb

  • ステップ1:セットアップ
  • ステップ 2: PyTorch Model Zoo から ML モデルをロードする
  • ステップ 3 ML モデルのアーティファクトを保存して Amazon S3 にアップロードする
  • ステップ 4: ML モデル推論スクリプトの構築
  • ステップ 5: SageMaker バッチ変換ジョブを起動する
  • ステップ 6: 結果の視覚化

アーキテクチャ図

ディレクトリ構造

このブログのコードは、次の場所にあります。 GitHubリポジトリ. コードベースには、ML モデル アーティファクトの構築、変換ジョブの起動、結果の視覚化に必要なすべてが含まれています。

これが私たちが使用するワークフローです。 以下のすべてのステップは、この構造内のモジュールを参照します。

sagemaker_pytorch_model_zoo --> root directory
    |- inference.py --> entry point file
    |- create_pytorch_model_sagemaker.ipynb --> walks through all steps in this blog post
    |- cars.jpg --> input image

  sagemaker_torch_model_zoo フォルダには inference.py エントリポイント ファイルとして、create_pytorch_model_sagemaker.ipynb を使用してモデルの重みを読み込んで保存し、SageMaker モデル オブジェクトを作成して、最後にそれを SageMaker バッチ変換ジョブに渡します。 独自の ML モデルを導入するには、ノートブックのステップ 1: セットアップ セクションでパスを変更し、ステップ 2: PyTorch Model Zoo から ML モデルをロードするセクションで新しいモデルをロードします。 以下の残りの手順は同じままです。

ステップ1:セットアップ

IAMの役割

SageMaker は、SageMaker によって管理されるインフラストラクチャで操作を実行します。 SageMaker は、ノートブックに付随する SageMaker の IAM 実行ロールで定義されているように許可されたアクションのみを実行できます。 IAM ロールの作成と IAM アクセス許可の管理に関する詳細なドキュメントについては、 AWS SageMaker ロールのドキュメント. 新しいロールを作成するか、 SageMaker (スタジオ) ノートブック次のコード行を実行して、 のデフォルトの実行ロール:

import sagemaker

session = sagemaker.Session()

# Set a default S3 bucket
default_bucket = session.default_bucket()

# Get the region
region = boto3.Session().region_name

# Get the SageMaker Execution Role
role_arn = sagemaker.get_execution_role()

上記のコードは、ノートブック インスタンスの SageMaker 実行ロールを取得します。 これは、SageMaker または SageMaker Studio ノートブック インスタンス用に作成した IAM ロールです。

ユーザーが構成可能なパラメーター

SageMaker バッチ変換ジョブを構築して起動するために必要なすべての設定可能なパラメーターは次のとおりです。

INSTANCE_TYPE= "ml.m5.xlarge"
INSTANCE_COUNT= 1
BUCKET = os.path.join("s3://", default_bucket)

DATA_PATH= os.path.join(BUCKET, "images")
IMAGE_NAME = "cars.jpg"
RANDOM_STRING_LENGTH= 16
MODEL_NAME= "FasterRCNNResnet50"

# Needs to be set to version 1.2 or higher to enable automatic PyTorch model repackaging
FRAMEWORK_VERSION= "1.2"
ENTRY_POINT_FILE_NAME= "inference.py"

SAGEMAKER_EXECUTION_ROLE_ARN= role_arn
MODEL_ARTIFACTS_FILE_NAME= os.path.join(BUCKET, "modelzoo/fasterrcnn_resnet50_fpn/model.tar.gz")
IMAGE_URI= sagemaker.image_uris.retrieve(framework="pytorch",
region=region,
version="1.9.1",
py_version="py38",
image_scope='inference',
instance_type=INSTANCE_TYPE)

ステップ 2: PyTorch Model Zoo から ML モデルをロードする

次に、PyTorch Model Zoo からオブジェクト検出モデルを指定し、その ML モデルの重みを保存します。 通常、.pt または .pth ファイル拡張子を使用して PyTorch モデルを保存します。 以下のコード スニペットは、事前トレーニング済みの Faster R-CNN ResNet50 ML モデルを PyTorch Model Zoo からダウンロードします。

モデル = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)

SageMaker バッチ変換では、入力としていくつかのモデルの重みが必要になるため、事前トレーニング済みの ML モデルを model.pt として保存します。 カスタム モデルをロードしたい場合は、代わりに別の PyTorch モデルからモデルの重みを model.pt として保存できます。

H = 1080
W = 1920
scripted_fn = torch.jit.script(model, torch.randn(1, 3, H, W))
scripted_fn.save("model.pt")

ステップ 3: ML モデルのアーティファクトを保存して Amazon S3 にアップロードする

ML 推論に SageMaker を使用するため、モデルの重みを S3 バケットにアップロードする必要があります。 これは、次のコマンドを使用するか、ファイルをダウンロードして S3 に直接ドラッグ アンド ドロップするだけで実行できます。 次のコマンドは、最初にファイルのグループを圧縮します model.pt tarball にコピーし、モデルの重みをローカル マシンから S3 バケットにコピーします。

Note: 次のコマンドを実行するには、 AWSコマンドラインインターフェイス(AWS CLI) インストールされています。

tar -czvf model.tar.gz model.pt
aws s3 cp model.tar.gz $MODEL_ARTIFACTS_FILE_NAME

次に、入力画像を S3 にコピーします。 以下は、イメージの完全な S3 パスです。

car_image_path = os.path.join(DATA_PATH, IMAGE_NAME)

別の aws s3 cp コマンドを使用して、このイメージを S3 にコピーできます。

aws s3 cp cars.jpg $car_image_path

ステップ 4: ML モデル推論スクリプトの構築

次に、エントリポイント ファイルについて説明します。 inference.py モジュール。 PyTorchModel クラスを使用して、SageMaker の外部でトレーニングされた PyTorch モデルをデプロイできます。 まず、PyTorchModelZoo オブジェクトをインスタンス化します。 次に、inference.py エントリポイント ファイルを作成して、Amazon S3 でホストされているサンプル データに対して SageMaker バッチ変換を使用して ML 推論を実行します。

PyTorchModel オブジェクトを理解する

  PyTorchモデル SageMaker Python API 内のクラスを使用すると、ダウンロードしたモデル アーティファクトを使用して ML 推論を実行できます。

PyTorchModel クラスを開始するには、次の入力パラメーターを理解する必要があります。

  • name: モデル名; 一意にするために、モデル名 + 日時、またはランダムな文字列 + 日時のいずれかを使用することをお勧めします。
  • model_data: パッケージ化された ML モデル アーティファクトの S3 URI。
  • entry_point: 着信要求のハンドラーを定義するために推論 Docker イメージによって使用されるユーザー定義の Python ファイル。 このコードは、モデルの読み込み、入力前処理、予測ロジック、および出力後処理を定義します。
  • framework_version: 自動 PyTorch モデルの再パッケージ化を有効にするには、バージョン 1.2 以降に設定する必要があります。
  • source_dir: entry_point ファイルのディレクトリ。
  • role: AWS サービス リクエストを行うための IAM ロール。
  • image_uri: この Amazon ECR Docker コンテナ イメージを ML モデル コンピューティング環境のベースとして使用します。
  • sagemaker_session: SageMaker セッション。
  • py_version: 使用する Python のバージョン

次のコード スニペットは、PyTorchModel クラスをインスタンス化し、事前トレーニング済みの PyTorch モデルを使用して推論を実行します。

model = PyTorchModel(
               name=RANDOM_STRING,
               model_data=MODEL_ARTIFACTS_FILE_NAME,
               entry_point=ENTRY_POINT_FILE_NAME,
               framework_version=FRAMEWORK_VERSION,
               role=SAGEMAKER_EXECUTION_ROLE_ARN,
               sagemaker_session=sagemaker_session,
               image_uri=IMAGE_URI,
        )

エントリポイント ファイル (inference.py) について

entry_point パラメーターは、次の名前の Python ファイルを指します。 inference.py. このエントリポイントは、モデルの読み込み、入力前処理、予測ロジック、および出力後処理を定義します。 ビルド済みの PyTorch でコードを提供する ML モデルを補足します SageMaker 深層学習コンテナ 画像。

Inference.py 以下の機能が含まれます。 この例では、 model_fn, input_fn, predict_fn および output_fn オーバーライドする関数 デフォルトの PyTorch 推論ハンドラー.

  1. model_fn: 推論イメージ内の静的モデル チェックポイントを含むディレクトリを取り込みます。 指定されたパスからモデルを開いてロードし、PyTorch モデルを返します。
  2. input_fn: 受信リクエストのペイロード (request_body) と受信リクエストのコンテンツ タイプ (request_content_type) を入力として受け取ります。 データのデコードを処理します。 この関数は、モデルが期待する入力に合わせて調整する必要があります。
  3. predict_fn: input_fn で逆シリアル化されたデータでモデルを呼び出します。 読み込まれた ML モデルを使用して、逆シリアル化されたオブジェクトに対して予測を実行します。
  4. output_fn: 予測結果を目的の応答コンテンツ タイプにシリアル化します。 predict_fn 関数から取得した予測を JSON、CSV、または NPY 形式に変換します。

ステップ 5: SageMaker バッチ変換ジョブを起動する

この例では、SageMaker バッチ変換ジョブを通じて ML 推論結果を取得します。 バッチ変換ジョブは、永続的なエンドポイントを必要とせずに、データセットから推論を一度取得したい場合に最も役立ちます。 インスタンス化します sagemaker.transformer.Transformer SageMaker バッチ変換ジョブを作成および操作するためのオブジェクト。

transformer = model.transformer(instance_type=INSTANCE_TYPE, 
                                instance_count=INSTANCE_COUNT
                                )
transformer.transform(data=DATA_PATH,
                      data_type="S3Prefix",
                      content_type="application/x-image",
                      wait=True
                      )

バッチ変換ジョブの作成に関するドキュメントを参照してください。 変換ジョブの作成.

ステップ 6: テストルトの視覚化

SageMaker バッチ変換ジョブが完了すると、Amazon S3 から ML 推論出力をロードできます。 このためには、 AWSマネジメントコンソール Amazon SageMaker を検索します。 左パネルの下 推論を参照してください バッチ変換ジョブ.

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。

選択後 バッチ変換、すべての SageMaker バッチ変換ジョブを一覧表示する Web ページを参照してください。 最新のジョブ実行の進行状況を表示できます。

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。

まず、ジョブのステータスは「InProgress」になります。 完了すると、ステータスが Completed に変わります。

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。

ステータスが完了としてマークされたら、ジョブをクリックして結果を表示できます。 この Web ページには、実行したばかりのジョブの構成を含むジョブの概要が含まれています。

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。

出力データ構成、S3 出力パスが表示されます。 ここに、ML 推論の出力があります。

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。

S3 出力パスを選択し、[image_name].[file_type].out ファイルと出力データを確認します。 出力ファイルには、マッピングのリストが含まれます。 出力例:

[
  {
    "boxes": [
      [
        214.32322692871094,
        192.18418884277344,
        830.3932495117188,
        521.6996459960938
      ],
      [
        235.6244354248047,
        301.3315734863281,
        253.6448516845703,
        312.3525695800781
      ],
      [
        183.92031860351562,
        291.7759704589844,
        207.28196716308594,
        312.1448669433594
      ],
    ],
    "labels": [
      3,
      3,
      9,
    ],
    "scores": [
      0.8823906183242798,
      0.7710548639297485,
      0.4969744384288788,
    ]
  }
]

これらの予測を視覚化するために、まずトランスフォーマー オブジェクトから出力パスを読み取ります。

def get_output_from_s3(s3uri, file_name):
    parsed_url = urlparse(s3uri)
    bucket_name = parsed_url.netloc
    prefix = parsed_url.path[1:]
    s3 = boto3.resource('s3')
    obj = s3.Object(bucket_name, '{}/{}'.format(prefix, file_name))
    return obj.get()["Body"].read().decode('utf-8')
    
# Output path from Batch Transform job
output_path = transformer.output_path

# Get the output file from S3
predictions = get_output_from_s3(output_path, "car.jpg.out")

次に、この出力ファイルを処理し、予測を視覚化します。 以下に、信頼度のしきい値を指定します。 からクラスのリストを取得します COCO データセット オブジェクト マッピング。 推論中、モデルは入力テンソルのみを必要とし、後処理された予測を List[Dict[Tensor]] として入力画像ごとに XNUMX つずつ返します。 Dict のフィールドは次のとおりです。ここで、N は検出数です。

  1. ボックス (FloatTensor[N, 4]): 予測されたボックス [x1, y1, x2, y2] フォーマット、 0 <= x1 < x2 <= W and 0 <= y1 < y2 <= Hここで、 W は画像の幅、 H 画像の高さです
  2. ラベル(Int64Tensor[N]): 各検出の予測ラベル
  3. スコア (Tensor[N]): 各検出の予測スコア

出力の詳細については、 PyTorch Faster R-CNN FPN ドキュメンテーション.

モデル出力には、それぞれの信頼スコアを持つ境界ボックスが含まれています。 モデルが信頼できない境界ボックスを削除することで、誤検知の表示を最適化できます。 次のコード スニペットは、出力ファイル内の予測を処理し、スコアが信頼しきい値を超えている予測に境界ボックスを描画します。 確率のしきい値を設定します。 CONF_THRESH、この例では .75 です。

def procress_batch_transform_output(predictions):
    predictions = eval(predictions)
    for pred in predictions[1:]:
        pred = pred[0]
        boxes = np.array(pred["boxes"])
        labels = np.array(pred["labels"])
        scores = np.array(pred["scores"])

        scores_idx = scores >= CONF_THRESH
        boxes_meet = boxes[scores_idx, :]
        labels_meet = labels[scores_idx]
        scores_meet = scores[scores_idx]

        labels_str = [CLASSES[i] for i in labels_meet]
        
        # Return a tuple containing labels, label index, score, and bounding box
        processed_predictions =  list(zip(labels_str, labels_meet, scores_meet, boxes_meet))
        return processed_predictions
    
    
def visualize_batch_transform_output(input_image, processed_predictions):
    # read input image from computer
    img = read_image(input_image)
    for label, label_index, score, box in processed_predictions:
        label = label + ", score: " + str(round(score, 2))
        # draw bounding box and fill color
        box = torch.tensor(box)
        box = box.unsqueeze(0)
        img = draw_bounding_boxes(img, box, width=5,labels=[label], font_size=16)

    # transform this image to PIL image
    img = torchvision.transforms.ToPILImage()(img)

    # display output
    img.show()

# Process the predictions in the output file
processed_predictions = procress_batch_transform_output(predictions)
visualize_batch_transform_output("car.jpg", processed_predictions)

最後に、これらのマッピングを視覚化して、出力を理解します。

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。

Note: 画像がノートブックに表示されない場合は、JupyterLab の左側にあるディレクトリ ツリーで画像を見つけて、そこから開いてください。

サンプルコードの実行

完全に機能する例については、 amazon-sagemaker-examples GitHub でセルを実行します create_pytorch_model_sagemaker.ipynb ノート。

まとめ

このブログ投稿では、SageMaker バッチ変換を使用して PyTorch Model Zoo のオブジェクト検出モデルを使用して ML 推論を実行するエンドツーエンドの例を紹介しました。 Faster R-CNN オブジェクト検出モデルの重みの読み込み、S3 バケットへの保存、エントリポイント ファイルの作成、および PyTorchModel API の主要なパラメーターの理解について説明しました。 最後に、モデルをデプロイして ML モデルの推論を実行し、モデルの出力を視覚化し、結果を解釈する方法を学びました。


著者について

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。ディピカ・クラール の ML エンジニアです。 Amazon MLソリューションラボ. 彼女は、顧客が ML ソリューションを統合してビジネス上の問題を解決するのを支援しています。 最近では、メディア顧客向けのトレーニングと推論のパイプライン、およびマーケティング向けの予測モデルを構築しました。

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。マルセロ・アバーレ AWS AI 組織の ML エンジニアです。 彼は、 Amazon MLソリューションラボ、スケーラブルな ML システムの設計と実装を支援します。 彼の使命は、エンタープライズ ML ジャーニーで顧客を導き、本番環境への ML パスを加速することです。

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。ニナド・クルカルニ 応用科学者です Amazon MLソリューションラボ. 彼は、ビジネス上の問題に対処するソリューションを構築することで、顧客が ML と AI を採用するのを支援しています。 最近では、スポーツ、自動車、メディアの顧客向けの予測モデルを構築しています。

PyTorch Model Zoo PlatoBlockchain Data Intelligence を使用して Amazon SageMaker モデルを作成します。垂直検索。あい。ヤシュシャー の科学マネージャーです。 Amazon ML ソリューション ラボ。 彼と彼の応用科学者と ML エンジニアのチームは、ヘルスケア、スポーツ、自動車、製造など、さまざまな ML ユースケースに取り組んでいます。

タイムスタンプ:

より多くの AWS機械学習