Tensorflow + GPU 환경을 nvidia-docker를 사용하여 손쉽게 만들기 (on Ubuntu 17.04)

배경 & 목적



Tensorflow + GPU 환경을 nvidia-docker를 사용하여 손쉽게 만들기 (on CentOS 7.2)
위 기사의 우분투 버전입니다.
배경과 목적은 여기를 참조하십시오.

사용하는 것


  • GPU 탑재 서버
  • OS : Ubuntu 17.04
  • CPU : Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
  • GPU : NVIDIA Corporation GM200 [GeForce GTX TITAN X] x 1

  • nvidia-docker ( htps : // 기주 b. 코 m / 응 ぃ ぢ 아 / 응 ぃ ぢ 아- c r )
  • docker ( htps //w w. 도 c r. 코m/ )
  • Tensorflow ( htps : // 기주 b. 코 m / 천사 rf ぉ w / 천사 rf ぉ w )

  • 도입 절차



    다음 절차에 따라 도입할 수 있습니다.
  • 드라이버 설치(호스트 OS에서)
  • Docker 설치 (호스트 OS에서)
  • nvidia-docker 설치 (호스트 OS에서)
  • Tensorflow + GPU 이미지 생성 및 실행

  • 1. 드라이버 설치



    nouveau 그래픽 드라이버를 비활성화한 후 NVIDIA 드라이버를 설치합니다.
    (nouveau를 비활성화하지 않으면 드라이버 설치가 실패하기 때문에)
    ## nouveau ドライバーを無効にする
    sudo su -
    
    # nouveauが読み込まれていることを確認
    lsmod | grep nouveau
    ---
    nouveau              1403757  0
    video                  24400  1 nouveau
    mxm_wmi                13021  1 nouveau
    i2c_algo_bit           13413  1 nouveau
    drm_kms_helper        125008  1 nouveau
    ttm                    93441  1 nouveau
    drm                   349210  3 ttm,drm_kms_helper,nouveau
    i2c_core               40582  5 drm,i2c_i801,drm_kms_helper,i2c_algo_bit,nouveau
    wmi                    19070  2 mxm_wmi,nouveau
    ---
    
    # kernelをビルドするためのパッケージをインストール
    sudo apt-get install dkms build-essential linux-headers-generic
    
    # nouveauを含まないように設定
    sudo vi /etc/modprobe.d/blacklist.conf
    ---
    # disable nouveau
    blacklist nouveau
    blacklist lbm-nouveau
    options nouveau modeset=0
    alias nouveau off
    alias lbm-nouveau off
    ---
    echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
    
    # nouveauなしの起動イメージ生成
    sudo update-initramfs -u
    
    # 再起動
    reboot now
    
    # nouveauが読み込まれていないことを確認
    lsmod | grep nouveau
    
    ## nvidia drive のインストール
    sudo su -
    apt-get install pciutils gcc linux-headers-$(uname -r) 
    
    # GPUの型番を確認
    lspci | grep -i nvidia
    ---
    05:00.0 VGA compatible controller: NVIDIA Corporation GM200 [GeForce GTX TITAN X] (rev a1)
    ---
    
    # http://www.nvidia.co.jp/Download/index.aspx?lang=jp
    # ここからGPUに合った最新のドライバを探す
    # 今回はこれ
    # http://www.nvidia.com/Download/driverResults.aspx/118290/en-us
    # http://jp.download.nvidia.com/XFree86/Linux-x86_64/384.98/NVIDIA-Linux-x86_64-384.98.run (2017/12/07最新版)
    cd /tmp/
    wget http://us.download.nvidia.com/XFree86/Linux-x86_64/375.66/NVIDIA-Linux-x86_64-375.66.run
    sh NVIDIA-Linux-x86_64-375.66.run
    # 誘導にしたがってインストールする
    
    # 再起動
    reboot now
    
    # GPUが認識されているかを確認
    nvidia-smi
    # 以下の様な出力を確認
    ---
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 375.66                 Driver Version: 375.66                    |
    |-------------------------------+----------------------+----------------------+
    | 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 TIT...  Off  | 0000:05:00.0     Off |                  N/A |
    |  0%   56C    P0    54W / 250W |      0MiB / 12205MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID  Type  Process name                               Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+
    

    2. Docker 설치



    공식 설치 매뉴얼에 따라 설치합니다.

    sudo없이 docker 명령을 사용할 수 있도록 사용자를 그룹에 추가.
    sudo gpasswd -a $USER docker
    sudo service docker restart
    

    docker-compose도 설치해 둡시다.
    Install Docker Compose

    3. nvidia-docker 설치



    공식 QuickStart 에 따라 인스톨하고 싶습니다만, 공식은 Ubuntu17을 아직 서포트하고 있지 않기 때문에, 편집된 deb 파일을 사용해 인스톨 합니다.

    참고)
    htps : // 기주 b. 코 m / 응 ぃ ぢ 아 / 흠
    htps : // 기주 b. 코 m / 응 ぃ ぢ 아 / 음
    ### nvidia-docker install
    # Install nvidia-docker and nvidia-docker-plugin
    wget -P /tmp https://github.com/NVIDIA/nvidia-docker/files/818401/nvidia-docker_1.0.1-yakkety_amd64.deb.zip
    unzip /tmp/nvidia-docker_1.0.1-yakkety_amd64.deb.zip -d /tmp/
    sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb
    
    # Test nvidia-smi
    nvidia-docker run --rm nvidia/cuda nvidia-smi
    # 以下の様な出力を確認
    ---
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 375.66                 Driver Version: 375.66                    |
    |-------------------------------+----------------------+----------------------+
    | 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 TIT...  Off  | 0000:05:00.0     Off |                  N/A |
    | 22%   48C    P8    28W / 250W |      0MiB / 12205MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID  Type  Process name                               Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+
    

    4. Tensorflow + GPU 이미지 생성 및 실행



    htps // // 후 b. 도 c r. 코 m/r/텐소 rfぉw/텐소 rfぉw/
    Tensorflow에서 제공하는 Dockerhub 이미지를 사용합니다.
    ## run tensorflow docker
    nvidia-docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu
    

    Docker를 시작한 후
    http://${HOST_IP}:8888/
    에 액세스하면 jupyter 화면을 확인할 수 있습니다.



    3_mnist_from_scratch.ipynb의 노트북을 시작하여 Cell -> Run All에서 샘플이 움직이는지 확인합니다. 결과를 확인.



    jupyter 로그에서 GPU를 사용하여 계산되었는지 확인합니다.
    2017-08-17 08:02:43.311687: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:893] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    2017-08-17 08:02:43.312309: I tensorflow/core/common_runtime/gpu/gpu_device.cc:940] Found device 0 with properties:
    name: GeForce GTX TITAN X
    major: 5 minor: 2 memoryClockRate (GHz) 1.076
    pciBusID 0000:05:00.0
    Total memory: 11.92GiB
    Free memory: 11.81GiB
    2017-08-17 08:02:43.312328: I tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0
    2017-08-17 08:02:43.312346: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0:   Y
    2017-08-17 08:02:43.312358: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN X, pci bus id: 0000:05:00.0)
    

    이상입니다.

    좋은 웹페이지 즐겨찾기