

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

# エッジデバイス
<a name="neo-edge-devices"></a>

Amazon SageMaker Neo は、一般的な機械学習フレームワークのためのコンパイルをサポートしています。Raspberry Pi 3、Texas Instruments の Sitara、Jetson TX1 など、Neo コンパイル済みのエッジデバイスをデプロイできます。サポートされているフレームワークとエッジデバイスの完全なリストについては、「[サポートされているフレームワーク、デバイス、システム、アーキテクチャ](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html)」を参照してください。

エッジデバイスが AWS サービスを使えるように設定する必要があります。これを行う方法の 1 つは、DLR と Boto3 をデバイスにインストールすることです。そのためには、認証情報を設定する必要があります。詳細については、「[Boto3 の AWS 設定](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration)」を参照してください。モデルをコンパイルし、エッジデバイスを設定すると、Amazon S3 からエッジデバイスにモデルをダウンロードできます。そこから、[Deep Learning Runtime (DLR)](https://neo-ai-dlr.readthedocs.io/en/latest/index.html) を使って、コンパイルされたモデルを読み取り、推論を実行できます。

初めてのユーザーには、「[ご利用開始にあたって](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html)」のガイドを参照することをお勧めします。このガイドでは、認証情報の設定、モデルのコンパイル、Raspberry Pi 3 へのモデルのデプロイ、イメージで推論を行う方法を実際的に説明しています。

**Topics**
+ [サポートされているフレームワーク、デバイス、システム、アーキテクチャ](neo-supported-devices-edge.md)
+ [モデルをデプロイ](neo-deployment-edge.md)
+ [エッジデバイスに Neo をセットアップする](neo-getting-started-edge.md)

# サポートされているフレームワーク、デバイス、システム、アーキテクチャ
<a name="neo-supported-devices-edge"></a>

Amazon SageMaker Neo は、一般的な機械学習フレームワーク、エッジデバイス、オペレーティングシステム、チップアーキテクチャをサポートしています。以下のトピックのいずれかを選択すると、Neo がお使いのフレームワーク、エッジデバイス、OS、チップアーキテクチャをサポートしているかどうか調べられます。

Amazon SageMaker Neo チームによってテストされたモデルのリストが「[テスト済みモデル](neo-supported-edge-tested-models.md)」セクションにあります。

**注記**  
Ambarella のデバイスでは、コンパイルに送る前に、まず圧縮される tar ファイルの中に追加のファイルを含める必要があります。詳細については、「[Ambarella エラーをトラブルシューティングする](neo-troubleshooting-target-devices-ambarella.md)」を参照してください。
i.mx 8M PlusにはTIM-VX (libtim-vx.so) が必要です。TIM-VX を構築する方法については、[TIM-VX の GitHub リポジトリ](https://github.com/VeriSilicon/TIM-VX)を参照してください。

**Topics**
+ [サポートされるフレームワーク](neo-supported-devices-edge-frameworks.md)
+ [サポートされているデバイス、チップアーキテクチャ、システム](neo-supported-devices-edge-devices.md)
+ [テスト済みモデル](neo-supported-edge-tested-models.md)

# サポートされるフレームワーク
<a name="neo-supported-devices-edge-frameworks"></a>

Amazon SageMaker Neo は以下のフレームワークをサポートしています。


| フレームワーク | フレームワークのバージョン | モデルのバージョン | モデル | モデル形式 (\$1.tar.gz 内にパッケージ) | ツールキット | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.8 | 1.8 以前をサポート | イメージ分類、オブジェクト検出、セマンティックセグメンテーション、姿勢推定、行動認識 | シンボルファイル (.json) を 1 つ、パラメータファイル (.params) を 1 つ | GluonCV v0.8.0 | 
| ONNX | 1.7 | 1.7 以前をサポート | イメージ分類、SVM | モデルファイル (.onnx) を 1 つ |  | 
| Keras | 2.2 | 2.2 以前をサポート | イメージ分類 | モデル定義ファイル (.h5) を 1 つ |  | 
| PyTorch | 1.7、1.8 | 1.7、1.8 以前をサポート | イメージ分類、オブジェクト検出 | モデル定義ファイル (.pth) を 1 つ |  | 
| TensorFlow | 1.15、2.4、2.5 (ml.inf1.\$1 インスタンスのみ) | 1.15、2.4、2.5 (ml.inf1.\$1 インスタンスのみ) 以前をサポート | イメージ分類、オブジェクト検出 | \$1 Saved モデルの場合は、.pb ファイルを 1 つまたは .pbtxt ファイルを 1 つ、および変数を含む変数ディレクトリ。\$1 Frozen モデルの場合は、.pb または .pbtxt ファイルのいずれか 1 つのみ。 |  | 
| TensorFlow Lite | 1.15 | 1.15 以前をサポート | イメージ分類、オブジェクト検出 | モデル定義の FlatBuffers ファイル (.tflite) を 1 つ |  | 
| XGBoost | 1.3 | 1.3 以前をサポート | 決定木 | ノード数が 2^31 個未満のツリーの XGBoost モデルファイル (.model) を 1 つ |  | 
| DarkNet |  |  | 画像分類、オブジェクト検出 (Yolo モデルはサポートされていません) | 設定 (.cfg) ファイルを 1 つと重み (.weights) ファイルを 1 つ |  | 

# サポートされているデバイス、チップアーキテクチャ、システム
<a name="neo-supported-devices-edge-devices"></a>

Amazon SageMaker Neo は以下のデバイス、チップアーキテクチャ、オペレーティングシステムをサポートしています。

## デバイス
<a name="neo-supported-edge-devices"></a>

[Amazon SageMaker AI コンソール](https://console.aws.amazon.com/sagemaker)のドロップダウンリストを使うか、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html) API の出力設定で `TargetDevice` を指定することで、デバイスを選択できます。

次のいずれかのエッジデバイスを選択できます。


| デバイスリスト | システムオンチップ (SoC) | オペレーティングシステム | アーキテクチャ | アクセラレーター | コンパイラオプションの例 | 
| --- | --- | --- | --- | --- | --- | 
| aisage | [なし] | リナックス | ARM64 | Mali | [なし] | 
| amba\$1cv2 | CV2 | Arch Linux | ARM64 | cvflow | [なし] | 
| amba\$1cv22 | CV22 | Arch Linux | ARM64 | cvflow | [なし] | 
| amba\$1cv25 | CV25 | Arch Linux | ARM64 | cvflow | [なし] | 
| coreml | [なし] | iOS、macOS | [なし] | [なし] | \$1"class\$1labels": "imagenet\$1labels\$11000.txt"\$1 | 
| imx8qm | NXP imx8 | リナックス | ARM64 | [なし] | [なし] | 
| imx8mplus | i.MX 8M Plus | リナックス | ARM64 | NPU | [なし] | 
| jacinto\$1tda4vm | TDA4VM | リナックス | ARM | TDA4VM | [なし] | 
| jetson\$1nano | [なし] | リナックス | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '5.0.6', 'cuda-ver': '10.0'\$1`TensorFlow2`、`{'JETPACK_VERSION': '4.6', 'gpu_code': 'sm_72'}` の場合 | 
| jetson\$1tx1 | [なし] | リナックス | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1tx2 | [なし] | リナックス | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$162', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1xavier | [なし] | リナックス | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$172', 'trt-ver': '5.1.6', 'cuda-ver': '10.0'\$1 | 
| qcs605 | [なし] | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| qcs603 | [なし] | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| rasp3b | ARM A56 | リナックス | ARM\$1EABIHF | [なし] | \$1'mattr': ['\$1neon']\$1 | 
| rasp4b | ARM A72 | [なし] | [なし] | [なし] | [なし] | 
| rk3288 | [なし] | リナックス | ARM\$1EABIHF | Mali | [なし] | 
| rk3399 | [なし] | リナックス | ARM64 | Mali | [なし] | 
| sbe\$1c | [なし] | リナックス | x86\$164 | [なし] | \$1'mcpu': 'core-avx2'\$1 | 
| sitara\$1am57x | AM57X | リナックス | ARM64 | EVE と C66x DSP の両方またはどちらか | [なし] | 
| x86\$1win32 | [なし] | Windows 10 | X86\$132 | [なし] | [なし] | 
| x86\$1win64 | [なし] | Windows 10 | X86\$132 | [なし] | [なし] | 

各ターゲットデバイスの JSON キーバリューのコンパイラオプションについては、[`OutputConfig` API](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html) のデータ型の [`CompilerOptions`] フィールドを参照してください。

## システムとチップアーキテクチャ
<a name="neo-supported-edge-granular"></a>

次の表を参照すると、Neo のモデルコンパイルジョブで使えるオペレーティングシステムとアーキテクチャに関する情報を得られます。

------
#### [ Linux ]


| アクセラレーター | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| アクセラレーターなし (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) あり | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) あり | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) あり | 
| NVIDIA GPU | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) あり | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) あり | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) あり | 

------
#### [ Android ]


| アクセラレーター | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| アクセラレーターなし (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) あり | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) あり | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | 
| NVIDIA GPU | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | 

------
#### [ Windows ]


| アクセラレーター | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| アクセラレーターなし (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/success_icon.svg) はい | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | ![\[alt text not found\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/negative_icon.svg) いいえ | 

------

# テスト済みモデル
<a name="neo-supported-edge-tested-models"></a>

次の折りたたみ可能なセクションでは、Amazon SageMaker Neo チームでテスト済みの機械学習モデルの情報を提供します。お使いのフレームワークに応じて折りたたみ可能なセクションを展開して、モデルがテスト済みかどうか確認してください。

**注記**  
これは、Neo でコンパイルできるモデルを包括的にリストしたものではありません。

お使いのモデルを SageMaker AI Neo でコンパイルできるかどうかについては、「[サポートされるフレームワーク](neo-supported-devices-edge-frameworks.md)」と「[SageMaker AI Neo Supported Operators](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/)」を参照してください。

## DarkNet
<a name="collapsible-section-01"></a>


| モデル | ARM V8 | ARM Mali | Ambarella CV22 | NVIDIA | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Alexnet |  |  |  |  |  |  |  |  |  | 
| ResNet50 | X | X |  | X | X | X |  | X | X | 
| YOLOv2 |  |  |  | X | X | X |  | X | X | 
| YOLOv2\$1tiny | X | X |  | X | X | X |  | X | X | 
| YOLOv3\$1416 |  |  |  | X | X | X |  | X | X | 
| YOLOv3\$1tiny | X | X |  | X | X | X |  | X | X | 

## MXNet
<a name="collapsible-section-02"></a>


| モデル | ARM V8 | ARM Mali | Ambarella CV22 | NVIDIA | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Alexnet |  |  | X |  |  |  |  |  |  | 
| Densenet121 |  |  | X |  |  |  |  |  |  | 
| DenseNet201 | X | X | X | X | X | X |  | X | X | 
| GoogLeNet | X | X |  | X | X | X |  | X | X | 
| InceptionV3 |  |  |  | X | X | X |  | X | X | 
| MobileNet0.75 | X | X |  | X | X | X |  |  | X | 
| MobileNet1.0 | X | X | X | X | X | X |  |  | X | 
| MobileNetV2\$10.5 | X | X |  | X | X | X |  |  | X | 
| MobileNetV2\$11.0 | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Large | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Small | X | X | X | X | X | X | X | X | X | 
| ResNeSt50 |  |  |  | X | X |  |  | X | X | 
| ResNet18\$1v1 | X | X | X | X | X | X |  |  | X | 
| ResNet18\$1v2 | X | X |  | X | X | X |  |  | X | 
| ResNet50\$1v1 | X | X | X | X | X | X |  | X | X | 
| ResNet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| ResNext101\$132x4d |  |  |  |  |  |  |  |  |  | 
| ResNext50\$132x4d | X |  | X | X | X |  |  | X | X | 
| SENet\$1154 |  |  |  | X | X | X |  | X | X | 
| SE\$1ResNext50\$132x4d | X | X |  | X | X | X |  | X | X | 
| SqueezeNet1.0 | X | X | X | X | X | X |  |  | X | 
| SqueezeNet1.1 | X | X | X | X | X | X |  | X | X | 
| VGG11 | X | X | X | X | X |  |  | X | X | 
| Xception | X | X | X | X | X | X |  | X | X | 
| darknet53 | X | X |  | X | X | X |  | X | X | 
| resnet18\$1v1b\$10.89 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.11 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.86 | X | X | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1coco | X |  | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1voc | X |  | X | X | X | X |  | X | X | 
| ssd\$1resnet50\$1v1 | X |  | X | X | X |  |  | X | X | 
| yolo3\$1darknet53\$1coco | X |  |  | X | X |  |  | X | X | 
| yolo3\$1mobilenet1.0\$1coco | X | X |  | X | X | X |  | X | X | 
| deeplab\$1resnet50 |  |  | X |  |  |  |  |  |  | 

## Keras
<a name="collapsible-section-03"></a>


| モデル | ARM V8 | ARM Mali | Ambarella CV22 | NVIDIA | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet121 | X | X | X | X | X | X |  | X | X | 
| densenet201 | X | X | X | X | X | X |  |  | X | 
| inception\$1v3 | X | X |  | X | X | X |  | X | X | 
| mobilenet\$1v1 | X | X | X | X | X | X |  | X | X | 
| mobilenet\$1v2 | X | X | X | X | X | X |  | X | X | 
| resnet152\$1v1 |  |  |  | X | X |  |  |  | X | 
| resnet152\$1v2 |  |  |  | X | X |  |  |  | X | 
| resnet50\$1v1 | X | X | X | X | X |  |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| vgg16 |  |  | X | X | X |  |  | X | X | 

## ONNX
<a name="collapsible-section-04"></a>


| モデル | ARM V8 | ARM Mali | Ambarella CV22 | NVIDIA | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| alexnet |  |  | X |  |  |  |  |  |  | 
| mobilenetv2-1.0 | X | X | X | X | X | X |  | X | X | 
| resnet18v1 | X |  |  | X | X |  |  |  | X | 
| resnet18v2 | X |  |  | X | X |  |  |  | X | 
| resnet50v1 | X |  | X | X | X |  |  | X | X | 
| resnet50v2 | X |  | X | X | X |  |  | X | X | 
| resnet152v1 |  |  |  | X | X | X |  |  | X | 
| resnet152v2 |  |  |  | X | X | X |  |  | X | 
| squeezenet1.1 | X |  | X | X | X | X |  | X | X | 
| vgg19 |  |  | X |  |  |  |  |  | X | 

## PyTorch (FP32)
<a name="collapsible-section-05"></a>


| モデル | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | NVIDIA | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet121 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 |  | X |  |  | X | X | X |  | X | X | 
| resnet152 |  |  |  |  | X | X | X |  |  | X | 
| resnet18 | X | X |  |  | X | X | X |  |  | X | 
| resnet50 | X | X | X | X | X | X |  |  | X | X | 
| squeezenet1.0 | X | X |  |  | X | X | X |  |  | X | 
| squeezenet1.1 | X | X | X | X | X | X | X |  | X | X | 
| yolov4 |  |  |  |  | X | X |  |  |  |  | 
| yolov5 |  |  |  | X | X | X |  |  |  |  | 
| fasterrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 
| maskrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 

## TensorFlow
<a name="collapsible-section-06"></a>

------
#### [ TensorFlow ]


| モデル | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | NVIDIA | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet201 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet100\$1v1 | X | X | X |  | X | X | X |  |  | X | 
| mobilenet100\$1v2.0 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet130\$1v2 | X | X |  |  | X | X | X |  |  | X | 
| mobilenet140\$1v2 | X | X | X |  | X | X | X |  | X | X | 
| resnet50\$1v1.5 | X | X |  |  | X | X | X |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X | X |  | X | X | 
| squeezenet | X | X | X | X | X | X | X |  | X | X | 
| mask\$1rcnn\$1inception\$1resnet\$1v2 |  |  |  |  | X |  |  |  |  |  | 
| ssd\$1mobilenet\$1v2 |  |  |  |  | X | X |  |  |  |  | 
| faster\$1rcnn\$1resnet50\$1lowproposals |  |  |  |  | X |  |  |  |  |  | 
| rfcn\$1resnet101 |  |  |  |  | X |  |  |  |  |  | 

------
#### [ TensorFlow.Keras ]


| モデル | ARM V8 | ARM Mali | Ambarella CV22 | NVIDIA | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| DenseNet121  | X | X |  | X | X | X |  | X | X | 
| DenseNet201 | X | X |  | X | X | X |  |  | X | 
| InceptionV3 | X | X |  | X | X | X |  | X | X | 
| MobileNet | X | X |  | X | X | X |  | X | X | 
| MobileNetv2 | X | X |  | X | X | X |  | X | X | 
| NASNetLarge |  |  |  | X | X |  |  | X | X | 
| NASNetMobile | X | X |  | X | X | X |  | X | X | 
| ResNet101 |  |  |  | X | X | X |  |  | X | 
| ResNet101V2 |  |  |  | X | X | X |  |  | X | 
| ResNet152 |  |  |  | X | X |  |  |  | X | 
| ResNet152v2 |  |  |  | X | X |  |  |  | X | 
| ResNet50 | X | X |  | X | X |  |  | X | X | 
| ResNet50V2 | X | X |  | X | X | X |  | X | X | 
| VGG16 |  |  |  | X | X |  |  | X | X | 
| Xception | X | X |  | X | X | X |  | X | X | 

------

## TensorFlow Lite
<a name="collapsible-section-07"></a>

------
#### [ TensorFlow-Lite (FP32) ]


| モデル | ARM V8 | ARM Mali | Ambarella CV22 | NVIDIA | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 
| inception\$1resnet\$1v2\$12018\$104\$127 |  |  |  | X | X | X |  |  | X |  | 
| inception\$1v3\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| inception\$1v4\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| mnasnet\$10.5\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.0\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.3\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1192 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  | X | X | X |  |  | X | X | 
| resnet\$1v2\$1101 |  |  |  | X | X | X |  |  | X |  | 
| squeezenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 

------
#### [ TensorFlow-Lite (INT8) ]


| モデル | ARM V8 | ARM Mali | Ambarella CV22 | NVIDIA | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| inception\$1v1 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v2 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v3 | X |  |  |  |  | X | X |  | X | X | 
| inception\$1v4\$1299 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| deeplab-v3\$1513 |  |  |  |  |  |  | X |  |  |  | 

------

# モデルをデプロイ
<a name="neo-deployment-edge"></a>

リソースに制約のあるエッジデバイスにコンピューティングモジュールをデプロイするには、コンパイル済みモデルを Amazon S3 からデバイスにダウンロードして [DLR](https://github.com/neo-ai/neo-ai-dlr) を使うか、[AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) を使います。

次に進む前に、お使いのエッジデバイスが SageMaker Neo でサポートされていることを確認してください。「[サポートされているフレームワーク、デバイス、システム、アーキテクチャ](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html)」を参照して、サポートされているエッジデバイスを確認してください。コンパイルジョブの送信時にターゲットエッジデバイスを指定していることを確認するには、「[Neo を使ってモデルをコンパイル](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html)」を参照してください。

## コンパイル済みモデルをデプロイする (DLR)
<a name="neo-deployment-dlr"></a>

[DLR](https://github.com/neo-ai/neo-ai-dlr) は、深層学習モデルと決定木モデルのためのコンパクトで汎用的なランタイムです。DLR は、[TVM](https://github.com/neo-ai/tvm) ランタイム、[Treelite](https://treelite.readthedocs.io/en/latest/install.html) ランタイム、NVIDIA TensorRT™ を使用し、他のハードウェア固有のランタイムを含めることができます。DLR は、さまざまなデバイスでコンパイル済みのモデルをロード、実行するための統合された Python/C\$1\$1 API を提供します。

次の pip コマンドを使うと、DLR パッケージの最新リリースをインストールできます。

```
pip install dlr
```

GPU ターゲットまたは x86 以外のエッジデバイスへの DLR のインストールについては、構築済みバイナリの[リリース](https://github.com/neo-ai/neo-ai-dlr/releases)を参照してください。ソースから DLR を構築する場合は「[DLR をインストールする](https://neo-ai-dlr.readthedocs.io/en/latest/install.html)」を参照してください。例えば、Raspberry Pi 3 の DLR をインストールするには、以下を使えます。

```
pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
```

## モデルのデプロイ (AWS IoT Greengrass)
<a name="neo-deployment-greengrass"></a>

[AWS IoT Greengrass ](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html)は、クラウド機能をローカルデバイスに拡張します。これにより、デバイスは情報源に近いデータを収集および分析して、ローカルイベントに自律的に反応し、ローカルネットワークで互いに安全に通信することができます。 AWS IoT Greengrass を使用すると、クラウドでトレーニングされたモデルを使用して、ローカルに生成されたデータに対してエッジで機械学習推論を実行できます。現在、ARM Cortex-A、Intel Atom、および Nvidia Jetson シリーズプロセッサに基づいて、すべての AWS IoT Greengrass デバイスにモデルをデプロイできます。Lambda 推論アプリケーションをデプロイして AWS IoT Greengrass で機械学習推論を実行する方法の詳細については、「 [AWS マネジメントコンソールを使用して最適化された機械学習推論を設定する方法](https://docs.aws.amazon.com/greengrass/latest/developerguide/ml-dlc-console.html)」を参照してください。

# エッジデバイスに Neo をセットアップする
<a name="neo-getting-started-edge"></a>

Amazon SageMaker Neo の利用開始に関するこのガイドでは、モデルのコンパイル、デバイスのセットアップ、デバイスでの推論を行う方法を説明します。ほとんどのコード例では Boto3 が使われています。必要に応じて を使用するコマンドと AWS CLI 、Neo の前提条件を満たす方法の手順を提供します。

**注記**  
次のコードスニペットは、ローカルマシン、SageMaker ノートブック、Amazon SageMaker Studio で、または (エッジデバイスによっては) エッジデバイス上で実行できます。セットアップする方法は似ていますが、SageMaker ノートブックインスタンスまたは SageMaker Studio セッションでこのガイドを実行する場合は、次の 2 つの主要な例外があります。  
Boto3 をインストールする必要はありません。
`‘AmazonSageMakerFullAccess’` IAM ポリシーを追加する必要はありません。

 このガイドでは、エッジデバイスで次の手順を実行することを前提としています。

# 前提条件
<a name="neo-getting-started-edge-step0"></a>

SageMaker Neo は、機械学習モデルを一度トレーニングするだけで、その実行をクラウド内のあらゆるエッジで可能にする機能です。Neo でモデルをコンパイルして最適化する前に、いくつかの前提条件を設定する必要があります。必要な Python ライブラリをインストールし、 AWS 認証情報を設定し、必要なアクセス許可を持つ IAM ロールを作成し、モデルアーティファクトを保存するための S3 バケットを設定する必要があります。また、トレーニング済みの機械学習モデルも準備する必要があります。次の手順ではこのセットアップについて説明します。

1. **Boto3 をインストールする**

   エッジデバイスで以下のコマンドを実行する場合は、 AWS SDK for Python (Boto3)をインストールする必要があります。Python 環境 (できれば仮想環境) で、エッジデバイスのターミナルまたは Jupyter ノートブックインスタンス内で以下をローカルに実行します。

------
#### [ Terminal ]

   ```
   pip install boto3
   ```

------
#### [ Jupyter Notebook ]

   ```
   !pip install boto3
   ```

------

1.  ** AWS 認証情報のセットアップ** 

   SDK for Python (Boto3) を実行するには、デバイスに Amazon Web Services の認証情報を設定する必要があります。デフォルトでは、 AWS 認証情報はエッジデバイスの `~/.aws/credentials` ファイルに保存する必要があります。認証情報ファイル内には `aws_access_key_id` と `aws_secret_access_key` の 2 つの環境変数があります。

   ターミナルで以下を実行します。

   ```
   $ more ~/.aws/credentials
   
   [default]
   aws_access_key_id = YOUR_ACCESS_KEY
   aws_secret_access_key = YOUR_SECRET_KEY
   ```

   [AWS 全般のリファレンスガイド](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys)に、必要な `aws_access_key_id` と `aws_secret_access_key` を取得する手順があります。デバイスで認証情報を設定する方法の詳細については、[Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration) のドキュメントを参照してください。

1.  **IAM ロールを設定しポリシーをアタッチする** 

   Neo は S3 バケット URI へのアクセスが必要です。SageMaker AI を実行でき、S3 URI にアクセスする許可を持つ IAM ロールを作成します。IAM ロールは、SDK for Python (Boto3)、コンソールまたは AWS CLIを使って作成できます。次の例は、SDK for Python (Boto3) を使って IAM ロールを作成する方法を示しています。

   ```
   import boto3
   
   AWS_REGION = 'aws-region'
   
   # Create an IAM client to interact with IAM
   iam_client = boto3.client('iam', region_name=AWS_REGION)
   role_name = 'role-name'
   ```

   コンソールまたは AWS API を使用して IAM ロールを作成する方法の詳細については AWS CLI、[AWS 「アカウントでの IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_api)」を参照してください。

    アタッチする IAM ポリシーを記述するディクショナリを作成します。このポリシーは、新しい IAM ロールの作成に使われます。

   ```
   policy = {
       'Statement': [
           {
               'Action': 'sts:AssumeRole',
               'Effect': 'Allow',
               'Principal': {'Service': 'sagemaker.amazonaws.com'},
           }],  
        'Version': '2012-10-17		 	 	 '
   }
   ```

   上で定義したポリシーを使って、新しい IAM ロールを作成します。

   ```
   import json 
   
   new_role = iam_client.create_role(
       AssumeRolePolicyDocument=json.dumps(policy),
       Path='/',
       RoleName=role_name
   )
   ```

   Amazon リソースネーム (ARN) は、後のステップでコンパイルジョブを作成するときに知っておく必要があるため、変数にも保存します。

   ```
   role_arn = new_role['Role']['Arn']
   ```

    新しいロールを作成できたので、Amazon SageMaker AI および Amazon S3 とのやり取りに必要な許可をアタッチします。

   ```
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonSageMakerFullAccess'
   )
   
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonS3FullAccess'
   );
   ```

1. **モデルアーティファクトを保存する Amazon S3 バケットを作成する**

   SageMaker Neo は Amazon S3 からモデルアーティファクトにアクセスします

------
#### [ Boto3 ]

   ```
   # Create an S3 client
   s3_client = boto3.client('s3', region_name=AWS_REGION)
   
   # Name buckets
   bucket='name-of-your-bucket'
   
   # Check if bucket exists
   if boto3.resource('s3').Bucket(bucket) not in boto3.resource('s3').buckets.all():
       s3_client.create_bucket(
           Bucket=bucket,
           CreateBucketConfiguration={
               'LocationConstraint': AWS_REGION
           }
       )
   else:
       print(f'Bucket {bucket} already exists. No action needed.')
   ```

------
#### [ CLI ]

   ```
   aws s3 mb s3://'name-of-your-bucket' --region specify-your-region 
   
   # Check your bucket exists
   aws s3 ls s3://'name-of-your-bucket'/
   ```

------

1. **機械学習モデルをトレーニングする**

   Amazon SageMaker AI を使って機械学習モデルをトレーニングする方法の詳細については、「[Train a Model with Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)」を参照してください。任意で、ローカルでトレーニングしたモデルを Amazon S3 URI バケットに直接アップロードできます。
**注記**  
 使ったフレームワークに応じて、モデルが正しくフォーマットされていることを確認します。「[SageMaker Neo が想定する入力データの形状](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs)」を参照してください。

   まだモデルがない場合は、`curl` コマンドを使って TensorFlow のウェブサイトから `coco_ssd_mobilenet` モデルのローカルコピーを取得します。いまコピーしたモデルは、[COCO データセット](https://cocodataset.org/#home)を使ってトレーニングされたオブジェクト検出モデルです。Jupyter ノートブックに次を入力します。

   ```
   model_zip_filename = './coco_ssd_mobilenet_v1_1.0.zip'
   !curl http://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip \
       --output {model_zip_filename}
   ```

   このサンプルは .zip ファイルにパッケージ化されていることに注意してください。このファイルを解凍し、圧縮された tar ファイル (`.tar.gz`) として再パッケージ化してから、後のステップでそれを使います。Jupyter ノートブックに次を入力します。

   ```
   # Extract model from zip file
   !unzip -u {model_zip_filename}
   
   model_filename = 'detect.tflite'
   model_name = model_filename.split('.')[0]
   
   # Compress model into .tar.gz so SageMaker Neo can use it
   model_tar = model_name + '.tar.gz'
   !tar -czf {model_tar} {model_filename}
   ```

1. **トレーニング済みモデルを S3 バケットにアップロードする**

   機械学習モデルをトレーニングしたら、それを S3 バケットに保存します。

------
#### [ Boto3 ]

   ```
   # Upload model        
   s3_client.upload_file(Filename=model_filename, Bucket=bucket, Key=model_filename)
   ```

------
#### [ CLI ]

   `your-model-filename` と `amzn-s3-demo-bucket` をお使いの S3 バケットの名前に置き換えます。

   ```
   aws s3 cp your-model-filename s3://amzn-s3-demo-bucket
   ```

------

# モデルのコンパイル
<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)
```

# デバイスのセットアップ
<a name="neo-getting-started-edge-step2"></a>

デバイスが推論できるように、エッジデバイスにパッケージをインストールする必要があります。また、[AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) コアまたは [Deep Learning Runtime (DLR)](https://github.com/neo-ai/neo-ai-dlr) のどちらかをインストールする必要があります。この例では、`coco_ssd_mobilenet` オブジェクト検出アルゴリズムの推論を実行するために必要なパッケージをインストールし、DLR を使います。

1. **追加のパッケージをインストールする**

   エッジデバイスには、Boto3 に加えて、特定のライブラリをインストールする必要があります。インストールするライブラリは、ユースケースによって異なります。

   例えば、先ほどダウンロードした `coco_ssd_mobilenet` オブジェクト検出アルゴリズムの場合、データ操作と統計のための [NumPy](https://numpy.org/)、イメージをロードするための [PIL](https://pillow.readthedocs.io/en/stable/)、プロットを生成するための [Matplotlib](https://matplotlib.org/) をインストールする必要があります。また、Neo を使ったコンパイルの影響をベースラインに対して測定する場合は、TensorFlow のコピーが必要です。

   ```
   !pip3 install numpy pillow tensorflow matplotlib 
   ```

1. **デバイスに推論エンジンをインストールする**

   Neo コンパイル済みモデルを実行するには、デバイスに [Deep Learning Runtime (DLR)](https://github.com/neo-ai/neo-ai-dlr) をインストールします。DLR は、深層学習モデルと決定木モデルのためのコンパクトで汎用的なランタイムです。Linux を実行する x86\$164 CPU ターゲットでは、次の `pip` コマンドを使って DLR パッケージの最新リリースをインストールできます。

   ```
   !pip install dlr
   ```

   GPU ターゲットまたは x86 以外のエッジデバイスに DLR をインストールする方法については、構築済みバイナリの[リリース](https://github.com/neo-ai/neo-ai-dlr/releases)を参照してください。ソースから DLR を構築する場合は「[DLR をインストールする](https://neo-ai-dlr.readthedocs.io/en/latest/install.html)」を参照してください。例えば、Raspberry Pi 3 の DLR をインストールするには、以下を使えます。

   ```
   !pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
   ```

# デバイスで推論を実行する
<a name="neo-getting-started-edge-step3"></a>

この例では、Boto3 を使って、エッジデバイスにコンパイルジョブの出力をダウンロードします。次に、DLR をインポートし、データセットからサンプルイメージをダウンロードし、このイメージのサイズをモデルの元の入力に合わせて変更し、予測を行います。

1. **コンパイル済みモデルを Amazon S3 からデバイスにダウンロードし、圧縮された tar ファイルから抽出する。**

   ```
   # Download compiled model locally to edge device
   object_path = f'output/{model_name}-{target_device}.tar.gz'
   neo_compiled_model = f'compiled-{model_name}.tar.gz'
   s3_client.download_file(bucket_name, object_path, neo_compiled_model)
   
   # Extract model from .tar.gz so DLR can use it
   !mkdir ./dlr_model # make a directory to store your model (optional)
   !tar -xzvf ./compiled-detect.tar.gz --directory ./dlr_model
   ```

1. **DLR と初期化された `DLRModel` オブジェクトをインポートする。**

   ```
   import dlr
   
   device = 'cpu'
   model = dlr.DLRModel('./dlr_model', device)
   ```

1. **推論用のイメージをダウンロードし、モデルがどのようにトレーニングされたかに基づいてフォーマットする。**

   `coco_ssd_mobilenet` の例では、[COCO データセット](https://cocodataset.org/#home)からイメージをダウンロードした後、イメージを `300x300` に変形しています。

   ```
   from PIL import Image
   
   # Download an image for model to make a prediction
   input_image_filename = './input_image.jpg'
   !curl https://farm9.staticflickr.com/8325/8077197378_79efb4805e_z.jpg --output {input_image_filename}
   
   # Format image so model can make predictions
   resized_image = image.resize((300, 300))
   
   # Model is quantized, so convert the image to uint8
   x = np.array(resized_image).astype('uint8')
   ```

1. **DLR を使って推論を実行する**。

   最後に、DLR を使って、ダウンロードしたイメージに対して予測を行えます。

   ```
   out = model.run(x)
   ```

DLR を使い、エッジデバイスで Neo コンパイル済みモデルから推論を実行する他のサンプルについては、[neo-ai-dlr GitHub リポジトリ](https://github.com/neo-ai/neo-ai-dlr)を参照してください。