デプロイ用にモデルを準備する - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

デプロイ用にモデルを準備する

このセクションでは、 SageMaker および AWS IoT クライアントオブジェクトを作成し、事前トレーニング済みの機械学習モデルをダウンロードし、モデルを Amazon S3 バケットにアップロードし、 SageMaker Neo を使用してターゲットデバイスのモデルをコンパイルし、Edge Manager エージェントでデプロイできるようにモデルをパッケージ化します。

  1. ライブラリをインポートし、クライアントオブジェクトを作成します。

    このチュートリアルでは AWS SDK for Python (Boto3) 、 を使用して SageMaker、、Amazon S3、および とやり取りするクライアントを作成します AWS IoT。

    次の例に示すように、Boto3 をインポートし、リージョンを指定し、必要なクライアントオブジェクトを初期化します。

    import boto3 import json import time AWS_REGION = 'us-west-2'# Specify your Region bucket = 'bucket-name' sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION) iot_client = boto3.client('iot', region_name=AWS_REGION)

    変数を定義し、 SageMaker および AWS IoT 用にARN作成したロールを文字列として割り当てます。

    # Replace with the role ARN you created for SageMaker sagemaker_role_arn = "arn:aws:iam::<account>:role/*" # Replace with the role ARN you created for AWS IoT. # Note: The name must start with 'SageMaker' iot_role_arn = "arn:aws:iam::<account>:role/SageMaker*"
  2. 機械学習モデルをトレーニングする。

    を使用して機械学習モデルをトレーニングする方法の詳細については、「Amazon で SageMakerモデルをトレーニングする」を参照してください SageMaker。必要に応じて、ローカルでトレーニングされたモデルを Amazon S3 URIバケットに直接アップロードできます。

    まだモデルがない場合は、このチュートリアルの次のステップの事前トレーニング済みモデルを使用できます。例えば、 TensorFlow フレームワークから MobileNet V2 モデルを保存できます。 MobileNet V2 はモバイルアプリケーション用に最適化された画像分類モデルです。 MobileNet V2 の詳細については、「」を参照してくださいMobileNet GitHub README

    Jupyter Notebook に以下を入力して、事前トレーニング済みの MobileNet V2 モデルを保存します。

    # Save the MobileNet V2 model to local storage import tensorflow as tf model = tf.keras.applications.MobileNetV2() model.save(“mobilenet_v2.h5”)
    注記
    • TensorFlow をインストールしていない場合は、 pip install tensorflow=2.4

    • このチュートリアルでは、 TensorFlow バージョン 2.4 以前を使用します。

    モデルは mobilenet_v2.h5 ファイルに保存されます。モデルをパッケージ化する前に、まず SageMaker Neo を使用してモデルをコンパイルする必要があります。お使いの のバージョン TensorFlow (または他の選択したフレームワーク) が SageMaker Neo で現在サポートされているかどうかを確認するサポートされているフレームワーク、デバイス、システム、アーキテクチャには、「」を参照してください。

    SageMaker Neo では、モデルを圧縮TARファイルとして保存する必要があります。圧縮TARファイル (*.tar.gz) として再パッケージ化します。

    # Package MobileNet V2 model into a TAR file import tarfile tarfile_name='mobilenet-v2.tar.gz' with tarfile.open(tarfile_name, mode='w:gz') as archive: archive.add('mobilenet-v2.h5')
  3. ファイルを Amazon S3 にアップロードする。

    機械学習モデルを作成したら、それをAmazon S3 バケットに保存します。次の例では、 AWS CLI コマンドを使用して、モデル と呼ばれるディレクトリで以前に作成した Amazon S3 バケットにモデル をアップロードします。Jupyter ノートブックに次を入力します。

    !aws s3 cp mobilenet-v2.tar.gz s3://{bucket}/models/
  4. SageMaker Neo を使用してモデルをコンパイルします。

    エッジデバイスの SageMaker Neo を使用して機械学習モデルをコンパイルします。トレーニング済みモデルURIを保存した Amazon S3 バケット、モデルのトレーニングに使用した機械学習フレームワーク、モデルの入力の形状、ターゲットデバイスを知る必要があります。

    MobileNet V2 モデルでは、以下を使用します。

    framework = 'tensorflow' target_device = 'jetson_nano' data_shape = '{"data":[1,3,224,224]}'

    SageMaker Neo には、使用する深層学習フレームワークに基づいて、特定のモデル入力形状とモデル形式が必要です。モデルを保存する方法の詳細については、「 SageMaker Neo はどのような入力データ形状を想定していますか?」を参照してください。Neo がサポートするデバイスおよびフレームワークの詳細については、「サポートされているフレームワーク、デバイス、システム、アーキテクチャ」を参照してください。

    CreateCompilationJob API を使用して SageMaker Neo でコンパイルジョブを作成します。コンパイルジョブ、 SageMaker ロール ARN、モデルが保存されURIている Amazon S3、モデルの入力形状、フレームワークの名前、コンパイルされたモデルURI SageMaker を保存する Amazon S3、エッジデバイスターゲットに名前を指定します。

    # Specify the path where your model is stored model_directory = 'models' s3_model_uri = 's3://{}/{}/{}'.format(bucket, model_directory, tarfile_name) # Store compiled model in S3 within the 'compiled-models' directory compilation_output_dir = 'compiled-models' s3_output_location = 's3://{}/{}/'.format(bucket, compilation_output_dir) # Give your compilation job a name compilation_job_name = 'getting-started-demo' sagemaker_client.create_compilation_job(CompilationJobName=compilation_job_name, RoleArn=sagemaker_role_arn, InputConfig={ 'S3Uri': s3_model_uri, 'DataInputConfig': data_shape, 'Framework' : framework.upper()}, OutputConfig={ 'S3OutputLocation': s3_output_location, 'TargetDevice': target_device}, StoppingCondition={'MaxRuntimeInSeconds': 900})
  5. コンパイルしたモデルをパッケージ化する。

    パッケージングジョブは SageMaker Neo コンパイルモデルを取得し、推論エンジンである Edge Manager エージェントを使用してモデルをデプロイするために必要な変更を加えます。モデルをパッケージ化するには、 create_edge_packagingAPIまたは SageMaker コンソールを使用してエッジパッケージングジョブを作成します。

    Neo コンパイルジョブに使用した名前、パッケージングジョブの名前、ロール ARN (セットアップセクションを参照)、モデルの名前、モデルバージョン、パッケージングジョブの出力URI用の Amazon S3 バケットを指定する必要があります。Edge Manager のパッケージ化ジョブ名では、大文字と小文字が区別されます。以下は、 を使用してパッケージングジョブを作成する方法の例ですAPI。

    edge_packaging_name='edge-packaging-demo' model_name="sample-model" model_version="1.1"

    パッケージ化されたモデルURIを保存する Amazon S3 を定義します。

    # Output directory where you want to store the output of the packaging job packaging_output_dir = 'packaged_models' packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir)

    CreateEdgePackagingJob を使用して、Neo でコンパイルされたモデルをパッケージ化します。エッジパッケージ化ジョブの名前と、コンパイルジョブの名前 (この例では、変数 compilation_job_name に保存されています) を指定します。また、モデルの名前、モデルのバージョン (使用しているモデルバージョンを追跡するのに役立ちます)、パッケージ化されたモデルURI SageMaker を保存する S3 も指定します。

    sagemaker_client.create_edge_packaging_job( EdgePackagingJobName=edge_packaging_name, CompilationJobName=compilation_job_name, RoleArn=sagemaker_role_arn, ModelName=model_name, ModelVersion=model_version, OutputConfig={ "S3OutputLocation": packaging_s3_output } )