翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
前提条件を満たしたら、Amazon SageMaker AI Neo を使用してモデルをコンパイルできます。、 コンソール AWS CLI、または Amazon Web Services SDK for Python (Boto3)
モデルをコンパイルするには、SageMaker Neo では次の情報が必要です。
-
トレーニング済みモデルを保存した Amazon S3 バケットの URI。
前提条件に従っていた場合、バケットの名前は変数
bucket
に保存されています。次のコードスニペットは、 AWS CLIを使ってすべてのバケットを一覧表示する方法を示しています。aws s3 ls
以下に例を示します。
$ aws s3 ls 2020-11-02 17:08:50 bucket
-
コンパイル済みモデルを保存する Amazon S3 バケットの URI。
以下のコードスニペットは、Amazon S3 バケット URI と出力ディレクトリの名前 (
output
) を連結します。s3_output_location = f's3://{bucket}/output'
-
モデルのトレーニングに使った機械学習フレームワーク。
モデルのトレーニングに使った機械学習フレームワークを定義します。
framework = 'framework-name'
例えば、TensorFlow を使ってトレーニングされたモデルをコンパイルする場合は、
tflite
またはtensorflow
を使うことができます。ストレージメモリの使用がより少ない TensorFlow の軽量バージョンを使う場合は、tflite
を使います。framework = 'tflite'
Neo がサポートしているフレームワークの完全なリストについては、「サポートされているフレームワーク、デバイス、システム、アーキテクチャ」を参照してください。
-
モデルの入力の形状。
Neo には、入力テンソルの名前と形状が必要です。名前と形状は、キーバリューペアで渡されます。
value
は入力テンソルの整数次元のリスト、key
はモデル内の入力テンソルの正確な名前です。data_shape = '{"name": [tensor-shape]}'
例:
data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
注記
使ったフレームワークに応じて、モデルが正しくフォーマットされていることを確認します。「SageMaker Neo が想定する入力データの形状」を参照してください。このディクショナリのキーは、新しい入力テンソルの名前に変更する必要があります。
-
コンパイルの目的であるターゲットデバイスの名前、またはハードウェアプラットフォームの一般的な詳細を入力します。
target_device =
'target-device-name'
例えば、Raspberry Pi 3 にデプロイする場合は、以下を使います。
target_device = 'rasp3b'
サポートされているすべてのエッジデバイスのリストは「サポートされているフレームワーク、デバイス、システム、アーキテクチャ」にあります。
上の手順が完了したので、コンパイルジョブを Neo に送信できます。
# Create a SageMaker client so you can submit a compilation job
sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION)
# Give your compilation job a name
compilation_job_name = 'getting-started-demo'
print(f'Compilation job for {compilation_job_name} started')
response = sagemaker_client.create_compilation_job(
CompilationJobName=compilation_job_name,
RoleArn=role_arn,
InputConfig={
'S3Uri': s3_input_location,
'DataInputConfig': data_shape,
'Framework': framework.upper()
},
OutputConfig={
'S3OutputLocation': s3_output_location,
'TargetDevice': target_device
},
StoppingCondition={
'MaxRuntimeInSeconds': 900
}
)
# Optional - Poll every 30 sec to check completion status
import time
while True:
response = sagemaker_client.describe_compilation_job(CompilationJobName=compilation_job_name)
if response['CompilationJobStatus'] == 'COMPLETED':
break
elif response['CompilationJobStatus'] == 'FAILED':
raise RuntimeError('Compilation failed')
print('Compiling ...')
time.sleep(30)
print('Done!')
デバッグのために追加情報が必要な場合は、次の print ステートメントを含めてください。
print(response)
コンパイルジョブが正常に完了すると、コンパイルされたモデルは、前に指定した出力 Amazon S3 バケット (s3_output_location
) に保存されます。コンパイル済みモデルをローカルにダウンロードします。
object_path = f'output/{model}-{target_device}.tar.gz'
neo_compiled_model = f'compiled-{model}.tar.gz'
s3_client.download_file(bucket, object_path, neo_compiled_model)