最適化された機械学習推論を 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 以降です。

SageMaker Neo 深層学習コンパイラを使用して、Tensorflow、Apache MXNet、PyTorch、ONNX、および XGBoost フレームワークのネイティブ機械学習推論モデルの予測効率を最適化し、フットプリントを小さくし、パフォーマンスを向上させることができます。その後、最適化されたモデルをダウンロードし、SageMaker Neo 深層学習ランタイムをインストールし、それらをAWS IoT Greengrassデバイスを使用して推論を高速化します。

このチュートリアルでは、AWS Management Consoleを使用して、クラウドにデータを送信せずにカメラからのイメージをローカルで認識する Lambda 推論例を実行するように、Greengrass グループを設定します。推論例では、Raspberry Pi のカメラモジュールにアクセスします。このチュートリアルでは、Resnet-50 によってトレーニングされて Neo 深層学習コンパイラで最適化されたパッケージ化モデルをダウンロードします。そのモデルを使用して、AWS IoT Greengrass デバイスでローカルイメージ分類を実行します。

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

Prerequisites

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

注記

このチュートリアルでは Raspberry Pi を使用していますが、AWS IoT Greengrass は Intel AtomNVIDIA Jetson TX2 などの他のプラットフォームをサポートしています。Intel Atom の例を使用する場合は、Python 3.7 ではなく Python 3.6 のインストールが必要な場合があります。AWS IoT Greengrass Core ソフトウェアをインストールできるようにデバイスを設定する方法については、「他のデバイスの設定」を参照してください。

サードパーティ製プラットフォームの場合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: Amazon SageMaker Neo 深層学習ランタイムをインストールする

このステップでは、Neo ディープラーニングランタイム (DLR) を Raspberry Pi にインストールします。

注記

このチュートリアルでは、バージョン 1.1.0 をインストールすることをお勧めします。

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

    ssh pi@your-device-ip-address
  2. DLR のドキュメントを開き、DLR のインストールを開き、Raspberry Pi デバイスのホイール URL を見つけます。次に、指示に従って、デバイスに DLR をインストールします。たとえば、pip を使用できます。

    pip3 install rasp3b-wheel-url
  3. DLR をインストールした後、次の設定を検証します。

    • ggc_user システムアカウントが DLR ライブラリを使用できることを確認します。

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

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

ステップ 3: 推論 Lambda 関数を作成する

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

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

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

    cd path-to-downloaded-sample tar -xvzf dlr-py3-armv7l.tar.gz

    抽出されたサンプルパッケージの examples ディレクトリには、関数コードと依存関係が含まれています。

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

    • greengrasssdkは、のバージョン 1.5.0 です。AWS IoT GreengrassCore SDK for Python

      注記

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

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

    cd path-to-downloaded-sample/dlr-py3-armv7l/examples zip -r optimizedImageClassification.zip .

    デプロイメントパッケージには、関数コードと依存関係が含まれています。これには、Neo 深層学習ランタイムの Python API を呼び出し、Neo 深層学習コンパイラモデルによる推論を実行するコードが含まれます。

    注記

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

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

    左AWS IoTコンソールの [Navigation] ペインで [] を選択します。Greengrass,クラシック (V1),Groups

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

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

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

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

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

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

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

    
            [関数の作成] ページの [Basic information] セクション。
  9. [Create function] を選択します。

 

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

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

    
                [アップロード元] ドロップダウンで、.zip ファイルがハイライト表示されます。
  2. を選択します。optimizedImageClassification.zip展開パッケージを選択し、保存

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

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

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

    [Save] を選択します。

    
            [ランタイム設定] セクションで [アップロード] が強調表示されています。

 

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

注記

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

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

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

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

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

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

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

    注記

    AWS IoT GreengrassLambda エイリアスはサポートされません。$LATESTバージョン。

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

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

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

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

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

  1. [Greengrass グループへの Lambda の追加] ページで、[既存の Lambda の使用] を選択します。

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

  3. リポジトリの []Lambda バージョンの選択ページで [] を選択します。エイリアス:MLTestopt] を選択してから、[] を選択します完了

 

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

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

    
            [Lambda] ページで [OptimizedImageClassification [Lambda] 関数が強調表示されている。
  2. [optimizedImageClassification] 設定ページで、[Edit (編集)] を選択します。

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

    注記

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

    1. コンテナー化せずに実行するには、次の手順に従います。

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

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

        ヒント

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

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

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

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

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

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

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

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

      注記

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

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

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

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

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

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

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

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

  4. [更新] を選択します。

ステップ 5: SageMaker Neo 最適化モデルリソースをGreengrass グループに追加する

このステップでは、最適化された ML 推論モデルのリソースを作成して Amazon S3 バケットにアップロードします。次に、Amazon S3 でアップロードされたモデルをAWS IoT Greengrassコンソールで、新しく作成したリソースを Lambda 関数に関連付けます。これにより、関数が Core デバイス上のリソースにアクセスできるようになります。

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

    注記

    NVIDIA Jetson の例を使用する場合は、代わりにサンプルパッケージの resnet18 ディレクトリを使用する必要があります。詳細については、「NVIDIA Jetson TX2 の設定」を参照してください。

    cd path-to-downloaded-sample/dlr-py3-armv7l/models/resnet50

    このディレクトリには、Resnet-50 でトレーニングされたイメージ分類モデルのプリコンパイルされたモデルアーティファクトが含まれています。

  2. resnet50 ディレクトリ内のファイルを resnet50.zip という名前のファイルに圧縮します。

    zip -r resnet50.zip .
  3. AWS IoT Greengrass グループのグループ設定ページで、[Resources (リソース)] を選択します。[Machine Learning (機械学習)] セクションに移動し、[機械学習リソースの追加] を選択します。[Create a machine learning resource (機械学習リソースの作成)] ページで、[Resource name (リソース名)] にresnet50_model と入力します。

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

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

    注記

    現在のところ、最適化された SageMaker モデルは Amazon S3 に自動的に保存されます。このオプションを使用して、最適化されたモデルは Amazon S3 バケットにあります。SageMaker でのモデルの最適化の詳細については、「」を参照してください。SageMaker Neo ドキュメント

  6. [モデルをアップロードする] を選択します。

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

    注記

    バケット名には文字列 greengrass が含まれている必要があります。一意の名前 (greengrass-dlr-bucket-user-id-epoch-time など) を選択します。バケット名にピリオド (.) を使用しないでください。

  8. 左AWS IoT Greengrassコンソールタブで、Amazon S3 バケットを見つけて選択します。アップロードした resnet50.zip ファイルを見つけ、[Select (選択)] を選択します。必要に応じてページを更新し、使用可能なバケットとファイルのリストを更新します。

  9. [ローカルパス] に「/ml_model」と入力します。

    
            更新されたローカルパス。

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

    注記

    ローカルパスに指定されている正確なパスを使用することを強くお勧めします。このステップで別のローカルモデルのターゲットパスを使用すると、このチュートリアルで示しているいくつかのトラブルシューティングコマンドが正確でなくなります。別のパスを使用する場合は、ここで指定する正確なパスを MODEL_PATH 環境変数に設定する必要があります。環境変数については、「AWS Lambda 環境変数」を参照してください。

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

  11. コンテナ化モードで実行している場合:

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

    2. [optimizedImageClassification]、[読み取り専用アクセス]、[Done (完了)] の順に選択します。

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

ステップ 6: Greengrass グループにカメラデバイスリソースを追加する

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

注記

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. [ソースの選択] セクションで、[Lambda]、[optimizedImageClassification] の順に選択します。

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

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

      
                [ソースとターゲットの選択] ページで [次へ] が強調表示されています。
  3. リポジトリの []トピックによるデータのフィルタリングページでオプションのトピックのフィルター[] と入力します。/resnet-50/predictions] を選択してから、[] を選択します

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

  5. 2 つ目のサブスクリプションを追加します。[ソースとターゲットの選択] ページで、ソースおよびターゲットを次のように設定します。

    1. [Select a source] で、[Services] を選択してから [IoT Cloud] を選択します。

    2. [ターゲットの選択] で [Lambda]、[optimizedImageClassification] の順に選択します。

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

  6. リポジトリの []トピックによるデータのフィルタリングページでオプションのトピックのフィルター[] と入力します。/resnet-50/test] を選択してから、[] を選択します

  7. [Finish] を選択します。

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

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

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

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

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

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

    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 のトラブルシューティング を参照してください。

推論例をテストする

これで、デプロイが正しく設定されているかどうかを確認できます。テストするには、/resnet-50/predictions トピックにサブスクライブし、/resnet-50/test トピックにメッセージを発行します。これにより、Lambda 関数がRaspberry Pi で写真を撮り、キャプチャしたイメージの推論を実行します。

注記

NVIDIA Jetson の例を使用する場合は、代わりに resnet-18/predictions トピックおよび resnet-18/test トピックを使用してください。

注記

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

  1. リポジトリの []AWS IoTコンソールのホームページで [Test

    
            ナビゲーションペインは、AWS IoTコンソールの変更後。
  2. を使用する場合サブスクリプション] で、トピックへのサブスクライブ。以下の値を使用します。残りのオプションはデフォルトのままにします。

    • [Subscription topic (サブスクリプショントピック)] で、/resnet-50/predictions と入力します。

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

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

  4. /resnet-50/predictions ページで、発行先の /resnet-50/test トピックを指定します。[トピックに発行] を選択します。

  5. テストが成功すると、発行されたメッセージによって Raspberry Pi カメラがイメージをキャプチャします。Lambda 関数からのメッセージがページの下部に表示されます。このメッセージには、予測クラス名、確率、最大メモリ使用量の形式で、イメージの予測結果が含まれています。

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

インテル Atom の設定

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

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

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

    注記

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

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

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

    注記

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

    1. コンテナー化せずに実行するには、次の手順に従います。

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

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

        ヒント

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

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

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

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

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

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

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

      注記

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

      • [メモリ制限] の値を 3000 MB に増やします。

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

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

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

  3. Neo 最適化モデルリソースをグループに追加します。ステップ 3: 推論 Lambda 関数を作成する で解凍したサンプルパッケージの resnet50 ディレクトリにモデルリソースをアップロードします。このディレクトリには、Resnet-50 でトレーニングされたイメージ分類モデルのプリコンパイルされたモデルアーティファクトが含まれています。次の更新で、ステップ 5: SageMaker Neo 最適化モデルリソースをGreengrass グループに追加する の手順に従います。

    • resnet50 ディレクトリ内のファイルを resnet50.zip という名前のファイルに圧縮します。

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

    • resnet50.zip ファイルをアップロードします。

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

    注記

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

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

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

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

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

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

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

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

      • を使用する場合Lambda 関数の所属、grant読み取りおよび書き込みアクセスLambda 関数にアップデートします。

NVIDIA Jetson TX2 の設定

NVIDIA Jetson TX2 でこのチュートリアルを実行するには、ソースイメージを指定し、Lambda 関数を設定して、ローカルデバイスリソースを追加します。

  1. AWS IoT Greengrass Core ソフトウェアをインストールし、GPU を推論に使用できるように、Jetson デバイスが設定されていることを確認します。デバイスの設定の詳細については、「他のデバイスの設定」を参照してください。NVIDIA Jetson TX2 で推論に GPU を使用するには、Jetpack 4.3 でボードのイメージを作成するときに、デバイスに CUDA 10.0 と cuDNN 7.0 をインストールする必要があります。

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

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

    注記

    代わりに、Jetson ボードにカメラを設置して、ソースイメージをキャプチャすることもできます。ただし、最初に静的イメージから開始することを強くお勧めします。

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

    注記

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

    1. コンテナー化せずに実行するには、次の手順に従います。

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

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

        ヒント

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

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

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

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

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

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

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

      注記

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

      • [メモリ制限] の値を増やします。指定されたモデルを GPU モードで使用するには、少なくとも 2000 MB を使用します。

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

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

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

  4. Neo 最適化モデルリソースをグループに追加します。ステップ 3: 推論 Lambda 関数を作成する で解凍したサンプルパッケージの resnet18 ディレクトリにモデルリソースをアップロードします。このディレクトリには、Resnet-18 でトレーニングされたイメージ分類モデルのプリコンパイル済みのモデルアーティファクトが含まれています。次の更新で、ステップ 5: SageMaker Neo 最適化モデルリソースをGreengrass グループに追加する の手順に従います。

    • resnet18 ディレクトリ内のファイルを resnet18.zip という名前のファイルに圧縮します。

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

    • resnet18.zip ファイルをアップロードします。

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

    注記

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

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

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

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

      • [リソース名] と [デバイスパス] には、次の表の値を使用します。テーブルの行ごとに 1 つのデバイスリソースを作成します。

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

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

      • を使用する場合Lambda 関数の所属、grant読み取りおよび書き込みアクセス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

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

    注記

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

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

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

    • を使用する場合Lambda 関数の所属、grant読み取りおよび書き込みアクセスLambda 関数にアップデートします。

       

      名前

      ソースパス

      送信先パス

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp

  7. 正しいディレクトリを使用するようにグループサブスクリプションを更新します。次の更新で、ステップ 7: サブスクリプションを Greengrass グループに追加する の手順に従います。

    • 最初のトピックフィルタには、/resnet-18/predictions と入力します。

    • 2 番目のトピックフィルタには、/resnet-18/test と入力します。

  8. 正しいディレクトリを使用するようにテストサブスクリプションを更新します。次の更新で、推論例をテストする の手順に従います。

    • を使用する場合サブスクリプション] で、トピックへのサブスクライブ。[Subscription topic (サブスクリプショントピック)] で、/resnet-18/predictions と入力します。

    • /resnet-18/predictions ページで、発行先の /resnet-18/test トピックを指定します。

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

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

エラーログを確認する

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

    sudo su cd /greengrass/ggc/var/log
  2. Checkruntime.logでエラーがないかどうかを確認します。

    cat system/runtime.log | grep 'ERROR'

    ユーザー定義の Lambda 関数ログでもエラーがないかどうかを確認できます。

    cat user/your-region/your-account-id/lambda-function-name.log | grep 'ERROR'

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

 

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

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

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. ディレクトリにoptimizedImageClassification.zipでアップロードしたステップ 3: 推論 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 リソース用に指定したローカルディレクトリの内容を一覧表示します。

    注記

    ML リソースのパスが ml_model 以外の場合は、ここで置き換えてください。

    cd /ml_model ls -ls

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

    56 -rw-r--r-- 1 ggc_user ggc_group 56703 Oct 29 20:07 model.json 196152 -rw-r--r-- 1 ggc_user ggc_group 200855043 Oct 29 20:08 model.params 256 -rw-r--r-- 1 ggc_user ggc_group 261848 Oct 29 20:07 model.so 32 -rw-r--r-- 1 ggc_user ggc_group 30564 Oct 29 20:08 synset.txt

 

Lambda 関数で /dev/dri/renderD128 が見つからない

このエラーは、OpenCL から必要な GPU デバイスに接続できない場合に発生します。Lambda 関数に必要なデバイスでデバイスリソースを作成する必要があります。

次のステップ

次は、最適化された他のモデルを試します。詳細については、『』を参照してください。SageMaker Neo ドキュメント