演習 - Azure IoT Edge を使用してクロスプラットフォームの DeepStream イメージを NVIDIA 埋め込みデバイスにデプロイする
コンテナー化された DeepStream Graph Composer ワークロードをコンテナー レジストリに発行し、IoT Edge ランタイムで NVIDIA Jetson 埋め込みデバイスをプロビジョニングしました。 これで、ハブでデプロイの仕様を作成して、IoT Edge モジュールとしてワークロードを実行する準備ができました。
Azure portal で、このモジュールの最初に作成した IoT ハブに移動します。 左側のメニューで、[デバイスの自動管理] の下にある [IoT Edge] を選択します。 登録済みのデバイスを探します。
現在の構成の詳細を表示するには、デバイスの名前を選択します。
[モジュールの設定] タブを選択して、モジュール エディターを開きます。
NVIDIA 埋め込みデバイスがコンテナー レジストリからコンテナーのワークロードをプルできるように、適切なコンテナー レジストリの資格情報を指定する必要があります。
別のブラウザー ウィンドウで、Azure portal のコンテナー レジストリに移動します。
左側のメニューの [設定] で、[アクセス キー] を選択します。 [アクセス キー] で、[ログイン サーバー]、[ユーザー名]、[パスワード] の値をメモします。 次の手順でこれらの値を使用します。
[モジュールの設定] を表示しているブラウザー ウィンドウに戻ります。 [コンテナー レジストリの資格情報] に、コンテナー レジストリの [アクセス キー] の値を入力します。 このモジュール仕様を適用するデバイスでは、これらの資格情報を使用して、Azure のコンテナー レジストリからコンテナーのワークロードを安全にプルできます。
次に、デプロイの仕様の一部としてカスタム IoT Edge モジュールを構成します。 [モジュール] ペインの [IoT Edge モジュール] セクションで、[追加]>[IoT Edge モジュール] を選択します。
[IoT Edge モジュールを追加する] の [IoT Edge モジュール名] に、モジュール名「deepstream_test4_jetson」を入力します。 [イメージの URI] に、「<Login Server>/deepstream_test4_jetson:v1」を入力します。 <Login Server> には、お使いのコンテナー レジストリの URL を使用します。
次に [コンテナーの作成オプション] タブを選択し、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" ] } }
操作が完了したら、[更新] を選択します。
[デバイスのモジュールを設定] ページに戻ります。戻ったら [確認と作成] を選択します。
[デプロイ] テキスト ボックスに、デバイスに送信しようとしているデプロイの仕様が表示されます。 次の例のような内容が表示されていることを確認します。
{ "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": {} } } }
デプロイの構成が正しいことを確認し、[作成] を選択してデプロイ プロセスを開始します。
デプロイが成功したことを確認するには、NVIDIA 埋め込みデバイスのターミナルで次のコマンドを実行します。
sudo iotedge list
出力に、
edgeAgent
、edgeHub
、およびdeepstream_test4_jetson
モジュールに対してrunning
の状態が表示されていることを確認します。デバイスがディスプレイに接続されている場合は、次の例のように、DeepStream Graph Composer アプリケーションの視覚化された出力を表示できます。
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" ] }
IoT Edge デバイスのデバイスの概要に戻ると、Azure portal で実行中のモジュールの状態を確認できます。 デバイスについて、次のモジュールと、関連する状態が一覧表示されます。
また、IoT Hub の概要ペインで、デバイスからハブにメッセージが到着していることを確認することもできます。 メッセージが増加していることがわかります。
おめでとうございます。 DeepStream Graph Composer ワークロードの運用レベルのエッジ デプロイを正常に開発し、Azure IoT Edge を使用して実際のデバイスにデプロイしました。
次の操作を試してみてください
このモジュールで説明されている戦略を使用して、ライブ カメラ フィードを使用して絶滅危惧種の一意のインスタンスをカウントする野生動物保護ソリューションをサポートするには、既存の DeepStream 参照グラフをどのように変更すればよいでしょうか? このソリューションをサポートするために、どのコンポーネントを変更する必要がありますか? 全体的なデプロイ戦略に変更を加える必要はありますか?