AWS Management Console を使用して機械学習推論を設定する方法 - AWS IoT Greengrass

のドキュメントを表示していますAWS IoT Greengrass Version 1。AWS IoT Greengrass Version 2の最新のメジャーバージョンです。AWS IoT Greengrass。の使用方法の詳細については、「」を参照してください。AWS IoT Greengrass V2の詳細については、AWS IoT Greengrass Version 2開発者ガイド

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

AWS Management Console を使用して機械学習推論を設定する方法

このチュートリアルの手順に従うには、AWS IoT GreengrassCore v1.10 以降です。

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

このチュートリアルでは、AWS Management Consoleクラウドにデータを送信せずにカメラからのイメージをローカルで認識する Lambda 推論アプリケーションを実行するように、Greengrass グループを設定します。推論アプリケーションは、Raspberry Pi 上のカメラモジュールにアクセスし、オープンソースの SqueezeNet モデルを使用して推論を実行します。

このチュートリアルには、以下の手順の概要が含まれます。

Prerequisites

このチュートリアルを完了するには、以下が必要です。

注記

このチュートリアルでは Raspberry Pi を使用していますが、AWS IoT Greengrass は Intel AtomNVIDIA Jetson TX2 などの他のプラットフォームをサポートしています。Jetson TX2 の例は、カメラからストリームされた画像の代わりに静的画像を使用できます。Jetson TX2 の例を使用する場合は、Python 3.7 ではなく Python 3.6 をインストールする必要があります。デバイスを設定する方法についてはthatをインストールすることができますAWS IoT GreengrassCore ソフトウェア。「」を参照してください。他のデバイスの設定

サードパーティ製プラットフォームの場合、AWS IoT Greengrassがサポートしていない場合は、Lambda 関数を非コンテナーモードで実行する必要があります。コンテナ化されていないモードで実行するには、Lambda 関数を root として実行する必要があります。詳細については、「Lambda 関数のコンテナ化を選択する場合の考慮事項」および「グループ内の Lambda 関数のデフォルトアクセス ID の設定」を参照してください。

ステップ 1: Raspberry Pi を設定する

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

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

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

    sudo apt-get update sudo apt-get dist-upgrade
  2. カメラモジュールの picamera インターフェイス、およびこのチュートリアルに必要なその他の Python ライブラリをインストールします。

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

    インストールを検証します。

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

      python3 -m pip

      pip がインストールされていない場合は、pip ウェブサイトからダウンロードし、次のコマンドを実行します。

      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 バージョンにマップされていることを確認してください。

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

    sudo reboot
  4. Raspberry Pi 設定ツールを開きます。

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

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

    raspistill -v -o test.jpg

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

ステップ 2: MXNet フレームワークをインストールする

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

  1. リモートで Raspberry Pi にサインインします。

    ssh pi@your-device-ip-address
  2. MXNet のドキュメントを開き、MXNet のインストールを開いて、指示に従って MXNet をデバイスにインストールします。

    注記

    このチュートリアルでは、バージョン 1.5.0 をインストールし、ソースから MXNet を構築することをお勧めします。

  3. 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 モデルパッケージを作成する

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

  1. コンピュータで、機械学習のサンプル から Raspberry Pi 用の MXNet サンプルをダウンロードします。

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

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

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

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

ステップ 4: Lambda 関数を作成して公開する

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

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

  1. コンピュータで、ステップ 3: MXNet モデルパッケージを作成する で解凍したサンプルパッケージ内の examples ディレクトリに移動します。

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

    examples ディレクトリには、関数コードと依存関係が含まれています。

    • greengrassObjectClassification.py は、このチュートリアルで使用される推論コードです。このコードをテンプレートとして使用して、独自の推論関数を作成できます。

    • greengrasssdkは、のバージョン 1.5.0 です。AWS IoT GreengrassPython 用 Core SDK。

      注記

      新しいバージョンが利用できる場合は、そのバージョンをダウンロードし、デプロイパッケージ内の SDK バージョンをアップグレードできます。詳細については、「」を参照してください。 AWS IoT GreengrassPython 用 Core SDKGitHub で。

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

    zip -r greengrassObjectClassification.zip .
    注記

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

     

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

  3. 左AWS IoTコンソールの [Navigation] ペインで、Greengrass,クラシック (V1),Groups

    
            のナビゲーションウィンドウは、AWS IoTコンソールで [グループ] がハイライト表示されます
  4. Lambda 関数を追加する Greengrass グループを選択します。

  5. グループの設定ページで [Lambda]、[Lambda の追加] の順に選択します。

    
            [Lambda] と [Lambda の追加] が強調表示されたグループページ。
  6. リポジトリの []Greengrass グループへの Lambda の追加ページで [] を選択します。新しい Lambda を作成。これにより、AWS Lambda コンソールが開きます。

    
            [Create new Lambda] (Lambda の新規作成) が強調表示された [Add a Lambda to your Greengrass Group] (Greengrass グループへの Lambda の追加) ページ。
  7. 選択一から作成次に、以下の値を使用して関数を作成します。

    • [関数名] に「greengrassObjectClassification」と入力します。

    • [Runtime (ランタイム)] で [Python 3.7] を選択します。

    を使用する場合アクセス許可デフォルト設定を維持します。これにより、基本的な Lambda アクセス許可を付与する実行ロールが作成されます。このロールはAWS IoT Greengrass。

  8. [Create function] を選択します。

    
            [関数の作成] ページで [関数の作成] が強調表示されます。

     

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

  9. Lambda 関数のデプロイパッケージをアップロードします。

    1. リポジトリの []コードタブにあるコードソース] で、以下の対象からのアップロード。ドロップダウンから、[.zip ファイル

      
                [アップロード元] ドロップダウンで、.zip ファイルがハイライト表示されます。
    2. 選択アップロードを選択し、[] を選択します。greengrassObjectClassification.zipデプロイパッケージを作成します。次に、[Save] を選択します。

    3. リポジトリの []コード] タブの [ランタイム設定] で、編集] をクリックし、以下の値を入力します。

      • [Runtime (ランタイム)] で [Python 3.7] を選択します。

      • [Handler (ハンドラ)] に「greengrassObjectClassification.function_handler」と入力します。

      [Save] を選択します。

    次に、Lambda 関数の最初のバージョンを公開します。次に、バージョンのエイリアスを作成します。

    注記

    Greengrass グループは、エイリアス (推奨) またはバージョンによって Lambda 関数を参照できます。エイリアスを使用すると、関数コードが更新されたときにサブスクリプションテーブルやグループ定義を変更する必要がないため、コード更新を簡単に管理できます。代わりに、新しい関数バージョンにエイリアスを指定するだけです。

  10. [Actions] メニューから、[Publish new version] を選択します。

    
            [アクション] メニューの [新しいバージョンを発行] オプション。
  11. [バージョンの説明] に「First version」と入力し、[発行] を選択します。

  12. [greengrassObjectClassification: 1] 設定ページで、[Actions] (アクション) メニューの [エイリアスの作成] を選択します。

    
            [アクション] メニューの [エイリアスの作成] オプション。
  13. [Create a new alias] ページで、次の値を使用します。

    • [Name (名前)] に mlTest と入力します。

    • [バージョン] に「1」と入力します。

    注記

    AWS IoT Greengrassでは、Lambda エイリアスをサポートしていません。$LATESTバージョン。

  14. [Create] (作成) を選択します。

    
            [Create a new alias (新しいエイリアスの作成)] ページで [作成] が強調表示されています。

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

ステップ 5: Lambda 関数を Greengrass グループに追加する

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

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

  1. 左AWS IoTコンソールで、グループの設定ページを開きます。

  2. [Lambda]、[Add Lambda] (Lambda の追加) の順に選択します。

    
            [Lambda] と [Lambda の追加] が強調表示されたグループページ。
  3. [Greengrass グループへの Lambda の追加] ページで、[既存の Lambda の使用] を選択します。

    
            [Add a Lambda to your Greengrass Group (Greengrass グループへの Lambda の追加)] ページで [Use existing Lambda (既存の Lambda の使用)] が強調表示されています。
  4. 選択greengrassObjectClassificationを選択し、[] を選択します。

  5. [Select a Lambda version] (Lambda バージョンの選択) ページで、[Alias:mlTest]、[完了] の順に選択します。

     

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

  6. リポジトリの []Lambdaページで、[] を選択します。greengrassObjectClassificationLambda 関数。

    
            GreengrassObjectClassification Lambda 関数が強調表示された [Lambda] ページ。
  7. [greengrassObjectClassification] 設定ページで、[Edit] (編集) を選択します。

  8. リポジトリの []グループ固有の Lambda 設定ページで、以下の更新を行います。

    注記

    ビジネスケースで要求されている場合を除き、コンテナ化なしで Lambda 関数を実行することをお勧めします。これにより、デバイスリソースを設定することなく、デバイスの GPU とカメラにアクセスできるようになります。コンテナー化を行わずにを実行する場合は、AWS IoT GreengrassLambda 関数。

    1. コンテナ化なしで実行するには:

      • を使用する場合として実行] で、Another user ID/group ID。を使用する場合UIDと入力します。0。を使用する場合GUIDと入力します。0

        これにより、Lambda 関数を root として実行することができます。root としての実行の詳細については、グループ内の Lambda 関数のデフォルトアクセス ID の設定

        ヒント

        また、config.jsonファイルを使用して、Lambda 関数への root アクセスを許可します。手順については、「」を参照してください。Lambda 関数をルートとして実行する

      • を使用する場合コンテナ化] で、コンテナなし

        コンテナ化なしで実行の詳細については、「」を参照してください。Lambda 関数のコンテナ化を選択する場合の考慮事項

      • [Timeout (タイムアウト)] に「10 seconds」と入力します。

      • [Lambda のライフサイクル] で、[存続期間が長く無制限に稼働する関数にする] を選択します。

        詳細については、「Greengrass Lambda 関数のライフサイクル設定」を参照してください。

      • [/sys ディレクトリへの読み込みアクセス] で、[Enable (有効化)] を選択します。

    2. 代わりにコンテナ化モードで実行するには:

      注記

      ビジネスケースで要求されている場合を除き、コンテナ化モードで実行することはお勧めしません。

      • を使用する場合として実行] で、グループのデフォルトを使用する

      • を使用する場合コンテナ化] で、グループのデフォルトを使用する

      • [メモリ制限] に「96 MB」と入力します。

      • [Timeout (タイムアウト)] に「10 seconds」と入力します。

      • [Lambda のライフサイクル] で、[存続期間が長く無制限に稼働する関数にする] を選択します。

        詳細については、「Greengrass Lambda 関数のライフサイクル設定」を参照してください。

      • [/sys ディレクトリへの読み込みアクセス] で、[Enable (有効化)] を選択します。

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

    キーには、MXNET_ENGINE_TYPE を使用します。値には、NaiveEngine。

    注記

    独自のユーザー定義 Lambda 関数では、必要に応じて、関数コードで環境変数を設定できます。

  10. 他のすべてのプロパティではデフォルト値を受け入れ、[更新] を選択します。

ステップ 6: Greengrass グループへのリソースの追加

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

注記

非コンテナー化モードで実行する場合、AWS IoT Greengrassは、これらのデバイスリソースを設定しなくても、デバイスの GPU とカメラにアクセスできます。

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

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

    
            [Resources (リソース)] が強調表示されたグループの設定ページ
  2. [ローカル] タブで、[ローカルリソースの追加] を選択します。

  3. [ローカルリソースの作成] ページで、以下の値を使用します。

    • [リソース名] に videoCoreSharedMemory と入力します。

    • [リソースタイプ] で、[デバイス] を選択します。

    • [デバイスパス] に「/dev/vcsm」と入力します。

      デバイスパスはデバイスリソースのローカル絶対パスです。このパスは、/dev 下の文字デバイスまたはブロックデバイスのみを参照できます。

    • [グループ所有者のファイルアクセス許可] で、[リソースを所有する Linux グループの OS グループアクセス許可を自動的に追加] を選択します。

      [Group owner file access permission] (グループ所有者のファイルアクセス権限) オプションを使用すると、Lambda プロセスに追加のファイルアクセス権限を付与できます。詳細については、「グループ所有者のファイルアクセス権限」を参照してください。

    
            リソースプロパティが編集された [ローカルリソースの作成] ページ。
  4. [Lambda function affiliations] (Lambda 関数の所属) で、[選択] を選択します。

  5. [greengrassObjectClassification]、[読み取りと書き込みアクセス]、[完了] の順に選択します。

    
            [完了] が強調表示された Lambda 関数の所属プロパティ

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

  6. [別のリソースの追加] を選択します。

  7. [ローカルリソースの作成] ページで、以下の値を使用します。

    • [リソース名] に videoCoreInterface と入力します。

    • [リソースタイプ] で、[デバイス] を選択します。

    • [デバイスパス] に「/dev/vchiq」と入力します。

    • [グループ所有者のファイルアクセス許可] で、[リソースを所有する Linux グループの OS グループアクセス許可を自動的に追加] を選択します。

    
            リソースプロパティが編集された [ローカルリソースの作成] ページ。
  8. [Lambda function affiliations] (Lambda 関数の所属) で、[選択] を選択します。

  9. [greengrassObjectClassification]、[読み取りと書き込みアクセス]、[完了] の順に選択します。

  10. ページの最下部で [保存] を選択します。

 

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

  1. グループの [リソース] ページで、[機械学習]、[機械学習リソースの追加] の順に選択します。

  2. [Create a machine learning resource (機械学習リソースの作成)] ページで、[Resource name (リソース名)] にsqueezenet_model と入力します。

    
            プロパティが更新された [機会学習モデルの追加] ページ
  3. [モデルソース] で、[S3 のモデルをアップロード] を選択します。

  4. [S3 のモデル] で、[Select (選択)] を選択します。

  5. [モデルをアップロードする] を選択します。これにより、Amazon S3 コンソールに新しいタブが開きます。

  6. Amazon S3 コンソールタブで、squeezenet.zipS3 バケットにファイルをコピーします。詳細については、 を参照してください。S3 バケットにファイルとフォルダをアップロードする方法()Amazon Simple Storage Service コンソールユーザーガイド

    注記

    S3 バケットにアクセスできるようにするには、バケット名に文字列greengrassバケットは、AWS IoT Greengrass。一意の名前 (greengrass-bucket-user-id-epoch-time など) を選択します。バケット名にピリオド (.) を使用しないでください。

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

  8. [ローカルパス] に「/greengrass-machine-learning/mxnet/squeezenet」と入力します。

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

  9. [Identify resource owner and set access permissions (リソース所有者の識別とアクセス権の設定)] で、[No OS group (OS グループなし)] を選択します。

  10. [Lambda function affiliations] (Lambda 関数の所属) で、[選択] を選択します。

  11. [greengrassObjectClassification]、[Read-only access] (読み取り専用アクセス)、[完了] の順に選択します。

  12. [Save] を選択します。

SageMaker トレーニング済みモデルの使用

このチュートリアルでは、Amazon S3 に保存されるモデルを使用しますが、SageMaker モデルも簡単に使用できます。-AWS IoT Greengrassコンソールには組み込みの SageMaker 統合機能があるため、これらのモデルを Amazon S3 に手動でアップロードする必要はありません。SageMaker モデルの使用に関する要件と制限については、サポートされているモデルソース

SageMaker モデルを使用するには:

  • [モデルソース] で、[Use an existing SageMaker model] (既存の SageMaker モデルを使用) を選択してから、モデルのトレーニングジョブの名前を選択します。

  • を使用する場合ローカルパスに、Lambda 関数によってモデルが検索されるディレクトリへのパスを入力します。

ステップ 7: Greengrass グループにサブスクリプションを追加する

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

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

    
            [Subscriptions] と [Add Subscription] が強調表示されたグループページ。
  2. [ソースとターゲットの選択] ページで、ソースおよびターゲットを次のように設定します。

    1. [Select a source] (ソースの選択) セクションで、[Lambda]、[greengrassObjectClassification] の順に選択します。

    2. [Select a target] (ターゲットの選択) で、[サービス]、[IoT Cloud] (IoT クラウド) の順に選択します。

    3. [Next] を選択します。

      
                [ソースとターゲットの選択] ページで [次へ] が強調表示されています。
  3. [トピックでデータをフィルタリングする] ページの [トピックのフィルターー] に「hello/world」と入力し、[Next (次へ)] を選択します。

    
            [次へ] が強調表示された [Filter your data with a topic (トピックによるデータのフィルタリング)] ページ
  4. [Finish] を選択します。

ステップ 8: Greengrass グループをデプロイする

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

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

    1. デーモンが実行中であるかどうかを確認するには

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

      出力に root/greengrass/ggc/packages/1.11.3/bin/daemon エントリが含まれる場合、デーモンは実行されています。

      注記

      パスのバージョンは、コアデバイスにインストールされている AWS IoT Greengrass Core ソフトウェアのバージョンによって異なります。

    2. デーモンを起動するには:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. グループの設定ページで、[デプロイ] を選択してから、[Actions] (アクション) メニューの [デプロイ] を選択します。

    
            [デプロイ] と [デプロイ] が強調表示されたグループの設定ページ。
  3. [Configure how devices discover your core] ページで、[Automatic detection] を選択します。

    これにより、デバイスは、IP アドレス、DNS、ポート番号など、コアの接続情報を自動的に取得できます。自動検出が推奨されますが、AWS IoT Greengrass は手動で指定されたエンドポイントもサポートしています。グループが初めてデプロイされたときにのみ、検出方法の確認が求められます。

    
            [Configure how devices discover your core] ページで [Automatic detection] が強調表示されています。
    注記

    プロンプトが表示されたら、Greengrass サービスロールし、それを AWS アカウント 現在の AWS リージョン 。このロールにより、AWS IoT Greengrassで、リソースにアクセスするにはAWSのサービス。

    [Deployments] ページでは、デプロイのタイムスタンプ、バージョン ID、ステータスが表示されます。完了すると、デプロイのステータスが [正常に完了しました] と表示されます。

    デプロイの詳細については、」AWS IoT Greengrass グループを AWS IoT Greengrass Core にデプロイする。トラブルシューティングヘルプについては、AWS IoT Greengrass のトラブルシューティング を参照してください。

ステップ 9: 推論アプリのテスト

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

注記

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

  1. AWS IoT コンソールで、[Test] を選択します。

    
            のナビゲーションウィンドウは、AWS IoTコンソールで [テスト] が強調表示
  2. [サブスクリプション] で、以下の値を使用します。

    • サブスクリプションのトピックには、hello/world を使用します。

    • [MQTT ペイロード表示] で、[ペイロードを文字列として表示] を選択します。

  3. [Subscribe to topic] を選択します。

    テストに成功すると、Lambda 関数からのメッセージがページの下部に表示されます。各メッセージには、確率、予測クラス ID、対応するクラス名の形式を使用して、イメージの上位 5 つの予測結果が含まれます。

    
            テスト結果とメッセージデータを示す [サブスクリプション] ページ。

AWS IoT Greengrass ML 推論のトラブルシューティング

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

エラーログを確認する

  1. root ユーザーに切り替え、log ディレクトリに移動します。AWS IoT Greengrass ログへのアクセスには root アクセス許可が必要です。

    sudo su cd /greengrass/ggc/var/log
  2. system ディレクトリで、runtime.log または python_runtime.log を確認します。

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

    詳細については、「ログでのトラブルシューティング」を参照してください。

Unpackingエラーruntime.log

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

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

tar -zcvf model.tar.gz ./model

次に例を示します。

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

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

 

Lambda 関数が正常にデプロイされていることを確認する

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

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. ディレクトリに、greengrassObjectClassification.zipでアップロードしたステップ 4: Lambda 関数を作成して公開する

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

 

推論モデルが正常にデプロイされていることを確認する

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

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

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

  2. Lambda ランタイム名前空間を入力します。コマンドを実行する前に、pid プレースホルダーの値を置き換えてください。

    注記

    このディレクトリとその内容は、Lambda ランタイム名前空間にあるため、通常の名前空間には表示されません。

    sudo nsenter -t pid -m /bin/bash
  3. 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

次のステップ

次に、他の推論アプリケーションを試します。AWS IoT Greengrassには、ローカル推論を試すために使用できる他の Lambda 関数が用意されています。サンプルパッケージは、「ステップ 2: MXNet フレームワークをインストールする」でダウンロードしたプリコンパイル済みライブラリフォルダにあります。

インテル Atom の設定

Intel Atom デバイスでこのチュートリアルを実行するには、ソースイメージを指定し、Lambda 関数を設定して、別のローカルデバイスリソースを追加する必要があります。GPU を推論に使用するには、デバイスに次のソフトウェアがインストールされていることを確認します。

  • OpenCL バージョン 1.0 以降

  • Python 3.7 と pip

    注記

    デバイスが Python 3.6 で構築済みの場合は、代わりに Python 3.7 へのシンボリックリンクを作成することができます。詳細については、「ステップ 2」を参照してください。

  • NumPy

  • ホイール上の OpenCV

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

    greengrassObjectClassification.py ファイルがあるディレクトリ (あるいは、このディレクトリのサブディレクトリ) に画像ファイルを保存します。これは、でアップロードした Lambda 関数デプロイパッケージにあります。ステップ 4: Lambda 関数を作成して公開する

    注記

    AWS DeepLens を使用している場合は、オンボードカメラを使用するか、独自のカメラをマウントして、静的イメージではなく、キャプチャされたイメージに対して推論を実行できます。ただし、最初に静的イメージから開始することを強くお勧めします。

    カメラを使用する場合は、awscam APT パッケージがインストールされていて、最新の状態であることを確認してください。詳細については、「」を参照してください。を更新するAWS DeepLensデバイス()AWS DeepLens開発者ガイド

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

    which python3

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

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

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

  3. Lambda 関数の設定を編集します。ステップ 5: Lambda 関数を Greengrass グループに追加する の手順に従います。

    注記

    ビジネスケースで要求されている場合を除き、コンテナ化なしで Lambda 関数を実行することをお勧めします。これにより、デバイスリソースを設定することなく、デバイスの GPU とカメラにアクセスできるようになります。コンテナー化を行わずにを実行する場合は、AWS IoT GreengrassLambda 関数。

    1. コンテナ化なしで実行するには:

      • を使用する場合として実行] で、Another user ID/group ID。を使用する場合UIDと入力します。0。を使用する場合GUIDと入力します。0

        これにより、Lambda 関数を root として実行することができます。root としての実行の詳細については、グループ内の Lambda 関数のデフォルトアクセス ID の設定

        ヒント

        また、config.jsonファイルを使用して、Lambda 関数への root アクセスを許可します。手順については、「」を参照してください。Lambda 関数をルートとして実行する

      • を使用する場合コンテナ化] で、コンテナなし

        コンテナ化なしで実行の詳細については、「」を参照してください。Lambda 関数のコンテナ化を選択する場合の考慮事項

      • [Timeout (タイムアウト)] 値を 5 秒に更新します。これにより、リクエストの早過ぎるタイムアウトがなくなります。セットアップ後、推論の実行には数分かかります。

      • [/sys ディレクトリへの読み込みアクセス] で、[Enable (有効化)] を選択します。

      • [Lambda のライフサイクル] で、[存続期間が長く無制限に稼働する関数にする] を選択します。

    2. 代わりにコンテナ化モードで実行するには:

      注記

      ビジネスケースで要求されている場合を除き、コンテナ化モードで実行することはお勧めしません。

      • [Timeout (タイムアウト)] 値を 5 秒に更新します。これにより、リクエストの早過ぎるタイムアウトがなくなります。セットアップ後、推論の実行には数分かかります。

      • [/sys ディレクトリへの読み込みアクセス] で、[Enable (有効化)] を選択します。

      • [Lambda のライフサイクル] で、[存続期間が長く無制限に稼働する関数にする] を選択します。

  4. コンテナー化モードで実行している場合で、デバイス GPU へのアクセスを許可するために必要なローカルデバイスリソースを追加します。

    注記

    非コンテナー化モードで実行する場合、AWS IoT Greengrassは、デバイスリソースを構成せずにデバイス GPU にアクセスできます。

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

      
                [Resources (リソース)] が強調表示されたグループの設定ページ
    2. [ローカル] タブで、[ローカルリソースの追加] を選択します。

    3. リソースを定義します。

      • [リソース名] に renderD128 と入力します。

      • [リソースタイプ] で、[デバイス] を選択します。

      • [デバイスパス] に「/dev/dri/renderD128」と入力します。

      • [グループ所有者のファイルアクセス許可] で、[リソースを所有する Linux グループの OS グループアクセス許可を自動的に追加] を選択します。

      • を使用する場合Lambda 関数の所属、許可する読み取りおよび書き込みアクセスLambda 関数に追加します。

NVIDIA Jetson TX2 の設定

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

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

  2. MXNet のドキュメントを開き、Jetson への MXNet のインストールに移動し、指示に従って Jetson デバイスに MXNet をインストールします。

    注記

    ソースから MXNet をビルドする場合は、指示に従って共有ライブラリをビルドします。config.mk ファイルの次の設定を編集して、Jetson TX2 デバイスを操作します。

    • -gencode arch=compute-62, code=sm_62CUDA_ARCH 設定に追加します。

    • CUDA を有効にします。

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

    greengrassObjectClassification.py ファイルを含むディレクトリにイメージファイルを保存します。このディレクトリのサブディレクトリに保存することもできます。このディレクトリは、Lambda 関数デプロイパッケージにあり、ステップ 4: Lambda 関数を作成して公開する

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

    which python3

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

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

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

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

    “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
  6. Lambda 関数の設定を編集します。ステップ 5: Lambda 関数を Greengrass グループに追加する の手順に従います。

    注記

    ビジネスケースで要求されている場合を除き、コンテナ化なしで Lambda 関数を実行することをお勧めします。これにより、デバイスリソースを設定することなく、デバイスの GPU とカメラにアクセスできるようになります。コンテナー化を行わずにを実行する場合は、AWS IoT GreengrassLambda 関数。

    1. コンテナ化なしで実行するには:

      • を使用する場合として実行] で、Another user ID/group ID。を使用する場合UIDと入力します。0。を使用する場合GUIDと入力します。0

        これにより、Lambda 関数を root として実行することができます。root としての実行の詳細については、グループ内の Lambda 関数のデフォルトアクセス ID の設定

        ヒント

        また、config.jsonファイルを使用して、Lambda 関数への root アクセスを許可します。手順については、「」を参照してください。Lambda 関数をルートとして実行する

      • を使用する場合コンテナ化] で、コンテナなし

        コンテナ化なしで実行の詳細については、「」を参照してください。Lambda 関数のコンテナ化を選択する場合の考慮事項

      • [/sys ディレクトリへの読み込みアクセス] で、[Enable (有効化)] を選択します。

      • []環境変数次に、Lambda 関数に次のキーと値のペアを追加します。これにより、AWS IoT Greengrass は、MXNet フレームワークを使用するように設定されます。

        キー

        PATH

        /usr/local/cuda/bin:$PATH

        HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

    2. 代わりにコンテナ化モードで実行するには:

      注記

      ビジネスケースで要求されている場合を除き、コンテナ化モードで実行することはお勧めしません。

      • [メモリ制限] の値を増やします。CPU の場合は 500 MB、GPU の場合は少なくとも 2000 MB を使用します。

      • [/sys ディレクトリへの読み込みアクセス] で、[Enable (有効化)] を選択します。

      • []環境変数次に、Lambda 関数に次のキーと値のペアを追加します。これにより、AWS IoT Greengrass は、MXNet フレームワークを使用するように設定されます。

        キー

        PATH

        /usr/local/cuda/bin:$PATH

        HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

  7. コンテナー化モードで実行している場合で、次のローカルデバイスリソースを追加して、デバイス GPU へのアクセスを許可します。ステップ 6: Greengrass グループへのリソースの追加 の手順に従います。

    注記

    非コンテナー化モードで実行する場合、AWS IoT Greengrassは、デバイスリソースを構成せずにデバイス GPU にアクセスできます。

    リソースごとに:

    • [リソースタイプ] で、[デバイス] を選択します。

    • [グループ所有者のファイルアクセス許可] で、[リソースを所有する Linux グループの OS グループアクセス許可を自動的に追加] を選択します。

    • を使用する場合Lambda 関数の所属、許可する読み取りおよび書き込みアクセスに Lambda 関数を追加します。

       

      名前

      デバイスパス

      nvhost-ctrl

      /dev/nvhost-ctrl

      nvhost-gpu

      /dev/nvhost-gpu

      nvhost-ctrl-gpu

      /dev/nvhost-ctrl-gpu

      nvhost-dbg-gpu

      /dev/nvhost-dbg-gpu

      nvhost-prof-gpu

      /dev/nvhost-prof-gpu

      nvmap

      /dev/nvmap

      nvhost-vic

      /dev/nvhost-vic

      tegra_dc_ctrl

      /dev/tegra_dc_ctrl

  8. コンテナー化モードで実行している場合で、次のローカルボリュームリソースを追加して、デバイスカメラへのアクセスを許可します。ステップ 6: Greengrass グループへのリソースの追加 の手順に従います。

    注記

    非コンテナー化モードで実行する場合、AWS IoT Greengrassは、ボリュームリソースを設定せずにデバイスカメラにアクセスできます。

    • [リソースタイプ] で、[ボリューム] を選択します。

    • [グループ所有者のファイルアクセス許可] で、[リソースを所有する Linux グループの OS グループアクセス許可を自動的に追加] を選択します。

    • を使用する場合Lambda 関数の所属、許可する読み取りおよび書き込みアクセスに Lambda 関数を追加します。

       

      名前

      ソースパス

      送信先パス

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp