

サポート終了通知: 2026 年 10 月 7 日、 AWS はサポートを終了します AWS IoT Greengrass Version 1。2026 年 10 月 7 日以降、 AWS IoT Greengrass V1 リソースにアクセスできなくなります。詳細については、[「 からの移行 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)」を参照してください。

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

# を使用して機械学習推論を設定する方法 AWS マネジメントコンソール
<a name="ml-console"></a>

このチュートリアルのステップに従うには、 AWS IoT Greengrass Core v1.10 以降が必要です。

ローカルに生成されたデータを使用して、Greengrass コアデバイスで機械学習 (ML) 推論をローカルで実行できます。要件と制約を含め、情報については、「[機械学習の推論を実行する](ml-inference.md)」を参照してください。

このチュートリアルでは、 を使用して Greengrass グループを設定し、クラウド AWS マネジメントコンソール にデータを送信せずにカメラからのイメージをローカルで認識する Lambda 推論アプリケーションを実行する方法について説明します。推論アプリケーションは、Raspberry Pi 上のカメラモジュールにアクセスし、オープンソースの [SqueezeNet](https://github.com/DeepScale/SqueezeNet) モデルを使用して推論を実行します。

このチュートリアルのおおまかな手順は以下のとおりです。

1. [Raspberry Pi を設定する](#config-raspberry-pi)

1. [MXNet フレームワークをインストールする](#install-mxnet)

1. [モデルパッケージを作成する](#package-ml-model)

1. [Lambda 関数を作成して発行する](#ml-console-create-lambda)

1. [グループに Lambda 関数を追加する](#ml-console-config-lambda)

1. [グループにリソースを追加する](#ml-console-add-resources)

1. [グループにサブスクリプションを追加する](#ml-console-add-subscription)

1. [グループをデプロイする](#ml-console-deploy-group)

1. [アプリケーションをテストする](#ml-console-test-app)

## 前提条件
<a name="ml-inference-prerequisites"></a>

このチュートリアルを完了するには、以下が必要です。
+ Raspberry Pi 4 モデル B、または Raspberry Pi 3 モデル B/B\$1 は、 で使用するようにセットアップおよび設定されています AWS IoT Greengrass。Raspberry Pi を AWS IoT Greengrassと共にセットアップする前に、[Greengrass Device Setup](quick-start.md) スクリプトを実行するか、[の開始方法 AWS IoT Greengrass](gg-gs.md) の[モジュール 1](https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html) と[モジュール 2](https://docs.aws.amazon.com/greengrass/latest/developerguide/module2.html) を完了していることを確認します。
**注記**  
Raspberry Pi では、イメージ分類に一般的に使用される深層学習のフレームワークを動かすために、2.5A の[電源](https://www.raspberrypi.org/documentation/hardware/raspberrypi/power/)が必要な場合があります。定格の低い電源を使用すると、デバイスが再起動する場合があります。
+ [Raspberry Pi カメラモジュール V2 - 8 メガピクセル、1080p](https://www.amazon.com/Raspberry-Pi-Camera-Module-Megapixel/dp/B01ER2SKFS)。カメラの設定方法については、Raspberry Pi ドキュメントの[カメラの接続](https://www.raspberrypi.org/documentation/usage/camera/)に関するトピックを参照してください。
+ Greengrass グループと Greengrass コア。Greengrass グループまたはコアを作成する方法については、「[の開始方法 AWS IoT Greengrass](gg-gs.md)」を参照してください。

**注記**  
このチュートリアルでは Raspberry Pi を使用しますが、[Intel Atom](#atom-lambda-config) や [NVIDIA Jetson TX2 ](#jetson-lambda-config)などの他のプラットフォーム AWS IoT Greengrass をサポートしています。Jetson TX2 の例は、カメラからストリームされた画像の代わりに静的画像を使用できます。Jetson TX2 の例を使用する場合は、Python 3.7 ではなく Python 3.6 をインストールする必要があります。 AWS IoT Greengrass Core ソフトウェアをインストールできるようにデバイスを設定する方法については、「」を参照してください[他のデバイスの設定](setup-filter.other.md)。  
 AWS IoT Greengrass がサポートしていないサードパーティープラットフォームの場合は、Lambda 関数をコンテナ化されていないモードで実行する必要があります。非コンテナ化モードで実行するには、Lambda 関数を root として実行する必要があります。詳細については、「[Lambda 関数のコンテナ化を選択する場合の考慮事項](lambda-group-config.md#lambda-containerization-considerations)」および「[グループ内の Lambda 関数に対するデフォルトのアクセス ID の設定](lambda-group-config.md#lambda-access-identity-groupsettings)」を参照してください。

## ステップ 1: Raspberry Pi を設定する
<a name="config-raspberry-pi"></a>

このステップでは、Raspbian オペレーティングシステムの更新プログラムをインストールし、カメラモジュールソフトウェアと Python の依存関係をインストールして、カメラインターフェイスを有効にします。

Raspberry Pi のターミナルで以下のコマンドを実行します。

1. Raspbian に更新プログラムをインストールします。

   ```
   sudo apt-get update
   sudo apt-get dist-upgrade
   ```

1. <a name="install-picamera-step"></a>カメラモジュールの `picamera` インターフェイス、およびこのチュートリアルに必要なその他の Python ライブラリをインストールします。

   ```
   sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picamera
   ```

   インストールを検証します。
   + Python 3.7 のインストールに pip が含まれていることを確認します。

     ```
     python3 -m pip
     ```

     pip がインストールされていない場合は、[pip ウェブサイト](https://pip.pypa.io/en/stable/installing/)からダウンロードし、次のコマンドを実行します。

     ```
     python3 get-pip.py
     ```
   + Python のバージョンが 3.7 以上であることを確認します。

     ```
     python3 --version
     ```

     出力に以前のバージョンが表示されている場合は、次のコマンドを実行します。

     ```
     sudo apt-get install -y python3.7-dev
     ```
   + Setuptools と Picamera が正常にインストールされたことを確認します。

     ```
     sudo -u ggc_user bash -c 'python3 -c "import setuptools"'
     sudo -u ggc_user bash -c 'python3 -c "import picamera"'
     ```

     出力にエラーが含まれていない場合、検証は成功です。
**注記**  
デバイスにインストールされている Python 実行可能ファイルが `python3.7` である場合は、このチュートリアルのコマンドに `python3` ではなく、`python3.7` を使用します。依存関係のエラーを回避するために、pip インストールが正しい `python3` バージョンまたは `python3.7` バージョンにマップされていることを確認してください。

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

   ```
   sudo reboot
   ```

1. Raspberry Pi 設定ツールを開きます。

   ```
   sudo raspi-config
   ```

1. 矢印キーを使用して **[インターフェイスオプション]** を開き、カメラインターフェイスを有効にします。プロンプトが表示されたら、デバイスを再起動します。

1. 以下のコマンドを使用して、カメラの設定をテストします。

   ```
   raspistill -v -o test.jpg
   ```

   これにより、Raspberry Pi のプレビューウィンドウが開き、`test.jpg` という写真が現在のディレクトリに保存されて、カメラに関する情報が Raspberry Pi のターミナルに表示されます。

## ステップ 2: MXNet フレームワークをインストールする
<a name="install-mxnet"></a>

このステップでは、Raspberry Pi に MXNet ライブラリをインストールします。

1. <a name="ssh-rpi-step"></a>リモートで Raspberry Pi にサインインします。

   ```
   ssh pi@your-device-ip-address
   ```

1. MXNet のドキュメントを開き、[MXNet のインストール](https://mxnet.apache.org/get_started/?)を開いて、指示に従って MXNet をデバイスにインストールします。
**注記**  
このチュートリアルでは、デバイスの競合を回避するために、バージョン 1.5.0 をインストールし、ソースから MXNet をビルドすることをお勧めします。

1. MXNet をインストールしたら、次の設定を検証します。
   + `ggc_user` システムアカウントが MXNet フレームワークを使用できることを確認します。

     ```
     sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
     ```
   + NumPy がインストールされていることを確認します。

     ```
     sudo -u ggc_user bash -c 'python3 -c "import numpy"'
     ```

## ステップ 3: MXNet モデルパッケージを作成する
<a name="package-ml-model"></a>

このステップでは、Amazon Simple Storage Service (Amazon S3) にアップロードする事前トレーニング済みのサンプル MXNet モデルを含むモデルパッケージを作成します。tar.gz または zip 形式を使用する場合、 AWS IoT Greengrass は Amazon S3 のモデルパッケージを使用できます。Amazon S3

1. コンピュータで、[機械学習のサンプル](what-is-gg.md#gg-ml-samples) から Raspberry Pi 用の MXNet サンプルをダウンロードします。

1.  ダウンロードした `mxnet-py3-armv7l.tar.gz` ファイルを解凍します。

1. `squeezenet` ディレクトリに移動します。

   ```
   cd path-to-downloaded-sample/mxnet-py3-armv7l/models/squeezenet
   ```

   このディレクトリ内の `squeezenet.zip` ファイルはモデルパッケージです。これには、イメージ分類モデルの SqueezeNet オープンソースモデルアーティファクトが含まれています。後で、このモデルパッケージを Amazon S3 にアップロードします。

## ステップ 4: Lambda 関数を作成して発行する
<a name="ml-console-create-lambda"></a>

この手順では、Lambda 関数デプロイパッケージと Lambda 関数を作成します。次に、関数のバージョンを公開し、エイリアスを作成します。

まず、Lambda 関数デプロイパッケージを作成します。

1. コンピュータで、「[ステップ 3: MXNet モデルパッケージを作成する](#package-ml-model)」で解凍したサンプルパッケージ内の `examples` ディレクトリに移動します。

   ```
   cd path-to-downloaded-sample/mxnet-py3-armv7l/examples
   ```

   `examples` ディレクトリには、関数コードと依存関係が含まれています。
   + `greengrassObjectClassification.py` は、このチュートリアルで使用される推論コードです。このコードをテンプレートとして使用して、独自の推論関数を作成できます。
   + <a name="ml-samples-ggc-sdk"></a>`greengrasssdk` は、 AWS IoT Greengrass Core SDK for Python のバージョン 1.5.0 です。
**注記**  <a name="ml-samples-ggc-sdk-upgrade"></a>
新しいバージョンが利用できる場合は、そのバージョンをダウンロードし、デプロイパッケージ内の SDK バージョンをアップグレードできます。詳細については、GitHub の「[AWS IoT Greengrass Core SDK for Python](https://github.com/aws/aws-greengrass-core-sdk-python/)」を参照してください。

1.  `examples` ディレクトリの内容を `greengrassObjectClassification.zip` という名前のファイルに圧縮します。このファイルがデプロイパッケージです。

   ```
   zip -r greengrassObjectClassification.zip .
   ```
**注記**  <a name="ml-samples-function-zip"></a>
 `.py` ファイルと依存関係がディレクトリのルートにあることを確認します。

    

   次に、Lambda 関数を作成します。

1.  AWS IoT コンソールから、**関数** と **関数の作成** を選択します。

1. **[一から作成]** を選択し、以下の値を使用して関数を作成します。
   + **[関数名]** に「**greengrassObjectClassification**」と入力します。
   + **[ランタイム]** で **[Python 3.7]** を選択します。

   **[アクセス許可]** はデフォルト設定のままにしておきます。これで Lambda への基本的なアクセス許可を付与する実行ロールが作成されます。このロールは では使用されません AWS IoT Greengrass。

1. [**関数の作成**] を選択してください。

    

   今度は、Lambda 関数デプロイパッケージをアップロードし、ハンドラを登録します。

1. [Lambda function](Lambda 関数) を選択し、Lambda 関数のデプロイパッケージをアップロードします。

   1. <a name="lambda-console-upload"></a>**[コード]** タブの **[コードソース]** で、**[アップロード元]** を選択します。ドロップダウンから **[.zip ファイル]** を選択します。  
![\[[.zip ファイル] が強調表示された [アップロード元] ドロップダウンリスト。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. **[アップロード]** を選択し、`greengrassObjectClassification.zip` デプロイパッケージを選択します。次に、**[保存]** を選択します。

   1. <a name="lambda-console-runtime-settings-para"></a>関数の **[Code]** (コード) タブにある **[Runtime settings]** (ランタイム設定) で **[Edit]** (編集) を選択し、次の値を入力します。
      + **[ランタイム]** で **[Python 3.7]** を選択します。
      + **[ハンドラ]** に **greengrassObjectClassification.function\$1handler** と入力します。

      **[保存]** を選択します。

   次に、Lambda 関数の最初のバージョンを発行します。その後、[バージョンのエイリアス](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)を作成します。
**注記**  
Greengrass グループは、Lambda 関数をエイリアス別 (推奨) またはバージョン別に参照できます。エイリアスを使用すると、関数コードを更新する時にサブスクリプションテーブルやグループ定義を変更する必要がないため、コード更新を簡単に管理できます。その代わりに、新しい関数バージョンにエイリアスを指定するだけで済みます。

1. **[アクション]** メニューから、**[新しいバージョンを発行]** を選択します。  
![\[[アクション] メニューの [新しいバージョンを発行] オプション。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/ml-inference/lambda-publish-version.png)

1. **[バージョンの説明]** に **First version** と入力し、**[発行]** を選択します。

1. [**greengrassObjectClassification: 1**] 設定ページで、[**Actions**] (アクション) メニューの [**エイリアスの作成**] を選択します。  
![\[[アクション] メニューの [エイリアスの作成] オプション。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/ml-inference/lambda-create-alias.png)

1. **[新しいエイリアスの作成]** ページで、次の値を使用します。
   + [**名前**] に**mlTest**と入力してください。
   + **[バージョン]** に **1** と入力します。
**注記**  
AWS IoT Greengrass は、**\$1LATEST** バージョンの Lambda エイリアスをサポートしていません。

1. **[保存]** を選択します。

    

   次に、Lambda 関数を Greengrass グループに追加します。

## ステップ 5: Lambda 関数を Greengrass グループに追加する
<a name="ml-console-config-lambda"></a>

このステップでは、Lambda 関数をグループに追加してから、そのライフサイクルと環境変数を設定します。

まず、Lambda 関数を Greengrass グループに追加します。

1.  AWS IoT コンソールナビゲーションペインの**「管理**」で **Greengrass デバイス**を展開し、**「グループ (V1)**」を選択します。

1. グループ設定ページで、**[Lambda functions]** (Lambda 関数) タブを選択します。

1. **[My Lambda functions]** (自分の Lambda 関数) セクションから、**[Add]**（追加）を選択します。

1. **[Lambda 関数]** で、**[greengrassObjectClassification]** を選択します。

1. **Lambda 関数のバージョン**で、**Alias:mlTest** を選択します。

    

   次に、Lambda 関数のライフサイクルと環境変数を設定します。

1. **[Lambda function configuration]** (Lambda 関数の設定) セクションで次のように更新します。
**注記**  
ビジネスケースで要求される場合を除き、Lambda 関数はコンテナ化を使用せずに実行することをお勧めします。これにより、デバイスリソースを設定しなくても、デバイスの GPU とカメラにアクセスできるようになります。コンテナ化なしで を実行する場合は、 AWS IoT Greengrass Lambda 関数へのルートアクセスも許可する必要があります。

   1. **コンテナ化を使用せずに実行するには:**
      + **[System user and group]** (システムユーザーとグループ) で、**Another user ID/group ID**を選択します。**[System user ID]** (システムユーザ ID) には、「**0**」と入力します。**[System group ID]** (システムグループ ID) には、「**0**」と入力します。

        これにより、Lambda 関数を root として実行できます。root として実行の詳細については、「[グループ内の Lambda 関数に対するデフォルトのアクセス ID の設定](lambda-group-config.md#lambda-access-identity-groupsettings)」を参照してください。
**ヒント**  
また、ルートアクセスを Lambda 関数に付与するように `config.json` ファイルを更新する必要があります。手順については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。
      + **[Lambda function containerization]** (Lambda 関数のコンテナ化) で、**[No container]** (コンテナなし) を選択します。

        コンテナ化を使用しない実行の詳細については、「[Lambda 関数のコンテナ化を選択する場合の考慮事項](lambda-group-config.md#lambda-containerization-considerations)」を参照してください。
      + **[タイムアウト]** に **10 seconds** と入力します。
      + **[固定]** で、**[True]** を選択します。

        詳細については、「[Greengrass Lambda 関数のライフサイクル設定](lambda-functions.md#lambda-lifecycle)」を参照してください。

   1.  **代わりにコンテナ化モードで実行するには:** 
**注記**  
ビジネスケースで要求されない限り、コンテナ化モードでの実行はお勧めしていません。
      + **[System user and group]** (システムユーザーとグループ) で、**[Use group default]** (グループのデフォルトを使用) を選択します。
      + **[Lambda function containerization]** (Lambda 関数のコンテナ化) で、**[Use group default]** (グループのデフォルトを使用) を選択します。
      + **[メモリ制限]** に **96 MB** と入力します。
      + **[タイムアウト]** に **10 seconds** と入力します。
      + **[固定]** で、**[True]** を選択します。

        詳細については、「[Greengrass Lambda 関数のライフサイクル設定](lambda-functions.md#lambda-lifecycle)」を参照してください。

1. **[環境変数]** で、キーと値のペアを作成します。キーと値のペアは、Raspberry Pi 上で MXNet モデルとやり取りする関数で必要となります。

   キーには、MXNET\$1ENGINE\$1TYPE を使用します。値には、NaiveEngine を使用します。
**注記**  
独自のユーザー定義 Lambda 関数では、必要に応じて、関数コードで環境変数を設定できます。

1. 他のすべてのプロパティではデフォルト値を保持し、**[Add Lambda function]** (Lambda 関数の追加) を選択します。

## ステップ 6: Greengrass グループにリソースを追加する
<a name="ml-console-add-resources"></a>

このステップでは、カメラモジュールと ML 推論モデルのリソースを作成し、リソースを Lambda 関数に関連付けます。これにより、Lambda 関数がコアデバイス上のリソースにアクセスできるようになります。

**注記**  
コンテナ化されていないモードで を実行すると、 AWS IoT Greengrass はこれらのデバイスリソースを設定せずにデバイス GPU とカメラにアクセスできます。

まず、カメラ用に 2 つのローカルデバイスリソースを作成します。1 つは共有メモリ用、もう 1 つはデバイスインターフェイス用です。ローカルリソースアクセスの詳細については、「[Lambda 関数とコネクタを使用してローカルリソースにアクセスする](access-local-resources.md)」を参照してください。

1. グループ設定ページで、**[Resources]** (リソース) タブを選択します。

1. **[Local resources]** (ローカルリソース) タブで、**[Add local resource]** (ローカルリソースの追加) を選択します。

1. **[Add a local resource]** (ローカルリソースの追加) ページで、次の値を使用します。
   + **[リソース名]** に **videoCoreSharedMemory** と入力します。
   + **[リソースタイプ]** で、**[デバイス]** を選択します。
   + **[Local device path]** (ローカルデバイスパス) には、「**/dev/vcsm**」と入力します。

     デバイスパスはデバイスリソースのローカル絶対パスです。このパスでは、`/dev` 以下のキャラクターデバイスまたはブロックデバイスのみを参照できます。
   + **[System group owner and file access permissions]** (システムグループ所有者のファイルアクセス許可)で、**[Automatically add file system permissions of the system group that owns the resource]** (リソースを所有するシステムグループのファイルシステム権限を自動的に追加する) を選択します。

     **[System group owner and file access permissions]** (システムグループ所有者のファイルアクセス権限) オプションを使用すると、Lambda プロセスに追加のファイルアクセス権限をグラントできます。詳細については、「[グループ所有者のファイルアクセス権限](access-local-resources.md#lra-group-owner)」を参照してください。

1. 次に、カメラインターフェイス用にローカルデバイスリソースを追加します。

1. **[Add local resource]** (ローカルリソースの追加) を選択します。

1. **[Add a local resource]** (ローカルリソースの追加) ページで、次の値を使用します。
   + **[リソース名]** に **videoCoreInterface** と入力します。
   + **[リソースタイプ]** で、**[デバイス]** を選択します。
   + **[Local device path]** (ローカルデバイスパス) には、「**/dev/vchiq**」と入力します。
   + **[System group owner and file access permissions]** (システムグループ所有者のファイルアクセス許可)で、**[Automatically add file system permissions of the system group that owns the resource]** (リソースを所有するシステムグループのファイルシステム権限を自動的に追加する) を選択します。

1. ページの下部で、[**Add resource**] (リソースの追加) を選択します。

 

ここで、推論モデルを機械学習リソースとして追加します。このステップでは、`squeezenet.zip` モデルパッケージを Amazon S3 にアップロードします。

1. グループの **[Resources]** (リソース) タブの、**[Machine Learning]** (機械学習) で、**[Add machine learning resour]** (機械学習リソースの追加) を選択します。

1. **[Add a machine learning resource (機械学習リソースの追加)** ページで、**[Resource name]** (リソース名) に、「 **squeezenet\$1model**」と入力します。

1. **[Model source]** (モデルソース) で、**[Use a model stored in S3, such as a model optimized through Deep Learning Compiler]** (深層学習コンパイラで最適化されたモデルなど、S3 に保存されているモデルを使用する) を選択します。

1. **[S3 URI]**には、S3 バケットが保存されているパスを入力します。

1.  **[S3 を参照]** を選択します。これにより、新しいタブで Amazon S3 コンソールが開きます。

1.  Amazon S3 コンソールタブで、`squeezenet.zip` ファイルを S3 バケットにアップロードします。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[S3 バケットにファイルとフォルダをアップロードする方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html)」を参照してください。
**注記**  
S3 バケットにアクセスできるようにするには、バケット名に文字列 **greengrass** が含まれている必要があります。バケットは、 AWS IoT Greengrassに使用するリージョンと同じリージョンに存在する必要があります。一意の名前 (**greengrass-bucket-*user-id*-*epoch-time*** など) を選択します。バケット名にピリオド (`.`) を使用しないでください。

1.  AWS IoT Greengrass コンソールタブで、S3 バケットを見つけて選択します。アップロードした `squeezenet.zip` ファイルを見つけ、**[選択]** を選択します。利用可能なバケットとファイルのリストを更新するために [**更新**] を選択する必要がある場合があります。

1. **[送信先パス]** に **/greengrass-machine-learning/mxnet/squeezenet** と入力します。

   これは、Lambda ランタイム名前空間内のローカルモデルのターゲットです。グループをデプロイすると、 はソースモデルパッケージ AWS IoT Greengrass を取得し、指定したディレクトリにコンテンツを抽出します。このチュートリアルのサンプル Lambda 関数は、このパス (`model_path` 変数) を使用するように既に設定されています。

1. **[System group owner and file access permissions]** (システムグループ所有者のファイルアクセス許可) で、**[No system group]** (システムグループなし) を選択します。

1. **[リソースを追加]** を選択します。

### SageMaker AI トレーニング済みモデルの使用
<a name="sm-models"></a>

このチュートリアルでは、Amazon S3 に保存されているモデルを使用しますが、SageMaker AI モデルも簡単に使用できます。 AWS IoT Greengrass コンソールには SageMaker AI 統合が組み込まれているため、これらのモデルを Amazon S3 に手動でアップロードする必要はありません。SageMaker AI モデルを使用する際の要件と制限については、「」を参照してください[サポートされているモデルソース](ml-inference.md#supported-model-sources)。

SageMaker AI モデルを使用するには:
+ **モデルソース**で、**SageMaker AI で AWS トレーニングされたモデルを使用し**、モデルのトレーニングジョブの名前を選択します。
+ **[Destination path]** (送信先) に、Lambda 関数によってモデルが検索されるディレクトリへのパスを入力します。

## ステップ 7: Greengrass グループにサブスクリプションを追加する
<a name="ml-console-add-subscription"></a>

このステップでは、グループにサブスクリプションを追加します。このサブスクリプションにより、Lambda 関数は MQTT トピックに発行 AWS IoT することで、予測結果を に送信できます。

1. グループ設定ページで、**[Subscriptions]** (サブスクリプション) タブ、**[Add Subscription]** (サブスクリプションの追加) の順に選択します。

1. **[Subscription details]** (サブスクリプションの詳細) ページで、ソースおよびターゲットを次のように設定します。

   1. **[Source type]** (ソースタイプ) で、**[Lambda function]** (Lambda 関数)、**[greengrassObjectClassification]** の順に選択します。

   1. **[Target type]** (ターゲットタイプ)で、**[Service]** (サービス)、**[IoT Cloud]** (IoT クラウド) の順に選択します。

1. **[Topic filter]** (トピックのフィルター) で、「**hello/world**」と入力し、**[Create subscription]** (サブスクリプションの作成) を選択します。

## ステップ 8: Greengrass グループをデプロイする
<a name="ml-console-deploy-group"></a>

このステップでは、グループ定義の現在のバージョンを Greengrass コアデバイスにデプロイします。この定義には、追加した Lambda 関数、リソース、サブスクリプション設定が含まれます。

1.  AWS IoT Greengrass コアが実行されていることを確認します。必要に応じて、Raspberry Pi のターミナルで以下のコマンドを実行します。

   1. デーモンが実行中かどうかを確認するには、以下を実行します。

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      出力に `root` で実行中の `/greengrass/ggc/packages/1.11.6/bin/daemon` のエントリが含まれていれば、デーモンは実行されています。
**注記**  
パスのバージョンは、コアデバイスにインストールされている AWS IoT Greengrass Core ソフトウェアのバージョンによって異なります。

   1. デーモンを開始するには、以下を実行します。

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. グループ設定ページで、**[Deploy]** (デプロイ) を選択します。  
![\[[デプロイ] と [デプロイ] が強調表示されたグループの設定ページ。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/console-group-deployments-deploy.png)

1. **[Lambda functions]** (Lambda 関数) タブの **[System Lambda functions]** (システム Lambda 関数) セクションで、**[IP detector]** (IP ディテクター)、**[Edit\$1** (編集) の順に選択します。

1. **[IP ディテクターの設定を編集]** ダイアログボックスで、**[MQTT ブローカーエンドポイントを自動的に検出して上書きする]** を選択します。

1. **[保存]** を選択します。

   これにより、デバイスは、IP アドレス、DNS、ポート番号など、コアの接続情報を自動的に取得できます。自動検出が推奨されますが、手動で指定されたエンドポイント AWS IoT Greengrass もサポートされます。グループが初めてデプロイされたときにのみ、検出方法の確認が求められます。
**注記**  
プロンプトが表示されたら、[Greengrass サービスロール](service-role.md)を作成し、それを現在の AWS アカウント の に関連付けるアクセス許可を付与します AWS リージョン。このロールにより AWS IoT Greengrass 、 は AWS サービスのリソースにアクセスできます。

   **[デプロイ]** ページには、デプロイのタイムスタンプ、バージョン ID、ステータスが表示されます。完了すると、デプロイのステータスが **[Completed]** (完了) と表示されます。

   デプロイの詳細については、「[AWS IoT Greengrass コアに AWS IoT Greengrass グループをデプロイする](deployments.md)」を参照してください。トラブルシューティングのヘルプについては、「[トラブルシューティング AWS IoT Greengrass](gg-troubleshooting.md)」を参照してください。

## ステップ 9: 推論アプリケーションをテストする
<a name="ml-console-test-app"></a>

これで、デプロイが正しく設定されているかどうかを確認できます。テストするには、`hello/world` トピックにサブスクライブし、Lambda 関数によって発行された予測結果を表示します。

**注記**  
モニターが Raspberry Pi に接続されている場合、ライブカメラのフィードがプレビューウィンドウに表示されます。

1.  AWS IoT コンソールの**テスト**で、**MQTT テストクライアント**を選択します。

1. **[サブスクリプション]** で、以下の値を使用します。
   + サブスクリプションのトピックには、hello/world を使用します。
   + **[Additional configuration]** (追加設定) から、**[MQTT payload display]** (MQTT ペイロード表示) で、**[Display payloads as strings]** (文字列としてペイロードを表示) を選択します。

1. **[サブスクライブ]** を選択します。

   テストに成功すると、Lambda 関数からのメッセージがページの下部に表示されます。各メッセージには、確率、予測クラス ID、対応するクラス名の形式を使用して、イメージの上位 5 つの予測結果が含まれます。  
![\[テスト結果とメッセージデータを示す [サブスクリプション] ページ。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/ml-inference/prediction-results.png)

### ML AWS IoT Greengrass 推論のトラブルシューティング
<a name="ml-inference-troubleshooting"></a>

テストに成功しなかった場合は、以下のトラブルシューティング手順を実行できます。Raspberry Pi のターミナルで以下のコマンドを実行します。

#### エラーログを確認する
<a name="troubleshooting-check-logs"></a>

1. <a name="root-access-logs"></a>root ユーザーに切り替え、`log` ディレクトリに移動します。 AWS IoT Greengrass ログにアクセスするには、ルートアクセス許可が必要です。

   ```
   sudo su
   cd /greengrass/ggc/var/log
   ```

1. `system` ディレクトリで、`runtime.log` または `python_runtime.log` を確認します。

   `user/region/account-id` ディレクトリで、`greengrassObjectClassification.log` を確認します。

   詳細については、「[ログによるトラブルシューティング](gg-troubleshooting.md#troubleshooting-logs)」を参照してください。

##### runtime.log 内の 解凍エラー
<a name="troubleshooting-targz-unpacking"></a>

`runtime.log` に以下のようなエラーが含まれる場合は、`tar.gz` ソースモデルパッケージに親ディレクトリがあることを確認します。

```
Greengrass deployment error: unable to download the artifact model-arn: Error while processing. 
Error while unpacking the file from /tmp/greengrass/artifacts/model-arn/path to /greengrass/ggc/deployment/path/model-arn,
error: open /greengrass/ggc/deployment/path/model-arn/squeezenet/squeezenet_v1.1-0000.params: no such file or directory
```

モデルファイルを格納する親ディレクトリがパッケージに含まれていない場合は、以下のコマンドを使用してモデルを再パッケージ化します。

```
tar -zcvf model.tar.gz ./model
```

例:

```
─$ tar -zcvf test.tar.gz ./test
./test
./test/some.file
./test/some.file2
./test/some.file3
```

**注記**  
このコマンドでは、末尾に `/*` 文字を含めないでください。

 

#### Lambda 関数が正常にデプロイされていることを確認する
<a name="troubleshooting-check-lambda"></a>

1. `/lambda` ディレクトリ内のデプロイされた Lambda の内容を一覧表示します。コマンドを実行する前に、プレースホルダーの値を置き換えてください。

   ```
   cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version
   ls -la
   ```

1. ディレクトリに、[ステップ 4: Lambda 関数を作成して発行する](#ml-console-create-lambda) でアップロードした `greengrassObjectClassification.zip` デプロイパッケージと同じ内容が含まれることを確認します。

   `.py` ファイルと依存関係がディレクトリのルートにあることを確認します。

 

#### 推論モデルが正常にデプロイされていることを確認する
<a name="troubleshooting-check-model"></a>

1. Lambda ランタイムプロセスのプロセス識別番号 (PID) を見つけます。

   ```
   ps aux | grep 'lambda-function-name*'
   ```

   出力では、Lambda ランタイムプロセスの行の 2 列目に PID が表示されます。

1. Lambda ランタイム名前空間を入力します。コマンドを実行する前に、*pid* プレースホルダーの値を置き換えてください。
**注記**  
このディレクトリとその内容は、Lambda ランタイム名前空間にあるため、通常の Linux 名前空間には表示されません。

   ```
   sudo nsenter -t pid -m /bin/bash
   ```

1. ML リソース用に指定したローカルディレクトリの内容を一覧表示します。

   ```
   cd /greengrass-machine-learning/mxnet/squeezenet/
   ls -ls
   ```

   以下のファイルが表示されます。

   ```
   32 -rw-r--r-- 1 ggc_user ggc_group   31675 Nov 18 15:19 synset.txt
   32 -rw-r--r-- 1 ggc_user ggc_group   28707 Nov 18 15:19 squeezenet_v1.1-symbol.json
   4832 -rw-r--r-- 1 ggc_user ggc_group 4945062 Nov 18 15:19 squeezenet_v1.1-0000.params
   ```

## 次の手順
<a name="next-steps"></a>

次に、他の推論アプリを調べます。 は、ローカル推論を試すために使用できる他の Lambda 関数 AWS IoT Greengrass を提供します。サンプルパッケージは、「[ステップ 2: MXNet フレームワークをインストールする](#install-mxnet)」でダウンロードしたプリコンパイル済みライブラリフォルダにあります。

## インテル Atom の設定
<a name="atom-lambda-config"></a>

 Intel Atom デバイスでこのチュートリアルを実行するには、ソースイメージを指定し、Lambda 関数を設定して、別のローカルデバイスリソースを追加する必要があります。GPU を推論に使用するには、デバイスに次のソフトウェアがインストールされていることを確認します。
+ OpenCL バージョン 1.0 以降
+ Python 3.7 と pip
**注記**  
デバイスが Python 3.6 で構築済みの場合は、代わりに Python 3.7 へのシンボリックリンクを作成することができます。詳細については、「[Step 2](#python-symlink)」を参照してください。
+ [NumPy](https://pypi.org/project/numpy/)
+ [ホイール上の OpenCV](https://pypi.org/project/opencv-python/)

1. Lambda 関数用に静的な PNG あるいは JPG 画像をダウンロードして、イメージ分類に使用します。この例は小さいイメージファイルで最適に動作します。

   `greengrassObjectClassification.py` ファイルがあるディレクトリ (あるいは、このディレクトリのサブディレクトリ) に画像ファイルを保存します。これは、[ステップ 4: Lambda 関数を作成して発行する](#ml-console-create-lambda) でアップロードした Lambda 関数デプロイパッケージにあります。
**注記**  
 を使用している場合は AWS DeepLens、オンボードカメラを使用するか、独自のカメラをマウントして、静的イメージではなくキャプチャされたイメージに対して推論を実行できます。ただし、最初に静的イメージから開始することを強くお勧めします。  
カメラを使用する場合は、`awscam` APT パッケージがインストールされていて、最新の状態であることを確認してください。詳細については、「AWS DeepLens デベロッパーガイド」の「[AWS DeepLens デバイスの更新](https://docs.aws.amazon.com/deeplens/latest/dg/deeplens-manual-updates.html)」を参照してください。

1. <a name="python-symlink"></a>Python 3.7 を使用していない場合は、Python 3.x から Python 3.7 へのシンボリックリンクを必ず作成します。これにより、 で Python 3 を使用するようにデバイスが設定されます AWS IoT Greengrass。次のコマンドを実行して、Python のインストールを検索します。

   ```
   which python3
   ```

   次のコマンドを実行して、シンボリックリンクを作成します。

   ```
   sudo ln -s path-to-python-3.x/python3.x path-to-python-3.7/python3.7
   ```

   デバイスを再起動します。

1. Lambda 関数の設定を編集します。「[ステップ 5: Lambda 関数を Greengrass グループに追加する](#ml-console-config-lambda)」の手順に従います。
**注記**  
 ビジネスケースで要求される場合を除き、Lambda 関数を、コンテナ化を使用しないで実行することをお勧めします。これにより、デバイスリソースを設定しなくても、デバイスの GPU とカメラにアクセスできるようになります。コンテナ化なしで を実行する場合は、 AWS IoT Greengrass Lambda 関数へのルートアクセスも許可する必要があります。

   1. **コンテナ化を使用せずに実行するには:**
      + **[System user and group]** (システムユーザーとグループ) で、**Another user ID/group ID**を選択します。**[System user ID]** (システムユーザ ID) には、「**0**」と入力します。**[System group ID]** (システムグループ ID) には、「**0**」と入力します。

        これにより、Lambda 関数を root として実行できます。root として実行の詳細については、「[グループ内の Lambda 関数に対するデフォルトのアクセス ID の設定](lambda-group-config.md#lambda-access-identity-groupsettings)」を参照してください。
**ヒント**  
また、ルートアクセスを Lambda 関数に付与するように `config.json` ファイルを更新する必要があります。詳しい手順については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。
      + **[Lambda function containerization]** (Lambda 関数のコンテナ化) で、**[No container]** (コンテナなし) を選択します。

        コンテナ化を使用しない実行の詳細については、「[Lambda 関数のコンテナ化を選択する場合の考慮事項](lambda-group-config.md#lambda-containerization-considerations)」を参照してください。
      + [**Timeout (タイムアウト)**] 値を 5 秒に更新します。これにより、リクエストの早過ぎるタイムアウトがなくなります。セットアップ後、推論の実行には数分かかります。
      + **[Pinned]**(固定)で、**[True]** を選択します。
      + **[Additional Parameter]** (追加のパラメータ) の、**[Read access to /sys directory]** (/sys ディレクトリへの読み取りアクセス) で、**[Enabled]** (有効) を選択します。
      +  [**Lambda のライフサイクル**] で、[**存続期間が長く無制限に稼働する関数にする**] を選択します。

   1.  **代わりにコンテナ化モードで実行するには:** 
**注記**  
ビジネスケースで要求されない限り、コンテナ化モードでの実行はお勧めしていません。
      + [**Timeout (タイムアウト)**] 値を 5 秒に更新します。これにより、リクエストの早過ぎるタイムアウトがなくなります。セットアップ後、推論の実行には数分かかります。
      +  **[Pinned]** (固定)で、**[True]** を選択します。
      + **[Additional Parameter]** (追加のパラメータ) の、**[Read access to /sys directory]** (/sys ディレクトリへの読み取りアクセス) で、**[Enabled]** (有効) を選択します。

1. **コンテナ化モードで実行している場合**、必要なローカルデバイスリソースを追加して、デバイス GPU へのアクセスを付与します。
**注記**  
コンテナ化されていないモードで を実行すると、 AWS IoT Greengrass はデバイスリソースを設定せずにデバイス GPU にアクセスできます。

   1. グループ設定ページで、**[Resources]** (リソース) タブを選択します。

   1. **[Add local resource]** (ローカルリソースの追加) を選択します。

   1. リソースを定義します。
      + **[リソース名]** に **renderD128** と入力します。
      + [**[Resource type]** (リソースタイプ) で、**[Local device]** (ローカルデバイス) を選択します。
      + [**デバイスパス**] に「**/dev/dri/renderD128**」と入力します。
      + **[System group owner and file access permissions]** (システムグループ所有者のファイルアクセス許可)で、**[Automatically add file system permissions of the system group that owns the resource]** (リソースを所有するシステムグループのファイルシステム権限を自動的に追加する) を選択します。
      + **[Lambda function affiliations]** (Lambda 関数の所属) で、Lambda 関数への **[Read and write access]** (読み取りと書き込みアクセス) を許可します。

## NVIDIA Jetson TX2 の設定
<a name="jetson-lambda-config"></a>

NVIDIA Jetson TX2 でこのチュートリアルを実行するには、ソースイメージを指定して、Lambda 関数を設定します。GPU を使用している場合、さらにローカルデバイスリソースを追加する必要があります。

1.  AWS IoT Greengrass Core ソフトウェアをインストールできるように、Jetson デバイスが設定されていることを確認します。デバイスの設定の詳細については、「[他のデバイスの設定](setup-filter.other.md)」を参照してください。

1. MXNet のドキュメントを開き、[Jetson への MXNet のインストール](https://mxnet.apache.org/get_started/jetson_setup)に移動し、指示に従って Jetson デバイスに MXNet をインストールします。
**注記**  
 ソースから MXNet をビルドする場合は、指示に従って共有ライブラリをビルドします。`config.mk` ファイルの次の設定を編集して、Jetson TX2 デバイスを操作します。  
`-gencode arch=compute-62, code=sm_62` を `CUDA_ARCH` 設定に追加します。
CUDA を有効にします。  

     ```
     USE_CUDA = 1
     ```

1. Lambda 関数用に静的な PNG あるいは JPG 画像をダウンロードして、イメージ分類に使用します。このアプリは小さな画像ファイルで最適に動作します。また、Jetson ボードにカメラを設置して、ソースイメージをキャプチャできます。

   `greengrassObjectClassification.py` ファイルを含むディレクトリにイメージファイルを保存します。このディレクトリのサブディレクトリに保存することもできます。このディレクトリは、[ステップ 4: Lambda 関数を作成して発行する](#ml-console-create-lambda) でアップロードした Lambda 関数デプロイパッケージにあります。

1. Python 3.7 から Python 3.6 へのシンボリックリンクを作成して、 で Python 3 を使用します AWS IoT Greengrass。次のコマンドを実行して、Python のインストールを検索します。

   ```
   which python3
   ```

   次のコマンドを実行して、シンボリックリンクを作成します。

   ```
   sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
   ```

   デバイスを再起動します。

1. `ggc_user` システムアカウントが MXNet フレームワークを使用できることを確認します。

   ```
   “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
   ```

1. Lambda 関数の設定を編集します。「[ステップ 5: Lambda 関数を Greengrass グループに追加する](#ml-console-config-lambda)」の手順に従います。
**注記**  
 ビジネスケースで要求される場合を除き、Lambda 関数を、コンテナ化を使用しないで実行することをお勧めします。これにより、デバイスリソースを設定しなくても、デバイスの GPU とカメラにアクセスできるようになります。コンテナ化なしで を実行する場合は、 AWS IoT Greengrass Lambda 関数へのルートアクセスも許可する必要があります。

   1. **コンテナ化を使用せずに実行するには:**
      + **[System user and group]** (システムユーザーとグループ) で、**Another user ID/group ID**を選択します。**[System user ID]** (システムユーザ ID) には、「**0**」と入力します。**[System group ID]** (システムグループ ID) には、「**0**」と入力します。

        これにより、Lambda 関数を root として実行できます。root として実行の詳細については、「[グループ内の Lambda 関数に対するデフォルトのアクセス ID の設定](lambda-group-config.md#lambda-access-identity-groupsettings)」を参照してください。
**ヒント**  
また、ルートアクセスを Lambda 関数に付与するように `config.json` ファイルを更新する必要があります。手順については、「[root としての Lambda 関数の実行](lambda-group-config.md#lambda-running-as-root)」を参照してください。
      + **[Lambda function containerization]** (Lambda 関数のコンテナ化) で、**[No container]** (コンテナなし) を選択します。

        コンテナ化を使用しない実行の詳細については、「[Lambda 関数のコンテナ化を選択する場合の考慮事項](lambda-group-config.md#lambda-containerization-considerations)」を参照してください。
      + **[Additional Parameter]** (追加のパラメータ) の、**[Read access to /sys directory]** (/sys ディレクトリへの読み取りアクセス) で、**[Enabled]** (有効) を選択します。
      +  **[Environment variables]** (環境変数) で、次のキーと値のペアを Lambda 関数に追加します。これにより、MXNet フレームワークを使用する AWS IoT Greengrass ように が設定されます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/ml-console.html)

   1.  **代わりにコンテナ化モードで実行するには:** 
**注記**  
ビジネスケースで要求されない限り、コンテナ化モードでの実行はお勧めしていません。
      + [**メモリ制限**] の値を増やします。CPU の場合は 500 MB、GPU の場合は少なくとも 2000 MB を使用します。
      + **[Additional Parameter]** (追加のパラメータ) の、**[Read access to /sys directory]** (/sys ディレクトリへの読み取りアクセス) で、**[Enabled]** (有効) を選択します。
      +  **[Environment variables]** (環境変数) で、次のキーと値のペアを Lambda 関数に追加します。これにより、MXNet フレームワークを使用する AWS IoT Greengrass ように が設定されます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/ml-console.html)

1. **コンテナ化モードで実行している場合**、次のローカルデバイスリソースを追加して、デバイス GPU へのアクセスを許可します。「[ステップ 6: Greengrass グループにリソースを追加する](#ml-console-add-resources)」の手順に従います。
**注記**  
 コンテナ化されていないモードで を実行すると、 AWS IoT Greengrass はデバイスリソースを設定せずにデバイス GPU にアクセスできます。

   リソースごとに:
   + **[リソースタイプ]** で、**[デバイス]** を選択します。
   + **[System group owner and file access permissions]** (システムグループ所有者のファイルアクセス許可)で、**[Automatically add file system permissions of the system group that owns the resource]** (リソースを所有するシステムグループのファイルシステム権限を自動的に追加する) を選択します。

          
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/ml-console.html)

1. **コンテナ化モードで実行している場合**で、次のローカルボリュームリソースを追加して、デバイスカメラへのアクセスを許可します。「[ステップ 6: Greengrass グループにリソースを追加する](#ml-console-add-resources)」の手順に従います。
**注記**  
 コンテナ化されていないモードで を実行すると、 AWS IoT Greengrass はボリュームリソースを設定せずにデバイスカメラにアクセスできます。
   + [**リソースタイプ**] で、[**ボリューム**] を選択します。
   + **[System group owner and file access permissions]** (システムグループ所有者のファイルアクセス許可)で、**[Automatically add file system permissions of the system group that owns the resource]** (リソースを所有するシステムグループのファイルシステム権限を自動的に追加する) を選択します。

          
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/ml-console.html)