演習 - Azure IoT Edge を使用してクロスプラットフォームの DeepStream イメージを NVIDIA 埋め込みデバイスにデプロイする

完了

コンテナー化された DeepStream Graph Composer ワークロードをコンテナー レジストリに発行し、IoT Edge ランタイムで NVIDIA Jetson 埋め込みデバイスをプロビジョニングしました。 これで、ハブでデプロイの仕様を作成して、IoT Edge モジュールとしてワークロードを実行する準備ができました。

  1. Azure portal で、このモジュールの最初に作成した IoT ハブに移動します。 左側のメニューで、[デバイスの自動管理] の下にある [IoT Edge] を選択します。 登録済みのデバイスを探します。

    Azure portal で [IoT Edge デバイス] タブを示すスクリーンショット。

  2. 現在の構成の詳細を表示するには、デバイスの名前を選択します。

    IoT Edge デバイスの概要を示すスクリーンショット。

  3. [モジュールの設定] タブを選択して、モジュール エディターを開きます。

    [モジュール] ペインを示すスクリーンショット。

    NVIDIA 埋め込みデバイスがコンテナー レジストリからコンテナーのワークロードをプルできるように、適切なコンテナー レジストリの資格情報を指定する必要があります。

  4. 別のブラウザー ウィンドウで、Azure portal のコンテナー レジストリに移動します。

    Azure Container Registry インスタンスの概要を示すスクリーンショット。

  5. 左側のメニューの [設定] で、[アクセス キー] を選択します。 [アクセス キー] で、[ログイン サーバー][ユーザー名][パスワード] の値をメモします。 次の手順でこれらの値を使用します。

    コンテナー レジストリの資格情報を示すスクリーンショット。

  6. [モジュールの設定] を表示しているブラウザー ウィンドウに戻ります。 [コンテナー レジストリの資格情報] に、コンテナー レジストリの [アクセス キー] の値を入力します。 このモジュール仕様を適用するデバイスでは、これらの資格情報を使用して、Azure のコンテナー レジストリからコンテナーのワークロードを安全にプルできます。

    Azure IoT Hub でのコンテナー レジストリ資格情報の入力を示すスクリーンショット。

  7. 次に、デプロイの仕様の一部としてカスタム IoT Edge モジュールを構成します。 [モジュール] ペインの [IoT Edge モジュール] セクションで、[追加]>[IoT Edge モジュール] を選択します。

    IoT Edge モジュールの追加を示すスクリーンショット。

  8. [IoT Edge モジュールを追加する][IoT Edge モジュール名] に、モジュール名「deepstream_test4_jetson」を入力します。 [イメージの URI] に、「<Login Server>/deepstream_test4_jetson:v1」を入力します。 <Login Server> には、お使いのコンテナー レジストリの URL を使用します。

    IoT Edge モジュールの名前とイメージ URI の入力を示すスクリーンショット。

  9. 次に [コンテナーの作成オプション] タブを選択し、GPU 高速化のサポートを有効にします。また、X11 ソケットへのアクセスを提供し、次を追加することでコンテナーからのビデオ出力のレンダリングを可能にします。

    {
    "NetworkingConfig": {
        "EndpointsConfig": {
            "host": {}
        }
    },
    "HostConfig": {
        "DeviceRequests": [
            {
                "Count": -1,
                "Capabilities": [
                    [
                        "gpu"
                    ]
                ]
            }
        ],
        "NetworkMode": "host",
        "Binds": [
            "/tmp/.X11-unix/:/tmp/.X11-unix/",
            "/tmp/argus_socket:/tmp/argus_socket"
        ]
    }
    }
    

    操作が完了したら、[更新] を選択します。

    [モジュール] ウィンドウの [Container Create](コンテナーの作成) オプションを示すスクリーンショット。

  10. [デバイスのモジュールを設定] ページに戻ります。戻ったら [確認と作成] を選択します。

    [モジュール] ペインで強調表示された [確認と作成] ボタンを示すスクリーンショット。

  11. [デプロイ] テキスト ボックスに、デバイスに送信しようとしているデプロイの仕様が表示されます。 次の例のような内容が表示されていることを確認します。

    {
    "modulesContent": {
        "$edgeAgent": {
            "properties.desired": {
                "modules": {
                    "deepstream_test4_jetson": {
                        "settings": {
                            "image": "<Login Server>.azurecr.io/deepstream_test4_jetson:v1",
                            "createOptions": "{\"NetworkingConfig\":{\"EndpointsConfig\":{\"host\":{}}},\"HostConfig\":{\"DeviceRequests\":[{\"Count\":-1,\"Capabilities\":[[\"gpu\"]]}],\"NetworkMode\":\"host\",\"Binds\":[\"/tmp/.X11-unix/:/tmp/.X11-unix/\",\"/tmp/argus_socket:/tmp/argus_socket\"]}}"
                        },
                        "type": "docker",
                        "version": "1.0",
                        "env": {
                            "DISPLAY": {
                                "value": ":0"
                            }
                        },
                        "status": "running",
                        "restartPolicy": "always"
                    }
                },
                "runtime": {
                    "settings": {
                        "minDockerVersion": "v1.25",
                        "registryCredentials": {
                            "<Your Registry Name>": {
                                "address": "<Login Server>.azurecr.io",
                                "password": "<Your Password>",
                                "username": "<Your Username>"
                            }
                        }
                    },
                    "type": "docker"
                },
                "schemaVersion": "1.1",
                "systemModules": {
                    "edgeAgent": {
                        "settings": {
                            "image": "mcr.microsoft.com/azureiotedge-agent:1.1",
                            "createOptions": ""
                        },
                        "type": "docker"
                    },
                    "edgeHub": {
                        "settings": {
                            "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
                            "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
                        },
                        "type": "docker",
                        "status": "running",
                        "restartPolicy": "always"
                    }
                }
            }
        },
        "$edgeHub": {
            "properties.desired": {
                "routes": {
                    "route": "FROM /messages/* INTO $upstream"
                },
                "schemaVersion": "1.1",
                "storeAndForwardConfiguration": {
                    "timeToLiveSecs": 7200
                }
            }
        },
        "deepstream_test4_jetson": {
            "properties.desired": {}
        }
    }
    }
    
  12. デプロイの構成が正しいことを確認し、[作成] を選択してデプロイ プロセスを開始します。

    [デプロイ] テキスト ボックスと [作成] ボタンを示すスクリーンショット。

  13. デプロイが成功したことを確認するには、NVIDIA 埋め込みデバイスのターミナルで次のコマンドを実行します。

    sudo iotedge list
    
  14. 出力に、edgeAgentedgeHub、および deepstream_test4_jetson モジュールに対して running の状態が表示されていることを確認します。

    デバイスがディスプレイに接続されている場合は、次の例のように、DeepStream Graph Composer アプリケーションの視覚化された出力を表示できます。

    Jetson ハードウェア上で実行中の IoT Edge モジュールを示すスクリーンショット。

  15. NVIDIA Jetson 埋め込みデバイスのターミナルで次のコマンドを実行して、deepstream_test4_jetson モジュールの出力を監視します。

    sudo docker logs -f deepstream_test4_jetson
    

    デバイスは、数秒ごとに、Azure IoT Hub の登録済みハブにテレメトリを送信します。 次の例のようなメッセージが表示されます。

    Message sent : {
      "version" : "4.0",
      "id" : 1440,
      "@timestamp" : "2021-09-21T03:08:51.161Z",
      "sensorId" : "sensor-0",
      "objects" : [
        "-1|570|478.37|609|507.717|Vehicle|#|sedan|Bugatti|M|blue|XX1234|CA|-0.1"
      ]
    }
    
  16. IoT Edge デバイスのデバイスの概要に戻ると、Azure portal で実行中のモジュールの状態を確認できます。 デバイスについて、次のモジュールと、関連する状態が一覧表示されます。

    ランタイム状態の IoT Edge デバイスの概要を示すスクリーンショット。

  17. また、IoT Hub の概要ペインで、デバイスからハブにメッセージが到着していることを確認することもできます。 メッセージが増加していることがわかります。

    IoT Hub の [使用状況] ウィンドウの受信メッセージを表すグラフを示すスクリーンショット。

おめでとうございます。 DeepStream Graph Composer ワークロードの運用レベルのエッジ デプロイを正常に開発し、Azure IoT Edge を使用して実際のデバイスにデプロイしました。

次の操作を試してみてください

このモジュールで説明されている戦略を使用して、ライブ カメラ フィードを使用して絶滅危惧種の一意のインスタンスをカウントする野生動物保護ソリューションをサポートするには、既存の DeepStream 参照グラフをどのように変更すればよいでしょうか? このソリューションをサポートするために、どのコンポーネントを変更する必要がありますか? 全体的なデプロイ戦略に変更を加える必要はありますか?