

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

# 機械学習の推論を実行する
<a name="perform-machine-learning-inference"></a>

を使用すると AWS IoT Greengrass、クラウドでトレーニングされたモデルを使用して、ローカルに生成されたデータに対してエッジデバイスで機械学習 (ML) 推論を実行できます。ローカル推論の実行により低レイテンシーとコスト節約のメリットを得ながら、モデルのトレーニングと複雑な処理にクラウドコンピューティングの処理能力を活用できます。

AWS IoT Greengrass は、推論の実行に必要なステップをより効率的にします。推論モデルをどこでもトレーニングし、機械学習コンポーネントとしてローカルにデプロイできます。例えば、[Amazon SageMaker AI ](https://console.aws.amazon.com/sagemaker)で深層学習モデルを構築およびトレーニングできます。次に、コンポーネントでこれらのモデルをアーティファクトとして使用してコアデバイスに推論を実行するため、これらのモデルを [Amazon S3](https://console.aws.amazon.com/s3) バケットに保存できます。

**Topics**
+ [ML AWS IoT Greengrass 推論の仕組み](#how-ml-inference-works)
+ [AWS IoT Greengrass バージョン 2 の違いは何ですか?](#ml-differences)
+ [要件](#ml-requirements)
+ [サポートされているモデルソース](#ml-model-sources)
+ [サポートされている機械学習ランタイム](#ml-runtime-libraries)
+ [AWSが提供する機械学習コンポーネント](#ml-components)
+ [Greengrass コアデバイスで Amazon SageMaker AI Edge Manager を使用する](use-sagemaker-edge-manager.md)
+ [機械学習コンポーネントのカスタマイズ](ml-customization.md)
+ [機械学習の推論に対するトラブルシューティング](ml-troubleshooting.md)

## ML AWS IoT Greengrass 推論の仕組み
<a name="how-ml-inference-works"></a>

AWS には[、デバイスで機械学習推論を実行するためのワンステップデプロイを作成するために使用できる機械学習コンポーネント](#ml-components)が用意されています。これらのコンポーネントをテンプレートとしても使用し、お客様の特定の要件を満たすカスタムコンポーネントを作成できます。<a name="ml-component-types"></a>

AWS には、次のカテゴリの機械学習コンポーネントが用意されています。
+ **モデルコンポーネント** - Greengrass アーティファクトとして機械学習モデルが含まれます。
+ **ランタイムコンポーネント** - 機械学習フレームワークとその従属関係を Greengrass コアデバイスにインストールするスクリプトが含まれます。
+ **推論コンポーネント** - 推論コードが含まれ、機械学習フレームワークをインストールして事前学習済みの機械学習モデルをダウンロードするためのコンポーネント従属関係が含まれます。

機械学習の推論を実行するために作成する各デプロイは、推論アプリケーションの実行、機械学習フレームワークのインストール、機械学習モデルのダウンロードをするコンポーネントが少なくとも 1 つ設定されています。 AWSが提供するコンポーネントを使用してサンプル推論を実行するには、推論コンポーネントをコアデバイスにデプロイします。コアデバイスには、対応するモデルとランタイムコンポーネントが依存関係として自動的に含まれます。デプロイをカスタマイズするには、サンプルモデルコンポーネントをカスタムモデルコンポーネントとプラグインまたはスワップアウトするか、 AWS提供されたコンポーネントのコンポーネントレシピをテンプレートとして使用して、独自のカスタム推論、モデル、ランタイムコンポーネントを作成できます。

カスタムコンポーネントを使用して機械学習の推論を実行するには、次の手順を実行します。

1. モデルコンポーネントを作成します。このコンポーネントには、推論の実行に使用する機械学習モデルが含まれています。 は、事前トレーニング済みの DLR および TensorFlow Lite モデルのサンプル AWS を提供します。カスタムモデルを使用するには、独自のモデルコンポーネントを作成します。

1. ランタイムコンポーネントを作成します。このコンポーネントには、モデルの機械学習ランタイムをインストールするために必要なスクリプトが含まれています。 は、[深層学習ランタイム (DLR) と TensorFlow Lite のサンプルランタイム](https://github.com/neo-ai/neo-ai-dlr)コンポーネント AWS を提供します。 [TensorFlow ](https://www.tensorflow.org/lite/guide/python) カスタムモデルと推論コードで他のランタイムを使用するには、独自のランタイムコンポーネントを作成します。

1. 推論コンポーネントを作成します。このコンポーネントには推論コードが含まれ、モデルとランタイムコンポーネントが依存関係として含まれます。 は、DLR と TensorFlow Lite を使用したイメージ分類とオブジェクト検出用のサンプル推論コンポーネント AWS を提供します。他のタイプの推論を実行したり、カスタムモデルやランタイムを使用したりするには、独自の推論コンポーネントを作成します。

1. 推論コンポーネントをデプロイします。このコンポーネントをデプロイすると、 はモデルとランタイムコンポーネントの依存関係 AWS IoT Greengrass も自動的にデプロイします。

 AWSが提供するコンポーネントの使用を開始するには、「」を参照してください[チュートリアル: TensorFlow Lite を使用したサンプルイメージ分類推論の実行](ml-tutorial-image-classification.md)。

カスタム機械学習コンポーネントの作成方法については、「[機械学習コンポーネントのカスタマイズ](ml-customization.md)」を参照してください。

## AWS IoT Greengrass バージョン 2 の違いは何ですか?
<a name="ml-differences"></a>

AWS IoT Greengrass は、モデル、ランタイム、推論コードなどの機械学習の機能ユニットをコンポーネントに統合し、ワンステッププロセスを使用して機械学習ランタイムをインストールし、トレーニングされたモデルをダウンロードし、デバイスに推論を実行できます。

 AWSが提供する機械学習コンポーネントを使用すると、サンプル推論コードと事前トレーニング済みのモデルを使用して機械学習推論の実行を柔軟に開始できます。カスタムモデルコンポーネントをプラグインして、 AWS が提供する推論コンポーネントとランタイムコンポーネントで独自のカスタムトレーニング済みモデルを使用できます。完全にカスタマイズされた機械学習ソリューションの場合、パブリックコンポーネントをテンプレートとして使用してカスタムコンポーネントを作成し、任意のランタイム、モデル、推論タイプを使用できます。

## 要件
<a name="ml-requirements"></a>

機械学習コンポーネントを作成して使用するには、次のものが必要になります。
+ Greengrass コアデバイス。アカウントをお持ちでない場合は、「[チュートリアル: AWS IoT Greengrass V2 の開始方法](getting-started.md)」を参照してください。
+ が提供するサンプル機械学習コンポーネントを使用するための 500 MB AWS以上のローカルストレージスペース。

## サポートされているモデルソース
<a name="ml-model-sources"></a>

AWS IoT Greengrass は、Amazon S3 に保存されているカスタムトレーニング済み機械学習モデルの使用をサポートしています。Amazon SageMaker AI エッジパッケージングジョブを使用して、SageMaker AI Neo でコンパイルされたモデルのモデルコンポーネントを直接作成することもできます。で SageMaker AI Edge Manager を使用する方法については AWS IoT Greengrass、「」を参照してください[Greengrass コアデバイスで Amazon SageMaker AI Edge Manager を使用する](use-sagemaker-edge-manager.md)。

モデルを含む S3 バケットは、次の要件を満たしている必要があります:
+ SSE-C を使用して暗号化してはなりません。サーバー側の暗号化を使用するバケットの場合、 AWS IoT Greengrass 機械学習の推論は現在、SSE-S3 または SSE-KMS 暗号化オプションのみをサポートしています。サーバー側の暗号化の詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[サーバー側の暗号化を使用したデータ保護](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html)」を参照してください。
+ それらの名前にピリオド (`.`) を含めることはできません。詳細については、「Amazon Simple Storage Service ユーザーガイド」の[バケット命名規則](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules)で、SSL で仮想ホスト型バケットの使用に関するルールを参照してください。
+ <a name="sr-artifacts-req"></a>モデルソースを保存する S3 バケットは、 AWS リージョン 機械学習コンポーネントと同じ AWS アカウント および にある必要があります。
+ AWS IoT Greengrass にはモデルソースに対する`read`アクセス許可が必要です。 AWS IoT Greengrass が S3 バケットにアクセスできるようにするには、[Greengrass デバイスロール](device-service-role.md)で `s3:GetObject`アクションを許可する必要があります。デバイスロールの詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

## サポートされている機械学習ランタイム
<a name="ml-runtime-libraries"></a>

AWS IoT Greengrass では、カスタムコンポーネントを作成して、任意の機械学習ランタイムを使用して、カスタムトレーニング済みモデルで機械学習推論を実行できます。カスタム機械学習コンポーネントの作成方法については、「[機械学習コンポーネントのカスタマイズ](ml-customization.md)」を参照してください。

機械学習の開始プロセスをより効率的にするために、 は、次の機械学習ランタイムを使用するサンプル推論、モデル、ランタイムコンポーネント AWS IoT Greengrass を提供します。
+  [深層学習ランタイム](https://github.com/neo-ai/neo-ai-dlr) (DLR) v1.6.0 と v1.3.0
+  [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python) v2.5.0 

## AWSが提供する機械学習コンポーネント
<a name="ml-components"></a>

次の表に、機械学習に使用される AWSが提供するコンポーネントを示します。

**注記**  <a name="component-nucleus-dependency-update-note"></a>
いくつかの AWS提供されるコンポーネントは、Greengrass nucleus の特定のマイナーバージョンによって異なります。この従属関係により、Greengrass nucleus を新しいマイナーバージョンに更新するとき、これらのコンポーネントを更新する必要があります。各コンポーネントが依存する nucleus の特定バージョンの情報については、対応するコンポーネントのトピックを参照してください。nucleus の更新の詳細については、「[AWS IoT Greengrass Core ソフトウェア (OTA) の更新](update-greengrass-core-v2.md)」を参照してください。


| コンポーネント | 説明 | [コンポーネントタイプ](develop-greengrass-components.md#component-types) | サポートされる OS | [オープンソース](open-source.md) | 
| --- | --- | --- | --- | --- | 
| [SageMaker AI Edge Manager](sagemaker-edge-manager-component.md) | Amazon SageMaker AI Edge Manager エージェントを Greengrass コアデバイスにデプロイします。 | ジェネリック | Linux、Windows | いいえ | 
| [DLR イメージ分類](dlr-image-classification-component.md) | DLR イメージ分類モデルストアと DLR ランタイムコンポーネントを従属関係として使用し、DLR をインストール、サンプルイメージ分類モデルをダウンロード、サポートされているデバイスにイメージ分類推論を実行する推論コンポーネント。 | ジェネリック | Linux、Windows | いいえ | 
| [DLR オブジェクトの検出](dlr-object-detection-component.md) | DLR オブジェクト検知モデルストアと DLR ランタイムコンポーネントを従属関係として使用し、DLR をインストール、サンプルオブジェクト検知モデルをダウンロード、サポートされているデバイスにオブジェクト検知推論を実行する推論コンポーネント。 | ジェネリック | Linux、Windows | いいえ | 
| [DLR イメージ分類モデルストア](dlr-image-classification-model-store-component.md) | Greengrass アーティファクトとしてサンプル ResNet-50 イメージ分類モデルを含むモデルコンポーネント。 | ジェネリック | Linux、Windows | いいえ | 
| [DLR オブジェクト検出モデルストア](dlr-object-detection-model-store-component.md) | Greengrass アーティファクトとしてサンプル YOLOv3 オブジェクト検出モデルを含むモデルコンポーネント。 | ジェネリック | Linux、Windows | いいえ | 
| [DLR ランタイム](dlr-component.md) | DLR とその従属関係を Greengrass コアデバイスにインストールするために使用されるインストールスクリプトを含むランタイムコンポーネント。 | ジェネリック | Linux、Windows | いいえ | 
| [TensorFlow Lite イメージ分類](tensorflow-lite-image-classification-component.md) | TensorFlow Lite イメージ分類モデルストアと TensorFlow Lite ランタイムコンポーネントを従属関係として使用し、TensorFlow Lite をインストール、サンプルイメージ分類モデルをダウンロード、サポートされているデバイスにイメージ分類推論を実行する推論コンポーネント。 | ジェネリック | Linux、Windows | いいえ | 
| [TensorFlow Lite オブジェクト検出](tensorflow-lite-object-detection-component.md) | TensorFlow Lite オブジェクト検出モデルストアと TensorFlow Lite ランタイムコンポーネントを従属関係として使用し、TensorFlow Lite をインストール、サンプルオブジェクト検出モデルをダウンロード、サポートされているデバイスでのオブジェクト検出推論を実行する推論コンポーネント。 | ジェネリック | Linux、Windows | いいえ | 
| [TensorFlow Lite イメージ分類モデルストア](tensorflow-lite-image-classification-model-store-component.md) | Greengrass アーティファクトとしてサンプル MobileNet v1 モデルを含むモデルコンポーネント。 | ジェネリック | Linux、Windows | いいえ | 
| [TensorFlow Lite オブジェクト検出モデルストア](tensorflow-lite-object-detection-model-store-component.md) | Greengrass アーティファクトとしてサンプルシングルショット検出 (SSD) MobileNet モデルを含むモデルコンポーネント。 | ジェネリック | Linux、Windows | いいえ | 
| [TensorFlow Lite ランタイム](tensorflow-lite-component.md) | TensorFlow Lite とその従属関係を Greengrass コアデバイスにインストールするために使用されるインストールスクリプトを含むランタイムコンポーネント。 | ジェネリック | Linux、Windows | いいえ | 

# Greengrass コアデバイスで Amazon SageMaker AI Edge Manager を使用する
<a name="use-sagemaker-edge-manager"></a>

**重要**  
SageMaker AI Edge Manager は 2024 年 4 月 26 日に廃止されました。引き続きモデルをエッジデバイスにデプロイする方法の詳細については、「[SageMaker AI Edge Manager end of life](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-eol.html)」を参照してください。

Amazon SageMaker AI Edge Manager は、エッジデバイスで実行されるソフトウェアエージェントです。SageMaker AI Edge Manager はエッジデバイスのモデル管理を提供し、Amazon SageMaker AI Neo でコンパイルされたモデルを Greengrass コアデバイスで直接パッケージ化して使用できるようにします。SageMaker AI Edge Manager を使用すると、コアデバイスからモデル入出力データをサンプリングし、そのデータを に送信して AWS クラウド モニタリングと分析を行うこともできます。SageMaker AI Edge Manager は SageMaker AI Neo を使用して、ターゲットハードウェア用のモデルを最適化するため、デバイスに直接 DLR ランタイムをインストールする必要はありません。Greengrass デバイスでは、SageMaker AI Edge Manager はローカル AWS IoT 証明書をロードしたり、 AWS IoT 認証情報プロバイダーエンドポイントを直接呼び出したりしません。代わりに SageMaker AI Edge Manager は、[トークン交換サービス](token-exchange-service-component.md)を使用して、TES エンドポイントから一時的な認証情報を取得します。

このセクションでは、SageMaker AI Edge Manager が Greengrass コアデバイスで機能する仕組みを説明します。



## SageMaker AI Edge Manager が Greengrass デバイスで機能する仕組み
<a name="how-to-use-sdge-manager-with-greengrass"></a>

SageMaker AI Edge Manager エージェントをコアデバイスにデプロイするには、`aws.greengrass.SageMakerEdgeManager`コンポーネントを含むデプロイを作成します。 は、デバイスへの Edge Manager エージェントのインストールとライフサイクル AWS IoT Greengrass を管理します。エージェントバイナリの新しいバージョンが利用可能になったとき、`aws.greengrass.SageMakerEdgeManager` コンポーネントの更新されたバージョンをデプロイして、デバイスにインストールされているエージェントのバージョンをアップグレードします。

で SageMaker AI Edge Manager を使用する場合 AWS IoT Greengrass、ワークフローには以下の大まかなステップが含まれます。

1. SageMaker AI Neo でモデルをコンパイルします。

1. SageMaker AI エッジパッケージングジョブを使用して、SageMaker AI Neo がコンパイルしたモデルをパッケージ化します。モデルにエッジパッケージングジョブを実行するとき、Greengrass コアデバイスにデプロイ可能なアーティファクトとして、パッケージ化されたモデルでモデルコンポーネントを作成することを選択できます。

1. カスタム推論コンポーネントを作成します。エッジマネージャーエージェントとやり取りしてコアデバイスで推論を実行するため、この推論コンポーネントを使用できます。これらの操作には、モデルのロード、推論を実行する予測リクエストの呼び出し、コンポーネントのシャットダウン時にモデルのアンロードが含まれます。

1. SageMaker AI Edge Manager コンポーネント、パッケージ化されたモデルコンポーネント、および推論コンポーネントをデプロイして、デバイス上の SageMaker AI 推論エンジン (Edge Manager エージェント) でモデルを実行します。

SageMaker AI Edge Manager と連携するエッジパッケージングジョブと推論コンポーネントの作成に関する詳細については、「*Amazon SageMaker AI デベロッパーガイド*」の「[Deploy Model Package and Edge Manager Agent with AWS IoT Greengrass](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-greengrass.html)」を参照してください。

この[チュートリアル: SageMaker AI Edge Manager の使用を開始する](get-started-with-edge-manager-on-greengrass.md)チュートリアルでは、既存の Greengrass コアデバイスで SageMaker AI Edge Manager エージェントをセットアップして使用する方法を示します。サンプル推論とモデルコンポーネントの作成に使用できる AWSサンプルコードを使用します。

Greengrass コアデバイスで SageMaker AI Edge Manager を使用する場合、キャプチャデータ機能を使用してサンプルデータを AWS クラウドにアップロードすることもできます。キャプチャデータは、今後の分析用に S3 バケットまたはローカルディレクトリに推論入力、推論結果、追加の推論データをアップロードするために使用する SageMaker AI 機能です。SageMaker AI Edge Manager でキャプチャデータを使用する方法の詳細については、「*Amazon SageMaker AI デベロッパーガイド*」の「[Manage Model](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-manage-model.html#edge-manage-model-capturedata)」を参照してください。

## 要件
<a name="greengrass-edge-manager-agent-requirements"></a>

Greengrass コアデバイスで SageMaker AI Edge Manager エージェントを使用するには、以下の要件を満たす必要があります。<a name="sm-edge-manager-component-reqs"></a>
+ <a name="sm-req-core-device"></a>Amazon Linux 2 で実行されている Greengrass コアデバイス、Debian ベースの Linux プラットフォーム (x86\$164 または Armv8)、または Windows (x86\$164)。アカウントをお持ちでない場合は、「[チュートリアル: AWS IoT Greengrass V2 の開始方法](getting-started.md)」を参照してください。
+ <a name="sm-req-python"></a>[Python](https://www.python.org/downloads/) 3.6 以降 (ご使用の Python のバージョン用 `pip` がコアデバイスにインストールされていること)。
+ 次のように設定された [Greengrass デバイスのロール](device-service-role.md): 
  + <a name="sm-req-iam-trust-relationship"></a>次の IAM ポリシーの例で示されているように、`credentials.iot.amazonaws.com` と `sagemaker.amazonaws.com` がロールの継承を可能にする信頼関係。

    ```
    { 
      "Version": "2012-10-17",		 	 	 
      "Statement": [ 
        { 
          "Effect": "Allow", 
          "Principal": {
            "Service": "credentials.iot.amazonaws.com"
           }, 
          "Action": "sts:AssumeRole" 
        },
        { 
          "Effect": "Allow", 
          "Principal": {
            "Service": "sagemaker.amazonaws.com"
          }, 
          "Action": "sts:AssumeRole" 
        } 
      ] 
    }
    ```
  + <a name="sm-req-iam-sagemanakeredgedevicefleetpolicy"></a>[AmazonSageMakerEdgeDeviceFleetPolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AmazonSageMakerEdgeDeviceFleetPolicy) IAM マネージドポリシー。
  + <a name="sm-req-iam-s3-putobject"></a>次の IAM ポリシーの例で示されている `s3:PutObject` アクション。

    ```
    {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
        {
          "Action": [
            "s3:PutObject"
          ],
          "Resource": [
            "*"
          ],
          "Effect": "Allow"
        }
      ]
    }
    ```
+ <a name="sm-req-s3-bucket"></a>Greengrass コアデバイス AWS リージョン と同じ AWS アカウント および に作成された Amazon S3 バケット。SageMaker AI Edge Manager では、エッジデバイスフリートを作成するため、またデバイスで推論を実行した際のサンプルデータを保存するために、S3 バケットが必要です。S3 バケットを作成する方法の情報については、「[Amazon S3 の使用を開始](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)」を参照してください。
+ <a name="sm-req-edge-device-fleet"></a>Greengrass コアデバイスと同じ AWS IoT ロールエイリアスを使用する SageMaker AI エッジデバイスフリート。詳細については、「[エッジデバイスフリートを作成する](get-started-with-edge-manager-on-greengrass.md#create-edge-device-fleet-for-greengrass)」を参照してください。
+ <a name="sm-req-edge-device"></a>SageMaker AI Edge デバイスフリート内のエッジデバイスとして登録された Greengrass コアデバイス。エッジデバイス名は、コアデバイスの AWS IoT モノの名前と一致する必要があります。詳細については、「[Greengrass コアデバイスを登録する](get-started-with-edge-manager-on-greengrass.md#register-greengrass-core-device-in-sme)」を参照してください。

## SageMaker AI Edge Manager の使用を開始する
<a name="use-sm-edge-manager"></a>

チュートリアルを完了して、SageMaker AI Edge Manager の使用を開始できます。このチュートリアルでは、既存のコアデバイスで提供されているサンプルコンポーネントを使用して SageMaker AI Edge Manager AWSの使用を開始する方法を示します。これらのサンプルコンポーネントは、SageMaker AI Edge Manager コンポーネントを依存関係として使用して Edge Manager エージェントをデプロイし、SageMaker AI Neo を使用してコンパイルされた事前トレーニング済みモデルを使用して推論を実行します。詳細については、「[チュートリアル: SageMaker AI Edge Manager の使用を開始する](get-started-with-edge-manager-on-greengrass.md)」を参照してください。

# 機械学習コンポーネントのカスタマイズ
<a name="ml-customization"></a>

では AWS IoT Greengrass、推論、モデル、ランタイム[コンポーネントを構成要素として使用して、デバイスで機械学習推論を実行する方法をカスタマイズ](perform-machine-learning-inference.md#ml-components)するようにサンプル機械学習コンポーネントを設定できます。また、 では、サンプルコンポーネントをテンプレートとして使用し、必要に応じて独自のカスタムコンポーネントを作成する柔軟性 AWS IoT Greengrass も提供します。このモジュラーアプローチを組み合わせて、次の方法で機械学習の推論コンポーネントをカスタマイズできます。

**サンプル推論コンポーネントの使用**  
+ 推論コンポーネントをデプロイするときに設定を修正します。
+ サンプルモデルストアコンポーネントをカスタムモデルコンポーネントに置き換えて、サンプル推論コンポーネントを備えたカスタムモデルを使用します。カスタムモデルは、サンプルモデルと同じランタイムを使用してトレーニングする必要があります。

**カスタム推論コンポーネントの使用**  
+ パブリックモデルコンポーネントとランタイムコンポーネントをカスタム推論コンポーネントの従属関係として追加して、サンプルモデルとランタイムを備えたカスタム推論コードを使用します。
+ カスタムモデルコンポーネントまたはランタイムコンポーネントをカスタム推論コンポーネントの従属関係として作成して追加します。がサンプルコンポーネントを提供し AWS IoT Greengrass ないカスタム推論コードまたはランタイムを使用する場合は、カスタムコンポーネントを使用する必要があります。

**Topics**
+ [パブリック推論コンポーネントの設定の修正](#modify-ml-component-config)
+ [サンプルの推論コンポーネントでカスタムモデルの使用](#override-public-model-store)
+ [カスタム機械学習のコンポーネントを作成](#create-private-ml-components)
+ [カスタム推論コンポーネントを作成](#create-inference-component)

## パブリック推論コンポーネントの設定の修正
<a name="modify-ml-component-config"></a>

[AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass)で、コンポーネントページはコンポーネントのデフォルト設定を表示します。例えば、TensorFlow Lite イメージ分類コンポーネントのデフォルト設定は次のようになります。

```
{
  "accessControl": {
    "aws.greengrass.ipc.mqttproxy": {
      "aws.greengrass.TensorFlowLiteImageClassification:mqttproxy:1": {
        "policyDescription": "Allows access to publish via topic ml/tflite/image-classification.",
        "operations": [
          "aws.greengrass#PublishToIoTCore"
        ],
        "resources": [
          "ml/tflite/image-classification"
        ]
      }
    }
  },
  "PublishResultsOnTopic": "ml/tflite/image-classification",
  "ImageName": "cat.jpeg",
  "InferenceInterval": 3600,
  "ModelResourceKey": {
    "model": "TensorFlowLite-Mobilenet"
  }
}
```

パブリック推論コンポーネントをデプロイするとき、デフォルト設定を修正してデプロイをカスタマイズできます。各パブリック推論コンポーネントに利用可能な設定パラメータの情報については、[AWSが提供する機械学習コンポーネント](perform-machine-learning-inference.md#ml-components) のコンポーネントトピックを参照してください。

このセクションでは、変更されたコンポーネントを AWS IoT Greengrass コンソールからデプロイする方法について説明します。を使用してコンポーネントをデプロイする方法については AWS CLI、「」を参照してください[デプロイの作成](create-deployments.md)。<a name="modify-ml-component-config-console"></a>

**修正済パブリック推論コンポーネント (コンソール) をデプロイするには**

1. [AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass) にサインインします。

1. ナビゲーションメニューで、**[Components]** (コンポーネント) を選択します。

1. **[Components]** (コンポーネント) ページの **[Public components]** (パブリックコンポーネント) タブで、デプロイするコンポーネントを選択します。

1. コンポーネントページで、**[Deploy]** (デプロイ) を選択します。

1. <a name="add-deployment"></a>**[Add to deployment]** (デプロイに追加) から、次のいずれかを選択します。

   1. ターゲットデバイスにある既存のデプロイにこのコンポーネントをマージするには、**[Add to existing deployment]** (既存のデプロイに追加) をクリックし、修正するデプロイを選択します。

   1. ターゲットデバイスに新しいデプロイを作成するには、**[Create new deployment]** (新しいデプロイの作成) を選択します。デバイスに既存のデプロイがある場合は、このステップを選択すると既存のデプロイが置き換えられます。

1. <a name="specify-deployment-target"></a>**[Specify device state]** (ターゲットを指定) ページで、次を実行します。

   1. **[Deployment information]** (デプロイ情報) で、デプロイの名前を入力または変更して、わかりやすくします。

   1. **[Deployment targets]** (デプロイターゲット) でデプロイのターゲットを選択し、**[Next]** (次へ) を選択します。既存のデプロイを修正する場合は、デプロイターゲットを変更できません。

1. **[Select components]** (コンポーネントを選択) ページの **[Public components]** (パブリックコンポーネント) 内で、修正した設定を適用した推論コンポーネントが選択されていることを確認し、**[Next]** (次) を選択します。

1. **[Configure components]** (コンポーネントの設定) ページで、次の手順を実行します: 

   1. 推論コンポーネントを選択して、**[Configure component]** (コンポーネントの設定) を選択します。

   1. **[Configuration update]** (設定更新) 内で、更新する設定値を入力します。例えば、**[Configuration to merge]** (マージする設定) ボックスに次の設定更新を入力し、推論間隔を 15 秒に変更して、`/custom-ml-inference/images/` フォルダに `custom.jpg` という名前のイメージを検索するようにコンポーネントに指示します。

      ```
      {
        "InferenceInterval": "15",
        "ImageName": "custom.jpg",
        "ImageDirectory": "/custom-ml-inference/images/"
      }
      ```

      コンポーネントの設定を全体的にデフォルト値にリセットするには、**[Reset paths]** (パスのリセット) ボックスで空の文字列 `""` を 1 つ指定します。

   1. **[Confirm]** (確認)、**[Next]** (次へ) の順に選択します。

1. **[Configure advanced setting]** (高度な設定を設定) ページで、デフォルト構成設定のままにして **[Next]** (次) を選択します。

1. **[Review]** (レビュー) ページで、**[Deploy]** (デプロイ) を選択します。

## サンプルの推論コンポーネントでカスタムモデルの使用
<a name="override-public-model-store"></a>

サンプル推論コンポーネントを、 がサンプルランタイムコンポーネント AWS IoT Greengrass を提供するランタイムの独自の機械学習モデルで使用する場合は、パブリックモデルコンポーネントを、それらのモデルをアーティファクトとして使用するコンポーネントで上書きする必要があります。高度なレベルで、次の手順を実行して、サンプル推論コンポーネントを備えたカスタムモデルを使用します。

1. S3 バケットのカスタムモデルをアーティファクトとして使用するモデルコンポーネントを作成します。カスタムモデルは、置き換えるモデルと同じランタイムを使用してトレーニングする必要があります。

1. カスタムモデルを使用するには、推論コンポーネントの `ModelResourceKey` 設定パラメータを修正します。推論コンポーネントの設定の更新に関する情報については、「[パブリック推論コンポーネントの設定の修正](#modify-ml-component-config)」を参照してください。

推論コンポーネントをデプロイすると、 はコンポーネントの依存関係の最新バージョン AWS IoT Greengrass を探します。コンポーネントの新しいカスタムバージョンが同じ AWS アカウント および に存在する場合、依存するパブリックモデルコンポーネントを上書きします AWS リージョン。

### カスタムモデルコンポーネント (コンソール) を作成
<a name="create-model-store-component-console"></a>

1. モデルを S3 バケットにアップロードします。モデルを S3 バケットにアップロードする方法については、「*Amazon Simple Storage Service ユーザーガイド*」の「[汎用バケットの概要](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)」を参照してください。
**注記**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>アーティファクトは、コンポーネント AWS リージョン と同じ AWS アカウント および にある S3 バケットに保存する必要があります。 AWS IoT Greengrass がこれらのアーティファクトにアクセスできるようにするには、[Greengrass デバイスロール](device-service-role.md)で `s3:GetObject`アクションを許可する必要があります。デバイスロールの詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

1. [AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass)のナビゲーションメニューで、**[Components]** (コンポーネント) を選択します。

1. パブリックモデルのストアコンポーネントのコンポーネントレシピを取得します。

   1. **[Components]** (コンポーネント) ページの **[Public components]** (パブリックコンポーネント) タブで、新しいバージョンを作成するパブリックモデルコンポーネントを探して選択します。例えば、`variant.DLR.ImageClassification.ModelStore`。

   1. コンポーネントページで、**[View recipe]** (レシピを確認) を選択して表示された JSON レシピをコピーします。

1. **[Components]** (コンポーネント) ページの **[My components]** (マイコンポーネント) タブで、**[Create component]** (コンポーネントの作成) を選択します。

1. **[Create component]** (コンポーネントの作成) ページの **[Component information]** (コンポーネント情報) 内で、**[Enter recipe as JSON]** (JSON としてレシピを入力) をコンポーネントソースとして選択します。

1. **[Recipe]** (レシピ) ボックスで、以前にコピーしたコンポーネントレシピを貼り付けます。

1. <a name="override-model-recipe-config"></a>レシピで次の値を更新します。
   + `ComponentVersion`: コンポーネントのマイナーバージョンをインクリメントします。

     カスタムコンポーネントを作成してパブリックモデルコンポーネントをオーバーライドする場合、既存のコンポーネントバージョンのマイナーバージョンのみを更新する必要があります。例えば、パブリックコンポーネントのバージョンが `2.1.0` の場合、バージョン `2.1.1` でカスタムコンポーネントを作成できます。
   + `Manifests.Artifacts.Uri`: 各 URI 値を使用するモデルの Amazon S3 URI に更新します。
**注記**  
コンポーネントの名前は変更しないでください。

1. **[Create component]** (コンポーネントの作成) を選択します。

### カスタムモデルコンポーネントを作成 (AWS CLI)
<a name="create-model-store-component-cli"></a>

1. モデルを S3 バケットにアップロードします。モデルを S3 バケットにアップロードする方法については、「*Amazon Simple Storage Service ユーザーガイド*」の「[汎用バケットの概要](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)」を参照してください。
**注記**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>アーティファクトは、コンポーネント AWS リージョン と同じ AWS アカウント および にある S3 バケットに保存する必要があります。 AWS IoT Greengrass がこれらのアーティファクトにアクセスできるようにするには、[Greengrass デバイスロール](device-service-role.md)で `s3:GetObject`アクションを許可する必要があります。デバイスロールの詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

1. 次のコマンドを実行して、パブリックコンポーネントのコンポーネントレシピを取得します。このコマンドは、コマンドで指定した出力ファイルにコンポーネントレシピを書き込みます。必要に応じて、取得した Base64 でエンコードされた文字列を JSON または YAML に変換します。

------
#### [ Linux, macOS, or Unix ]

   ```
   aws greengrassv2 get-component \
       --arn <arn> \
       --recipe-output-format <recipe-format> \
       --query recipe \
       --output text | base64 --decode > <recipe-file>
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws greengrassv2 get-component ^
       --arn <arn> ^
       --recipe-output-format <recipe-format> ^
       --query recipe ^
       --output text > <recipe-file>.base64
   
   certutil -decode <recipe-file>.base64 <recipe-file>
   ```

------
#### [ PowerShell ]

   ```
   aws greengrassv2 get-component `
       --arn <arn> `
       --recipe-output-format <recipe-format> `
       --query recipe `
       --output text > <recipe-file>.base64
   
   certutil -decode <recipe-file>.base64 <recipe-file>
   ```

------

1. レシピファイルの名前を `<component-name>-<component-version>` に更新します。ここでは、コンポーネントバージョンは新しいコンポーネントのターゲットバージョンです。例えば、`variant.DLR.ImageClassification.ModelStore-2.1.1.yaml`。

1. <a name="override-model-recipe-config"></a>レシピで次の値を更新します。
   + `ComponentVersion`: コンポーネントのマイナーバージョンをインクリメントします。

     カスタムコンポーネントを作成してパブリックモデルコンポーネントをオーバーライドする場合、既存のコンポーネントバージョンのマイナーバージョンのみを更新する必要があります。例えば、パブリックコンポーネントのバージョンが `2.1.0` の場合、バージョン `2.1.1` でカスタムコンポーネントを作成できます。
   + `Manifests.Artifacts.Uri`: 各 URI 値を使用するモデルの Amazon S3 URI に更新します。
**注記**  
コンポーネントの名前は変更しないでください。

1. 次のコマンドを実行して、取得して修正したレシピを使用して新しいコンポーネントを作成します。

   ```
   aws greengrassv2 create-component-version \
       --inline-recipe fileb://path/to/component/recipe
   ```
**注記**  
このステップでは、 AWS IoT Greengrass のサービスに コンポーネントを作成します AWS クラウド。コンポーネントをクラウドにアップロードする前に、Greengrass CLI を使用してコンポーネントをローカルで開発、テスト、デプロイできます。詳細については、「[AWS IoT Greengrass コンポーネントの開発](develop-greengrass-components.md)」を参照してください。

コンポーネントの作成に関する詳細については、「[AWS IoT Greengrass コンポーネントの開発](develop-greengrass-components.md)」を参照してください。

## カスタム機械学習のコンポーネントを作成
<a name="create-private-ml-components"></a>

がサンプルコンポーネントを提供し AWS IoT Greengrass ないカスタム推論コードまたはランタイムを使用する場合は、カスタムコンポーネントを作成する必要があります。 AWSが提供するサンプル機械学習モデルとランタイムでカスタム推論コードを使用することも、独自のモデルとランタイムで完全にカスタマイズされた機械学習推論ソリューションを開発することもできます。モデルがサンプルランタイムコンポーネント AWS IoT Greengrass を提供するランタイムを使用している場合は、そのランタイムコンポーネントを使用できます。カスタムコンポーネントは、推論コードと使用するモデルに対してのみ作成する必要があります。

**Topics**
+ [パブリックコンポーネントのレシピを取得](#get-ml-component-recipes)
+ [サンプルコンポーネントのアーティファクトを取得](#get-ml-component-artifacts)
+ [S3 バケットへコンポーネントアーティファクトのアップロード](#upload-ml-component-artifacts)
+ [カスタムコンポーネントの作成](#create-ml-components)

### パブリックコンポーネントのレシピを取得
<a name="get-ml-component-recipes"></a>

既存のパブリック機械学習コンポーネントのレシピをテンプレートとして使用して、カスタムコンポーネントを作成できます。パブリックコンポーネントの最新バージョンのコンポーネントレシピを表示するには、コンソールまたは AWS CLI を次のように使用します。
+ **コンソールの使用**

  1. **[Components]** (コンポーネント) ページの **[Public components]** (パブリックコンポーネント) タブで、パブリックコンポーネントを探して選択します。

  1. コンポーネントページで、**[View recipe]** (レシピを確認) を選択します。
+ **の使用 AWS CLI**

  次のコマンドを実行して、パブリックバリアントコンポーネントのコンポーネントレシピを取得します。このコマンドは、コマンドで指定した JSON または YAML レシピファイルにコンポーネントレシピを書き込みます。

------
#### [ Linux, macOS, or Unix ]

  ```
  aws greengrassv2 get-component \
      --arn <arn> \
      --recipe-output-format <recipe-format> \
      --query recipe \
      --output text | base64 --decode > <recipe-file>
  ```

------
#### [ Windows Command Prompt (CMD) ]

  ```
  aws greengrassv2 get-component ^
      --arn <arn> ^
      --recipe-output-format <recipe-format> ^
      --query recipe ^
      --output text > <recipe-file>.base64
  
  certutil -decode <recipe-file>.base64 <recipe-file>
  ```

------
#### [ PowerShell ]

  ```
  aws greengrassv2 get-component `
      --arn <arn> `
      --recipe-output-format <recipe-format> `
      --query recipe `
      --output text > <recipe-file>.base64
  
  certutil -decode <recipe-file>.base64 <recipe-file>
  ```

------

  コマンドの値を、次のように置き換えます。
  + `<arn>`: パブリックコンポーネントの Amazon リソースネーム (ARN)。
  + `<recipe-format>`: レシピファイルを作成するフォーマット。サポートされている値は`JSON` および `YAML` です。
  + `<recipe-file>`: `<component-name>-<component-version>` フォーマットのレシピの名前。

### サンプルコンポーネントのアーティファクトを取得
<a name="get-ml-component-artifacts"></a>

パブリック機械学習コンポーネントで使用されるアーティファクトをテンプレートとして使用して、推論コードまたはランタイムインストールスクリプトなど、カスタムコンポーネントのアーティファクトを作成できます。

パブリック機械学習コンポーネントに含まれるサンプルアーティファクトを確認するには、パブリック推論コンポーネントをデプロイし、`/greengrass/v2/packages/artifacts-unarchived/component-name/component-version/` フォルダのデバイスのアーティファクトを確認します。

### S3 バケットへコンポーネントアーティファクトのアップロード
<a name="upload-ml-component-artifacts"></a>

カスタムコンポーネントを作成する前に、コンポーネントアーティファクトを S3 バケットにアップロードし、コンポーネントレシピの S3 URI を使用する必要があります。例えば、推論コンポーネントでカスタム推論コードを使用するには、S3 バケットにコードをアップロードします。次に、推論コードの Amazon S3 URI をコンポーネントのアーティファクトとして使用できます。

S3 バケットにコンテンツをアップロードする方法については、「*Amazon Simple Storage Service ユーザーガイド*」の「[汎用バケットの概要](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)」を参照してください。

**注記**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>アーティファクトは、コンポーネント AWS リージョン と同じ AWS アカウント および にある S3 バケットに保存する必要があります。 AWS IoT Greengrass がこれらのアーティファクトにアクセスできるようにするには、[Greengrass デバイスロール](device-service-role.md)で `s3:GetObject`アクションを許可する必要があります。デバイスロールの詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

### カスタムコンポーネントの作成
<a name="create-ml-components"></a>

取得したアーティファクトとレシピを使用してカスタム機械学習コンポーネントを作成できます。例については、[カスタム推論コンポーネントを作成](#create-inference-component)を参照してください。

コンポーネントの作成と Greengrass デバイスへのデプロイの詳細については、「[AWS IoT Greengrass コンポーネントの開発](develop-greengrass-components.md)」と「[AWS IoT Greengrass コンポーネントをデバイスにデプロイする](manage-deployments.md)」を参照してください。

## カスタム推論コンポーネントを作成
<a name="create-inference-component"></a>

このセクションでは、DLR イメージ分類コンポーネントをテンプレートとして使用して、カスタム推論コンポーネントを作成する方法を説明します。

**Topics**
+ [推論コードを Amazon S3 バケットにアップロード](#create-inference-code)
+ [推論コンポーネントのレシピを作成](#create-inference-component-recipe)
+ [推論コンポーネントの作成](#create-private-inference-component)

### 推論コードを Amazon S3 バケットにアップロード
<a name="create-inference-code"></a>

推論コードを作成し、S3 バケットにアップロードします。S3 バケットにコンテンツをアップロードする方法については、「*Amazon Simple Storage Service ユーザーガイド*」の「[汎用バケットの概要](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)」を参照してください。

**注記**  <a name="s3-artifacts-note"></a>
<a name="sr-artifacts-req"></a>アーティファクトは、コンポーネント AWS リージョン と同じ AWS アカウント および にある S3 バケットに保存する必要があります。 AWS IoT Greengrass がこれらのアーティファクトにアクセスできるようにするには、[Greengrass デバイスロール](device-service-role.md)で `s3:GetObject`アクションを許可する必要があります。デバイスロールの詳細については、「[コアデバイスが AWS サービスとやり取りできるように認可する](device-service-role.md)」を参照してください。

### 推論コンポーネントのレシピを作成
<a name="create-inference-component-recipe"></a>

1. 次のコマンドを実行して、DLR イメージ分類コンポーネントのコンポーネントレシピを取得します。このコマンドは、コマンドで指定した JSON または YAML レシピファイルにコンポーネントレシピを書き込みます。

------
#### [ Linux, macOS, or Unix ]

   ```
   aws greengrassv2 get-component \
       --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version \
       --recipe-output-format JSON | YAML \
       --query recipe \
       --output text | base64 --decode > <recipe-file>
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws greengrassv2 get-component ^
       --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version ^
       --recipe-output-format JSON | YAML ^
       --query recipe ^
       --output text > <recipe-file>.base64
   
   certutil -decode <recipe-file>.base64 <recipe-file>
   ```

------
#### [ PowerShell ]

   ```
   aws greengrassv2 get-component `
       --arn arn:aws:greengrass:region:aws:components:aws.greengrass.DLRImageClassification:versions:version `
       --recipe-output-format JSON | YAML `
       --query recipe `
       --output text > <recipe-file>.base64
   
   certutil -decode <recipe-file>.base64 <recipe-file>
   ```

------

   *<recipe-file>* を `<component-name>-<component-version>` 形式のレシピの名前に置き換えます。

1. レシピの `ComponentDependencies` オブジェクトに、使用するモデルとランタイムコンポーネントに応じて次の操作を 1 つ以上実行します。
   + DLR コンパイル型モデルを使用する場合、DLR コンポーネントの従属関係を維持します。次の例で示すように、カスタム ランタイム コンポーネントの従属関係に置き換えることもできます。

     **ランタイムコンポーネント**

------
#### [ JSON ]

     ```
     { 
         "<runtime-component>": {
             "VersionRequirement": "<version>",
             "DependencyType": "HARD"
         }
     }
     ```

------
#### [ YAML ]

     ```
     <runtime-component>:
         VersionRequirement: "<version>"
         DependencyType: HARD
     ```

------
   + DLR イメージ分類モデルストアの依存関係を維持して、 AWS が提供する事前トレーニング済みの ResNet-50 モデルを使用するか、カスタムモデルコンポーネントを使用するように変更します。パブリックモデルコンポーネントの依存関係を含める場合、コンポーネントの新しいカスタムバージョンが同じ AWS アカウント と に存在する場合 AWS リージョン、推論コンポーネントはそのカスタムコンポーネントを使用します。次の例に示すように、モデルコンポーネントの従属関係を指定します。

     **パブリックモデルコンポーネント**

------
#### [ JSON ]

     ```
     {
         "variant.DLR.ImageClassification.ModelStore": {
             "VersionRequirement": "<version>",
             "DependencyType": "HARD"
         }
     }
     ```

------
#### [ YAML ]

     ```
     variant.DLR.ImageClassification.ModelStore:
         VersionRequirement: "<version>"
         DependencyType: HARD
     ```

------

     **カスタムモデルコンポーネント**

------
#### [ JSON ]

     ```
     {
         "<custom-model-component>": {
             "VersionRequirement": "<version>",
             "DependencyType": "HARD"
         }
     }
     ```

------
#### [ YAML ]

     ```
     <custom-model-component>:
         VersionRequirement: "<version>"
         DependencyType: HARD
     ```

------

1. `ComponentConfiguration` オブジェクトで、このコンポーネントのデフォルト設定を追加します。コンポーネントをデプロイするときに、後でこの設定を修正できます。次の抜粋は、DLR イメージ分類コンポーネントのコンポーネント設定を示しています。

   例えば、カスタム推論コンポーネントの従属関係としてカスタムモデルコンポーネントを使用する場合、使用しているモデルの名前を提供するように `ModelResourceKey` を修正します。

------
#### [ JSON ]

   ```
   {
     "accessControl": {
       "aws.greengrass.ipc.mqttproxy": {
         "aws.greengrass.ImageClassification:mqttproxy:1": {
           "policyDescription": "Allows access to publish via topic ml/dlr/image-classification.",
           "operations": [
             "aws.greengrass#PublishToIoTCore"
           ],
           "resources": [
             "ml/dlr/image-classification"
           ]
         }
       }
     },
     "PublishResultsOnTopic": "ml/dlr/image-classification",
     "ImageName": "cat.jpeg",
     "InferenceInterval": 3600,
     "ModelResourceKey": {
       "armv7l": "DLR-resnet50-armv7l-cpu-ImageClassification",
       "x86_64": "DLR-resnet50-x86_64-cpu-ImageClassification",
       "aarch64": "DLR-resnet50-aarch64-cpu-ImageClassification"
     }
   }
   ```

------
#### [ YAML ]

   ```
   accessControl:
       aws.greengrass.ipc.mqttproxy:
           'aws.greengrass.ImageClassification:mqttproxy:1':
               policyDescription: 'Allows access to publish via topic ml/dlr/image-classification.'
               operations:
                   - 'aws.greengrass#PublishToIoTCore'
               resources:
                   - ml/dlr/image-classification
   PublishResultsOnTopic: ml/dlr/image-classification
   ImageName: cat.jpeg
   InferenceInterval: 3600
   ModelResourceKey:
       armv7l: "DLR-resnet50-armv7l-cpu-ImageClassification"
       x86_64: "DLR-resnet50-x86_64-cpu-ImageClassification"
       aarch64: "DLR-resnet50-aarch64-cpu-ImageClassification"
   ```

------

1. `Manifests` オブジェクトで、コンポーネントが異なるプラットフォームにデプロイされるときに使用されるこのコンポーネントのアーティファクトと設定に関する情報、並びにコンポーネントを正常に実行するために必要な他の情報を提供します。次の抜粋では、DLR イメージ分類コンポーネントの Linux プラットフォームの `Manifests` オブジェクトに対する設定を示しています。

------
#### [ JSON ]

   ```
   {
     "Manifests": [
       {
         "Platform": {
           "os": "linux",
           "architecture": "arm"
         },
         "Name": "32-bit armv7l - Linux (raspberry pi)",
         "Artifacts": [
           {
             "URI": "s3://SAMPLE-BUCKET/sample-artifacts-directory/image_classification.zip",
             "Unarchive": "ZIP"
           }
         ],
         "Lifecycle": {
           "Setenv": {
             "DLR_IC_MODEL_DIR": "{variant.DLR.ImageClassification.ModelStore:artifacts:decompressedPath}/{configuration:/ModelResourceKey/armv7l}",
             "DEFAULT_DLR_IC_IMAGE_DIR": "{artifacts:decompressedPath}/image_classification/sample_images/"
           },
           "Run": {
             "RequiresPrivilege": true,
             "script": ". {variant.DLR:configuration:/MLRootPath}/greengrass_ml_dlr_venv/bin/activate\npython3 {artifacts:decompressedPath}/image_classification/inference.py"
           }
         }
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   Manifests:
     - Platform:
         os: linux
         architecture: arm
       Name: 32-bit armv7l - Linux (raspberry pi)
       Artifacts:
         - URI: s3://SAMPLE-BUCKET/sample-artifacts-directory/image_classification.zip
           Unarchive: ZIP
       Lifecycle:
         SetEnv:
           DLR_IC_MODEL_DIR: "{variant.DLR.ImageClassification.ModelStore:artifacts:decompressedPath}/{configuration:/ModelResourceKey/armv7l}"
           DEFAULT_DLR_IC_IMAGE_DIR: "{artifacts:decompressedPath}/image_classification/sample_images/"
         Run:
           RequiresPrivilege: true
           script: |-
             . {variant.DLR:configuration:/MLRootPath}/greengrass_ml_dlr_venv/bin/activate
             python3 {artifacts:decompressedPath}/image_classification/inference.py
   ```

------

 コンポーネントレシピの作成の詳細については、「[AWS IoT Greengrass コンポーネントレシピリファレンス](component-recipe-reference.md)」を参照してください。

### 推論コンポーネントの作成
<a name="create-private-inference-component"></a>

 AWS IoT Greengrass コンソールまたは AWS CLI を使用して、先ほど定義したレシピを使用してコンポーネントを作成します。コンポーネントを作成した後、デバイスに推論を実行するためにデプロイできます。推論コンポーネントのデプロイ方法の例については、「[チュートリアル: TensorFlow Lite を使用したサンプルイメージ分類推論の実行](ml-tutorial-image-classification.md)」を参照してください。

#### カスタム推論コンポーネント (コンソール) を作成
<a name="create-inference-component-console"></a>

1. [AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass) にサインインします。

1. ナビゲーションメニューで、**[Components]** (コンポーネント) を選択します。

1. **[Components]** (コンポーネント) ページの **[My components]** (マイコンポーネント) タブで、**[Create component]** (コンポーネントの作成) を選択します。

1. **[Create component]** (コンポーネントの作成) ページの **[Component information]** (コンポーネント情報) 内で、**[Enter recipe as JSON]** (JSON としてレシピを入力) または** [Enter recipe as YAML]** (YAML としてレシピを入力) をコンポーネントソースとして選択します。

1. **[Recipe]** (レシピ) ボックスで、作成したカスタムレシピを入力します。

1. **[Create component]** (コンポーネントの作成) をクリックします。

#### カスタム推論コンポーネント (AWS CLI) を作成
<a name="create-inference-component-cli"></a>

次のコマンドを実行し、作成したレシピを使用して、新しいカスタムコンポーネントを作成します。

```
aws greengrassv2 create-component-version \
    --inline-recipe fileb://path/to/recipe/file
```

**注記**  
このステップでは、 AWS IoT Greengrass のサービスに コンポーネントを作成します AWS クラウド。コンポーネントをクラウドにアップロードする前に、Greengrass CLI を使用してコンポーネントをローカルで開発、テスト、デプロイできます。詳細については、「[AWS IoT Greengrass コンポーネントの開発](develop-greengrass-components.md)」を参照してください。

# 機械学習の推論に対するトラブルシューティング
<a name="ml-troubleshooting"></a>

このセクションのトラブルシューティング情報と解決策を使用して、機械学習コンポーネントの問題を解決してください。パブリック機械学習の推論コンポーネントについては、次のコンポーネントログのエラーメッセージを参照してください。

------
#### [ Linux or Unix ]
+ `/greengrass/v2/logs/aws.greengrass.DLRImageClassification.log`
+ `/greengrass/v2/logs/aws.greengrass.DLRObjectDetection.log`
+ `/greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log`
+ `/greengrass/v2/logs/aws.greengrass.TensorFlowLiteObjectDetection.log`

------
#### [ Windows ]
+ `C:\greengrass\v2\logs\aws.greengrass.DLRImageClassification.log`
+ `C:\greengrass\v2\logs\aws.greengrass.DLRObjectDetection.log`
+ `C:\greengrass\v2\logs\aws.greengrass.TensorFlowLiteImageClassification.log`
+ `C:\greengrass\v2\logs\aws.greengrass.TensorFlowLiteObjectDetection.log`

------

コンポーネントが正しくインストールされている場合、コンポーネントログに推論に使用するライブラリの場所が含まれます。

**Topics**
+ [ライブラリのフェッチに失敗しました](#rpi-update-error)
+ [Cannot open shared object file](#rpi-import-cv-error)
+ [Error: ModuleNotFoundError: No module named '<library>'](#troubleshooting-venv-errors-not-found)
+ [CUDA 対応デバイスが検出されません](#troubleshooting-cuda-error)
+ [そのようなファイルまたはディレクトリはありません](#troubleshooting-venv-errors-no-such-file)
+ [RuntimeError: module compiled against API version 0xf but this version of NumPy is <version>](#troubleshooting-rpi-numpy-version-error)
+ [picamera.exc.PiCameraError: Camera is not enabled](#troubleshooting-rpi-camera-stack-error)
+ [メモリエラー](#troubleshooting-memory-errors)
+ [ディスク容量エラー](#troubleshooting-disk-space-errors)
+ [タイムアウトエラー](#troubleshooting-timeout-errors)

## ライブラリのフェッチに失敗しました
<a name="rpi-update-error"></a>

次のエラーは、Raspberry Pi デバイスへのデプロイ中にインストーラスクリプトが必要なライブラリのダウンロードに失敗したときに発生します。

```
Err:2 http://raspbian.raspberrypi.org/raspbian buster/main armhf python3.7-dev armhf 3.7.3-2+deb10u1
404 Not Found [IP: 93.93.128.193 80] 
E: Failed to fetch http://raspbian.raspberrypi.org/raspbian/pool/main/p/python3.7/libpython3.7-dev_3.7.3-2+deb10u1_armhf.deb 404 Not Found [IP: 93.93.128.193 80]
```

`sudo apt-get update` を実行してコンポーネントを再度デプロイします。

## Cannot open shared object file
<a name="rpi-import-cv-error"></a>

インストーラスクリプトが、Raspberry Pi デバイスへのデプロイ時に `opencv-python` の必要な従属関係のダウンロードに失敗するとき、次のようなエラーが表示される場合があります。

```
ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory
```

以下のコマンドを実行して、`opencv-python`の従属関係を手動でインストールします:

```
sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
```

## Error: ModuleNotFoundError: No module named '<library>'
<a name="troubleshooting-venv-errors-not-found"></a>

ML ランタイムライブラリまたはその依存関係が正しくインストールされていないとき、ML ランタイム コンポーネント ログ (`variant.DLR.log` または `variant.TensorFlowLite.log`) にこのエラーが表示されることがあります。このエラーは、次の状況に発生する可能性があります:
+ デフォルトで有効になっている `UseInstaller` オプションを使用する場合、このエラーは、ML ランタイムコンポーネントがランタイムまたはその従属関係のインストールに失敗したことを示します。以下の操作を実行します。

  1. ML ランタイムコンポーネントを設定して `UseInstaller` オプションを無効にすします。

  1. ML ランタイムとその従属関係をインストールし、ML コンポーネントを実行するシステムユーザーがそれらを利用できるようにします。詳細については次を参照してください:
     + [DLR ランタイム Uselnstaller オプション](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlow Lite ランタイム UseInstaller オプション](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)
+ `UseInstaller` オプションを使用しない場合、このエラーは、ML コンポーネントを実行するシステムユーザーに ML ランタイムまたはその従属関係がインストールされていないことを示します。以下の操作を実行します。

  1. ML コンポーネントを実行するシステムユーザー用にライブラリがインストールされていることを確認します。*ggc\$1user* をシステムユーザーの名前に置き換えて、*tflite\$1runtime* を確認するライブラリの名前に置き換えます。

------
#### [ Linux or Unix ]

     ```
     sudo -H -u ggc_user bash -c "python3 -c 'import tflite_runtime'"
     ```

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

     ```
     runas /user:ggc_user "py -3 -c \"import tflite_runtime\""
     ```

------

  1. ライブラリがインストールされていない場合は、そのユーザー用にインストールします。*ggc\$1user* をシステムユーザーの名前に置き換えて、*tflite\$1runtime* をライブラリの名前に置き換えます。

------
#### [ Linux or Unix ]

     ```
     sudo -H -u ggc_user bash -c "python3 -m pip install --user tflite_runtime"
     ```

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

     ```
     runas /user:ggc_user "py -3 -m pip install --user tflite_runtime"
     ```

------

     各 ML ランタイムの従属関係の詳細については、次を参照してください。
     + [DLR ランタイム Uselnstaller オプション](dlr-component.md#dlr-component-config-useinstaller-term)
     + [TensorFlow Lite ランタイム UseInstaller オプション](tensorflow-lite-component.md#tensorflow-lite-component-config-useinstaller-term)

  1. 問題が解決しない場合、別のユーザー用にライブラリをインストールして、このデバイスでライブラリをインストールできるかどうかを確認します。例えば、ユーザーは、お客様のユーザー、ルートユーザー、管理者ユーザーの場合があります。どのユーザーに対してもライブラリを正常にインストールできない場合、デバイスがライブラリをサポートしていない可能性があります。ライブラリのマニュアルを参照して、要件を確認してインストールの問題のトラブルシューティングを行ってください。

## CUDA 対応デバイスが検出されません
<a name="troubleshooting-cuda-error"></a>

GPU アクセラレーションを使用すると、次のエラーが表示されることがあります。次のコマンドを実行して、Greengrass ユーザーの GPU アクセスを有効にします。

```
sudo usermod -a -G video ggc_user
```

## そのようなファイルまたはディレクトリはありません
<a name="troubleshooting-venv-errors-no-such-file"></a>

次のエラーは、ランタイムコンポーネントが仮想環境を正しく設定できなかったことを示します:
+ `MLRootPath/greengrass_ml_dlr_conda/bin/conda: No such file or directory `
+ `MLRootPath/greengrass_ml_dlr_venv/bin/activate: No such file or directory ` 
+ `MLRootPath/greengrass_ml_tflite_conda/bin/conda: No such file or directory ` 
+ `MLRootPath/greengrass_ml_tflite_venv/bin/activate: No such file or directory `

ログをチェックして、すべてのランタイム従属関係が正しくインストールされていることを確認します。インストーラスクリプトによってインストールされたライブラリの詳細については、次のトピックを参照してください。
+ [DLR ランタイム](dlr-component.md)
+ [TensorFlow Lite ランタイム](tensorflow-lite-component.md)

デフォルトで、*MLRootPath* は `/greengrass/v2/work/component-name/greengrass_ml` に設定されます。この場所を変更するには、[DLR ランタイム](dlr-component.md) または [TensorFlow Lite ランタイム](tensorflow-lite-component.md) ランタイムコンポーネントをデプロイに直接含めて、`MLRootPath` パラメータの修正値を設定マージ更新に指定です。コンポーネントの設定の詳細については、「[コンポーネント設定の更新](update-component-configurations.md)」を参照してください。

**注記**  
DLR コンポーネント v1.3.x の場合、推論コンポーネントの設定で `MLRootPath` パラメータを設定し、デフォルト値は `$HOME/greengrass_ml` です。

## RuntimeError: module compiled against API version 0xf but this version of NumPy is <version>
<a name="troubleshooting-rpi-numpy-version-error"></a>

Raspberry Pi OS Bullseye を実行している Raspberry Pi で機械学習の推論を実行するとき、次のエラーが表示される場合があります。

```
RuntimeError: module compiled against API version 0xf but this version of numpy is 0xd
ImportError: numpy.core.multiarray failed to import
```

このエラーは、Raspberry Pi OS Bullseye に OpenCV が必要とするバージョンよりも前のバージョンの NumPy が含まれている原因によって発生します。この問題を解決するには、次のコマンドを実行して NumPy を最新バージョンにアップグレードします。

```
pip3 install --upgrade numpy
```

## picamera.exc.PiCameraError: Camera is not enabled
<a name="troubleshooting-rpi-camera-stack-error"></a>

Raspberry Pi OS Bullseye を実行している Raspberry Pi で機械学習の推論を実行するとき、次のエラーが表示される場合があります。

```
picamera.exc.PiCameraError: Camera is not enabled. Try running 'sudo raspi-config' and ensure that the camera has been enabled.
```

このエラーは、Raspberry Pi OS Bullseye に ML コンポーネントと互換性のない新しいカメラスタックが含まれているために発生します。この問題を解決するには、レガシーカメラスタックを有効にします。<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**レガシーカメラスタックを有効にするには**

1. 次のコマンドを実行して、Raspberry Pi 設定ツールを開きます。

   ```
   sudo raspi-config
   ```

1. **[Interface Options]** (インターフェイスオプション) を選択します。

1. **[Legacy camera]** (レガシーカメラ) を選択して、レガシーカメラスタックを有効にします。

1. Raspberry Pi を再起動します。

## メモリエラー
<a name="troubleshooting-memory-errors"></a>

次のエラーは、通常、デバイスに十分なメモリがなく、コンポーネントプロセスが中断された場合に発生します。
+ `stderr. Killed.`
+ `exitCode=137`

パブリック機械学習の推論コンポーネントをデプロイするには、最低 500 MB のメモリを推奨します。

## ディスク容量エラー
<a name="troubleshooting-disk-space-errors"></a>

`no space left on device` エラーは、通常、デバイスに十分なストレージがない場合に発生します。コンポーネントを再度デプロイする前に、デバイスに十分なディスク容量があることを確認してください。パブリック機械学習の推論コンポーネントをデプロイするには、最低 500 MB の空きディスク容量をお勧めします。

## タイムアウトエラー
<a name="troubleshooting-timeout-errors"></a>

パブリック機械学習コンポーネントは、200 MB を超える大きな機械学習モデルファイルをダウンロードします。デプロイ中にダウンロードがタイムアウトした場合、インターネット接続速度を確認してデプロイを再試行してください。