翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
モデルをトレーニング、コンパイル、パッケージ化する
このセクションでは、 SageMaker AWS IoT オブジェクトの作成とクライアント化、トレーニング済みの機械学習モデルのダウンロード、Amazon S3 バケットへのモデルのアップロード、 SageMaker Neo によるターゲットデバイス用のモデルのコンパイル、Edge Manager エージェントでデプロイできるようにモデルのパッケージ化を行います。
-
ライブラリをインポートし、クライアントオブジェクトを作成します。
このチュートリアルでは、 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)変数を定義し、作成したロール ARN AWS IoT を文字列として割り当てます。 SageMaker
# 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*
" -
機械学習モデルをトレーニングする。
SageMakerを使用して機械学習モデルをトレーニングする方法の詳細については、「Amazon でモデルをトレーニングする」を参照してください SageMaker。任意で、ローカルでトレーニングしたモデルを Amazon S3 URI バケットに直接アップロードできます。
まだモデルがない場合は、このチュートリアルの次のステップの事前トレーニング済みモデルを使用できます。たとえば、 MobileNet V2 TensorFlow モデルをフレームワークから保存できます。 MobileNet V2 はモバイルアプリケーション向けに最適化された画像分類モデルです。 MobileNet V2 について詳しくは、README を参照してください。MobileNet GitHub
Jupyter ノートブックに以下を入力して、事前トレーニング済みの V2 モデルを保存します。 MobileNet
# 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')
-
-
ファイルを Amazon S3 にアップロードする。
機械学習モデルを作成したら、それをAmazon S3 バケットに保存します。次の例では、 AWS CLI コマンドを使用して、先ほど作成した models というディレクトリにある Amazon S3 バケットにモデルをアップロードします。Jupyter ノートブックに次を入力します。
!aws s3 cp mobilenet-v2.tar.gz s3://{bucket}/models/
-
SageMaker Neo でモデルをコンパイルします。
機械学習モデルを SageMaker Neo でエッジデバイス用にコンパイルします。トレーニング済みモデルを保存した Amazon S3 バケット URI、モデルのトレーニングに使用した機械学習フレームワーク、モデルの入力の形状、ターゲットデバイスを把握している必要があります。
MobileNet V2 モデルの場合は、以下を使用してください。
framework = 'tensorflow' target_device = 'jetson_nano' data_shape = '{"data":[1,3,224,224]}'
SageMaker Neo には、使用するディープラーニングフレームワークに基づいた特定のモデル入力形状とモデル形式が必要です。モデルを保存する方法の詳細については、「 SageMaker Neo はどのような入力データ形状を想定していますか?」を参照してください。Neo がサポートするデバイスおよびフレームワークの詳細については、「サポートされているフレームワーク、デバイス、システム、アーキテクチャ」を参照してください。
CreateCompilationJob
API を使用して Neo SageMaker でコンパイルジョブを作成します。コンパイルジョブの名前、 SageMaker ロール ARN、モデルが保存されている Amazon S3 URI、モデルの入力シェイプ、フレームワークの名前、コンパイルしたモデルを保存する Amazon S3 URI、およびエッジデバイスターゲットを指定します SageMaker 。# 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})
-
コンパイルしたモデルをパッケージ化する。
パッケージングジョブは SageMaker NEO でコンパイルされたモデルを取得し、推論エンジンである Edge Manager エージェントを使用してモデルをデプロイするために必要な変更を加えます。モデルをパッケージ化するには、
create_edge_packaging
API またはコンソールを使用してエッジパッケージ化ジョブを作成します。 SageMakerNeo コンパイルジョブに使用した名前、パッケージ化ジョブの名前、ロール ARN (セットアップセクションを参照してください)、モデルの名前、モデルバージョン、およびパッケージ化ジョブの出力先の Amazon S3 バケット URI を指定する必要があります。Edge Manager のパッケージ化ジョブ名では、大文字と小文字が区別されます。以下は、API を使用してパッケージ化ジョブを作成する方法の例です。
edge_packaging_name='edge-packaging-demo' model_name="sample-model" model_version="1.1"
パッケージ化されたモデルを保存する Amazon S3 URI を定義します。
# 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
に保存されています) を指定します。また、モデルの名前、モデルのバージョン (使用しているモデルバージョンを把握するのに役立ちます)、パッケージ化されたモデルを保存する S3 URI も指定します SageMaker 。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 } )