dockerコンテナ上でnvidia-smiがプロセスを表示しない

2023/10/28に公開

問題

GPUメモリを食ってるプロセスを調べようとnvidia-smiコマンドを打つも、Processesの欄に何も表示されない😒

解決手法

  1. docker-compose.ymlにpid: "host"を追記
  2. docker-compose up -d {サービス名}
    • イメージを作り直してdocker-compose.ymlの更新を反映する

プロセスIDが出るようになる🎉
あとはお目当てのプロセスをkill

参考

どうやら原因は、nvidiaドライバーがPID namespaceを認識できないことのようです。

https://github.com/NVIDIA/nvidia-docker/issues/179

It's a current limitation of our driver, sorry about that!
As you realized, it is related to PID namespaces, the driver is not aware of the PID namespace and thus nvidia-smi in the container doesn't see any process running.

https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#why-is-nvidia-smi-inside-the-container-not-listing-the-running-processes

nvidia-smi and NVML are not compatible with PID namespaces.
We recommend monitoring your processes on the host or inside a container using --pid=host.

https://stackoverflow.com/questions/63654885/is-it-correct-that-nvidia-smi-on-docker-does-not-show-processes

Discussion