ホストでNvidiaドライバー、CUDA Toolkitを認識しているか確認
ホストマシン自体がGPUを正しく認識しているかを確認します。
# 1. NvidiaドライバーのバージョンとGPUの状態を確認
# Driver Versionと、接続されているGPUの情報が表示されればOK
nvidia-smi
# 2. CUDA Toolkitのバージョンを確認 (インストールされている場合)
# nvccコマンドはCUDA Toolkitに含まれています
nvcc -V
nvidia-smi が正常にGPU情報を表示できれば、ドライバーは基本的に正しく動作しています。
また、nvidia-smi で表示される "CUDA Version" は、そのドライバーが対応しているCUDAの最大バージョンを示しており、実際にインストールされているToolkitのバージョンとは異なる場合があります。
そのため、nvccコマンドで正確なドライバーのバージョンを確認することを推奨しています。
コンテナでNvidiaドライバー、CUDA Toolkitを認識しているか確認
Dockerコンテナ内からGPUにアクセスできるかを確認します。
# Nvidiaの公式CUDAイメージを使って、コンテナ内でnvidia-smiを実行
# ホストと同じようにGPU情報が表示されれば成功
# nvidia/cuda以降は適切なパスを指定してください。
docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
このコマンドが失敗する場合、DockerとNvidiaドライバーの連携部分(NVIDIA Container Toolkit)に問題がある可能性が高いです。
【例外的な対処法】no-cgroups = false に変更する
最新OS(Ubuntu 22.04以降)と古いDockerバージョンを組み合わせているなど、特定の条件下でコンテナからGPUが見えない問題が発生することがあります。
これは、Dockerがcgroup v2のデバイス管理を正しく処理できない場合に起こります。
その際の回避策として、NVIDIAのツールにcgroupの管理を直接行わせる設定が有効な場合があります。
⚠️ 注意点
この方法は、あくまで一時的な回避策です。最新のDocker環境では、no-cgroups = true(デフォルト)が推奨されており、この設定を false に変更すると逆に問題が発生する可能性があります。実行する前に、Dockerを最新バージョンにできないか検討してください。
手順
-
設定ファイルを開く
sudo nano /etc/nvidia-container-runtime/config.toml -
設定を変更する
ファイルの中にあるno-cgroups = trueという行を見つけて、falseに書き換えます。# 変更前 no-cgroups = true # 変更後 no-cgroups = false -
保存して閉じる
Ctrl+Xを押し、次にYを押してからEnterを押して保存します。 -
Dockerを再起動する
sudo systemctl restart docker
設定変更後、再度コンテナ内での nvidia-smi の実行を試してください。
参考:
その他の確認事項
上記で問題が解決しない場合に、ドライバーの再インストール前に試せることです。
1. Dockerデーモンの再起動
設定変更後や何らかの不整合が起きた際に有効です。
sudo systemctl restart docker
2. NVIDIA Container Toolkitの設定確認
DockerがGPUを利用するためのデフォルトランタイムとして nvidia が設定されているか確認します。
# /etc/docker/daemon.json ファイルの中身を確認
cat /etc/docker/daemon.json
以下のような設定が含まれているか確認してください。
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia"
}
もしファイルが存在しない、または設定が異なる場合は、NVIDIA Container Toolkitのインストール手順を再確認してください。
3. NVIDIA関連のカーネルモジュールがロードされているか確認
nvidia関連のモジュールが表示されればOKです。何も表示されない場合、ドライバーが正しくロードされていません。
lsmod | grep nvidia
4. システムの再起動
最終手段ですが、多くのドライバー関連の問題が解決することがあります。
sudo reboot