ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker for ML #1] 설치와 기본 명령어
    개발 환경/Docker 2020. 8. 28. 15:32
    반응형

    Docker는 현재 다양한 개발 분야에서 사용되고 있다. 딥러닝 개발자는 CUDA나 TensorFlow, PyTorch 등 버전이 충돌할 때 docker를 찾게 된다.

     

    1. 설치

    sudo apt install docker.io

     

    2. sudo 권한 부여

    Docker는 기본적으로 sudo 권한을 필요로 한다. 매번 sudo를 붙여주는 것은 귀찮으니 현재 user에게 docker를 sudo 권한으로 사용할 수 있게 해주자.

    sudo usermod -aG docker $USER

    명령어를 쳤으면 터미널을 껐다가 다시 키자.

     

    3. 설치 확인

    docker --version

    output:

    Docker version 19.03.8, build afacb8b7f0

     

    4. run

    테스트로 tensorflow 이미지를 받아서 run해보자.

    docker run -it tensorflow/tensorflow bash
    
    docker run -it <이미지 이름> <명령>

    위 명령어는 tensorflow 이미지를 받아서 bash를 실행한다. 이미지가 현재 로컬에 없으므로 다운받기 시작한다. 터미널을 사용하기 위해서는 -it 명령어를 사용해야 한다.

    output:

    이렇게 실행이 되었으면 container가 만들어지고 올라간다.

     

    5. pip list

    pip list

    명령어를 치면 tensorflow 2.3이 깔려있는 것을 확인할 수 있다.

     

    6. GPU?

    딥러닝하면 GPU가 빠지지 않는다. 로컬에 nvidia driver가 깔려있다고 가정한다. 참고로 nvidia driver가 CUDA 10.0을 지원하지 않는 버전을 사용중이라면 tensorflow 1.13 이상 버전은 동작하지 않을 것이다. 업데이트를 하자.

    nvidia-smi

    output:

    bash: nvidia-smi: command not found

    드라이버가 없다. docker container에서 GPU를 사용하기 위해서는 nvidia-container-toolkit이 필요하다.

     

    7. 컨테이너 내리고 없애기

    우선 지금 실행한 컨테이너를 내리고 없애자.

    exit

    하면 컨테이너에서 나가진다.

     

    docker ps

    위 명령어는 현재 실행되고 있는 컨테이너를 확인한다. 컨테이너에서 나가버렸기 때문에 컨테이너가 중지되고 현재 내려온 상태다. 그러므로 위 명령어로는 내려온 컨테이너를 확인할 수 없다.

     

    docker ps -a

    -a 옵션은 all로 모든 컨테이너를 보여준다.

    output:

    CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS                            PORTS                                                                                                      NAMES
    25fccfc202a9        tensorflow/tensorflow                 "bash"                   13 minutes ago      Exited (127) About a minute ago

     

    이제 컨테이너 ID를 알아냈다. 현재 내 기준에서는 25fccfc202a9다.

     

    docker rm 25fccfc202a9

    하면 삭제된다.

     

    8. GPU를 위한 nvidia-container-toolkit 설치

    Docker에서 GPU를 사용하려면 nvidia-container-toolkit을 설치해야한다.

    # Add the package repositories
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
    curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
    
    sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
    sudo systemctl restart docker

    github.com/NVIDIA/nvidia-docker

     

    NVIDIA/nvidia-docker

    Build and run Docker containers leveraging NVIDIA GPUs - NVIDIA/nvidia-docker

    github.com

    자세한 것은 여기 나와있다.

     

    docker run -it --gpus=all tensorflow/tensorflow bash

    --gpus=all이라는 옵션이 추가되었다.

     

    nvidia-smi

    output:

    Fri Aug 28 06:31:16 2020
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 440.100      Driver Version: 440.100      CUDA Version: N/A      |
    |-------------------------------+----------------------+----------------------+
    | 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 1070    Off  | 00000000:01:00.0 Off |                  N/A |
    |  0%   36C    P8     7W / 166W |     19MiB /  8117MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    |   1  GeForce GTX 1070    Off  | 00000000:03:00.0 Off |                  N/A |
    |  0%   38C    P8     5W / 151W |      2MiB /  8119MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

     

    정상적으로 실행된다.

     

    9. 복습

    • 이미지로부터 컨테이너 생성 및 실행 : docker run
      • 터미널 사용을 위한 옵션: -it
      • GPU 사용을 위한 옵션: --gpus=all
      • 이미지 이름: tensorflow/tensorflow
      • 명령어: bash
    • 실행중인 컨테이너 확인: docker ps
      • 실행중이지 않은 컨테이너까지 확인: docker ps -a
    • 컨테이너 삭제: docker rm <CONTAINER ID>
    반응형
Designed by Tistory.