環境
下記の構成で検証しました.
- 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 を使えるようになりました.
*1:https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html/performing_a_standard_rhel_9_installation/booting-a-system-with-uefi-secure-boot_assembly_installing-on-64-bit-ibm-z より
*2:https://docs.oracle.com/cd/F61410_01/secure-boot/sboot-SigningKernelModulesforUseWithSecureBoot.html#topic_l54_rgk_lvb より