そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

macOSにTensorFlowをセットアップする

マニュアルInstalling TensorFlow on Mac OS X  |  TensorFlowでオススメされているvirtualenvを使った、セットアップを行います。

Virtualenv — virtualenv 15.1.0 documentation Virtualenvは、独立したPython実行環境を作ることができるツールです。 Virtualenvを使うことで、他の環境から影響を受けたり、与えたりすることがないので、好き放題実験することができます。

1. pipのインストール

Pythonのパッケージ管理ツールpipを入れる。 easy_installが入ってない人は、easy_installから入れないといけないと思う。

$ sudo easy_install pip
Password:
Searching for pip
Best match: pip 6.0.6
Processing pip-6.0.6-py2.7.egg
pip 6.0.6 is already the active version in easy-install.pth
Installing pip script to /usr/local/bin
Installing pip2.7 script to /usr/local/bin
Installing pip2 script to /usr/local/bin

Using /Library/Python/2.7/site-packages/pip-6.0.6-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip

2. Virtualenvのインストール

pipを使ってVirtualenvをインストールします。 --upgradeは関連パッケージに新しいバージョンがある場合は、更新するというオプションです。

$ sudo pip install --upgrade virtualenv
The directory '/Users/rsogo/Library/Logs/pip' or its parent directory is not owned by the current user and the debug log has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want the -H flag.
The directory '/Users/rsogo/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want the -H flag.
You are using pip version 6.0.6, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
The directory '/Users/rsogo/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want the -H flag.
Collecting virtualenv
  Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)
    100% |################################| 1.8MB 1.9MB/s 
Installing collected packages: virtualenv

Successfully installed virtualenv-15.1.0

3. Virtualenv環境を作る

3.1. 欲しいバージョンのPythonのインストール

マニュアルだと、下記なのですが、自分はanacondaで事前にpythonをセットアップしていたので、そのままだと上手くいきませんでした。

virtualenv --system-site-packages -p python3 tensorflow

いろいろやったのですがpyenvで、自分が欲しいpython環境を作るのでうまくいきました。

github.com

pyenvは、複数のPython実行環境を切り替えるためのツールです。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ pyenv --version
pyenv 1.1.3-7-g0c909f7

ここでは、3.6.2をインストールしました。

$ pyenv install -l
Available versions:
  2.1.3
(省略)
  3.5.2
  3.5.3
  3.6.0
  3.6-dev
  3.6.1
  3.6.2
  3.7-dev
(省略)
$ pyenv install 3.6.2

3.2. 改めてVirtualenv環境を作る

-pオプションでセットアップしたpython3.6.2の環境を指定して、Virtualenv環境を作ります。 tensorflowというディレクトリをターゲットとしています。ディレクトリ名は任意です。

$ virtualenv -p ~/.pyenv/versions/3.6.2/bin/python3.6 tensorflow --no-site-package
Running virtualenv with interpreter /Users/rsogo/.pyenv/versions/3.6.2/bin/python3.6
Using base prefix '/Users/rsogo/.pyenv/versions/3.6.2'
New python executable in /Users/rsogo/work/tensorflow/bin/python3.6
Also creating executable in /Users/rsogo/work/tensorflow/bin/python
Installing setuptools, pip, wheel...done.

4. Virtualenv環境を有効にする

cd tensorflow/
$ source bin/activate
(tensorflow) Ryohei-no-MacBook-Pro:tensorflow rsogo$ 

これで、作ったVirtualenv環境に入っています

5. Tensorflowのインストール

$ pip3 install --upgrade tensorflow
Collecting tensorflow
  Downloading tensorflow-1.2.1-cp36-cp36m-macosx_10_11_x86_64.whl (34.1MB)
    100% |████████████████████████████████| 34.1MB 37kB/s 
Collecting protobuf>=3.2.0 (from tensorflow)
  Downloading protobuf-3.3.0.tar.gz (271kB)
    100% |████████████████████████████████| 276kB 290kB/s 
Collecting numpy>=1.11.0 (from tensorflow)
  Downloading numpy-1.13.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.5MB)
    100% |████████████████████████████████| 4.6MB 149kB/s 
Requirement already up-to-date: wheel>=0.26 in ./lib/python3.6/site-packages (from tensorflow)
Collecting markdown>=2.6.8 (from tensorflow)
  Downloading Markdown-2.6.8.tar.gz (307kB)
    100% |████████████████████████████████| 317kB 323kB/s 
Collecting backports.weakref==1.0rc1 (from tensorflow)
  Downloading backports.weakref-1.0rc1-py3-none-any.whl
Collecting bleach==1.5.0 (from tensorflow)
  Downloading bleach-1.5.0-py2.py3-none-any.whl
Collecting six>=1.10.0 (from tensorflow)
  Downloading six-1.10.0-py2.py3-none-any.whl
Collecting werkzeug>=0.11.10 (from tensorflow)
  Downloading Werkzeug-0.12.2-py2.py3-none-any.whl (312kB)
    100% |████████████████████████████████| 317kB 289kB/s 
Collecting html5lib==0.9999999 (from tensorflow)
  Downloading html5lib-0.9999999.tar.gz (889kB)
    100% |████████████████████████████████| 890kB 291kB/s 
Requirement already up-to-date: setuptools in ./lib/python3.6/site-packages (from protobuf>=3.2.0->tensorflow)
Building wheels for collected packages: protobuf, markdown, html5lib
  Running setup.py bdist_wheel for protobuf ... done
  Stored in directory: /Users/rsogo/Library/Caches/pip/wheels/1b/42/a0/4c7343df5b629ec9c75655468dce7652b28026896b0209ba55
  Running setup.py bdist_wheel for markdown ... done
  Stored in directory: /Users/rsogo/Library/Caches/pip/wheels/85/a7/08/33ee5cd488d0365d8bed79d1d4e5c28dd3fbfc7f6d0ad4bb09
  Running setup.py bdist_wheel for html5lib ... done
  Stored in directory: /Users/rsogo/Library/Caches/pip/wheels/6f/85/6c/56b8e1292c6214c4eb73b9dda50f53e8e977bf65989373c962
Successfully built protobuf markdown html5lib
Installing collected packages: six, protobuf, numpy, markdown, backports.weakref, html5lib, bleach, werkzeug, tensorflow
Successfully installed backports.weakref-1.0rc1 bleach-1.5.0 html5lib-0.9999999 markdown-2.6.8 numpy-1.13.1 protobuf-3.3.0 six-1.10.0 tensorflow-1.2.1 werkzeug-0.12.2

6. 動作確認

6.1. チュートリアルをやってみる

下記のソースをtutorial1.pyという名前で作成します。

import tensorflow as tf
node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0) # also tf.float32 implicitly
print(node1, node2)

sess = tf.Session()
print(sess.run([node1, node2]))

node3 = tf.add(node1, node2)
print("node3: ", node3)
print("sess.run(node3): ", sess.run(node3))

6.2. 実行してみます

$ python tutorial1.py 
Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)
2017-08-06 00:32:11.351356: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-06 00:32:11.351380: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-08-06 00:32:11.351385: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-08-06 00:32:11.351390: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
[3.0, 4.0]
node3:  Tensor("Add:0", shape=(), dtype=float32)
sess.run(node3):  7.0

動いてそうですね。