Python3.5 Anaconda3 에 주피터, 그리고 텐서 플로우 설치하기.

기본 이미지로 anaconda3 이용하려했는데, 어려움.

대신 이미지 tensorflow 를 기본으로 설치 시작.

Nvidia 도커 실행 환경과 GPU 확인하기.

# gpu 확인
$ lspci | grep VGA

    08:00.0 VGA compatible controller: NVIDIA Corporation Device 1b06 (rev a1)
    41:00.0 VGA compatible controller: NVIDIA Corporation Device 1b06 (rev a1)

# nvidia 도커 런타임 확인하기.
$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 387.26                 Driver Version: 387.26                    |
    |-------------------------------+----------------------+----------------------+
    | 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 108...  Off  | 00000000:08:00.0 Off |                  N/A |
    | 23%   28C    P8     9W / 250W |      2MiB / 11172MiB |      1%      Default |
    +-------------------------------+----------------------+----------------------+
    |   1  GeForce GTX 108...  Off  | 00000000:41:00.0  On |                  N/A |
    | 23%   31C    P8    10W / 250W |     59MiB / 11171MiB |      1%      Default |
    +-------------------------------+----------------------+----------------------+

tensorflow-gpu 도커 이미지에 Anaconda 설치하기

  • Anaconda 도커 이미지에서 tensorflow-gpu 설치하기는 완전 복잡함.. -_-;;;
# 도커 이미지 받기.
$ docker pull tensorflow/tensorflow:latest-gpu-py3

# 도커 이미지 올리기.
$ docker run -it --runtime=nvidia --name tf-conda3 tensorflow/tensorflow:latest-gpu-py3 bash

########################
## 도커 실행 컨테이너에서.. TF 설치하기.
########################
# GPU 확인히기..
$ nvidia-smi
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 387.26                 Driver Version: 387.26                    |
    |-------------------------------+----------------------+----------------------+
    ...

$ python -V
    Python 3.5.2

# 1-1. Anaconda 설치하기.
$ apt-get update
$ apt-get install -y wget bzip2 ca-certificates
$ wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh
$ /bin/bash Anaconda3-5.2.0-Linux-x86_64.sh -b -p /opt/conda
$ ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh
$ export PATH=/opt/conda/bin:$PATH
$ conda -V
    conda 4.5.4
$ python -V
    # conda 설치로 Python 3.6설치됨. (여기에서는 tensorflow가 안됨)
    Python 3.6.5 :: Anaconda, Inc.    

# 1-2. tensorflow를 위한 아나콘다 가상실행환경 만들기
$ conda create -n tensorflow python=3.5
$ source activate tensorflow
    - (tensorflow) root@bcfa277a1e95:/notebooks#

# 1-3. (tensorflow) 가상 환경에서, tensorflow 설치하기.
$ python -V
    Python 3.5.5 :: Anaconda, Inc.

$ python -m pip install --upgrade pip
$ pip install tensorflow-gpu
$ python
    # Python
    import tensorflow as tf
    hello = tf.constant('Hello Lemon!')
    sess = tf.Session()
    print(sess.run(hello))

    # 아래와 같은 메세지가 출력되어야 함.
    2018-06-20 16:32:35.697300: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
    2018-06-20 16:32:35.862621: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1356] Found device 0 with properties:
    name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.582
    pciBusID: 0000:08:00.0
    totalMemory: 10.91GiB freeMemory: 10.75GiB
    2018-06-20 16:32:35.970515: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:898] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    2018-06-20 16:32:35.971134: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1356] Found device 1 with properties:
    name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.582
    pciBusID: 0000:41:00.0
    totalMemory: 10.91GiB freeMemory: 10.69GiB
    2018-06-20 16:32:35.971758: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1435] Adding visible gpu devices: 0, 1
    2018-06-20 16:32:36.331869: I tensorflow/core/common_runtime/gpu/gpu_device.cc:923] Device interconnect StreamExecutor with strength 1 edge matrix:
    2018-06-20 16:32:36.331912: I tensorflow/core/common_runtime/gpu/gpu_device.cc:929]      0 1
    2018-06-20 16:32:36.331918: I tensorflow/core/common_runtime/gpu/gpu_device.cc:942] 0:   N Y
    2018-06-20 16:32:36.331923: I tensorflow/core/common_runtime/gpu/gpu_device.cc:942] 1:   Y N
    2018-06-20 16:32:36.332351: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1053] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 10405 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:08:00.0, compute capability: 6.1)
    2018-06-20 16:32:36.941223: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1053] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:1 with 10349 MB memory) -> physical GPU (device: 1, name: GeForce GTX 1080 Ti, pci bus id: 0000:41:00.0, compute capability: 6.1)  

# upgrade tensorflow
$ pip install --upgrade tensorflow-gpu

# install jupyter
$ pip install jupyter

# exist tensorflow virtual env.
$ source deactivate

# exit docker image. (it will stop docker container.)
$ exit

########################
## 도커 이미지 만들기. (앞의 exit로 우분투로 나옴)
########################
# 도커 컨테이너 확인.
$ docker ps -a
    # 아래와 같이 'tf-conda3'가 만들어지면 성공
    a40e1ae68ab8        tensorflow/tensorflow:latest-gpu-py3   "bash"                   8 minutes ago       Exited (0) 7 seconds ago                             tf-conda3

# 도커 이미지 만들기.
$ docker commit tf-conda3 blueberry/tf-conda3:latest

########################
## Jyputer 실행하기....
########################
# 우분트에서 `/notebooks` 도 만들어주기
$ sudo mkdir /notebooks
$ sudo chown root:docker /notebooks
$ sudo chmod 775 /notebooks

# 포트 매핑(9999 -> 8888)으로 연결하며, 컨테이너 실행.
$ docker run -it --runtime=nvidia -p 9999:8888 -v /notebooks:/notebooks --name tf-conda3-run blueberry/tf-conda3:latest /bin/bash

# 2-1. (tensorflow) 가상 환경에서, tensorflow 설치하기.
$ export PATH=/opt/conda/bin:$PATH
$ source activate tensorflow

# 2-2. jupyter 실행하기 확인하기. (이후 tensorflow 작동되는지 확인)
$ jupyter notebook --notebook-dir=/notebooks --ip='*' --port=8888 --no-browser --allow-root


# 2-3. jupyter 에서 tensorflow 실행 확인후 나오기. (docker detach)
- `Ctrl+p` + `Ctrl+q` 으로, 도커 컨테이너에서 기어나옴. -_-;; (TODO - 이거 도커 바로 실행으로 어떻게 하는거여?!!)

########################
## 도커 실행 여부 확인
########################
# 도커 컨테이너 확인.
$ docker ps 
    # tf-conda3-run이 실행중인게 보임.
    CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS                              NAMES
    49e8f38d39f1        blueberry/tf-conda3:latest   "/bin/bash"         44 seconds ago      Up 43 seconds       6006/tcp, 0.0.0.0:9999->8888/tcp   tf-conda3-run

# 여기에 붙이는 방법은.
$ docker exec -it tf-conda3-run bash

# TIP - pip 모듈 설치하기.
$ source activate tensorflow
$ pip install requests

작업 마무리.

  • 이후 ssh 터널링을 통해서, 내 피씨에서 주피터를 열 수 있다. 예: $ ssh X.X.X.X -p 22 -fNg -L 8888:localhost:9999
  • 브라우저에서 열기 (현재 18.6.21) http://localhost:8888/?token=93cb2a240d0fe4331ea86250421a64409e95901ae76fc3af&token=93cb2a240d0fe4331ea86250421a64409e95901ae76fc3af
  • 또한, 로컬 폴더인 $ cd /notebooks에서 작업 가능.

#TODO - Jupyter 바로 실행하기.

#TODO - tensoflow + jupyter 실행 시키기..
# blueberry/conda3 이미지 만들어서, jupyter 컨테이너 시작하기.
$ docker run -it -p 9999:8888 --name conda3-run blueberry/conda3 /bin/bash -c "export PATH=/opt/conda/bin:$PATH &&/opt/conda/bin/conda activate tensorflow && /opt/conda/bin/jupyter notebook --notebook-dir=/notebooks --ip='*' --port=8888 --no-browser"