UbuntuでTensorFlowを使うための準備

TensorFlowをBash on Windowで使用するために行った手順をまとめておく

Ubuntuなら同じ方法で準備できるはず

Pythonのバージョンは2.7

### 参考
- [Bazel](https://docs.bazel.build/versions/master/install-ubuntu.html#install-on-ubuntu)
- [TensorFlow](https://www.tensorflow.org/install/install_linux)


## 1. TensorFlowをCloneする
```bash
git clone https://github.com/tensorflow/tensorflow.git
```

でTensorFlowをCloneする

## 2. Bazelをインストールする
### JDK8をインストール

```bash
sudo apt-get update

sudo apt-get install openjdk-8-jdk
```
を実行してJDK8をインストール
### BazelディストリビューションのURIをパッケージソースとして追加(1度だけのセットアップ)

```bash
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list

curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
```
を実行

### Bazelのインストールとアップデート

```bash
sudo apt-get update && sudo apt-get install bazel
```

でインストールとアップデート

一度インストールした後は

```bash
sudo apt-get install bazel
```

でアップデートできる

## 3. TensorFlowのPython依存関係をインストールする

TensorFlowのインストールに必要なPythonのパッケージは以下の通り

- numpy (TensorFlowに必要な数値処理パッケージ)
- dev (Pythonに拡張機能を追加することができる)
- pip (特定のPythonパッケージをインストールして管理することができる)
- wheel (Python圧縮パッケージをwheel(.whl)形式で管理することができる)

```bash
sudo apt-get install python-numpy python-dev python-pip python-wheel #Python2.7

sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel #Python3
```

## 4. インストールを設定する
ソースツリーのルートに`configue`という名前のbashスクリプトが含まれている

`configure`では、TensorFlow依存関係のパス名を指定し、コンパイルフラグなどのその他のビルド構成オプションを指定するように求められる

まず、

```bash
cd tensorflow #作成されたトップレベルのディレクトリに移動する

./configure
```

のように`configure`を実行する

すると、

```bash
Please specify the location of python. [Default is /usr/bin/python]: 

Please input the desired Python library path to use.  Default is [/usr/local/lib/python2.7/dist-packages]

Do you wish to build TensorFlow with jemalloc as malloc support? [Y/n]:
jemalloc as malloc support will be enabled for TensorFlow

Do you wish to build TensorFlow with Google Cloud Platform support? [y/N]:

Do you wish to build TensorFlow with Hadoop File System support? [y/N]: 
Do you wish to build TensorFlow with XLA JIT support? [y/N]: 

Do you wish to build TensorFlow with GDR support? [y/N]: 

Do you wish to build TensorFlow with VERBS support? [y/N]:

Do you wish to build TensorFlow with OpenCL support? [y/N]: 

Do you wish to build TensorFlow with CUDA support? [y/N]: 

Do you wish to build TensorFlow with MPI support? [y/N]: 

...
```

のようにいくつか設定に関する質問をされるので、自分の環境に合うように質問に答えていく

## 5. pipパッケージを構築する

```bash
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
```

を実行してTensorFlowのpipパッケージを構築する

構築にはしばらく時間がかかるので気長に待つこと

実行が完了するとカレントディレクトリ下の`/tensorflow/tools/pip_package`の中に`build_pip_package.sh`というスクリプトが作成されているので、

```bash
./tensorflow/tools/pip_package/build_pip_package.sh /tmp/tensorflow_pkg
```

で`/tmp/tensorflow_pkg`に`.whl`ファイルを生成する

## 6. pipパッケージをインストールする
```bash
sudo pip install /tmp/tensorflow_pkg/tensorflow-*** #バージョンなどによって名前が異なる
```
を実行することでpipパッケージをインストールすることができる

## 7. インストールが正しくできているか検証

まず、`cd`コマンドで`configure`コマンドを呼び出した`tensorflow`サブディレクトリ以外のディレクトリに移動する

移動したら

```bash
python
```

でPythonを起動し

```py
>>> import tensorflow as tf 

>>> hello = tf.constant('Hello, TensorFlow!') 

>>> sess = tf.Session() 

>>> print(sess.run(hello)) 
```

の順に入力する

`Hello, TensorFlow!`と表示されれば正常にインストールが行われている