このドキュメントでは、Anthos VM ランタイムを使用して動作する仮想マシン(VM)で NVIDIA® GPU のサポートを有効にする方法について説明します。ベアメタル版 Anthos クラスタのノードに NVIDIA ドライバをインストールし、GPU が使用可能であることを確認して、GPU を VM に割り当てる方法について学習します。
準備
このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。
- Anthos clusters on bare metal バージョン 1.12.0(
anthosBareMetalVersion: 1.12.0
)以降のクラスタへのアクセス権。ワークロードを実行可能な、どのクラスタタイプでも使用できます。必要に応じて、Compute Engine の Anthos clusters on bare metal を試すか、クラスタ作成の概要をご覧ください。 kubectl
のプラグインとしてインストールされたvirtctl
クライアント ツール。必要に応じて、virtctl クライアント ツールをインストールします。
サポートされている NVIDIA GPU カード
ベアメタル版 Anthos クラスタ バージョン 1.12 以降では、次の NVIDIA GPU がサポートされています。
- Tesla P4
- Tesla V100 SXM2 32 GB
- A100 SXM4 40 GB
- A100 PCIe 40 GB
- A100 SXM4 80 GB
- A100 PCIe 80 GB
ノードに NVIDIA ドライバをインストールする
VM で NVIDIA GPU を使用するには、GPU デバイスをサポートするように Anthos clusters on bare metal ノードを構成する必要があります。ノードに NVIDIA ドライバをインストールするには、NVIDIA GPU を含むクラスタ内の各ノードで次の手順を行います。このドキュメントでは、ノードにサポートされている Ubuntu のバージョンを使用します。
- GPU をサポートするために構成するベアメタル版 Anthos クラスタノードに接続します。
ノードのカーネル バージョンを取得します。
KERNEL_VERSION="$(uname -r)"
Ubuntu ノードを更新し、適切なカーネル ヘッダーをインストールします。
sudo apt update && \ apt install -y linux-headers-${KERNEL_VERSION}
次のステップで NVIDIA ドライバをコンパイルできるように、
build-essential
パッケージをインストールします。sudo apt install -y build-essential
GPU に適した NVIDIA ドライバ パッケージをダウンロードします。ドライバの全一覧については、NVIDIA ドライバのダウンロードをご覧ください。
次の例では、
Linux x86_64
バージョン470.82.01
のドライバをダウンロードします。wget https://us.download.nvidia.com/tesla/470.82.01/NVIDIA-Linux-x86_64-470.82.01.run
NVIDIA ドライバ パッケージをインストールします。前のステップでダウンロードした NVIDIA ドライバ パッケージの名前を使用します。
sudo sh NVIDIA-Linux-x86_64-470.82.01.run \ --accept-license \ --silent \ --no-nouveau-check
NVIDIA カーネル モジュールを読み込みます。
sudo modprobe nvidia
NVIDIA GPU があるクラスタの各ノードで、このセクションの手順を繰り返します。
Anthos VM ランタイムで GPU のサポートを有効にする
ベアメタル版 Anthos クラスタのノードに NVIDIA ドライバをインストールしたら、Anthos VM ランタイムで GPU サポートを有効にします。そうすると、VM がノード上の GPU にアクセスできます。
各ノードは以下のプロセスの一環として再起動されます。VM はこの再起動プロセスの影響を受ける可能性があります。可能であれば、移行するように構成されている移行可能な VM は、他のノードに移行してください。詳しくは、メンテナンス イベント中に VM のエビクション ポリシーを構成する方法をご覧ください。
Anthos VM ランタイムで GPU サポートを有効にするには、次の手順を行います。
VMRuntime
カスタム リソースを編集します。kubectl edit vmruntime vmruntime
enableGPU: true
プロパティをVMRuntime
マニフェストに追加します。apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true enableGPU: true ...
エディタで、
VMRuntime
カスタム リソースを保存して閉じます。vm-system
Namespace の GPU コントローラのステータスを確認します。kubectl get pods --namespace vm-system -w
コントローラが有効になるまでに約 5 分を要します。すべての GPU コントローラの
STATUS
がRunning
になるまで待ちます。次の出力例は、目的の状態を示しています。NAME READY STATUS RESTARTS AGE gpu-controller-controller-manager-gwvcb 2/2 Running 0 10m kubevirt-gpu-dp-daemonset-2lfkl 1/1 Running 0 10m kubevm-gpu-driver-daemonset-5fwh6 1/1 Running 0 10m nvidia-gpu-dp-daemonset-9zq2w 1/1 Running 0 10m nvidia-mig-manager-5g7pz 1/1 Running 0 10m vm-controller-controller-manager-7b6df6979b 2/2 Running 2 (13m ago) 14m
GPU コントローラによってすべてステータスが
Running
と報告されたときに、GPU が使用可能であることを確認します。kubectl get gpuallocations --namespace vm-system
次の出力例は、ノード上の GPU が使用可能であることを示しています。GPU をサポートするクラスタ内の各ノードが表示されています。これらは次のセクションの VM に割り当てます。
NAME ALLOCATED DEVICEMODEL bm-node1 true Tesla A100 SXM4 40GB bm-node2 true Tesla A100 SXM4 40GB
VM で使用する GPU を割り当てる
GPU のサポートが構成されたベアメタル版 Anthos クラスタノードと Anthos VM ランタイムに、VM で使用する GPU を割り当てます。デフォルトの場合、GPU は Pod(コンテナ)で使用するために割り当てられます。
VM で使用する
GPUAllocation
カスタム リソースを編集します。このステップでは、VM で使用するノードに GPU を割り当てます。kubectl edit gpuallocation NODE_NAME --namespace vm-system
NODE_NAME
は、GPU の割り当て元ノードの名前に置き換えます。VM に割り当てる GPU の数を構成します。初期状態では、すべての GPU が Pod に割り当てられます。
VM と Pod に割り当てられる GPU の総数は、ノード内の GPU の数と同じであることが必要です。たとえば、ノードに 4 つの GPU があるとします。VM に 2 つの GPU を割り当てた場合は、2 つの GPU が Pod に割り当てられたままになります。1 つの GPU が未割り当てのままになるため、2 つの GPU を VM に、1 つの GPU を Pod に割り当てようとすると、
GPUAllocation
マニフェストは拒否されます。次の例に示すように、VM で使用するために割り当てるノード上の GPU の数を更新します。
apiVersion: gpu.cluster.gke.io/v1 kind: GPUAllocation metadata: name: gpu-w2 namespace: vm-system spec: node: gpu-w2 pod: 0 vm: 4
この例では、ノードにインストールされている 4 つの GPU がすべて VM に割り当てられます。Pod に割り当てられる GPU はありません。
エディタで、
GPUAllocation
カスタム リソースを保存して閉じます。GPU が
ALLOCATED
ステータスをtrue
として報告していることを確認します。kubectl get gpuallocations --namespace vm-system
次の出力例は、ノード上の GPU が使用可能であることを示しています。
NAME ALLOCATED DEVICEMODEL gpu-w1 true Tesla A100 SXM4 40GB gpu-w2 true Tesla A100 SXM4 40GB
GPU をサポートする VM の作成
これで、ノードから GPU を使用する VM を作成できるようになりました。VM カスタム リソースでは、ノードから割り当てる GPU の名前と数を指定します。
ホストから GPU カードの名前を取得します。
kubectl describe node NODE_NAME
NODE_NAME
は、GPU 名を取得するホストの名前に置き換えます。次の出力例は、このノードに割り当て可能な GPU 名が
NVIDIA_A100_SXM4_40GB
であることを示しています。Name: bm-node1 Roles: worker [...] Allocatable: cpu: 47810m [...] memory: 336929400Ki nvidia.com/gpu-vm-NVIDIA_A100_SXM4_40GB: 1 [...]
任意のエディタで、
VirtualMachine
マニフェスト(my-gpu-vm.yaml
など)を作成します。nano my-gpu-vm.yaml
次の YAML マニフェストをコピーして貼り付けます。
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: true gpu: model: nvidia.com/gpu-vm-GPU_NAME quantity: 1
この YAML ファイルで、次の設定を定義します。
VM_NAME
: VM の名前GPU_NAME
: VM に割り当てるノードの GPU 名。- この GPU 名は、前のステップの
kubectl describe node
コマンドの出力に表示されています(例:NVIDIA_A100_SXM4_40GB
)。
- この GPU 名は、前のステップの
この VM は、
eth0
をデフォルトのpod-network
ネットワークに接続します。VM_NAME-boot-dv
という名前のブートディスクがすでに存在している必要があります。詳細については、仮想ディスクを作成して管理するをご覧ください。エディタで、VM マニフェストを保存して閉じます。
kubectl
を使用して VM を作成します。kubectl apply -f my-gpu-vm.yaml
VM が動作している場合は、VM に接続し、GPU ハードウェアが使用可能であることを確認します。