TensorFlow 2.0의 Docker 컨테이너를 GPU+Python3+Jupyter에서 사용

요 전날 TensorFlow 2.0이 공식적으로 출시되었습니다.
이 기사에서는 GPU 지원을 사용하도록 설정한 TensorFlow 2.0의 Docker 컨테이너에서 Jupyter를 시작하고 튜토리얼을 실행할 때까지의 단계를 소개합니다.

주요 절차:
  • Docker 설치
  • NVIDIA 드라이버 설치
  • NVIDIA Container Toolkit 설치
  • TensorFlow 컨테이너 시작
  • Jupyter 방문
  • 자습서에서 작동 확인

  • 주요 환경:
  • OS: Ubuntu 18.04.3 LTS
  • GPU: GeForce GTX 1050 Ti

  • 방법



    Docker 설치



    NVIDIA Container Toolkit에서 Docker 19.03을 요청하므로 버전이 오래된 경우 업데이트하십시오.
    새로 설치하는 경우 다음 명령을 실행합니다.
    $ sudo apt-get update
    $ sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    $ sudo apt-key fingerprint 0EBFCD88
    $ sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
    $ sudo apt-get update
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io
    

    참고:
  • htps : // / cs. 도 c r. 코 m / 인 s ta l / ぃ ん x / 도 c 케 루세 / 우분 /

  • NVIDIA 드라이버 설치



    다음 명령을 실행합니다.
    $ sudo ubuntu-drivers autoinstall
    

    설치 후 다시 시작합니다.
    $ sudo reboot
    

    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
    

    참고:
  • htps : // 기주 b. 코 m / 응 ぃ ぢ 아 / 응 ぃ ぢ 아- c r

  • TensorFlow Docker 컨테이너 시작



    다음 명령을 사용하여 이미지 끌어오기와 컨테이너 시작을 동시에 수행합니다.
    $ sudo docker run --gpus all -u $(id -u):$(id -g) -d -p 8888:8888 -v ~/workspace:/tf tensorflow/tensorflow:latest-gpu-py3-jupyter
    

    당기는 이미지는 tensorflow/tensorflow:latest-gpu-py3-jupyter입니다.
    여러가지 시도했지만 태그는 이 순서가 아니면 안 됩니다.
    또한 py3를 제외하고 컨테이너를 시작할 수 있지만 파이썬 2가되어 버리지 마십시오. (TensorFlow 2.0은 Python 2에서는 작동하지 않을 것입니다 ...)

    옵션 설명:
  • --gpus all : 모든 GPU 사용
  • -u $(id -u):$(id -g) : 현재 사용자로 시작
  • -d : detached 모드로 부팅하기
  • -p 8888:8888 : Jupyter 포트 게시
  • -v ~/workspace:/tf : 호스트 볼륨 마운트

  • 참고:
  • htps //w w. 천식 rfぉw. 오 rg / in s ta l / do c r

  • Jupyter 방문



    Jupyter에 액세스하려면 Jupyter를 시작할 때 표시되는 URL이 필요하지만 컨테이너를 detached 모드로 시작했기 때문에 표준 출력이 표시되지 않았습니다.
    그래서 컨테이너의 로그를 표시합니다.

    다음 명령으로 컨테이너 ID를 가져옵니다. (표준 출력의 맨 왼쪽)
    $ sudo docker ps
    
    CONTAINER ID        IMAGE                                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
    989625a7fc2c        tensorflow/tensorflow:latest-gpu-py3-jupyter   "bash -c 'source /et…"   12 minutes ago      Up 12 minutes       0.0.0.0:8888->8888/tcp   pedantic_banzai
    

    검색된 컨테이너 ID를 사용하여 다음 명령을 사용하여 컨테이너 로그를 표시하고 Jupyter URL을 검색합니다.
    $ sudo docker logs 989625a7fc2c
    
    
    ________                               _______________
    ___  __/__________________________________  ____/__  /________      __
    __  /  _  _ \_  __ \_  ___/  __ \_  ___/_  /_   __  /_  __ \_ | /| / /
    _  /   /  __/  / / /(__  )/ /_/ /  /   _  __/   _  / / /_/ /_ |/ |/ /
    /_/    \___//_/ /_//____/ \____//_/    /_/      /_/  \____/____/|__/
    
    
    You are running this container as user with ID 1000 and group 1000,
    which should map to the ID and group for your user on the Docker host. Great!
    
    [I 08:59:18.372 NotebookApp] Writing notebook server cookie secret to /.local/share/jupyter/runtime/notebook_cookie_secret
    /usr/local/lib/python3.6/dist-packages/IPython/paths.py:68: UserWarning: IPython parent '/' is not a writable location, using a temp directory.
      " using a temp directory.".format(parent))
    [I 08:59:19.467 NotebookApp] Serving notebooks from local directory: /tf
    [I 08:59:19.467 NotebookApp] The Jupyter Notebook is running at:
    [I 08:59:19.467 NotebookApp] http://989625a7fc2c:8888/?token=c4a0d0593ce61b28570b5719ddad9a3759cf8623306c1e08
    [I 08:59:19.467 NotebookApp]  or http://127.0.0.1:8888/?token=c4a0d0593ce61b28570b5719ddad9a3759cf8623306c1e08
    [I 08:59:19.467 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
    [C 08:59:19.485 NotebookApp]
    
        To access the notebook, open this file in a browser:
            file:///.local/share/jupyter/runtime/nbserver-1-open.html
        Or copy and paste one of these URLs:
            http://989625a7fc2c:8888/?token=c4a0d0593ce61b28570b5719ddad9a3759cf8623306c1e08
         or http://127.0.0.1:8888/?token=c4a0d0593ce61b28570b5719ddad9a3759cf8623306c1e08
    
    

    로그에서 볼 수 있듯이 http://127.0.0.1:8888/?token=c4a0d0593ce61b28570b5719ddad9a3759cf8623306c1e08를 사용하여 Jupyter에 액세스합니다.

    튜토리얼에서 동작 확인



    TensorFlow 2 quickstart for beginners에서 자습서용 노트북을 다운로드합니다.



    다운로드한 노트북을 실행합니다.



    5셀째의 실행중에 GPU의 사용 상황을 살펴봅니다.


    $ nvidia-smi
    
    Tue Oct 29 19:16:43 2019       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 430.26       Driver Version: 430.26       CUDA Version: 10.2     |
    |-------------------------------+----------------------+----------------------+
    | 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 105...  Off  | 00000000:01:00.0 Off |                  N/A |
    | 43%   31C    P0    N/A /  75W |   3867MiB /  4038MiB |     10%      Default |
    +-------------------------------+----------------------+----------------------+
    |   1  GeForce GTX 105...  Off  | 00000000:02:00.0 Off |                  N/A |
    | 43%   32C    P0    N/A /  75W |     57MiB /  4040MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |    0      1387      G   /usr/lib/xorg/Xorg                            13MiB |
    |    0      4252      C   /usr/bin/python3                            3841MiB |
    |    1      4252      C   /usr/bin/python3                              45MiB |
    +-----------------------------------------------------------------------------+
    

    제대로 GPU를 사용해 주었습니다.



    그냥 오늘부터 Kaggle에서 TensorFlow 2.0 Question Answering이라는 경쟁이 시작되었습니다.
    TensorFlow 2.0을 사용해 준 누군가에게 TensorFlow 2.0상(총액 $25,000)이 주어진다고 합니다.
    이것을 계기로 나도 공부해 보려고 생각합니다.

    좋은 웹페이지 즐겨찾기