Closed1

nvidia-dockerが突然GPUを認識しなくなる問題

bilzardbilzard

以下の記事で対処法について知った。

https://qiita.com/tttamaki/items/4f369633b7f53f5131a1

なお、この問題についてはnvidia-dockerがISSUEの原因と対処法について文書を公開している。

https://github.com/NVIDIA/nvidia-docker/issues/1730#issue-1573551271

原因は、簡単にいうと、cgroupの管理がsystemctlとdockerとで競合しているということらしい。cgroupの管理をsystemctl以外にすることがワークアラウンドになる。

nvidia-dockerの次のpactch releaseで解決する予定とのこと。

環境

$ docker --version
Docker version 24.0.4, build 3713ee1
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.2 LTS
Release:	22.04
Codename:	jammy

やったこと

自分の環境が本事象に該当するかどうかの確認

$ docker info | grep Cgroup
 Cgroup Driver: systemd
 Cgroup Version: 2

cgroup driverにsystemdを利用している -> 該当する。

事象の再現方法

container起動中にsudo systemctl daemon-reload を実行後、コンテナ内からGPUが利用できなくなること。

import torch

torch.cuda.is_available()
# False

ワークアラウンド

Cgroupの管理をsystemdでなくcgroupfsにやらせる。 "exec-opts": ["native.cgroupdriver=cgroupfs"] の一行を /etc/docker/daemon.json のトップレベルに追加(※)し、dockerを再起動する。

$ sudo systemctl restart docker.service

※参考:

https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/dockerd/#daemon-configuration-file

設定が反映されていることの確認

cgroupの設定

$ docker info | grep Cgroup
Cgroup Driver: cgroupfs
Cgroup Version: 2

Cgroup Driverがcgroupfsに変わっていること。

事象が再現しなくなること

sudo systemctl daemon-reload
import torch

torch.cuda.is_available()
# True
このスクラップは6ヶ月前にクローズされました