2.Kubernetes上のPodでGPUを使えるようにした話(ソフトウェア編→Ubuntu上)

 こんにちは,修士2年の平尾真斗です!この記事は,「1.Kubernetes上のPodでGPUを使えるようにした話(ハードウェア編)」の続きです.読んでいない人はぜひ読んでみてくださいね!Kubernetes上のPodをGPUを使えるようにする構成のソフトウェアの構成を説明します.

 GPUをPodで使用できるようにするための構成は以下になります.いろいろ載っているんですけど説明します.

 Lavender には ESXi 8.0.3 をインストールしました.ESXi 上には 5 台の仮想マシンを構築し,それぞれに Ubuntu をインストールしています.

  • jump
    • 踏み台サーバおよびリバースプロキシとして機能します.Ubuntu 上には Nginx と Avahi daemon をインストールしています.
  • control
    • kubectl コマンドを Kube API Server に送信する管理ノードの役割を担います.また,コンテナのビルドやイメージ作成,レジストリへの Push を行うサーバでもあります.Ubuntu 上には,Avahi daemon,containerd,Helm,kubectl をインストールしています.
  • master
    • GPU を Kubernetes の Pod から利用するためのノードです.Ubuntu 上には,Avahi daemon,NVIDIA Driver,K3s Server をインストールしています.Kubernetes クラスタは master,worker1,worker2 の 3 台で構成されていますが,GPU を利用した Pod を実行できるのは master のみです.1台だけしか使えない理由は後で説明します.
  • worker1 とworker2
    • Kubernetes クラスタのワーカーノードです.Ubuntu 上には,Avahi daemon と K3s Agent をインストールしています.

GPUを使用するためにやったこと

GPUパススルー

 GPUパススルーとは,物理GPUを仮想マシンに直接割り当て,仮想マシンからGPUを利用できるようにする技術です.GPUパススルーを行う手法は2つあります.

  • vDGA
    • 仮想マシン1台に対してGPUを割り振る方式
  • vGPU
    • 複数の仮想マシンにGPUを割り振る方式

 今回は,vDGA によって仮想マシン 1 台に GPU を直接割り当てる方式を採用しました.本当は, vGPU を利用し,1 枚の GPU を複数の仮想マシンで共有したかったのですが,vGPU に対応している GPU は限られています.公開されている対応表を確認したところ,今回使用した GPU は vGPU に対応していないことが分かりました.どうやら,vGPU は主にデータセンター向けの GPU が対象となっているようです.→これちゃんと確認してからGPUを買った方がいいです!

 vDGAを行うにあたって行ったことは,ESXi上でのPCIデバイスの認識とPCIデバイスを仮想マシン側で認識させる作業です.GPUを配置した状態でハイパーバイザのUI上の「管理」から「PCIデバイス」から簡単に有効化できます.

 仮想マシンからPCIデバイスを認識させる作業は「その他のデバイスの追加」からPCIデバイスを追加して認識させればOKです.

 仮想マシンの設定でPCIデバイスを選択すればOKです.

 あとは,仮想マシンの「構成パラメータ」から以下の箇所を追加すれば起動することができます.この記事が参考になったのでぜひ使ってみてください.

  • pciPassthru.use64bitMMIO=“TRUE”
    • PCI パススルーしたデバイスに対して64bitのMMIO(Memory Mapped I/O)領域を使用するかどうかを指定する設定です.TRUE に設定することで,4GB を超えるアドレス空間を利用できるようになり,大容量のメモリ領域を必要とするデバイス(主に GPU)を正しく認識できるようになります.
  • pciPassthru.64bitMMIOSizeGB=“128”
    • pciPassthru.64bitMMIOSizeGB=”128″ は,64bit MMIO 領域として仮想マシンに割り当てるアドレス空間のサイズを GB 単位で指定する設定です.この例では,GPU 用に 128GB 分の MMIO 空間を確保することを意味します.大容量の VRAM を持つ GPU をパススルーする場合に必要となります.

 あとは起動してGPUが認識されている確認してNVIDIA Corporation AD103 [GeForce RTX 4080 SUPER] (rev a1)が出ればOKです.

hirao@rtx4080-master:~$ lspci | grep -i vga
00:0f.0 VGA compatible controller: VMware SVGA II Adapter
02:02.0 VGA compatible controller: NVIDIA Corporation AD103 [GeForce RTX 4080 SUPER] (rev a1)
hirao@rtx4080-master:~$

Nvidia GPUドライバのインストール

 NvidiaのGPUを使えるようにするためには,Ubuntu上にドライバをインストールする必要がありました.確認すると最新版は,nvidia-driver-590-openだったのでそれをインストールしました.

hirao@rtx4080-master:~$ sudo apt install nvidia-driver-590-open -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
・・・長いので省略
hirao@rtx4080-master:~$

 nvidia-smiと入力するとGPUの使用状況とか見れるので確認してみてください!

hirao@rtx4080-master:~$ nvidia-smi
Fri Feb 20 07:03:58 2026       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 590.48.01              Driver Version: 590.48.01      CUDA Version: 13.1     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4080 ...    Off |   00000000:02:02.0 Off |                  N/A |
|  0%   28C    P8              5W /  320W |       1MiB /  16376MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+
hirao@rtx4080-master:~$ 

最後に

 GPUを使ったサーバのソフトウェアは,初めて触ったのでなかなか新鮮でした.次はKubernrtes上でGPUを使用するための設定をします.その記事は,次に載せるのでたのしみにしててください!

コメントを残す