LoginSignup
25
27

More than 5 years have passed since last update.

TensorFlow-GPU 環境構築 2018年3月

Posted at

はじめに

機械学習系の環境を定期的に一から作りなおすことにしている
そこで得たノウハウを記録に残しておきたい

クリーンインストールした Linux でやっていく
ローカルマシンとして利用する想定

Linux Mint 18.3 Cinnamon 64-bit

Ubuntu 16.04 でもたぶん同じ方法でいけるはず
ただしデスクトップ環境としては、 Mint のほうがより安定していると感じた

MacでUbuntu 16.04ブータブルUSBの作成
http://blog-sk.com/mac/ubuntu_bootusb/

  • i5-2500K
  • GTX980

CUDA 関係

NVIDIA CUDA Installation Guide for Linux
http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

インストールには

  • deb (apt-get)
  • run

の2種類あるが、いろいろと楽な deb を使う

準備

TensorFlow はビルド済みのを導入するので、CUDA 系のバージョンをあらかじめ確認しておかなければいけない
トラブルの大半はバージョン関係の問題なので、ここが地味に大事
https://www.tensorflow.org/install/install_sources#tested_source_configurations

tf-cuda-version.png

tensorflow-1.6/1.5 の両方に対応している CUDA 9, cuDNN 7 にする

CUDA Toolkit のページから Legacy Releases
https://developer.nvidia.com/cuda-toolkit-archive

cudainstall.png

ダウンロードして3行目までを実行

$ sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update

Driver (nvidia-390) をインストール

このタイミングでインストールしておかないと依存関係が解決されなかった(なぜだかよくわからないが)
再起動が必要

driver.png

CUDA 9.0 をインストール

ちゃんとバージョンを指定する
指定しておかないと、最新版 9.1 が入ってややこしいことになる(とは言っても PATH の指定でどうとでもなるが)

$ sudo apt-get install cuda-9-0

CUDA インストール後

PATH 追加のとき、直接ファイルを編集せずに echo を使うなら、 $ をエスケープしないといけない
PATH 追加先は .profile(私の場合)

  • ubuntu 系
  • ローカルで使用
  • .bash_login, .bash_profile がないことを確認
$ echo "export PATH=/usr/local/cuda-9.0/bin\${PATH:+:\${PATH}}" >> ~/.profile
$ source ~/.profile
$ sudo /usr/bin/nvidia-persistenced --verbose
$ sudo apt-get install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev

cuDNN 7.0 をインストール

アカウント作成とログインが必要
https://developer.nvidia.com/rdp/cudnn-download

  • cuDNN v7.0.5 Runtime Library for Ubuntu16.04 (Deb)
  • cuDNN v7.0.5 Developer Library for Ubuntu16.04 (Deb)
  • cuDNN v7.0.5 Code Samples and User Guide for Ubuntu16.04 (Deb)
$ sudo dpkg -i *.deb

Python 一式 (Anaconda) インストール

  • NumPy や Jupyter などをいちいちインストールするのが面倒
  • 必要なら新たに仮想環境をつくれる
  • トラブったらインストールフォルダごと消し去ればOK

Anaconda3 ダウンロード
https://www.anaconda.com/download/#linux

最近だと PATH は追加しないで、 conda activate/deactivate を使うのが標準的
下の設定だと、 zsh を立ち上げたら自動的にデフォルトの仮想環境 (base) に入る

$ sh ./Anaconda3-5.1.0-Linux-x86_64.sh
$ echo ". /home/<username>/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc
$ echo ". /home/<username>/anaconda3/etc/profile.d/conda.sh" >> ~/.zshrc
$ echo "conda activate" >> ~/.zshrc

TensorFlow 1.6 インストール

Installing Tensorflow on Ubuntu
https://www.tensorflow.org/install/install_linux

面倒なのでデフォルトの仮想環境にインストールする

$ sudo apt-get install cuda-command-line-tools
$ echo "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}\${LD_LIBRARY_PATH:+:}/usr/local/cuda/extras/CUPTI/lib64" >> ~/.profile
$ conda activate
(base)$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.6.0-cp36-cp36m-linux_x86_64.whl

動作チェック

Using GPUs | TensorFlow Programmer's Guide
https://www.tensorflow.org/programmers_guide/using_gpu

$ conda activate
(base)$ jupyter notebook
  1. Jupyter notebook を起動
  2. New → Python 3 から新しくノートブックを作成
  3. 下の内容をセルに入力し、 Shift+Enter で実行
Jupyter_notebook
import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
    print(sess.run(hello))

tf-test2.png

import 時の Warning は気にしなくてよさそう
Jupyter を起動したターミナルを確認し、 GPU が認識されていて、エラーが出ていなければ OK

ログ
2018-03-04 11:16:58.334216: 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-03-04 11:16:58.334554: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1212] Found device 0 with properties: 
name: GeForce GTX 980 major: 5 minor: 2 memoryClockRate(GHz): 1.291
pciBusID: 0000:01:00.0
totalMemory: 3.95GiB freeMemory: 3.45GiB
2018-03-04 11:16:58.334583: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1312] Adding visible gpu devices: 0
2018-03-04 11:16:58.557392: I tensorflow/core/common_runtime/gpu/gpu_device.cc:993] Creating TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 3178 MB memory) -> physical GPU (device: 0, name: GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2)
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2
2018-03-04 11:16:58.585013: I tensorflow/core/common_runtime/direct_session.cc:297] Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2

Const: (Const): /job:localhost/replica:0/task:0/device:CPU:0
2018-03-04 11:16:58.595781: I tensorflow/core/common_runtime/placer.cc:875] Const: (Const)/job:localhost/replica:0/task:0/device:CPU:0
25
27
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
27