0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Workaround for occasional implicit GPU detachment in Docker

Last updated at Posted at 2025-06-15

課題

Ubuntu 24.04 LTSのディストリビュートされているdocker.ioに対して、Nvidia docker containerでNvidia GPUを貼り付けたDockerコンテナを長期ランニングしていると、いつの間にかGPUが外れていることがある。

この事象が発生していると、Dockerコンテナのサービスが使用できなかったり、Dockerコンテナのサービス使用時にGPUの代わりにCPU負荷が急上昇したりする。そして、Dockerのログには、GPUが利用できないメッセージの出力があったりする。

例えば、ollama/ollamaの場合、この現象が発現すると、以下に示すようにno CUDA-capable deviceを含んだエラーメッセージが出力される。
no-CUDA-capeble.png

回避方法

この問題はNOTICE: Containers losing access to GPUs with error:"Failed to initialize NVML: Unknown Error"#48等で広く知られている。そして、その事象は、systemctl daemon-reloadの実行によって簡単に誘発されることが記されている。また、同記事には「5. Workarounds」で3つの回避方法が提案されている。

  1. nvidia-ctkの使用
  2. 明示的なsystemd cgroup管理の無効化
  3. dockerのダウングレード

今回は、この3つの方法の中、一番容易と思われる2で事態が解消されることを確認した。

以下に事象の発生の確認と回避方法の検証動画を示す。検証には、Dockerコンテナ内でのtorch.cuda.is_available()によるGPUの使用可否で確認した。

現象の確認

systemctl daemon-reload後、docker内のtorch.cuda.is_available()Falseとなる。

wrong.gif

回避方法の効果確認

systemctl daemon-reload、docker内のtorch.cuda.is_available()Trueのまま。

correct.gif

注意

今回の回避策の検証では、DockerのCgroup Driverをsystemdからcgroupfsに変更することで実現している。つまり、Docker全体に影響することを意味する。
このため、製品やサービスへの適用する場合には、十分な見極めが必要と思われる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?