Dockerでよく計算をすることがあるので、その時に使うオプションをまとめます。
GPUを使うとき
--gpus=<number>
でGPUの個数を指定する。
使うGPUのIDは環境変数NVIDIA_VISIBLE_DEVICES
へ0,1
やall
などと指定する。
NVIDIA_DRIVER_CAPABILITIES
について
使いたい機能に応じて環境変数を指定する必要がある。デフォルトではnvidia-smiやNVMLが使えるutilityのみ。カンマ区切りで複数指定可能。
Supported driver capabilities(https://github.com/NVIDIA/nvidia-container-runtime/blob/master/README.md より)
-
compute
: required for CUDA and OpenCL applications. -
compat32
: required for running 32-bit applications. -
graphics
: required for running OpenGL and Vulkan applications. -
utility
: required for usingnvidia-smi
and NVML. -
video
: required for using the Video Codec SDK. -
display
: required for leveraging X11 display.
シェルを起動しているUserを引き継いで実行したいとき
nfsマウント等していて、特にユーザを一致する必要があるときに使います。
-v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -u $(id -u $USER):$(id -g $USER)
を使う。
GUIを使いたいとき
-e DISPLAY=$DISPLAY --net host -v /tmp/.X11-unix:/tmp/.X11-unix:ro -v $HOME/.Xauthority:/root/.Xauthority:ro
(GUI周りはsshからX11 forwardingをしたほうがいいかも。今は面倒屋なので直接シェルを使っています)
ホームディレクトリをバインドマウントしたいとき
-v $HOME:$HOME
を使う。
共有メモリの上限を増やすとき
特にGPUを使うアプリケーションでは共有メモリが足りなくなりがち。[size]
には16gなどと指定する。
--shm-size=[size]
シェルをその場で使いたいとき
-it
をつけるとシェルが使える。
よく使う組はエイリアスはっちゃえ!
- ユーザの設定
- X11のディスプレイの設定
- ホームディレクトリと共有NASのマウント設定
- 共有メモリの設定(16g)
- シェル
をまとめておきます。
alias docker-run-it="sudo docker run -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -u $(id -u $USER):$(id -g $USER) -e DISPLAY=$DISPLAY --net host -v /tmp/.X11-unix:/tmp/.X11-unix:ro -v $HOME/.Xauthority:/root/.Xauthority:ro -v /data02/$USER/:/data02/$USER -v $HOME:$HOME:Z --shm-size 16g -it"
こんなことになるくらいならsingularity
とかも使ってみたいですね。もっと簡単になってルート権限も不要らしい。