WindowsでTensorFlowの環境作成

Windows10 HOMEにて、Miniconda3の中でPython3.5の環境を作成し、TensorFlowをインストールする模様をレポートします。
また簡単にJupyter notebookとTensorBoardが起動できるようできるよう、バッチファイルも作成しました。

はじめに

(2017年2月17日追記:TensorFlow 1.0.0に合わせて、各所に追記をしました。)

いまさらですが、TensorFlowを勉強しはじめました。

教科書はマイナビ出版の「TensorFlowで学ぶディープラーニング入門」です。

Windows10 HOMEのPCで環境を作ろうとしましたが、この本の付録で書かれているWindows環境の作成を読んで、「Dockerコンテナ?Oracle VM?Pythonで動くんなら必要ないじゃん!」、と、それらをインストールせずに環境を作成しました。(そもそもDockerは現時点でWIndows10 BUSINESS用しかありません。)

本稿では、そのWindowsお手軽環境の作成方法をレポートします。

ただ本稿の環境はPythonのバージョンからしてこの本と異なりますので、この本のコードはそのままではエラーがでるところがあります。(確実に動作する環境で本のコードがそのまま実行できるように、コンテナのイメージをインストールさせているのですね。)

またWindows用のTensorFlowのパッケージはPython3.5の64bitが必要ということで、32bitのWindowsは未対応です。(ソースからビルドすれば作れるかもしれませんが、もちろんやってません。)

尚、私はPythonに関してはまったくの素人ですので、テキトーなことも書くかもしれませんが、ご容赦ください。

環境作成の方針

本稿では、バージョンやインストールモジュールを違えた、Python(その他)の様々な環境(仮想環境)が作成できる「Miniconda」をインストールします。

これまでの私のPCにはPython2.7が入っていました。TensorFlowのWindowsパッケージが対応しているPython3.5の他にも、今後使いたいアプリ次第でPythonの違うバージョンが必要かもしれません。

と言うことで、Python2.7は削除して、様々な仮想環境が作成できるAnacondaを入れようと思いました。

Anacondaは、Pythonの統計や機械学習のパッケージが予め全部入った環境です。Minicondaはその最低限(Pythonとconda、pipなど)が入ったものです。

全部入っているならAnacondaが良いのでは、と思い最初はAnacondaを入れたのですが、新たに仮想環境を作るとなると結局パッケージも再ダウンロード、インストールが必要になります。

全部入ったルートの環境にTensorFlowをインストールすればよいのかもしれませんが、現状Windowsにはpip(パッケージ管理ツール)のパッケージしかないので、conda(これまたパッケージ管理ツール)のパッケージとは衝突らきしものが起こりそうです。(起こったことは以下をご参照ください。)

ということで、また新たなTensorFlowのパッケージがリリースされたら環境から作成し直すことにして、最終的には小さいほうのMinicondaをインストールしました。

condaとpipの衝突の可能性、という意味では、Windows用のPython3.5(64bit)をインストールして、すべてをpipでインストールしたほうが良いのかもしれません。この辺りは本稿を読んでご判断ください。

本稿の環境

本稿の環境と、インストールしたソフトウェアのバージョンは以下になります。

  • Windows10 home 1607 (64bit)
  • Miniconda Python3.5
  • TensorFlow 0.12.1
  • jupyter 1.0.0

(2017年2月17日:TensorFlow 1.0.0についても追記しました。)

バージョンが違うと同様に環境作成できない可能性がありますのでご注意ください。

最新の環境の作成については、次章に書きますTensorFlowのサイト内のページをご参照ください。

インストールと環境の作成

では環境を作成しましょう。

TensorFlowのインストールについては、TensorFlowのサイトの「Installing TensorFlow on Windows」のページを参考にします。

(2017年2月17日修正:0.12.1のときのインストール解説ページはなくなりましたので、上のページタイトルとリンクを修正しました。以降、1.0.0についてはこの時点の情報です。)

ともあれMinicondaからインストールします。

Minicondaのインストール

Minicondaのダウンロードページ( https://conda.io/miniconda.html )より、Python 3.5の64-bit (exe installer)をクリックしてダウンロードします。

Minicondaの中で新たにPython環境を作成するので、ここでのPythonのバージョンは3.5でなくてもかまいません。(近い将来は3.6になるでしょうから、それでも構いません。)

インストーラーを実行してそれに従えばインストール完了です。

私の場合、インストールするディレクトリのパスだけ「B:\Miniconda3」に変えました。環境変数などは設定するチェックをONのままです。

環境の作成

Minicondaの中で環境を作成します。

コマンドプロンプトを起動(Windowsキー+x, c)し、以下を入力します。(パスは通っているので、ディレクトリはどこでもOK。)

conda create -n tf python=3.5

ここで-nの後の「tf」は環境の名前です。「tensorflow」とかでも構いません。お好みの名前でどうぞ。

Pythonのバージョンは3.5を指定します。(本稿の時点では)

Python3.5ほか各パッケージのダウンロードから始まり、しばらくすると環境の作成が終了します。「B:\Miniconda3\envs\tf\」以下に環境が作成されています。(以降、「B:\Miniconda3」は各位のインストールディレクトリに、「tf」は各位の作成した環境の名前で読み替えてください。)

尚、ここで「numpy」とかつけてモジュールを予めインストールすることはお勧めしません。その理由は、次節に書くsetuptoolsと同じことが起きそうだからです。

ともあれ、以下の入力で作成した環境に移動します。

activate tf

プロンプトの先頭に「(tf)」のように環境の名前が表示されるようになりました。

TensorFlow 1.0.0をインストール

(2017年2月17日:章ごと追記しました。)

TensorFlowのDownload and Setupのページに従って、コマンドプロンプトに以下を入力してTensorFlowをインストールします。

pip install --upgrade tensorflow

上は、Installing TensorFlow on Windowsのページには直接書いてありません。「Installing with Anaconda」の章のコマンドでは「wheelが対応してないよ」と怒られ、「Installing with native pip」の章のコマンドでは「pip3なんて知らないよ」と怒られ…。結局pip3の代わりにpipで行けました。(wheelのパッケージは最新版でした。)

インストールが終わった時に、以下のエラーらしきものが表示されました。どうやらsetuptoolsのパッケージが見つからないようです。

FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。: 'B:\\Miniconda3\\envs\\tf1_0\\lib\\site-packages\\setuptools-27.2.0-py3.5.egg

しかし以下のコマンドを入力すると、tensorfow 1.0.0が表示されていて、TensorFlowのインストールは終わっていることがわかります。

conda list

なので、先のエラーは気にしなくても大丈夫です。(本当なのか?)

詳細が気になる方は、0.12.1のインストールを記した次節もお読みください。

TensorFlowをインストール(!古い稿です)

(2017年2月17日追記:本節はTensorFlow 0.12.1についての記述です。削除せず残しておきますので、1.0.0以降をダウンロードした方は「Jupyterをインストール」の節までスキップしてください。)

TensorFlowのDownload and Setupのページに従って、コマンドプロンプトに以下を入力してTensorFlowをインストールします。

pip install --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-0.12.1-cp35-cp35m-win_amd64.whl

インストールが終わった時に、「指定されたファイルが見つかりません」と、エラーらしきものが表示されました。どうやらsetuptoolsのパッケージが見つからないようです。

コンソールの出力を遡ってみると、tensorflowがsetuptoolsの新しいバージョンでパッケージされているということで、既存のsetuptools-27をアンインストールしてからsetuptools-34をインストールしています。

conda list

と入力してパッケージをみますと、pipでインストールしたsetuptools-34もいますし、condaがインストールしたsetuptools-27もいます。しかしsetuptools-27の実体はTensorFlowのインストールの時に、pipがアンインストールしてしまったのでありません。

ともかくパッケージリストにtensorflow 0.12.1もありますので、そのインストールは完了したようです。

setuptoolsの重複について

ではTensorFlowのインストールの前にsetuptoolsをアップデートすればよかったかというと、現時点でcondaのパッケージでは27が最新のバージョンです。

そこで環境作成で組み込まれるsetuptoolsを、予めcondaでアンインストールししようと思い「conda uninstall setuptools」とすると、Python3.5までアンインストール候補に挙げられてしまいます。

不穏ではありますが、TensorFlowはインストールできていますので、このまま進めます。(この環境で冒頭の本のチュートリアルを進めていますが、今のところ環境起因のエラーは起きていません。)

ま、不具合があったらまた環境から作り直せばよいですし。(その前に、Minicndaのルート環境にあるsetuptoolのパッケージをtf環境の中に無理やりコピーする、という手も試してみますが。)

Jupyterをインストール

続いて、Pythonのコンソールであり、ノートブックでもあるJupyterを、以下のコマンドでインストールします。

conda install jupyter

(2017年2月17日追記:TensorFlow 1.0.0のインストール時は「pip install jupyter」としてインストールしました。)

インストール時の私は「TensorFlowや数値演算とは別物だからcondaでよいだろう」と思ってこのようにしました。しかし汎用性の高いモジュールが共通している可能性や、setuptoolsように不穏な管理状態になる可能性も考えられますので「pip install jupyter」としたほうが良かったかしれません。

後の祭りですし、今のところはエラーなく動いています。

jupyterの起動

jupyterを起動してみましょう。tf環境のコマンドプロンプトで以下を入力します。

jupyter notebook B:\home\tf

ここで「B:\home\tf」はjupyterのノートを格納するディレクトリです。あらかじめ作成しておきます。(以降「B:\home\tf」は各位の環境でお読み替えを~。)

ブラウザが立ち上がりjupyter notebookが表示されれば成功です。

コマンドプロンプトでctrl+cを押すと実行停止します。

その他のパッケージのインストール

その他、冒頭の本で使っているモジュールをtf環境にインストールします。

pip install pandas matplotlib

pandas、matplotlibのほかにもあるかもしれませんが、必要であればその都度同様にすることにします。(ここではcondaでなくpipを使っていますね。)

バッチファイルの作成

jupyterを立ち上げるのに毎回コマンドプロンプトを叩くのは面倒ですので、バッチファイルを作成します。

簡単なバッチファイル

単にJupyter notebookを特定のディレクトリで起動するのであれば、例えば「tfj.bat」の名前で以下の一行のテキストファイルを作成します。(各位の環境のパスで…)

B:\Miniconda3\envs\tf\Scripts\jupyter-notebook.exe B:\home\tf

このバッチファイルを使いやすいところにおいて、ランチャーなどに登録したりします。

Minicondaのインストーラーで環境変数の設定にチェックを入れたままにした場合はB:\Miniconda3にパスが通っていますので、ここにおいてコルタナさんで検索起動しても良いかもしれません。

これを実行すると、ブラウザが立ち上がりJupyer notebookが表示されます。

Jupyter notebookの終了

Jupyer notebook停止するときはバッチファイルが動いているコマンドプロンプトを閉じればよいのですが、その前に各ノートを保存・停止しましょう。

各ノートのメニュー「File>Close and Halt」から終了して閉じるか、最初の画面のRunnningタブからshutdownします。

TensorBoardの起動の追加

TensorBoardを使うようになると、それも簡単起動したくなります。

ということで先の「tfj.bat」を拡張して、今のところは以下のようになっています。

if "%1"=="close" goto CLOSE

set SCRIPT_DIR=B:\Miniconda3\envs\tf\Scripts
set NOTE_DIR=B:\home\tf\notes
set LOG_DIR=B:\home\tf\logs

start /B "" %SCRIPT_DIR%\jupyter-notebook.exe %NOTE_DIR%
start /B "" %SCRIPT_DIR%\tensorboard.exe --logdir=%LOG_DIR%

pause

:CLOSE
taskkill /IM jupyter-notebook.exe /T /F
taskkill /IM tensorboard.exe /T /F

3-5行はそれぞれ、Python環境のScript、Jupyter notebookの格納場所、TensorBoardに渡すログの格納場所、のディレクトリです。各位の環境に合わせて読み換えてください。

7,8行がそれぞれ、Jupyter notebookとTensorBoardの起動です。それぞれの起動でバッチがストップしないように、startで別プロセスで起動しています。しかしそれぞれコマンドプロンプトが立ち上がるのも煩いので、/Bを指定してメッセージはすべてバッチファイルのコマンドプロンプトにでるようにしています。

10行目で、バッチファイルを駆け抜けないようにpauseをしています。

13,14行目で、それぞれのプロセスを停止しています。

これを起動すると、pauseのところで「続行するには何かキーを押してください」と表示されますが、押すと終了してしまいますので、その時まで押さないでください。

そのうちブラウザが立ち上がり、Jupyter notebookが表示されます。

コマンドプロンプトに「Starting TensorBoard…」と表示されたら、ブラウザから「http://localhost:6006」にアクセスするとTensorBoardが表示されます。

終了するときは、バッチファイルのコマンドプロンプトに戻り何かキーを押せば終了します。(間違って終了しないように最小化しておいた方がよいですね。)

ランチャーからバッチファイルを起動した場合は、13,14行はなくても子プロセスとして終了してくれるように思います。しかし立ち上げていたコマンドプロンプトからバッチファイルを実行した場合、バッチファイルが終了しても各プロセスは残ってしまいますので、明示的に終了しています。(1行目もその名残です。)

環境変数の引継ぎとワーキングディレクトリ

興味深いところは、先のバッチファイルの先頭のほうで設定した環境変数(LOG_DIRなど)がJupyter notebookに引き継がれているところです。(当たり前と言えばそこまでですが。)

Pythonでも以下のようなコードで取得できますので、もしかしたら使えるかもしれません。

import os
print( os.getenv('LOG_DIR') )

またJupyter notebookのセルで「!cd」と入力して実行して確認すると、ノートでのワーキングディレクトリは各ノートのディレクトリになるようです。(ノートからの相対パスでいけるのかな?)

「TensorFlowで学ぶディープラーニング入門」のコードについて

冒頭に書きましたように、この本のコードは、本稿の環境とはPython、TensorFlow、その他のモジュールのバージョンが違うため、エラーがでたり期待通り動作しなかったりします。

今までで気が付いたことをメモしておきます。

エラー

Python2.xではprintに括弧を付けなくても良かったのですが、Python3.xでは関数のように括弧が必須、ということで、この本のコードのうち、括弧のないprintは修正が必要です。

グラフを書かない

そのままでは、matplotlibのグラフが書かれませんでした。(もしかしたら、時間をかけて待てば表示されたかも。)

グラフの最後に「plt.show()」と書いて、明示的にグラフを表示するようにしています。

TensrFlowのWARNING

WARNINGは結構でました。

取りあえずは放っておいても動作するのですが、ノートとしては見づらいので対応した方がよいかもしれません。WARNINGを読みますと、ちゃんと「tf.なんちゃらに置き換えてください」と書いてありますので、丁寧に置き換えるだけです。

これまでで私が修正したところをメモしておきます。(修正前メソッド → 修正後)

  • tf.initialize_all_variables → tf.global_variables_initializer
  • tf.scalar_summary → tf.summary.scalar
  • tf. histogram_summary → tf. summary.histogram
  • tf.train.SummaryWriter → tf.summary.FileWriter

シェルのコマンド

当然のことですが、「!」に続くシェルのコマンドはDOSのコマンドに変えます。といっても忘れてしまっているので、削除などはエクスプローラーでもOKですね。

パスも、そのままだとノートのあるドライブの中の絶対パスなので、工夫が必要そうです。(私はB:/tmp/dataとか出来たてしまったので、もうそのままです。)

まとめ

Windows10 HOMEにて、Miniconda3の中でPython3.5の環境を作成し、TensorFlow 0.12.1をインストールしました。(2017年2月17日:TensorFlow 1.0.0もインストールしました。)

Jupyterもインストールし、またJupyter notebook・TensorBoardの起動バッチファイルも作成し、チュートリアルができる環境ができました。

自作するのは大変そうなライブラリがオープンソースで提供されていて、PC一台で試せるとは、良い時代になったものだと思います。

Googleさん、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です