みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

GeForce RTX 4080 を Ubuntu の Docker で使う

環境

下記の構成で検証しました.

  • Ubuntu 22.04.3 LTS
  • GG-RTX4080-E16GB/OC/TP (GeForce RTX 4080)
  • nvidia-driver-535-server
  • CUDA Version: 12.2

接続するディスプレイ端子

内蔵グラフィックから出力される端子と,グラフィックボードに搭載されている端子のどちらから映像が出力されるかという問題があります.

対応したUEFIならば,グラフィックボードを認識するので,UEFIの画面はグラフィックボードの端子から出力されます.しかし,インストール直後の Ubuntu はドライバがないためグラフィックボードを認識しないので,内蔵グラフィックから映像を出力します.

ディスプレイに何も映らない場合は,パソコン本体が起動しているのか,内蔵グラフィックとグラフィックボードのどちらから映像が出力されているのかを気にする必要があります.

簡単な解決方法はディスプレイを2枚用意してそれぞれを内蔵グラフィックとグラフィックボードの端子に接続することですが,1枚しかない場合は,適切にケーブルを繋ぎ変える必要があります.

こういった問題があるので,グラフィックボードを搭載していても,内蔵グラフィック非搭載のCPUを搭載したシステムに Linux をインストールするには工夫が必要です.

nvidia-driver をインストール

ubuntu-drivers devices を実行するとパッケージの候補が表示されます.サーバー用途で現在最新版の nvidia-driver-535-server をインストールすることにしました.

sudo apt install nvidia-driver-535-server

Secure Boot のための追加の設定

nvidia-driver はサードパーティ製のドライバなので,Secure Boot を設定しなければ起動時に読み込まれません.Machine Owner Key (MOK) を追加する機能が備わったマザーボードならば対応可能です *1

nvidia-driver のインストール途中で自動的に key が作成されますので,後で認証するためのパスフレーズを入力します.一時的なものなので使い捨ての文字列で問題ありません.

この時点で Ubuntu はグラフィックボードのドライバを読み込んでいないので,内蔵グラフィックから映像を出力しています.しかし,作成した key を enroll するには,sudo systemctl reboot で再起動した直後の management interface を操作する必要があります*2.この画面は UEFI の一部なのでグラフィックボードから映像が出力されます.このため,再起動するコマンドを実行した直後に速やかにディスプレイのケーブルを差し替えます.

成功すれば Enroll MOK が選択肢に表示されますが.失敗すると Reset MOK が表示されます.

Ubuntu を起動して,nvidia-smi を実行し,グラフィックボードが認識されたことを確認します.

Docker をインストール

Install Docker Engine on Ubuntu | Docker Docs

Linux post-installation steps for Docker Engine | Docker Docs

これらのドキュメントに従って Docker をインストールします.成功すれば以下のような結果が得られます.

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
719385e32844: Pull complete 
Digest: sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

NVIDIA Container Toolkit をインストール

NVIDIA Docs Hub に,NVIDIA Container Toolkit のインストールの方法が記載されているので,従います.

Overview — NVIDIA Container Toolkit 1.14.3 documentation

The NVIDIA Container Toolkit enables users to build and run GPU-accelerated containers.

成功すれば以下のような結果が得られます.

$ docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
aece8493d397: Pull complete 
Digest: sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f
Status: Downloaded newer image for ubuntu:latest

 NVIDIA-SMI 535.104.12             Driver Version: 535.104.12   CUDA Version: 12.2  ...

なお,docker を --gpus all 指定で実行すれば,nvidia-smi コマンドは使えるようになるので,Docker コンテナに追加する必要はありません.

以上で,Docker から GeForce RTX 4080 を使えるようになりました.