뭐 해요?

3076 단어 Dockernvidia-docker
이 기사는 nvidia-docker v1입니다.0의 사양을 설명하는 중입니다.현재 최신판은 nvidia-docker2로 이 보도의 구조는 움직이지 않았다.
vidia-docker의wiki에 쓰여 있어요.

은비디아 도커랑?


nvidia-docker를 사용하면 docker 용기 내부에서 NVIDIA의 GPU를 간단하게 사용할 수 있습니다.
$ nvidia-docker run --rm nvidia/cuda nvidia-smi
nvidia-docker를 사용하면 GPU의 드라이버와 CUDA/cuDN의 관계를 해소할 수 있습니다.그 결과 한 호스트에서 여러 개의 CUDA/cuDN 버전의 용기를 이동시켜 CUDA/cuDN을 사용하는 용기의 휴대성을 높일 수 있다.

어떻게 움직였어?


일반적으로 nvidia-docker는 실행할 컨테이너에서 GPU에 액세스할 수 있도록 Docker Engine API에 다양한 매개 변수를 지정하여 컨테이너를 시작합니다.HTTP의 서버는 GPU와 관련된 정보를 nvidia-docker-plugen이라고 부르며 GPU와 관련된 정보를 얻는다.
따라서 nvidia-docker 명령을 거치지 않아도 일반적인 docker 명령에서 GPU를 이용한 docker 용기를 이동할 수 있다.(volume plugen 기능도 제공한 것 같아서 설치 자체가 필요합니다.)

옵션 추가


nvidia-docker를 통해 명령을 실행할 때의 처리 프로세스
$ nvidia-docker run --rm nvidia/cuda nvidia-smi
  • nvidia-docker 수신 명령
  • nvidia-docker가 nvidia-docker-pluggin에 호스트 측의 GPU에 대한 정보를 조회
  • nvidia-docker는 수신한 정보를 바탕으로 dockerengine에 전달해야 하는 옵션을 생성한다
  • nvidia-docker는 선택적으로 docker engine의 API를 호출하여 용기를 시작합니다
  • nvidia-docker-plugin


    REST API
    다음과 같은 끝점이 있습니다.
    GET /v1.0/gpu/info, /v1.0/gpu/info/json
    GET /v1.0/gpu/status, /v1.0/gpu/status/json
    GET /v1.0/docker/cli, /v1.0/docker/cli/json
    GET /v1.0/mesos/cli
    
    cli의 API를 칠 때 도커에게 직접 맡길 수 있는 옵션도 있는 것 같습니다.
    $ curl -s http://localhost:3476/docker/cli
    --device=/dev/nvidiactl --device=/dev/nvidia-uvm --device=/dev/nvidia3 --device=/dev/nvidia2 --device=/dev/nvidia1 --device=/dev/nvidia0 --volume-driver=nvidia-docker --volume=nvidia_driver_361.48:/usr/local/nvidia:ro
    
    nvidia-docker는 다음 옵션을 docker 엔진에 넘겼습니다.
    volume/volume-driver
    호스트의 nvidia driver도 컨테이너 옆에 마운트합니다
    device
    호스트 측면/dev/nvidia*에 있는 장치 파일을 컨테이너 측면에 추가

    Docker 이미지 유효성 검사


    nvidia-docker는 docker 엔진의 API를 두드리기 전에 GPU 옵션을 목표 용기에 전달해야 하는지, 호스트에서 용기를 시작할 수 있는지 확인하고 있습니다.

    GPU 사용 컨테이너 검증


    원래 nvidia-docker 명령을 통해 실행될 docker 용기에서 GPU를 사용하지 않으려면 nvidia driver나 device를 설치할 필요가 없습니다.nvidia-docker는 Docker 이미지com.nvidia.volumes.needed 라벨을 보고 그 녀석이 GPU를 사용하는 용기라는 것을 조사했다.

    컨테이너가 호스트에서 실행될 수 있는지 확인


    CUDA의 모든 버전에는 가장 낮은 nvidia driver 버전이 있습니다.
    nvidia-docker가 docker 용기를 시작할 때 호스트 옆에 있는 nvidia driver 버전을 보고 시작하려는 docker 이미지에 포함된 CUDA 버전이 이동했는지 조사합니다. 불합리할 때 명령을 실행할 때 오류가 발생하는 것 같습니다.
    계승nvidia/cuda된 Docker 이미지에 com.nvidia.cuda.version라는 라벨이 붙어 있어 docker 이미지에 설치된 CUDA의 버전을 알 수 있을 것 같습니다.

    총결산


    대단하다.

    좋은 웹페이지 즐겨찾기