TensorFlowの実行環境セットアップ

OS (Unix, Windows, Mac)

TensorFlow(release 1.8現在)は下記のOSの64bit OSにインストールできるようサポートされています。

  • macOS 10.12.6 (Sierra) or later (no GPU support)
  • Ubuntu 16.04 or later
  • Windows 7 or later
  • Raspbian 9.0 or later
  •  
    また、TensorFlowは機械学習に使用される様々な処理を容易に呼び出せるようにしたライブラリであり、呼び出す言語は下記の言語に対応しています。

  • Python
  • Java
  • Go
  • C
  • Swift
  • Javascript (TensorFlow.js)
  •  
    TensorFlowライブラリのインストールにあたっては、OSの上に仮想環境をインストールし、そこに対してTensorFlowをインストールすることが推奨されます(管理者権限が無くても追加ライブラリをインストールできるという簡便性)。自身の開発環境としてはLinux由来のOSであるmacOSがオススメと言いたいところですが、後述するようにTensorFlow release1.4からmacOS向けTensorFlowはGPU利用をサポートしなくなってしまいました。ですので、コードの記述をして挙動を確認するところまではmacOSで、計算処理能力を必要とするニューラルネットワークモデルの学習にはGPUを搭載したWindows PCもしくはクラウドのサーバーでというのが現時点での落とし所かと思います。

    このサイトではmacOSに仮想環境としてAnacondaを入れ、Python 3の環境を築いたうえでTensorFlow r1.8をインストールした前提で話を進めます。

    仮想Python環境(Virtualenv、Anaconda、Docker)

    TensorFlowライブラリおよびその他のライブラリは仮想環境をOSにインストールしたうえで導入することが望ましいです。これは、例えれば、テーブルの上にテーブルクロスを敷いてその上で食事や作業をすることに似ていて、テーブルクロスを敷くことによって直接にテーブルを傷つけたり汚したりすることを避けることができます。もしテーブルクロスがひどく汚れた場合は別のテーブルクロスと交換することで、また新たに綺麗な環境を整えることができます。2枚のテーブルクロスを左右に敷けば、それぞれの作業ごとにテーブルクロスを交換できます。これと同じように、仮想環境にインストールしたライブラリ等は、その仮想環境を削除すれば、OS側のシステムに影響を与えることなく綺麗に削除することができます。TensorFlowを用いる際にPythonの仮想環境を用意する場合、主に3つの選択肢があります。

  • virtualenv
  • Anaconda または Miniconda
  • Docker(コンテナ)
  •  
    1. virtualenv

    TensorFlowは仮想環境としてvirtualenvの使用を標準としています。virtualenvはコマンドラインベースのUIです。個人的には仕組みが明確なので安心感はありますが、機械学習分野では対象とする処理ごとにライブラリが独自に発表されているので、ライブラリの一覧からインストールする等の作業が面倒に思います。

     

     
    2. Anaconda または Miniconda

    AnacondaおよびMinicondaはGUIベースのPython仮想環境です。アプリケーションのデータサイズが大きいのでインストールに躊躇いますが、必要最小限のデータサイズに絞ってあるMinicondaを選択すればディスク容量を無駄に占有せずに済みます。TensorFlowを使う場合はAnacondaではなくMinicondaで十分です。私がAnacondaもしくはMinicondaが最も適切だと思うのは、Unix,Mac,Windowsいずれの環境でも使えることが理由です。virtualenvはUnix,Macでは使えますが、Windowsでは使えません。AnacondaまたはMinicondaを使っていれば環境によらず同じ手順で作業を行えます。なお、AnacondaはJupyter Notebookを標準的に使えるようになっており、書いたコードをデバッグしながら動かすことが容易に可能です。

    弱点は、Anacondaに搭載されているパッケージインストーラーがデフォルトで持っているパッケージ(例:TensorFlow)のバージョンが少し古いことです。TensorFlow release 1.8が出ている時点でAnacondaのパッケージインストーラーはrelease 1.0をインストールしようとします。ですので、パッケージインストーラーでインストールした後、自身で「pip install –upgrade hogehoge」のようにpipに–upgradeオプションを付けてアップグレードする必要があります。

     

     
    3. Docker

    Dockerも仮想環境ですが、上記2つと大きく異なる点は「コンテナ」と呼ばれるパッケージ化された仮想環境であることです。コンテナとしてパッケージ化された仮想環境はデータとみなして気軽に配布したり受け取ったりできます。この特徴を生かしたサービスとして、GPU生産メーカーとして知られるnVIDIAが運営する「nVIDIA GPU Cloud」です。我々のマシンにDockerコンテナ化されたPython仮想環境を持っておき、nVIDIAのサービスとリンクしておくことで、nVIDIA側が常に最新の開発環境にアップデートしてくれます。

     

    Pythonのバージョン

    TensorFlowも仮想Python環境も、現時点でリリースされているPython2.7およびPython3.6のどちらでも利用可能ですが、別段の理由がなければPython3系での使用を前提にした方が良いです。実際にアメリカ方面の研究者・エンジニアが発表するGitHubに置いたコードを読んでみると、Python3系での稼働が前提としているものが多く目に付きます。この趨勢を考えると、別段の理由がない限り彼らと足並みをそろえてPython3系でセットアップすべきと考えます。

    CPU vs. GPU vs. TPU

    コンピュータの頭脳と例えられる部品がCPUです。過去においてはCPUの能力を上げることがコンピュータの計算処理能力の要とされてきました。これに対しGPUはCPUから指示を受けて画面に映像を描画するために使われる「脇役」として扱われてきました。しかし、機械学習がポピュラーになり、その計算(実際にはニューラルネットワークの学習過程)の速度を向上させる方法としてGPUを用いるようになりました。これは、映像を処理するプロセスが数学的には行列の計算の多用であり、ニューラルネットワークの学習プロセスにも行列の計算が多用されるため、行列の計算が得意なアーキテクチャになっていたGPUに白羽の矢が当たったわけです。CPUとGPUのデータ処理の違いをわかりやすく示したnVIDIAによるデモンストレーションを下記に示します。

     

     
    このように、CPUは逐次に処理をおこなって行くのに対して、GPUは同時並行で処理を行うことができるのが特徴です。TensorFlowはCPU処理用とGPU処理用のコードが別々に配布されています。なお、現時点でTensorFlowでのGPU処理をさせることができるのはnVIDIA製のGPU(Pascal以降)のみです。また、GPUを本来はCPUで行う計算に使用する場合にはnVIDIAが配布しているCUDAというソフトウェアパッケージをインストールする必要があります。

     

     
    TensorFlow release 1.4以前ではMacOSでもGPU計算が行えるようになっていましたが、現時点のrelease 1.8ではMacOSではCPUでの計算処理しかサポートされていません。なお、GPUはCPUよりも行列計算処理が格段に速いですが、本来は画面に映像を描画することを目的に作られたため、GPUよりも機械学習に特化した処理を行おうとGoogleが開発したものがTPU(Tensor Processing Unit)です。機械学習ライブラリにはTensorFlow以外のものもありますが、TensorFlowでの処理に限りTPUはGPUの15倍から30倍ほどの速度で処理を行います。現時点でTPUを使うにはGoogleが運営しているCloud PlatformであるGoogle Cloud ML Engineで使用できます。

     

    Wrappers

    TensorFlowは他の機械学習ライブラリに比べて、多機能である反面、複雑な仕様になっています。TensorFlowを使用して機械学習用にコードを書くのは比較的大変な作業です。この作業負荷を軽減する方法のひとつとしてラッパーを介してTensorFlowを使用する方法があります。TensorFlowが標準的なWrapperと位置付けているのがKerasです。TensorFlowにはKerasでの使用を容易にするモジュール・クラス・関数が装備されています。