

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

# モデルのコンパイル
<a name="neo-getting-started-edge-step1"></a>

[前提条件](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html#neo-getting-started-edge-step0)を満たしたら、Amazon SageMaker AI Neo を使ってモデルをコンパイルできます。、コンソール AWS CLI、または [Amazon Web Services SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) を使用してモデルをコンパイルできます。[「Neo を使用してモデルをコンパイルする](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html)」を参照してください。この例では、Boto3 を使ってモデルをコンパイルします。

モデルをコンパイルするには、SageMaker Neo では次の情報が必要です。

1.  **トレーニング済みモデルを保存した Amazon S3 バケットの URI。**

   前提条件に従っていた場合、バケットの名前は変数 `bucket` に保存されています。次のコードスニペットは、 AWS CLIを使ってすべてのバケットを一覧表示する方法を示しています。

   ```
   aws s3 ls
   ```

   例えば、次のようになります。

   ```
   $ aws s3 ls
   2020-11-02 17:08:50 bucket
   ```

1.  **コンパイル済みモデルを保存する Amazon S3 バケットの URI。**

   以下のコードスニペットは、Amazon S3 バケット URI と出力ディレクトリの名前 (`output`) を連結します。

   ```
   s3_output_location = f's3://{bucket}/output'
   ```

1.  **モデルのトレーニングに使った機械学習フレームワーク。**

   モデルのトレーニングに使った機械学習フレームワークを定義します。

   ```
   framework = 'framework-name'
   ```

   例えば、TensorFlow を使ってトレーニングされたモデルをコンパイルする場合は、`tflite` または `tensorflow` を使うことができます。ストレージメモリの使用がより少ない TensorFlow の軽量バージョンを使う場合は、`tflite` を使います。

   ```
   framework = 'tflite'
   ```

   Neo がサポートしているフレームワークの完全なリストについては、「[サポートされているフレームワーク、デバイス、システム、アーキテクチャ](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html)」を参照してください。

1.  **モデルの入力の形状。**

    Neo には、入力テンソルの名前と形状が必要です。名前と形状は、キーバリューペアで渡されます。`value` は入力テンソルの整数次元のリスト、`key` はモデル内の入力テンソルの正確な名前です。

   ```
   data_shape = '{"name": [tensor-shape]}'
   ```

   例:

   ```
   data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
   ```
**注記**  
使ったフレームワークに応じて、モデルが正しくフォーマットされていることを確認します。「[SageMaker Neo が想定する入力データの形状](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs)」を参照してください。このディクショナリのキーは、新しい入力テンソルの名前に変更する必要があります。

1.  **コンパイルの目的であるターゲットデバイスの名前、またはハードウェアプラットフォームの一般的な詳細を入力します。**

   ```
   target_device = 'target-device-name'
   ```

   例えば、Raspberry Pi 3 にデプロイする場合は、以下を使います。

   ```
   target_device = 'rasp3b'
   ```

   サポートされているすべてのエッジデバイスのリストは「[サポートされているフレームワーク、デバイス、システム、アーキテクチャ](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html)」にあります。

 上の手順が完了したので、コンパイルジョブを 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)
```