ゼロからの最速スタート シリーズ
TensorFlow入門(2)

TensorFlow入門(2)

TensorFlow環境の構築

2018年4月19日

本連載のゴールは「エンジニア向けに、とりあえずTensorFlow使ってみて、ディープラーニングを体感してみる」こと。実際にTensorFlowを使っていくために、まずは環境構築を行おう。

安部晃生 DATUM STUDIO 安部 晃生

本稿のゴール

 TensorFlowはPythonパッケージとして提供されるため、基本的にはPythonが動作する環境であればインストールして利用可能である。機械学習では試行の繰り返しが必要不可欠であることから、データサイエンティストはJupyter Notebookを好んで利用するようだ。本稿では、TensorFlowをJupyter Notebookで利用できることをゴールとして説明する*1

  • *1 Jupyter Notebookの機能を含むJupyterLabという統合開発環境(IDE)も存在する。

プラットフォームの選択

OS

 本稿では、以下のOSについて動作確認を行っている。

  • Windows 10 Home
  • macOS High Sierra
  • Ubuntu 16.04 LTS

CPU vs GPU

 TensorFlowを利用する際に、CPUのみで実行するか、GPUも利用するかを検討する必要がある。TensorFlowはCPUのみを利用するバージョン(CPU版)と、GPUを利用するバージョン(GPU版)が用意されている。多くの場合、GPUを利用したほうが高いパフォーマンスを得られるため、GPUが利用できる環境であれば、GPU版を選択するとよいだろう。なお、TensorFlowのGPU版はmacOSをサポートしない。

 GPUを有効化するためには、事前にCUDA ToolkitcuDNNなどGPU関連のソフトウェアのインストールや環境変数の設定が必要になる。本稿ではGPUの詳細な設定は割愛するため、GPU版の事前設定は「UbuntuでのGPUディープラーニング環境の構築【Ubuntu 16.04 LTS対応】」および公式ドキュメントを参考にしてほしい。

Python環境

 最初に述べたように、TensorFlowはPythonのパッケージとして提供される。本稿執筆時点の最新版であるTensorFlow 1.5がサポートするPythonのバージョンは、Python 2.7およびPython 3.4以降だ。

 Pythonにおけるパッケージのインストールや設定に関しては、OSによる多少の違いはあるかもしれないが、基本的にはpipコマンドを利用すれば導入できる。

 PythonユーザーにはCondaを好んで利用する方も多いだろう。Condaの場合はパッケージ管理にcondaコマンドを使う場合もあるが、TensorFlowの公式サイトではConda環境下でもpipコマンドの利用を推奨している。

 本連載では、軽量なCondaであるMinicondaを利用して仮想環境を作成し、pipコマンドでTensorFlowをインストールするというフローで説明する。本稿で構築する環境は次の通り。

ソフトウェアバージョン
Python3.6(Miniconda)
TensorFlow1.5
表1 本連載で使用するPythonとTensorFlowのバージョン

その他の選択肢

 TensorFlowをローカルのPython環境にインストールする以外の選択肢として、以下を簡単に紹介しておく。

Docker

 TensorFlowを実行する環境として、Dockerイメージを利用するという方法もある。Dockerとは、軽量なコンテナー型のアプリケーションの仮想実行環境である。なお、Windowsの場合はDockerを利用するためにHyper-Vの有効化が必要になるため、エディションによっては利用できないことに注意が必要だ。

 TensorFlowはCPU版とGPU版それぞれでDockerイメージを公式に公開している(gcr.io/tensorflow/tensorflowのタグを参照)。このイメージにはあらかじめTensorFlowに加えてJupyter Notebookもインストールされているため、Dockerが利用できる環境であれば、これを利用することで容易にTensorFlowの実行環境が手に入る。なお、GPU版についてはnvidia-dockerと呼ばれるGPUを有効にするためのDockerのランタイムを利用する必要がある。詳細は、TensorFlowの公式ドキュメントを参照してほしい。

パブリッククラウドのサービス

 Amazon Web ServicesAWS)、Google Cloud PlatformGCP)、Microsoft AzureAzure)といった著名なパブリッククラウドでも機械学習を実施しやすいようなクラウドサービスが提供されている。次の表に示したサービスを用いることで、Jupyter Notebookを利用して実験を行い、作成したモデルを公開できる。

クラウドサービスJupyter NotebookTensorFlowモデルの
公開
備考
AWSAmazon
  SageMaker
GCPGoogle
  Cloud Datalab
GCPGoogle
  Cloud ML Engine
AzureAzure
  Machine Learning
    Services
Jupyter NotebookはAzure Machine Learning Workbenchという開発環境でも提供される。データサイエンス仮想マシン(DSVM)にTensorFlowが導入済みですぐに利用できる
AzureAzure
  Machine Learning
    Studio
TensorFlowの導入は自身で行う必要があるが容易ではない。Azure環境で自由に機械学習の開発を行いたい場合は、上記のAzure Machine Learning Servicesを選択する方がよい
表2 各クラウドサービスとツールの対応環境

TensorFlow環境の準備

Minicondaのインストール

 下記URLより、OSごとにMinicondaのインストーラーを入手する。本稿ではPython 3.6を選択している。

 Windowsの場合は、ダウンロードしたインストーラーの実行ファイルを起動し、それに従ってインストールする。自分のみ利用する場合は管理者権限なしでインストールでき、これを推奨する。インストールすると[Anaconda Prompt]というソフトウェアがスタートメニューに登録される。Anaconda Promptは環境設定済みのコマンドプロンプトだと思ってもらえばよい。従って、Conda利用時の操作はAnaconda Promptを利用すればよい。本稿において、次節以降のコマンド操作はAnaconda Prompt上で行うことを想定している。

 macOSやLinuxの場合は、インストーラーはBashスクリプトになっているため、次のようにダウンロードしたスクリプトをbash上で実行すればよい。インストール先はホームディレクトリー以下を選択することで管理者権限が不要になり、これを推奨する。インストール時に対話的にパスの設定を行ってくれる。次節以降のコマンド操作では、この設定を反映するためにBashを再起動するか.bashrcファイルを再読込しておこう。

Bash
$ bash ./Miniconda3-latest-Linux-x86_64.sh
リスト1 ダウンロードしたBashスクリプトをターミナルで実行(Linuxの場合)

仮想環境の作成

 Condaではconda createコマンドにより仮想環境を作成できる。ローカル環境で開発を行う場合、さまざまなパッケージの導入によって依存関係が容易に崩れてしまう。これを防ぐために、ローカル環境内でも独立したパッケージ依存関係を保つことができる仮想環境の作成を強く推奨する。

 仮想環境を作成するため、次のコマンドを実行する。ここでは例として仮想環境の名前を「introtensorflow」とする。-nオプションにより仮想環境の名前を示す。

Bash
$ conda create -n introtensorflow
リスト2 仮想環境を作成するコマンド

 なお、作成した仮想環境の一覧は、次のコマンドで確認できる。

Bash
$ conda info -e
リスト3 仮想環境を一覧するコマンド

 作成した仮想環境下で作業を行える状態にすることをアクティベーションという。作成した「introtensorflow」仮想環境をアクティベーションする(リスト4、リスト5)。

Bash
(base) > conda activate introtensorflow
リスト4 仮想環境をアクティベーションするコマンド(Windowsの場合)
Bash
$ source activate introtensorflow
リスト5 仮想環境をアクティベーションするコマンド(macOS/Linuxの場合)

 アクティベーションに成功すると、次のようにプロンプトの前に仮想環境名が表示されるようになる。

Bash
(introtensorflow)
リスト6 アクティベーション成功時のプロンプト表示

 仮想環境を終了(ディアクティベーション)する場合には、リスト7/リスト8のコマンドを実行する。ディアクティベーションが成功すれば、プロンプトの前の仮想環境名が表示されなくなる。

Bash
(introtensorflow) > conda deactivate
リスト7 仮想環境をディアクティベーションするコマンド(Windowsの場合)
Bash
(introtensorflow) $ source deactivate
リスト8 仮想環境をディアクティベーションするコマンド(macOS/Linuxの場合)

 次節以降は仮想環境上で行うので、ディアクティベーションした仮想環境は、再度、アクティベーションしておくこと。

Jupyter Notebookのインストール

 仮想環境にJupyter Notebookをインストールするには、conda installコマンドを用いる。

Bash
(introtensorflow) $ conda install jupyter
リスト9  Jupyter Notebookをインストールするコマンド

TensorFlowのインストール

 前述の通り、TensorFlowのインストールはconda installではなくpip installが公式に推奨されている。これに従い、pip installコマンドを用いる。CPU版とGPU版でパッケージ名が異なるため、おのおのの環境に合わせて必要なパッケージをインストールする。GPU版は事前設定が必要であることは前述の通りだ。

Bash
(introtensorflow) $ pip --no-cache-dir install -I -U tensorflow
リスト10 TensorFlowをインストールするコマンド(CPU版)
Bash
(introtensorflow) $ pip --no-cache-dir install -I -U tensorflow-gpu
リスト11 TensorFlowをインストールするコマンド(GPU版)

TensorFlowの動作確認

インタープリターでの確認

 まずはTensorFlowが使えることを確認しよう。Pythonのインタープリターを対話モードで起動する。

Bash
(introtensorflow) $ python
Python 3.6.4 |Anaconda Inc.| (default, Jan 16 2018, 18:10:19)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
リスト12 対話モードでPythonを起動するコマンド

 macOSやLinuxではPythonがあらかじめインストールされているため、PythonがMinicondaで導入したPython 3.6であることを確認してほしい。|Anaconda Inc.|という文言が含まれていれば問題ない。もしMinicondaで導入したPythonでない場合は、パスの設定(PATH環境変数)を確認してほしい。

 次のコードを入力してエラーが起こらないことを確認する。なお、環境によっては警告などのログが表示されるかもしれないが、内容を読んで問題がなければ先に進めてほしい。最後のコードまで実行できたら対話モードを終了(exit())してよい。

Python
>>> import tensorflow as tf
>>> sess = tf.InteractiveSession()
>>> message = tf.constant('Hello, Tensorflow!')
>>> message.eval()
b'Hello, Tensorflow!'
>>> sess.close()
リスト13 TensorFlowが正常に使えるか試すコマンド

Jupyter Notebookの起動

 Jupyter Notebookの起動は次のコマンドを実行する。

Bash
(introtensorflow) $ jupyter notebook
リスト14 Jupyter Notebookを起動するコマンド

 実行すると、しばらくしてブラウザーが起動して、カレントディレクトリのファイル一覧が表示される(図1)。ファイルが存在しない場合は「The notebook list is empty.」と表示される。

図1 Jupyter Notebookの起動画面

 もしエラーでもなくブラウザーが起動しない場合や、誤ってタブを閉じてしまった場合は、コンソール上に次のようなログが表示されているので、このURLにアクセスすればよい。

Bash
  Copy/paste this URL into your browser when you connect for the first time,
  to login with a token:
    http://localhost:8888/?token=<ハッシュ値>
リスト15 ターミナル上に表示されているURLの例

 Jupyter Notebookページ右上の[New]メニュー(図1参照)から「Python 3」を選択すると新規ノートを作成できる。作成すると、以下のように空のノートが表示される。

図2 新規ノート

 Jupyter Notebookでは、入力セル(In[n]の形式のラベルが付与される)にコードを記述し、[Run]ボタンをクリック(またはShiftEnterキーを入力)すると、その入力セルに記述したコードを実行できる。コードが標準入出力を利用する場合は、入力セルの直下に入力フォームや出力結果が表示される。入力セルのコードの最後の式が評価された結果は、出力セル(Out[n]の形式のラベルが付与される)に出力される*2

  • *2 n番目の出力セルの値は_nという変数で参照できる。時間がかかる処理をうっかり変数に代入し忘れた場合などに利用するとよいだろう。

 入力セルには、Pythonコード以外にも、Markdown形式の文章も挿入できたりする(ノート表示中の[Cell]メニューの[Cell Type]で変更する)。また、各セルは順番を入れ替えたり、修正して再実行できたりするため、まさに試行錯誤を行うのに適した環境であるといえる*3

  • *3 試行錯誤を行った結果、変数定義の順番が入れ替わって結果がおかしくなる場合がある。他人にノートを配布したり、コードを再利用したりするような場合は、[Kernel]メニューから[Restart & Run All]を選択して、上から順に再実行するとよいだろう。

 図3はJupyter Notebookを用いて先ほどのコードを実行した例だ。

図3 テストコードの実行

 Jupyter Notebookのノートの実体は、拡張子が.ipynbのJSON形式のファイルである。

 この形式のファイルに対応したサービスやソフトウェアを用いれば、ユーザーはJupyter Notebookの導入なしにノートをレンダリングして閲覧できる。例えばGitHubはJupyter Notebook形式に対応しているので、ノートファイルをpushすることでユーザーに見やすい形式で公開できる。

 また、ノート表示中の[File]メニューの[Download As]を選択するか、コマンドラインでjupyter nbconvertコマンドを実行することにより、Pythonコードに変換したり、HTMLに変換したりできる。

 次回からは、今回準備したTensorFlow環境を利用して深層学習を実践していく予定である。前置きが長くなるが、次回はその必須知識として、TensorFlowの基本的な構成要素であるテンソルとセッションについて説明しておく。

【TL;DR】TensorFlow環境の構築

  • TensorFlowを利用するための環境: Pythonが動作する環境は必須。機械学習ではJupyter Notebookもインストールすると便利
  • OSとGPU: Windows/macOS/Ubuntuで利用可能。CPU版/GPU版を選択可能。ただしmacOSではGPU版はサポートされない
  • ローカルのPython環境: TensorFlow 1.5はPython 2.7と3.4以降に対応。本連載では、Minicondaで仮想環境を作成し、pipコマンドでTensorFlowをインストールする
  • 上記以外の環境: Dockerを利用する方法や、AWS/GCP/Azureといったパブリッククラウドを利用する方法もある
  • Minicondaのインストール: https://conda.io/miniconda.html
  • Condaで仮想環境の作成: conda create -n introtensorflowconda activate introtensorflow(Windows)/source activate introtensorflow(macOS/Linux)
  • Jupyter Notebookのインストール: conda install jupyter
  • TensorFlowのインストール: pip --no-cache-dir install -I -U tensorflow(CPU版)
  • 準備した環境の動作チェック: pythonimport tensorflow as tf……(コードなので続きは本文を確認、jupyter notebook
  • Jupyter Notebookの機能: 作成したノート上の各In[n]セルでPythonコードが実行でき、直下に表示されるOut[n]セルに結果が出力される。Markdown文書を入力したり、Pythonコードをエクスポートしたりできる
  • このエントリーをはてなブックマークに追加

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載目次]を参照してください。

TensorFlow入門(2)
1. TensorFlowとは? 入門連載始動! データフローグラフ、事例、学び方

TensorFlowの概要と適用範囲を説明。最重要な基本概念であるデータフローグラフについて解説する。また、深層学習との関係や、事例、学び方についても紹介する。

2018年4月18日(水)
TensorFlow入門(2)
2. 【現在、表示中】≫ TensorFlow環境の構築

本連載のゴールは「エンジニア向けに、とりあえずTensorFlow使ってみて、ディープラーニングを体感してみる」こと。実際にTensorFlowを使っていくために、まずは環境構築を行おう。

2018年4月19日(木)
TensorFlow入門(2)
3. TensorFlowの基本構成要素:「テンソル」と「セッション」

TensorFlowによる深層学習を始める前に、TensorFlowの基本的な構成要素であるテンソルとセッションを理解しておこう。TensorFlowのコード例を示しながら、できるだけコンパクトにまとめる。

2018年4月20日(金)
TensorFlow入門(2)
4. CNN(Convolutional Neural Network)を理解しよう(TensorFlow編)

画像認識でよく使われるディープラーニングの代表的手法「CNN」を解説。「畳み込み」「プーリング」「活性化関数」「CNNのネットワーク構成」「ソフトマックス関数」といった基礎と、注意点を押さえよう。

2018年4月23日(月)
TensorFlow入門(2)
5. 画像認識を行う深層学習(CNN)を作成してみよう(TensorFlow編)

ディープラーニングの代表的手法「CNN」により画像認識を行う機械学習モデルを構築してみる。CNNによる深層学習がどのようなものか体験しよう。

2018年4月24日(火)
Deep Insider の SNS :