nvidia-docker2にしたらnvidia-docker-composeが使えなくなった


自分用のメモです

docker環境を更新したら、
https://github.com/eywalker/nvidia-docker-compose/issues/22
これと同じように、


urllib.error.URLError: <urlopen error [Errno 111] Connection refused>

とか言われちゃった人に

nvidia-docker2の更新が大分前なので今更感がありますが、自分が詰まったのでメモとして残します

tl;dr

nvidia-docker-composeは使わない
docker-composeのデフォルトランタイムを以下のようにして変更して使う

/etc/docker/daemon.json

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": [ ]
        }
    }
}

参考: https://github.com/eywalker/nvidia-docker-compose/issues/23

症状

nvidia-docker-composeを使用したところ、


urllib.error.URLError: <urlopen error [Errno 111] Connection refused>

と言われる。
docker、nvidia-docker、docker-compose、nvidia-docker-composeの再インストールやアップデートを試してみてもきちんと改善されない。


nvidia-docker run --rm nvidia/cuda nvidia-smi

はきちんと起動する。

原因

原因はnvidia-docker2になって、nvidia-docker-pulgin( https://github.com/NVIDIA/nvidia-docker/wiki/nvidia-docker-plugin )が削除された(?)こと。これにより起動しているはずのdocker daemonにアクセスすることができなくなっていた。
nvidia-dockerではこれまでlocalhost:3476にデーモンが走っているはずだった。cudaがインストールされていない環境でも一切の変更なしにコンテナが立ち上がるために大きな実装の変更があったようだ

対策

実はnvidia-docker-composeのページ( https://github.com/eywalker/nvidia-docker-compose )にすべて記載されている。nvidia-docker-composeはもう必要なくなり、docker-composeのデフォルトのランタイムを変更してしまえばいいようだ( https://github.com/eywalker/nvidia-docker-compose/issues/23 )。

その他

初投稿です。