docker 명령 만으로 nvidia-docker 사용하는 방법



nvidia-docker를 이용하면 매번 nvidia-docker라고 쳐야 하나요?

사실 시작할때 한번만 nvidia-docker를 치면 되는 문제이지만, 사실 이 문제는 그리 간단하지 않다. 나 스스로도 profile에 alias docker=nvidia-docker를 넣고 지냈던 적이 있었기에 별거 아니지만 신경이 쓰이는 부분이다. 더욱이 nvidia-docker2에 이르러서는 nvidia-docker를 이용하는 방법이 하나 더 추가되어서 두가지 방법을 이용할 수 있다.

$ nvidia-docker run ... #기존 방법
$ docker run --runtime=nvidia ... #새로 추가된 방법

새로운 방법이 가능해지면서, nvidia-docker를 지원하지 않던 orchestration 도구들에 대해서 시험해 볼 수 있는 기회가 열렸다. 그러나 여전히 추가로 쳐야만 한다는 어려움(?)이 남아 있다. 게다가 pycharm에서는 runtime을 docker remote interpreter 옵션에서 지원하지 않으므로, 어쨌건 native하게 사용할 수가 없다.

그러면 어떻게 이를 해결할 수 있을까?

(Option 1) alias 설정

.bashrc나 .zshrc에서 다음 라인을 추가한다.

alias docker=nvidia-docker

이후 프로파일을 다시 로딩하면 잘 된다. 사실 interactive하게만 사용한다면 이 방법만으로도 충분하다.

(Option 2) docker daemon.json에 default-runtime 추가

/etc/docker/daemon.json을 다음과 같이 수정한다. 추가해야할 라인은 두번째 줄에 있는 것이다.

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

이렇게 하면 nvidia-docker라고도 –runtime=nvidia 옵션도 칠 필요 없이 바로 실행을 할 수 있고 docker-compose도 이용할 수 있다.

이 방법이 위 방법보다 갖는 장점은 docker-compose도 지원할 수 있다는 것이다.

가령 아래와 같이 docker-compose.yml 파일이 있다고 하자.

version: '3'

services:
  cuda:
    image: nvidia/cuda:9.1-base-ubuntu16.04
    command:
      - nvidia-smi

이를 간단히 아래의 명령으로 실행이 가능하다.

그렇다면 이것으로 docker orchestration을 할 수 있는 길이 열렸다고 볼 수 있겠다. 당장 나는 pycharm을 붙였는데, Kubernetes도 붙여볼 생각이다.

덧, pycharm에 붙여서 사용하는 방법은 현실적으로 local과 remote를 구분해서 쓰는 것이 맞는 것 같기도 하다. (참고글)

Comments