やりたいこと: 手元のPCからGPUが刺さっているPC上で動くnvidia-dockerを起動する(sshは表向き使わない).
記事を書いた動機: 言語を問わず,これ!という情報がなかったのでまとめてみました.
事前準備
- nvidia-dockerのインストール:https://github.com/NVIDIA/nvidia-docker
設定ファイルの書き換え
注意として,nvidia-dockerにリモート接続する場合には,dockerにも接続する必要があります.
- docker用のポートは2375
- nvidia-docker用のポートは3476
それぞれで,上記のポートをtcpでlistenさせるための設定が必要です.
dockerにremoteから接続するための書き換え
GPUが刺さっているPC(以下,ホスト)上で /lib/systemd/system/docker.service のExecStartを書き換える
#ExecStart=/usr/bin/dockerd -H fd://
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd://
nvidia-dockerに3476ポートをlistenさせるための設定
ホスト上で /lib/systemd/system/nvidia-docker.service のExecStartを書き換える
#ExecStart=/usr/bin/nvidia-docker-plugin -s $SOCK_DIR
ExecStart=/usr/bin/nvidia-docker-plugin -l :3476 -s $SOCK_DIR
サービスの再起動とテスト
ホストのipアドレスを10.X.X.Xとしているので,これは環境にあわせて書き換える.
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo DOCKER_HOST='10.X.X.X:' docker run hello-world
sudo systemctl restart nvidia-docker
sudo DOCKER_HOST='10.X.X.X:' nvidia-docker run --rm nvidia/cuda nvidia-smi
おまけ(proxyまわり)
もし,クライアントPCとホストの両方がプロキシの内側にある場合には,http_proxyなどの変数が設定されてしまっていて接続できなくなるかもしれない.この場合は,DOCKER_HOSTの他に 変数no_proxyも設定すれば良い.
sudo no_proxy='10.X.X.X' DOCKER_HOST='10.X.X.X:' docker run hello-world
sudo no_proxy='10.X.X.X' DOCKER_HOST='10.X.X.X:' nvidia-docker run --rm nvidia/cuda nvidia-smi
いつも同じホストに繋ぐなら,aliasを仕掛けておくのが吉かと.