07.tensorflowの準備

Created: 2018/08/27
Last Update: 2018/08/27
  1. 機械学習環境tensorflowの準備

    いくつかの機械学習の環境が知られていますが、今回はtensorflow https://www.tensorflow.org/ を使用することにします。

    使用環境はUbuntuなので、 https://www.tensorflow.org/install/install_linux に従ってインストールを進めます。

    開発機は以下の条件です。Ubuntu 18.04.1 LTS / Intel Core i7-6850K / 64GB memory / GeForce GTX 1080Ti 11GB

    1. python3の環境の準備

      システムに入れてもいいのですが、virtualenvを用いてインストールすることにします。

      python3.5のインストール

      
      $ sudo add-apt-repository ppa:deadsnakes/ppa
      $ sudo apt-get update
      $ sudo apt-get install python3-pip python3.5-dev python-virtualenv
      

      virtualenvの作成

      
      $ mkdir -p ~/virtualenv/tensorflow
      $ virtualenv -p python3.5 ~/virtualenv/tensorflow
      $ source ~/virtualenv/tensorflow/bin/activate
      

      プロンプトの左に(tensorflow)と出ている状態でインストールを進めます。

    2. 依存パッケージのインストール

      • ドライバおよびCUDA Toolkit

        CUDA driverおよびCUDA Toolkitをインストールします。現在のバージョンは9.2ですが、9.0が必要です。 https://developer.nvidia.com/cuda-90-download-archive からインストールします。

        
        $ sudo apt-get install build-essential
        $ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run
        $ sudo bash cuda_9.0.176_384.81_linux-run
        $ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/1/cuda_9.0.176.1_linux-run
        $ sudo bash cuda_9.0.176.1_linux-run
        $ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/2/cuda_9.0.176.2_linux-run
        $ sudo bash cuda_9.0.176.2_linux-run
        $ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/3/cuda_9.0.176.3_linux-run
        $ sudo bash cuda_9.0.176.3_linux-run
        $ wget https://developer.nvidia.com/compute/cuda/9.0/Prod/patches/4/cuda_9.0.176.4_linux-run
        $ sudo bash cuda_9.0.176.4_linux-run
        

        ~/.bashrcに以下の行がなければ追記しておきます。

        
        export PATH=${PATH}:/usr/local/cuda/bin
        

        /etc/ld.so.conf.d/cuda.confがなければ以下の内容で作成します。

        
        /usr/local/cuda/lib64
        /usr/local/cuda/extras/CUPTI/lib64/
        

        ライブラリのキャッシュを更新しておきます。

        
        $ sudo ldconfig
        
      • cuDNN SDK

        https://developer.nvidia.com/cudnnからダウンロードします。無料のユーザー登録が必要です。

        適当な場所(ホームディレクトリなど)に展開したあと、cudaライブラリに一緒に入れておきます。

        
        $ tar xvf cudnn-9.0-linux-x64-v7.2.1.38.tgz
        $ sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include
        $ sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64
        $ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
        
    3. tensorflow-gpuのインストール

      virtualenv仮想環境にtensorflowをインストールします。

      
      (tensorflow)$ pip install -U tensorflow-gpu
      

      インストールできたか確認します。ライブラリが足りてないとエラーになります。

      
      (tensorflow)$ python -c "import tensorflow as tf; print(tf.__version__)"
      1.10.1
      
    4. TensorRTのインストール

      オプションパッケージのTensorRTをインストールします。あれば高速化されるようです。 https://developer.nvidia.com/tensorrt からダウンロードします。

      
      $ tar xvf TensorRT-4.0.1.6.Ubuntu-16.04.4.x86_64-gnu.cuda-9.0.cudnn7.1.tar.gz
      $ ls TensorRT-4.0.1.6
      bin  data  doc  graphsurgeon  include  lib  python  samples  targets  TensorRT-Release-Notes.pdf  uff
      

      ライブラリのパスを通します。 ~/.bashrcに以下の行がなければ追記しておきます。

      
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/TensorRT-4.0.1.6/lib
      

      ライブラリのキャッシュを更新しておきます。

      
      $ source ~/.bashrc
      $ sudo ldconfig
      

      pythonパッケージをインストールします。

      
      $ source ~/virtualenv/tensorflow/bin/activate
      (tensorflow)$ cd TensorRT-4.0.1.6/python
      (tensorflow)$ pip3 install tensorrt-4.0.1.6-cp35-cp35m-linux_x86_64.whl 
      (tensorflow)$ cd ../uff
      (tensorflow)$ pip3 install uff-0.4.0-py2.py3-none-any.whl
      (tensorflow)$ cd ../graphsurgeon
      (tensorflow)$ pip3 install graphsurgeon-0.2.0-py2.py3-none-any.whl
      
  2. tensorflowの動作テスト

    インストールできたら、正常に動くかmnistでテストします。

    
    #!/usr/bin/env python3
    import tensorflow as tf
    mnist = tf.keras.datasets.mnist
    
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    x_train, x_test = x_train / 255.0, x_test / 255.0
    
    model = tf.keras.models.Sequential([
      tf.keras.layers.Flatten(),
      tf.keras.layers.Dense(512, activation=tf.nn.relu),
      tf.keras.layers.Dropout(0.2),
      tf.keras.layers.Dense(10, activation=tf.nn.softmax)
    ])
    model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    
    model.fit(x_train, y_train, epochs=5)
    model.evaluate(x_test, y_test)
    

    mnist.pyとして保存し、実行します。

    
    (tensorflow)$ ./mnist.py
    Epoch 1/5
    2018-08-27 07:07:01.266395: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
    2018-08-27 07:07:01.396855: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1405] Found device 0 with properties:
    name: GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.6575
    pciBusID: 0000:02:00.0
    totalMemory: 10.91GiB freeMemory: 10.02GiB
    2018-08-27 07:07:01.396884: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1484] Adding visible gpu devices: 0
    2018-08-27 07:07:01.589693: I tensorflow/core/common_runtime/gpu/gpu_device.cc:965] Device interconnect StreamExecutor with strength 1 edge matrix:
    2018-08-27 07:07:01.589729: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971]      0
    2018-08-27 07:07:01.589734: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] 0:   N
    2018-08-27 07:07:01.589923: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1097] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 9690 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:02:00.0, compute capability: 6.1)
    60000/60000 [==============================] - 8s 135us/step - loss: 0.2180 - acc: 0.9357
    Epoch 2/5
    60000/60000 [==============================] - 7s 115us/step - loss: 0.0974 - acc: 0.9698
    Epoch 3/5
    60000/60000 [==============================] - 7s 115us/step - loss: 0.0695 - acc: 0.9789
    Epoch 4/5
    60000/60000 [==============================] - 7s 116us/step - loss: 0.0535 - acc: 0.9827
    Epoch 5/5
    60000/60000 [==============================] - 7s 115us/step - loss: 0.0428 - acc: 0.9859
    10000/10000 [==============================] - 0s 45us/step
    
もくじへ戻る