기본적으로 Docker 를 통해서 Container 를 실행하면, GPU 자원은 사용할 수가 없습니다.

NVIDIA 의 GPU 를 Docker 에서 사용하기 위한 설정을 해 보도록 하겠습니다.



Docker 에서 GPU 사용하기


당연한 이야기지만, host 에 nvidia GPU 가 설치된 경우에 해당하는 글입니다.

있지도 않는 GPU 가 Container 에서 동작하지는 않겠죠 :)




nvidia-docker 설치하기



공식적인 nvidia-docker 설치 매뉴얼 주소:

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



Docker 에서 nvidia GPU 를 사용하려면, nvidia-docker 라는 플러그인을 설치하여야 합니다.

먼저 Nvidia Driver 가 설치되어 있어야 합니다.


$ nvidia-smi

Mon Sep  3 17:48:58 2018

+-----------------------------------------------------------------------------+

| NVIDIA-SMI 384.125                Driver Version: 384.125                   |

|-------------------------------+----------------------+----------------------+

| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |

| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |

|===============================+======================+======================|

|   0  GeForce GTX 108...  Off  | 00000000:01:00.0 Off |                  N/A |

| 33%   47C    P0    54W / 250W |      0MiB / 11172MiB |      0%      Default |

+-------------------------------+----------------------+----------------------+

|   1  GeForce GTX 108...  Off  | 00000000:0A:00.0 Off |                  N/A |

|  0%   39C    P5    23W / 250W |      0MiB / 11172MiB |      2%      Default |

+-------------------------------+----------------------+----------------------+


+-----------------------------------------------------------------------------+

| Processes:                                                       GPU Memory |

|  GPU       PID   Type   Process name                             Usage      |

|=============================================================================|

|  No running processes found                                                 |

+-----------------------------------------------------------------------------+



드라이버가 설치되어 있다면, nvidia-docker 설치를 위한 repository 패키지를 추가합니다.

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | \

  sudo tee /etc/yum.repos.d/nvidia-docker.repo


이제 nvidia-docker2 를 설치합니다.


$ sudo yum install -y nvidia-docker2

$ sudo pkill -SIGHUP dockerd







nvidia-docker 설치 확인



설치가 완료되었다면, nvidia 가 포함된 container 를 만들고 nvidia-smi 를 통해서 GPU 를 사용할 수 있는 상태인지 확인해 봅니다.



$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi



참고로 --runtime=nvidia 는 nvidia 런타임을 쓰겠다는 것인데, 아래처럼 명시적으로 runtime 을 실행할 수도 있습니다.


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




결과로 아래처럼 nvidia-smi 가 실행되면, 제대로 설치된 것입니다.


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

Mon Sep  3 08:55:13 2018

+-----------------------------------------------------------------------------+

| NVIDIA-SMI 384.125                Driver Version: 384.125                   |

|-------------------------------+----------------------+----------------------+

| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |

| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |

|===============================+======================+======================|

|   0  GeForce GTX 108...  Off  | 00000000:01:00.0 Off |                  N/A |

| 33%   47C    P0    54W / 250W |      0MiB / 11172MiB |      0%      Default |

+-------------------------------+----------------------+----------------------+

|   1  GeForce GTX 108...  Off  | 00000000:0A:00.0 Off |                  N/A |

|  0%   39C    P5    23W / 250W |      0MiB / 11172MiB |      2%      Default |

+-------------------------------+----------------------+----------------------+


+-----------------------------------------------------------------------------+

| Processes:                                                       GPU Memory |

|  GPU       PID   Type   Process name                             Usage      |

|=============================================================================|

|  No running processes found                                                 |

+-----------------------------------------------------------------------------+




현재 저의 환경에는 그래픽 카드가 2개 입니다. 여러개의 GPU 를 사용중인 경우 Docker 의 각 Container 가 GPU 를 어떤식으로 할당받을지 설정할 수 있습니다. 이후에 설명 드리도록 하겠습니다.