適用対象: IoT Edge 1.5
重要
IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日をもってサポートが終了しています。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。
このチュートリアルでは、GPU 対応の仮想マシン (VM) をビルドする方法を紹介します。 VM から、いずれかのモジュールから GPU に作業を割り当てる IoT Edge デバイスを実行します。
Azure portal、Azure Cloud Shell、VM のコマンド ラインを使用して、次の手順を実行します。
- GPU 対応 VM をビルドする
- VM に NVIDIA ドライバー拡張機能をインストールする
- GPU に作業を割り当てるために、IoT Edge デバイス上のモジュールを構成する
前提条件
Azure アカウント - 無料アカウントを作成する
Azure IoT Hub - IoT Hub を作成する
Azure IoT Edge デバイス
IoT Edge デバイスがなく、すばやく作成する場合は、次のコマンドを実行します。 Azure portal で Azure Cloud Shell を使用します。
<DEVICE-NAME>
の新しいデバイス名を作成し、<YOUR-IOT-HUB-NAME>
を IoT ハブ名に置き換えます。az iot hub device-identity create --device-id <YOUR-DEVICE-NAME> --edge-enabled --hub-name <YOUR-IOT-HUB-NAME>
IoT Edge デバイスの作成の詳細については、「 クイック スタート: 初めての IoT Edge モジュールを仮想 Linux デバイスにデプロイする」を参照してください。 この記事の後半では、NVIDIA モジュールを IoT Edge デバイスに追加します。
GPU 最適化済み仮想マシンを作成する
GPU 最適化仮想マシン (VM) を作成するには、適切なサイズを選択します。 すべての VM サイズが GPU 処理をサポートしているわけではありません。また、異なる VM サイズが異なるワークロードに最適です。 詳細については、「GPU 最適化済み仮想マシンのサイズ」を参照するか、仮想マシン セレクターを試してください。
GitHub で Azure Resource Manager (ARM) テンプレートを使用して IoT Edge VM を作成し、GPU 最適化されるように構成します。
GitHub の Azure/iotedge-vm-deploy にある IoT Edge VM デプロイ テンプレートに移動します。
[Azure にデプロイ] ボタンを選択して、Azure portal でカスタム VM の作成を開始します。
[カスタム デプロイ] フィールドに、Azure の資格情報とリソース情報を入力します。
プロパティ 説明またはサンプルの値 サブスクリプション ご自身の Azure アカウントのサブスクリプションを選択します。 リソース グループ Azure リソース グループを追加します。 リージョン East US
GPU VM は、すべてのリージョンで使用できるわけではありません。DNS ラベル プレフィックス VM の名前を作成します。 管理ユーザー名 adminUser
または、独自のユーザー名を作成します。デバイスの接続文字列 IoT Edge デバイスから接続文字列をコピーし、ここに貼り付けます。 VM サイズ Standard_NV6
認証の種類 パスワードまたは SSH 公開キーを選択し、必要に応じてパスワードまたはキー ペア名を作成します。 ヒント
各リージョンでサポートされている GPU VM (利用可能な製品 (リージョン別)) を確認します。
Azure サブスクリプションで許可されているリージョンを確認するには、Azure portal でこの Azure コマンドを試してください。
N
のStandard_N
は、GPU 対応 VM を意味します。az vm list-skus --___location <YOUR-REGION> --size Standard_N --all --output table
下部にある [ 確認と作成 ] ボタンを選択し、[ 作成 ] ボタンを選択します。 デプロイには最大 1 分かかる場合があります。
NVIDIA 拡張機能をインストールする
GPU 最適化 VM を作成したら、Azure portal を使用して VM に NVIDIA 拡張機能 をインストールします。
Azure portal で VM を開き、左側のメニューから [拡張機能とアプリケーション] を選択します。
[追加] を選択し、一覧から [NVIDIA GPU ドライバー拡張機能] を選択したら、[次へ] を選択します。
[確認と作成] を選択してから、[作成] を選択します。 このデプロイが完了するまで最大で 30 分ほどかかる場合があります。
Azure portal でインストールされたことを確認するには、VM の [拡張機能とアプリケーション] メニューに戻ります。
NvidiaGpuDriverLinux
という名前の新しい拡張機能が拡張機能の一覧に表示され、[状態] の下には [プロビジョニング成功] と表示されているはずです。Azure Cloud Shell を使用してインストールが完了したことを確認するには、次のコマンドを実行して拡張機能を一覧表示します。 次のように、
<>
プレースホルダーは実際の値に置き換えてください。az vm extension list --resource-group <YOUR-RESOURCE-GROUP> --vm-name <YOUR-VM-NAME> -o table
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
を実行すると、この一覧がコンソールに出力されます。インストール後、次のコマンドを実行して、インストールされていることを確認します。
nvidia-smi
このテーブルと同様に、確認テーブルが表示されます。
注
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 デバイスに既存のモジュールがある場合、デプロイ マニフェストの DeviceRequests
で createOptions
を使用して構成を追加すると、モジュールを GPU に最適化することができます。 既存のモジュールを構成するには、次の手順に従います。
Azure portal で IoT Hub に移動し、[デバイス管理] メニューで [デバイス] を選択します。
[IoT Edge デバイス] を選択して開きます。
上部にある [モジュールの設定] タブを選択します。
[IoT Edge モジュール] の一覧から、GPU の使用を有効にするモジュールを選択します。
サイド パネルが開いたら、[コンテナーの作成オプション] タブを選択します。
この
HostConfig
JSON 文字列をコピーし、[作成オプション] ボックスに貼り付けます。{ "HostConfig": { "DeviceRequests": [ { "Count": -1, "Capabilities": [ [ "gpu" ] ] } ] } }
[更新] を選択します。
[Review + create](レビュー + 作成) を選択します。 新しい
HostConfig
オブジェクトがモジュールのsettings
に表示されるようになります。[作成] を選択します
新しい構成が動作することを確認するには、VM で次のコマンドを実行します。
sudo docker inspect <YOUR-MODULE-NAME>
コンソールの JSON 出力に、
DeviceRequests
に指定したパラメーターが表示されているはずです。
注
DeviceRequests
パラメーターをより深く理解するには、ソース コード (moby/host_config.go) を参照してください。
あらかじめ用意されている NVIDIA モジュールで GPU を有効にする
IoT Edge デバイスに NVIDIA DIGITS モジュールを追加し、その環境変数を設定してモジュールに GPU を割り当ててみましょう。 この NVIDIA モジュールは既に Docker コンテナーに含まれています。
IoT Hub の [デバイス] メニューから、Azure portal で [IoT Edge デバイス] を選択します。
上部にある [モジュールの設定] タブを選択します。
IoT Edge モジュールの見出しの下にある [+ 追加] を選択し、[IoT Edge モジュール] を選択します。
[IoT Edge モジュール名] フィールドに名前を入力します。
[モジュールの設定] タブの [イメージ URI]
nvidia/digits:6.0
フィールドに を追加します。[環境変数] タブを選択します。
値
NVIDIA_VISIBLE_DEVICES
を使用して、環境変数名0
を追加します。 この変数は、エッジ デバイスで実行されているコンテナー化されたアプリケーションにどの GPU が表示されるかを制御します。NVIDIA_VISIBLE_DEVICES
環境変数は、システム内の物理 GPU に対応するデバイス ID のコンマ区切りリストに設定できます。 たとえば、システムにデバイス ID が 0 と 1 の 2 つの GPU がある場合、変数を "NVIDIA_VISIBLE_DEVICES=0,1" に設定して、両方の GPU をコンテナーに表示できます。 この記事では、VM には GPU が 1 つしかないため、最初の GPU のみを使用します。名前 タイプ 値 NVIDIA_VISIBLE_DEVICES テキスト 0 [追加] を選択します。
[Review + create](レビュー + 作成) を選択します。 配置マニフェストのプロパティが表示されます。
[作成] を選択して、モジュールを作成します。
[更新] を選択してモジュールの一覧を更新します。 モジュールがランタイムの状態で実行を示すには数分かかるため、デバイスを更新し続けます。
デバイスからこのコマンドを実行して、新しい NVIDIA モジュールが存在し、実行中であることを確認します。
iotedge list
IoT Edge デバイスのモジュール一覧に、状態が
running
と表示された NVIDIA モジュールが表示されているはずです。
注
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 チュートリアルでは、複数のビデオ、画像、およびオーディオ ソースを使用できる最適化されたインテリジェント ビデオ アプリケーションを開発する方法を説明します。