チュートリアル: GPU の IoT Edge モジュールを構成、接続、検証する

適用対象:IoT Edge 1.5 のチェックマーク IoT Edge 1.5 IoT Edge 1.4 チェックマーク IoT Edge 1.4

重要

サポートされているリリースは、IoT Edge 1.5 LTS と IoT Edge 1.4 LTS です。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日にサポートが終了します。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。

このチュートリアルでは、GPU 対応の仮想マシン (VM) をビルドする方法を紹介します。 VM から、IoT Edge デバイスを実行し、そのモジュールの 1 つから GPU に作業を割り当てる方法を説明します。

Azure portal、Azure Cloud Shell、および VM のコマンド ラインを使用して、以下を行います。

  • GPU 対応 VM をビルドする
  • VM に NVIDIA ドライバー拡張機能をインストールする
  • GPU に作業を割り当てるために、IoT Edge デバイス上のモジュールを構成する

前提条件

GPU 最適化済み仮想マシンを作成する

GPU 最適化済み仮想マシン (VM) を作成するには、適切なサイズを選択することが重要です。 すべての VM サイズが GPU 処理に対応できるわけではありません。 さらに、ワークロードによって異なる VM サイズが必要になります。 詳細については、「GPU 最適化済み仮想マシンのサイズ」を参照するか、仮想マシン セレクターを試してください。

GitHub の Azure Resource Manager (ARM) テンプレートを使用して IoT Edge VM を作成し、GPU に最適化されるように構成してみましょう。

  1. GitHub の IoT Edge VM デプロイ テンプレート (Azure/iotedge-vm-deploy) に移動します。

  2. [Deploy to Azure](Azure にデプロイ) ボタンを選択すると、Azure portal でカスタム VM の作成が開始されます。

  3. [カスタム デプロイ] フィールドに、Azure の資格情報とリソースを入力します。

    プロパティ 説明またはサンプルの値
    サブスクリプション ご自身の Azure アカウントのサブスクリプションを選択します。
    リソース グループ Azure リソース グループを追加します。
    リージョン East US
    GPU VM は、すべてのリージョンで使用できるわけではありません。
    DNS ラベル プレフィックス VM の名前を作成します。
    管理ユーザー名 adminUser
    または、独自のユーザー名を作成します。
    デバイスの接続文字列 IoT Edge デバイスから接続文字列をコピーし、ここに貼り付けます。
    VM サイズ Standard_NV6
    認証の種類 [パスワード]または [SSH 公開キー] のいずれかを選択し、必要に応じてパスワードまたはキーの組の名前を作成します。

    ヒント

    各リージョンでサポートされている GPU VM (利用可能な製品 (リージョン別)) を確認します。

    Azure サブスクリプションで許可されているリージョンを確認するには、Azure portal からこの Azure コマンドを試してください。 Standard_NN は、GPU 対応 VM を意味します。

    az vm list-skus --location <YOUR-REGION> --size Standard_N --all --output table
    
  4. 下部の [確認と作成] ボタンを選択し、次に [作成] ボタンを選択します デプロイが完了するまでに最大で 1 分ほどかかる場合があります。

NVIDIA 拡張機能をインストールする

GPU 最適化済み VM の作成が完了したので、次は Azure portal を使用して VM に NVIDIA 拡張機能をインストールしてみましょう。

  1. Azure portal で VM を開き、左側のメニューから [拡張機能とアプリケーション] を選択します。

  2. [追加] を選択し、一覧から [NVIDIA GPU ドライバー拡張機能] を選択したら、[次へ] を選択します。

  3. [確認と作成] を選択してから、[作成] を選択します。 このデプロイが完了するまで最大で 30 分ほどかかる場合があります。

  4. Azure portal でインストールされたことを確認するには、VM の [拡張機能とアプリケーション] メニューに戻ります。 NvidiaGpuDriverLinux という名前の新しい拡張機能が拡張機能の一覧に表示され、[状態] の下には [プロビジョニング成功] と表示されているはずです。

  5. Azure Cloud Shell を使用してインストールが完了したことを確認するには、次のコマンドを実行して拡張機能を一覧表示します。 次のように、<> プレースホルダーは実際の値に置き換えてください。

    az vm extension list --resource-group <YOUR-RESOURCE-GROUP> --vm-name <YOUR-VM-NAME> -o table
    
  6. NVIDIA モジュールでは、NVIDIA System Management Interface プログラム (別名 nvidia-smi) を使用します。

    デバイスから、お使いの Ubuntu のバージョンに応じた nvidia-smi パッケージをインストールします。 このチュートリアルでは、Ubuntu 20.04 用の nvidia-utils-515 をインストールします。 インストール時にプロンプトが表示されたら、Y を選択します。

    sudo apt install nvidia-utils-515
    

    nvidia-smi のすべてのバージョンの一覧は次のとおりです。 最初にインストールせずに nvidia-smi を実行すると、この一覧がコンソールに出力されます。

  7. インストール後、次のコマンドを実行して、インストールされていることを確認します。

    nvidia-smi
    

    以下のような、確認テーブルが表示されます。

    NVIDIA ドライバー テーブルのスクリーンショット。

Note

NVIDIA 拡張機能は、NVIDIA ドライバーをインストールするための簡単な方法ですが、さらにカスタマイズが必要な場合もあるでしょう。 N シリーズ VM へのカスタム インストールについての詳細は、「Linux を実行している N シリーズ VM に NVIDIA GPU ドライバーをインストールする」を参照してください。

モジュールで GPU アクセラレーションを使用する

IoT Edge モジュールで、処理に GPU を使用するには、さまざまな方法があります。 1 つの方法は、デバイス上の既存の IoT Edge モジュールで、GPU アクセラレーションを使用するように構成する方法です。 もう 1 つの方法は、あらかじめ用意されているコンテナー モジュール (既に GPU 最適化済みの NVIDIA DIGITS のモジュールなど) を使用する方法です。 両方の方法を見てみましょう。

DeviceRequests を使用して既存のモジュールで GPU を有効にする

IoT Edge デバイスに既存のモジュールがある場合、デプロイ マニフェストの createOptionsDeviceRequests を使用して構成を追加すると、モジュールを GPU に最適化することができます。 既存のモジュールを構成するには、次の手順に従います。

  1. Azure portal で IoT Hub に移動し、[デバイス管理] メニューで [デバイス] を選択します。

  2. [IoT Edge デバイス] を選択して開きます。

  3. 上部にある [モジュールの設定] タブを選択します。

  4. [IoT Edge モジュール] の一覧から、GPU の使用を有効にするモジュールを選択します。

  5. サイド パネルが開いたら、[コンテナーの作成オプション] タブを選択します。

  6. この HostConfig JSON 文字列をコピーし、[作成オプション] ボックスに貼り付けます。

     {
         "HostConfig": {
             "DeviceRequests": 
             [
                 {
                     "Count": -1,
                     "Capabilities": [
                         [
                             "gpu"
                         ]
                     ]
                 }
             ]
         }
     }
    
  7. [更新] を選択します。

  8. [Review + create](レビュー + 作成) を選択します。 新しい HostConfig オブジェクトがモジュールの settings に表示されるようになります。

  9. [作成] を選択します

  10. 新しい構成が動作することを確認するには、VM で次のコマンドを実行します。

    sudo docker inspect <YOUR-MODULE-NAME>
    

    コンソールの JSON 出力に、DeviceRequests に指定したパラメーターが表示されているはずです。

Note

DeviceRequests パラメーターをより深く理解するには、ソース コード (moby/host_config.go) を参照してください。

あらかじめ用意されている NVIDIA モジュールで GPU を有効にする

IoT Edge デバイスに NVIDIA DIGITS モジュールを追加し、その環境変数を設定してモジュールに GPU を割り当ててみましょう。 この NVIDIA モジュールは既に Docker コンテナーに含まれています。

  1. IoT Hub の [デバイス] メニューから、Azure portal で [IoT Edge デバイス] を選択します。

  2. 上部にある [モジュールの設定] タブを選択します。

  3. IoT Edge モジュールの見出しの下にある [+ 追加] を選択し、[IoT Edge モジュール] を選択します。

  4. [IoT Edge モジュール名] フィールドに名前を入力します。

  5. [モジュールの設定] タブの [イメージ URI]nvidia/digits:6.0 フィールドに を追加します。

  6. [環境変数] タブを選択します。

  7. 0 を使用して、環境変数名 NVIDIA_VISIBLE_DEVICES を追加します。 この変数は、エッジ デバイスで実行されているコンテナー化されたアプリケーションにどの GPU が表示されるかを制御します。 NVIDIA_VISIBLE_DEVICES 環境変数は、システム内の物理 GPU に対応するデバイス ID のコンマ区切りリストに設定できます。 たとえば、システムにデバイス ID が 0 と 1 の 2 つの GPU がある場合、変数を "NVIDIA_VISIBLE_DEVICES=0,1" に設定して、両方の GPU をコンテナーに表示できます。 この記事では、VM に GPU が 1 つしかないため、最初の (かつ唯一の) GPU を使用します。

    名前 Type
    NVIDIA_VISIBLE_DEVICES Text 0
  8. [追加] を選択します。

  9. [確認および作成] を選択します。 配置マニフェストのプロパティが表示されます。

  10. [作成] を選択して、モジュールを作成します。

  11. [更新] を選択してモジュールの一覧を更新します。 [ランタイムの状態] で、このモジュールが [running](実行中) と表示されるまでには数分かかるので、デバイスの更新を続けてください。

  12. デバイスからこのコマンドを実行して、新しい NVIDIA モジュールが存在し、実行中であることを確認します。

    iotedge list
    

    IoT Edge デバイスのモジュール一覧に、状態が running と表示された NVIDIA モジュールが表示されているはずです。

    'iotedge list' コマンドの結果を示すスクリーンショット。

Note

NVIDIA DIGITS コンテナー モジュールの詳細については、Deep Learning Digits に関するドキュメントを参照してください。

リソースをクリーンアップする

他の IoT Edge チュートリアルを続ける場合は、このチュートリアルで作成したデバイスを使用することができます。 それ以外の場合は、課金されないようにするために、作成した Azure リソースを削除してもかまいません。

新しいリソース グループで仮想マシンと IoT ハブを作成した場合、そのグループを削除すると、関連するすべてのリソースが削除されます。 リソース グループの内容を再確認して、残しておくべきものがないことを確認してください。 グループ全体を削除したくない場合は、リソース (仮想マシン、デバイス、GPU モジュール) を個別に削除してもかまいません。

重要

リソース グループを削除すると、元に戻すことができません。

Azure リソース グループを削除するには、次のコマンドを使用します。 リソース グループを削除するのに数分かかる場合があります。

az group delete --name <YOUR-RESOURCE-GROUP> --yes

リソース グループが削除されたことは、リソース グループの一覧を表示することによって確認できます。

az group list

次のステップ

この記事では、仮想マシンと IoT Edge デバイスを GPU アクセラレーションするための設定を行いました。 同様の設定でアプリケーションを実行するには、「Microsoft Azure を使用した NVIDIA DeepStream の開発」のラーニング パスを試してください。 Learn チュートリアルでは、複数のビデオ、画像、およびオーディオ ソースを使用できる最適化されたインテリジェント ビデオ アプリケーションを開発する方法を説明します。