Translate

2016年8月23日火曜日

TensorFlowをインストールしてみる

TensorFlowを使うには、まずインストールしないといけない。

ということでまず公式サイトのインストール手順

 https://www.tensorflow.org/versions/r0.10/get_started/os_setup.html

を翻訳してみた。

以下参照する人は、at your own riskでお願いします。
---------

ダウンロードとセットアップ


バイナリパッケージ、GitHubソースコードのどちらからでもインストール可能です。

前提条件

TensorFlow Python APIは、Python 2.7とPython3.3以降をサポートしています。

GPUバージョン(Linuxのみ)は、Cuda Toolkit 7.5とcuDNN v4が動作すること。その他バージョンはソースコードからインストールした場合のみ(Cuda toolkitは7.0以降。cuDNN は6.5(v2), 7.0(v3), v5)をサポートします。詳細は、Cudaインストール手順 を参照のこと。

概要


様々なTensorFlowをインストールする方法を提供しています:

  • Pip インストール:TensorFlowをあなたのマシン上にインストールします。おそらく前にインストールしたPythonプログラムを更新する必要があります。既存のPythonプログラムがある場合影響が出るかもしれません。
  • Virtualenv インストール:自身のディレクトリ内にTensorFlowをインストールします。あなたのマシン上の既存のPythonプログラムに影響を与えません。
  • Anaconda インストール :Anaconda Pythonディストリビューションが動作中の環境自身にTensorFlowをインストールします。あなたのマシン上の既存のPythonプログラムに影響を与えません。
  • Docker インストール :あなたのマシン上のすべてのプログラムから分離されたDockerコンテナ上でTensorFlowを実行します。
  • ソースからインストール :次にpipを使ってインストールするpipホィールをビルドすることでTensorFlowをインストールします。

もしpipやvirtualeny、anaconda、dockerに慣れているのであれば、あなたの個別ニーズに合わせて手順を適用してください。pipの名称やDockerイメージの名前は対応するインストールセクションにリストされます。

もしインストール中にエラーが発生したら、解決方法をみつけるために 一般の問題 を確認してください。

Pip インストール

Pip はPythonで記述された、ソフトウェアのインストールや管理に使用するパッケージ管理システムの一つです。

pip install中にインストールされ更新されるパッケージを REQUIRED_PACKAGES section of setup.py にてリスト化しています。

まだインストールしていない場合は、pip(もしくはpyhton3のためのpip3)をインストールしてください:

# Ubuntu/Linux 64-bit の場合
$ sudo apt-get install python-pip python-dev

# Mac OS X の場合
$ sudo easy_install pip
$ sudo easy_install --upgrade six


次に、正しいバイナリを選択してインストールします:

# Ubuntu/Linux 64-bit, CPU only, Python 2.7
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU 有効, Python 2.7 の場合:
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl

# Mac OS X, CPU のみ, Python 2.7 の場合:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py2-none-any.whl

# Mac OS X, GPU 有効, Python 2.7 の場合:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0rc0-py2-none-any.whl

# Ubuntu/Linux 64-bit, CPU のみ, Python 3.4 の場合:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU 有効, Python 3.4 の場合:
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU のみ, Python 3.5 の場合:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp35-cp35m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU 有効, Python 3.5 の場合:
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp35-cp35m-linux_x86_64.whl

# Mac OS X, CPU のみ, Python 3.4 or 3.5 の場合:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py3-none-any.whl

# Mac OS X, GPU 有効, Python 3.4 or 3.5 の場合:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0rc0-py3-none-any.whl


TensorFlowをインストールします:

# Python 2 の場合:
$ sudo pip install --upgrade $TF_BINARY_URL

# Python 3 の場合:
$ sudo pip3 install --upgrade $TF_BINARY_URL
注意: TensorFlow0.7.1未満の過去のバージョンからのアップデートの場合、更新されたprotobufの関連パッケージのクリーンインストレーションを実行するために事前にTensorFlowとprotobufをpip uninstallを先に実行すべきです。

これで、インストールテストの実行が可能になりました。


Virtualenv インストール

Virtualenv は、分離された場所にある異なるPythonプロジェクトにより要求されるパッケージ関連性を維持するためのツールです。TensorFlowのVirtualenvインストレーションは、TensorFlowにより必要とされるPythonパッケージの既存のバージョンを上書きしません。

Virtualenv を使ったインストレーションは次の通り:

  • pipおよびVirtualenvのインストール
  • Virtualenv 環境の構築
  • Virtualenv環境の有効化およびその環境へTensorFlowのインストール
  • インストール後、TensorFlowを使いたい時にVirtualenv環境を有効化

pipおよびVirtualenvをインストールします:

# Ubuntu/Linux 64-bit
$ sudo apt-get install python-pip python-dev python-virtualenv

# Mac OS X
$ sudo easy_install pip
$ sudo pip install --upgrade virtualenv

ディレクトリ~/tensorflow内にVirtualenv環境を構築します:

$ virtualenv --system-site-packages ~/tensorflow

環境を有効化します:

$ source ~/tensorflow/bin/activate  # If using bash
$ source ~/tensorflow/bin/activate.csh  # If using csh
(tensorflow)$  # Your prompt should change

通常の Pip インストール など TensorFlow をインストールしてください。最初にインストールのための正しいバイナリを選択してください:

# Ubuntu/Linux 64-bit, CPU only, Python 2.7
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl

# Mac OS X, CPU only, Python 2.7:
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py2-none-any.whl

# Mac OS X, GPU enabled, Python 2.7:
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0rc0-py2-none-any.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.4
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.5
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp35-cp35m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp35-cp35m-linux_x86_64.whl

# Mac OS X, CPU only, Python 3.4 or 3.5:
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py3-none-any.whl

# Mac OS X, GPU enabled, Python 3.4 or 3.5:
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0rc0-py3-none-any.whl

最後にTensorFlowをインストールします:

# Python 2
(tensorflow)$ pip install --upgrade $TF_BINARY_URL

# Python 3
(tensorflow)$ pip3 install --upgrade $TF_BINARY_URL

有効化したVirtualenv環境を使って、インストールテストの実行 が可能です。

TensorFlowを使って実行したら、環境を無効化してください。

(tensorflow)$ deactivate

$  # Your prompt should change back

再度TensorFlowを使う場合、Virtualenv環境を有効化させてください:

$ source ~/tensorflow/bin/activate  # If using bash.
$ source ~/tensorflow/bin/activate.csh  # If using csh.
(tensorflow)$  # Your prompt should change.
# Run Python programs that use TensorFlow.
...
# When you are done using TensorFlow, deactivate the environment.
(tensorflow)$ deactivate

Anaconda インストール

Anaconda はたくさんの標準的な数値計算・科学技術計算パッケージを含むPythonディストリビューションの一つです。Anacondaは conda と呼ばれるパッケージマネージャを使用して、Virtualenvに近い自身の 環境システムを保有します。

Virtualenv や conda 環境を使って、分離された場所での異なる Python プロジェクトごとに必要とされる関連性を維持します。TensorFlow の Anaconda 環境インストレーションは、TensorFlow によって必要とされる Python パッケージの既存バージョンを上書きしません。

  • Anacondaのインストール
  • conda 環境の構築
  • conda 環境の有効化およびTensorFlowのインストール
  • インストール後、TensorFlowを使用したい場合は都度conda環境を有効化
  • (オプション)ipythonやその他パッケージをconda環境へのインストール

Anacondaをインストールします:
Anaconda ダウンロードサイト 上の手順に従ってください。

tensorflowという名前の conda 環境を構築します:

# Python 2.7
$ conda create -n tensorflow python=2.7

# Python 3.4
$ conda create -n tensorflow python=3.4

# Python 3.5
$ conda create -n tensorflow python=3.5

環境を有効化して、conda を使用 もしくは pip を使って TensorFlow をこの中でインストールしてください。

conda を使用

conda-forge に、コミュニティが維持管理している conda パッケージがあります。

TensorFlow のCPUのみバージョンが現在有効で、Python2 もしくは Python3 の conda 環境にインストール可能です。

$ source activate tensorflow
(tensorflow)$  # Your prompt should change

# Linux/Mac OS X, Python 2.7/3.4/3.5, CPU only:
(tensorflow)$ conda install -c conda-forge tensorflow

pip を使用


pipを使う場合、easy_installについてのエラーを避けるために--ignore-installedフラグを使ってください。

$ source activate tensorflow
(tensorflow)$  # Your prompt should change

通常の Pip インストールを実行してTensorFlowをインストールしてください。最初にインストールのための正しいバイナリを選択してください:

# Ubuntu/Linux 64-bit, CPU only, Python 2.7
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl

# Mac OS X, CPU only, Python 2.7:
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py2-none-any.whl

# Mac OS X, GPU enabled, Python 2.7:
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0rc0-py2-none-any.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.4
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.5
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp35-cp35m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.10.0rc0-cp35-cp35m-linux_x86_64.whl

# Mac OS X, CPU only, Python 3.4 or 3.5:
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0rc0-py3-none-any.whl

# Mac OS X, GPU enabled, Python 3.4 or 3.5:
(tensorflow)$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.10.0rc0-py3-none-any.whl

最後に、TensorFlowをインストールします:

# Python 2
(tensorflow)$ pip install --ignore-installed --upgrade $TF_BINARY_URL

# Python 3
(tensorflow)$ pip3 install --ignore-installed --upgrade $TF_BINARY_URL

使い方


有効化された conda 環境を使って、インストールテストの実行 が可能です。

TensorFlowを使い終わったら、環境を無効化してください。

(tensorflow)$ source deactivate

$  # Your prompt should change back

後でtensorFlowを使うためには、conda 環境を再び有効化する必要があります:

$ source activate tensorflow
(tensorflow)$  # Your prompt should change.
# Run Python programs that use TensorFlow.
...
# When you are done using TensorFlow, deactivate the environment.
(tensorflow)$ source deactivate

ipython のインストール


ipython で tensorflow を使う場合、おそらく tensorflow 環境へ ipython をインストールする必要があります:

$ source activate tensorflow
(tensorflow)$ conda install ipython

同様に、パンダのような他のPythonパッケージをtensorflowで使いたい場合は tensorflow 環境内でインストールする必要があります。


Docker インストール

Docker は、あなたのマシン上で実行中の Linux OS のセルフコンテナバージョンを構築するためのシステムです。Dockerを使ってTensorFlowをインストールして実行する場合、あなたのマシン上の既存パッケージと完全に分離した状態でインストールします。

4つのDockerイメージを提供しています。

  • gcr.io/tensorflow/tensorflow : TensorFlow CPU バイナリイメージ
  • gcr.io/tensorflow/tensorflow:latest-devel : CPU バイナリイメージ+ソースコード
  • gcr.io/tensorflow/tensorflow:latest-gpu : TensorFlow GPU バイナリイメージ
  • gcr.io/tensorflow/tensorflow:latest-devel-gpu : GPU バイナリイメージ+ソースコード
latestタグをリリースバージョン(例えば、0.10.0rc0-gpu)に置き換えたものもあります。

Dockerを使ったインストール手順は、次のとおりです:

  • マシン上にDockerをインストールする
  • sudoなしでのコンテナ作成を許可された Dockerグループ を作成する
  • TensorFlow イメージでDockerコンテナを起動する(イメージは最初に起動した際に自動でダウンロードされる)

マシン上にDockerをインストールする手順は Dockerのインストールを参照してください。

Dockerインストール後、TensorFlowバイナリイメージを使ってDockerコンテナを起動します。

$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow

オプション-p 8888:8888はDockerコンテナの内部ポートをホストマシンへ割り当てており、この場合はJupyter ネットワーク接続を確保しています。

ポート割り当てのフォーマットは、 ホスト側ポート番号:コンテナ側ポート番号です。ホスト側ポート番号はどんな番号でも割り当てることはできますが、コンテナ側のポート番号は8888でなくてはなりません。

NVidia GPUサポートのために NVidiaドライバと nvidia-docker をインストールしてください。実行は次のように入力します

$ nvidia-docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu
nvidia-docker実行中に問題が発生したら、デフォルト設定を使って、repo内の スクリプト にこれらのフラグを含めます。

$ path/to/repo/tensorflow/tools/docker/docker_run_gpu.sh -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu

詳細は、TensorFlow Docker readmeを読んでください。

これで、Dockerコンテナ内部で インストールテストの実行ができるようになりました。


ソースコードからのインストール


ソースコードからインストールする場合、pipを使ってpip wheelをビルドします。そのため ここ に記述されているとおりにpipをインストールする必要があります。

TensorFlowリポジトリのクローン

$ git clone https://github.com/tensorflow/tensorflow

上記は最新のマスタブランチをインストールする手順に注意してください。もし(リリースブランチなど)特定のブランチをインストールしたい場合は、-b git cloneコマンドに付け、r0.8より前の場合は--recurse-submodulesをつかってTensorFlowに依存するprotobufライブラリをインストールしてください。

Linuxのための環境準備

bazelのインストール

ここ に書かれた手順に従ってbazelのための関連パッケージをインストールしてください。installer for your system で使っているbazelの最新安定バージョンをダウンロードし、次に記述しているようにインストーラを実行してください:

$ chmod +x PATH_TO_INSTALL.SH
$ ./PATH_TO_INSTALL.SH --user
PATH_TO_INSTALL.SHをあなたがインストーラをダウンロードしたパスに変更することを忘れないで下さい。

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

# For Python 2.7:
$ sudo apt-get install python-numpy swig python-dev python-wheel
# For Python 3.x:
$ sudo apt-get install python3-numpy swig python3-dev python3-wheel

オプション:CUDAのインストール(Linux上でGPUを使用)


GPUを使うTensorFlowをビルドもしくは実行するためには、NVIDIAの Cuda Toolkit(7.0以降)とcuDNN(v2以降)の両方をインストールする必要があります。

TensorFlow GPU サポートは3.0以降のNVidia Compute Capabilityを使うGPUカードが前提です。サポートされたカードは以下のとおり(これらだけサポートするというわけではありません):

  • NVidia Titan
  • NVidia Titan X
  • NVidia K20
  • NVidia K40

GPUカードのNVIDIA Compute Capabilityチェック


https://developer.nvidia.com/cuda-gpus


Cuba Toolkitのダウンロードとインストール

https://developer.nvidia.com/cuda-downloads

もしバイナリリリースを使っているのであれば、バージョン7.5をインストールしてください。

ツールキットは e.g. /usr/local/cudaにインストールされます。


cuDNNのダウンロードとインストール


https://developer.nvidia.com/cudnn

cuDNN v4(v5は現在、ソースコードからTesorFlowをインストールするときのリリース候補)をダウンロードして下さい。

解凍してcuDNNファイルをツールキットディレクトリへコピーしてください。ツールキットが/usr/local/cudaへインストールされたと仮定した場合、次のコマンドを(ダウンロードしたcuDNNのバージョンによって編集して)実行してください:

tar xvzf cudnn-7.5-linux-x64-v4.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

Mac OS X のための環境準備

homebrew を使ってbazelやSWIG関連パッケージをインストールし、easy_installやpipを使ってpython関連パッケージをインストールすることを推奨します。

もちろん、homebrewなしてSwigをソースコードからインストールすることも可能です。この場合、PCRE2ではなく PCRE の関連パッケージのインストールを確認しなくてはなりません。



関連性

ここ の手順に従って、bazelの関連パッケージをインストールしてください。それから、bazelやSWIGをインストールするためにhomebrewを使うことができます:
$ brew install bazel swig

easy_install もしくは pip を使ってpython関連パッケージをインストールすることができます。easy_installを使う場合は、次のとおり実行してください。

$ sudo easy_install -U six
$ sudo easy_install -U numpy
$ sudo easy_install wheel


拡張pythonシェルipython もおすすめします。次のようにインストールします:
$ sudo easy_install ipython

オプション:MacのGPUセットアップ


もしGPUサポート付きのビルドを計画しているのであれば、homebrew経由でGNU coreutilsを取得する必要があります:
$ brew install coreutils

次に、直接OSXバージョンにあったパッケージを NVIDIA からダウンロードするか Homebrew Cask 拡張を使って、最近のCUDAツールキットを持っていることを確認してください。

$ brew tap caskroom/cask
$ brew cask install cuda

CUDAツールキットがインストールされているならば、~/.bash_profileに次の行を追加して、必要な環境変数をセットアップする必要があります:
export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$CUDA_HOME/lib"
export PATH="$CUDA_HOME/bin:$PATH"


最後に、 Accelerated Computing Developer Program アカウントを必要とする CUDA Deep Neural Network ライブラリもインストールしたいでしょう。ローカルにダウンロードしたら、unzipしてヘッダやライブラリをローカルのCUDAツールキットフォルダへ移動してください:
$ sudo mv include/cudnn.h /Developer/NVIDIA/CUDA-7.5/include/
$ sudo mv lib/libcudnn* /Developer/NVIDIA/CUDA-7.5/lib
$ sudo ln -s /Developer/NVIDIA/CUDA-7.5/lib/libcudnn* /usr/local/cuda/lib/

CUDAインストールを確認するには、成功していることを確かめるためにdeviceQueryをビルドし実行することができます。

$ cp -r /usr/local/cuda/samples ~/cuda-samples
$ pushd ~/cuda-samples
$ make
$ popd
$ ~/cuda-samples/bin/x86_64/darwin/release/deviceQuery


XCode 7.3を使ってTensorFlowをコンパイルしたいのであれば、XCode 7.3にCUDA7.5といまだ互換性がないことに注意してください。Xcode 7.2をダウンロードしてデフォルトとして選択するようにセットする必要があります:
$ sudo xcode-select -s /Application/Xcode-7.2/Xcode.app

インストールのconfigure


ツリーのルートにあるconfigureスクリプトを実行してください。configureスクリプトはpythonインタプリタのパスを要求し、CUDAライブラリの設定(オプション)を許可します。

この手順は、pythonやnumpyヘッダファイル指定だけでなく、GPUを有効化したCUDAとツールキットを持っている場合はGPUサポート有効化にも使用されます。


もしCudaやcuDNNのいくつkのバージョンをインストールしているならば、システムデフォルトに頼る代わりに明確に一つ指定すべきです。

例えば:
$ ./configure
Please specify the location of python. [Default is /usr/bin/python]:
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with GPU support? [y/N] y
GPU support will be enabled for TensorFlow
Please specify which gcc nvcc should use as the host compiler. [Default is /usr/bin/gcc]:
Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave empty to use system default]: 7.5
Please specify the location where CUDA 7.5 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Please specify the cuDNN version you want to use. [Leave empty to use system default]: 5
Please specify the location where cuDNN 5 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size.

Setting up Cuda include
Setting up Cuda lib
Setting up Cuda bin
Setting up Cuda nvvm
Setting up CUPTI include
Setting up CUPTI lib64
Configuration finished

ここでは、システム内のCudaライブラリのシンボリックリンクの規範的なセットを構築しています。Cudaライブラリのパスを変更するたびに、bazelビルドコマンド実行前にこのステップを再実行する必要があります。cuDNNライブラリのために、R2であれば6.5、R3であれば7.0、R4RCであれば4.0.4を使ってください。


GPUサポート時のビルド


ソースツリーのルートから、実行してください:
$ bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer

$ bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu
# Lots of output. This tutorial iteratively calculates the major eigenvalue of
# a 2x2 matrix, on GPU. The last few lines look like this.
000009/000005 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
000006/000001 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
000009/000009 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]

GPUサポート時は--config=cudaが必要であることに、注意してください。


既知の問題


同一ソースツリーのもとでCudaありなし両方ビルド可能であるが、同一のソースコード内でこれらの2つの構成間を交換する際にbazel cleanを実行することをお勧めします。

bazel build実行前にconfigureを実行する必要があります。しかしながら、ビルドはクリアエラーメッセージが表示され失敗します。将来的に、ビルドステップ内にconfigureステップをより便利に組み込むことを考慮することになるでしょう。


pipパッケージの構築とインストール


ソースコードからビルドする場合、pipパッケージをビルドしインストールします。

$ bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

# To build with GPU support:
$ bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

# The name of the .whl file will depend on your platform.
$ sudo pip install /tmp/tensorflow_pkg/tensorflow-0.10.0rc0-py2-none-any.whl


開発のためのTensorFlowセットアップ


もしTensorFlow自身動作しているなら、相互対話型のPythonシェル内にてTensorFlowの再インストール無しで変更をテスト可能です。


すべてのファイルが(コピーの代わりに)システムディレクトリからリンクされているようにTensorFlowをセットアップするために、次のコマンドをTensorFlowのルートディレクトリ内部で実行してください:

bazel build -c opt //tensorflow/tools/pip_package:build_pip_package

# To build with GPU support:
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

mkdir _python_build
cd _python_build
ln -s ../bazel-bin/tensorflow/tools/pip_package/build_pip_package.runfiles/org_tensorflow/* .
ln -s ../tensorflow/tools/pip_package/* .
python setup.py develop

このセットアップは、C++ファイルの変更のたびに;pythonファイルの追加・削除・移動のたびに;もしくはbazel buildルールの変更時//tensorflow/tools/pip_package:build_pip_packageターゲットのリビルドの前提であることに注意してください。


最初のTensorFlow ニューラルネットモデルの学習


ソースツリーのルートから、実行してください:
$ cd tensorflow/models/image/mnist
$ python convolutional.py
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
Initialized!
Epoch 0.00
Minibatch loss: 12.054, learning rate: 0.010000
Minibatch error: 90.6%
Validation error: 84.6%
Epoch 0.12
Minibatch loss: 3.285, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.0%
...
...

一般的な問題

GPU関連の問題


TensorFlowプログラム実行を試す時に次のメッセージに遭遇した場合:
ImportError: libcudart.so.7.0: cannot open shared object file: No such file or directory

GPUインストール手順に従ってください。もしソースからビルドし、CudaもしくはcuDNNのバージョンをからのままの場合、それらを明確に指定してください。

protobufライブラリ関連問題


TensprFlow pip パッケージは protobuf pipパッケージバージョン 3.0.0b2に依存しています。 Pipl (pip install protobuf実行時)からダウンロードしたprotobufのpipパッケージは、pythonだけのライブラリで、C++実装より10倍から50倍遅いprotoシリアライゼーション/でシリアライゼーションのpython実装を保有しています。protobufもまた速度の早いC++ベースのproto解釈処理を含むpythonパッケージのためのバイナリ拡張をサポートしています。この拡張は標準のPythonのみのPIPパッケージでは有効になっていません。バイナリ拡張を含むprotobufのためのカスタムバイナリpipパッケージを構築ています。これらの手順に従ってカスタムバイナリprotobuf pipパッケージをインストールします:

# Ubuntu/Linux 64-bit:
$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/protobuf-3.0.0b2.post2-cp27-none-linux_x86_64.whl

# Mac OS X:
$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/protobuf-3.0.0b2.post2-cp27-none-any.whl

Python3の場合は:
# Ubuntu/Linux 64-bit:
$ pip3 install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/protobuf-3.0.0b2.post2-cp34-none-linux_x86_64.whl

# Mac OS X:
$ pip3 install --upgrade https://storage.googleapis.com/tensorflow/mac/protobuf-3.0.0b2.post2-cp35-none-any.whl

標準のpip install tensorflowでpythonのみのpipパッケージをインストールしたら、pip経由でTensorFlowをインストールした後上記のパッケージをインストールしてください。上記のpipパッケージは既存のprotobufパッケージで上書きされます。バイナリpipパッケージは64MBより大きいprotobufをサポートしていることに注意してください、そしてこれらのようにエラーを修正すべきであることに注意してください:
[libprotobuf ERROR google/protobuf/src/google/protobuf/io/coded_stream.cc:207] A
protocol message was rejected because it was too big (more than 67108864 bytes).
To increase the limit (or to disable these warnings), see
CodedInputStream::SetTotalBytesLimit() in google/protobuf/io/coded_stream.h.

pipインストール問題

Cannot import name 'descriptor'

ImportError: Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/tensorflow/core/framework/graph_pb2.py", line 6, in
    from google.protobuf import descriptor as _descriptor
ImportError: cannot import name 'descriptor'

TensorFlowの新しいバージョンへの更新時に上記エラーが出た場合、TensorFlowとprotobuf(もしインストールしているなら)を両方アンインストールし再度TensorFlowをインストールしてみてください(正しいprotobuf関連パッケージも含む)。


Can't find setup.py


もし、pip install中に、次のようなエラーに遭遇したら:
...
IOError: [Errno 2] No such file or directory: '/tmp/pip-o6Tpui-build/setup.py'

解決方法:pipのバージョンを更新してください:
pip install --upgrade pip

pipがどのようにインストールされたかにより、実行するためにsudoが必要になるかもしれません。


SSLError: SSL_VERIFY_FAILED


もし、URLからのpip install中に、次のようなエラーに遭遇したら:
...
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

解決方法:curlもしくはwgetを使って手動でwheelをダウンロードし、pipをローカルにインストールしてください。


Operation not permitted


もし、sudoを使っているにもかかわらず、次のようなエラーに遭遇したら:
...
Installing collected packages: setuptools, protobuf, wheel, numpy, tensorflow
Found existing installation: setuptools 1.1.6
Uninstalling setuptools-1.1.6:
Exception:
...
[Errno 1] Operation not permitted: '/tmp/pip-a1DXRT-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'

解決方法:pipコマンドに--ignore-installedフラグを追加してください。


Linuxにおける問題


もし次のエラーメッセージに遭遇したら:

...
 "__add__", "__radd__",
             ^
SyntaxError: invalid syntax

解決方法:Python2.7を使ってください。


Ubuntu build issue on Linux 16.04 when building with --config=cuda: build fail with cuda: identifier "__builtin_ia32_mwaitx" is undefined.


GitHub issue: https://github.com/tensorflow/tensorflow/issues/1066

解決方法:次のコンパイルフラグをthird_party/gpus/crosstool/CROSSTOOLへ追加してください。

cxx_flag: "-D_MWAITXINTRIN_H_INCLUDED" cxx_flag: "-D_FORCE_INLINES"

Mac OS X: ImportError: No module named copyreg


Mac OS X上で、tensorflowインポート中に次のメッセージに遭遇することが有ります。

>>> import tensorflow as tf
...
ImportError: No module named copyreg

解決方法:TensorFlowはprotobufに依存しており、Pythonパッケージsix-1.10.0が必要です。Appleのデフォルトpythonインストールはsix-1.4.1のみ提供しています。

次の方法のうちどれか一つで解決可能です:

  • sixのカレントバージョンを更新する:
  $ sudo easy_install -U six
  分離したPythonライブラリでtensorFlowをインストールしてください:

homebrew もしくは MacPorts 経由でPython分離コピーをインストールし、再度Pythonコピーを使ってTensorFlowをインストールしてください。


Mac OS X: TypeError: __init__() got an unexpected keyword argument 'syntax'


Mac OS X上で、tensorflowインポート中に次のメッセージに遭遇することが有ります。

>>> import tensorflow as tf
Traceback (most recent call last):
  File "", line 1, in
  File "/usr/local/lib/python2.7/site-packages/tensorflow/__init__.py", line 4, in
    from tensorflow.python import *
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/__init__.py", line 13, in
    from tensorflow.core.framework.graph_pb2 import *
...
  File "/usr/local/lib/python2.7/site-packages/tensorflow/core/framework/tensor_shape_pb2.py", line 22, in
    serialized_pb=_b('\n,tensorflow/core/framework/tensor_shape.proto\x12\ntensorflow\"d\n\x10TensorShapeProto\x12-\n\x03\x64im\x18\x02 \x03(\x0b\x32 .tensorflow.TensorShapeProto.Dim\x1a!\n\x03\x44im\x12\x0c\n\x04size\x18\x01 \x01(\x03\x12\x0c\n\x04name\x18\x02 \x01(\tb\x06proto3')
TypeError: __init__() got an unexpected keyword argument 'syntax'


これは、protobufバージョン間で衝突が発生しているためです(protobuf3.0.0が必要)。現在もっともよい解決方法は次のようにprotobufのより古いバージョンがインストールされていないことを確認することです:
$ pip install --upgrade protobuf

Mac OS X: Segmentation Fault when import tensorflow


Mac OS X上で、python内のtensorflowインポート時に次のようなエラーメッセージが表示された:
>>> import tensorflow
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.dylib locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.dylib locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.dylib locally
"import tensorflow" terminated by signal SIGSEGV (Address boundary error)

これは、デフォルトではcudaはlibcuda.dylibを作成するのですが、tensorflowはlibcuda.1.dylibをロードしようとしているためです。これはシンボリックリンクを作成することで解決できます:
ln -sf /usr/local/cuda/lib/libcuda.dylib /usr/local/cuda/lib/libcuda.1.dylib

以上
------------

..Pythonをガッツリ知らないと、TensorFlowは難しそう..

環境すら作るの大変そう..とおもって、Dockerインストールを選択し、上のとおりやってみたら、構築だけは簡単だった。

ポート8888版をブラウザで開いてやるとWebUIでpythonが実行できる環境になっていてとってもべんり。
しかも失敗したら、コンテナ再起動で最初所の状態になる(DATAディレクトリをexposeしてないみたい)ので、やり直しが効く。

やっぱCoreOS環境は作っておいて損ないな、とこのDevOps時代を実感した..


GET STARTEDも翻訳してみたので、ご参考迄。
https://fight-tsk.blogspot.jp/2016/09/tensorflowget-started.html



p.s.

DockerでTensor Boardを使いたい場合がDocker HubのReadme.mdには記載がなかったが
DockerfileにはEXPOSE 6006とあったので、

docker exec -it <コンテナ名> /bin/bash

して

tensorboard --logdir=<tensor Board用データ格納先パス>



もちろんTensorFlowのコートのSession部分最後あたりに

tf.train.SummaryWriter("<tensor Board用データ格納先パス>", sess.graph)

をいれて実行してお行かないと何も覗けない。

2016年8月17日水曜日

TensorFlowのトップページを翻訳してみた



MicrosoftのAzure Machine Learningをかじったので、Google社のApache2.0準拠のOSSであるTensorFlowもトップページだけ翻訳してみた。

翻訳したのが2016/08/17なので既に変わってるかもしれませんが、ヘボい語学力で翻訳したので読みにくいかと思いますが、参照される方はAt your own riskでお願いします。

TensorFlow
https://www.tensorflow.org/

-----

TensorFlow(TM)



「TensorFlowは機械学習のためのオープンソースソフトウェアライブラリです」


TensorFlowについて


TensorFlow(TM:トレードマーク)はデータフローグラフを使った数値計算のためのOSSライブラリです。グラフのノードは数値演算をあらわしており、グラフの辺はノード間で伝達される多次元データ配列(テンソル)をあらわしています。柔軟なアーキテクチャにより1台のデスクトップ、サーバ、もしくは単一のAPIを持つモバイル・デバイス上にある1つ以上のCPUもしくはGPUに計算処理を展開することができます。TensorFlowは当初Googleの人工知能研究組織内のGoogle Brainチームにて活動している研究者と技術者によって機械学習や深層ニューラルネットワークを研究するために開発されていました。しかし、システムは同様に多種多様なその他の領域で適用することは十分に一般的になりました。

データフローグラフとは何?


データフローグラフは、ノードとエッジの有向グラフを使って数値計算を記述します。典型的にノードは数値演算を実装しますが、データ供給、結果のプッシュアウト、既存変数の読み書きのためのエンドポイントも表します。エッジはノード間の入出力関係を表します。これらのデータエッジは動的サイスの多次元データ配列もしくはテンソルを運びます。グラフを通じてのテンソルのフローをあらわすことがTensorFlowの語源です。ノードは計算装置に割り当てられ、非同期で実行し、並行してそれらの入力エッジ上の全てのテンソルが有効になります。

TensorFlowの機能



深い柔軟性


TensorFlowはかたいニュラルネットワークライブラリではありません。もし計算をデータフローグラフで表すことができれば、TensorFlowを使うことができます。グラフを構築し、計算をドライブする内部ループを記述します。ニューラルネットワーク内の一般的なサブグラフを集めるために役に立つツールを提供しますが、ユーザはTensorFlowの上にそれら自身高レベルなライブラリを記述することができます。オペレータの便利で新しい構成の定義はPython関数を記述することと同じくらい簡単で、パフォーマンスにおいて何も犠牲にしません。そして、もし必要とする低レベルデータオペレータがいないのであれば、新しいものを加えるために僅かなC++コードを書いてください。

正しい移植性


TensorFlowはCPUもしくはGPUで動作します。また、デスクトップ、サーバ、もしくは モバイル コンピューティングプラットフォーム上で動作します。特別なハードウェアなしであなたのラップトップ上で機械学習のアイディアで試してみたくありませんか?TensofFlowは、あなたを援護します。コードの改変不要な予め学習されたスケールアップ可能なより早いモデルで?TensofFlowは、あなたを援護します。モバイルで動作するあなたの製品の一部として動作する学習済みモデルをデプロイしたいですか?TensofFlowは、あなたを援護します。クラウド上のサービスとしてモデルを実行させたいという心変わりは?TensofFlowは、あなたを援護します。Dockerコンテナ化してTensorFlowを動かしてみましょう。

研究と製品を結ぶ


機械学習アイディアを研究から製品へと移るために多くのリライトを必要とする日々はさりました。Google社では、TensorFlowで新しいアルゴリズムを実験します、そして、製品チームはTensorFlowを使ってモデルを学習させ、実際の顧客へライブで提供します。TensorFlowを使うことは企業研究者がより早くアイディアを製品化することを援護します。学術研究者がコードを共有し、より直接的により大きな科学的再生産をもたらします。

自動微分


勾配ベースの機械学習アルゴリズムはTensorFlowの自動微分機能から利益を得ます。TensorFlowユーザとして、予測モデルの計算アーキテクチャを定義し、客観的な機能と結合し、データを追加する-TensorFlowは導関数計算をハンドルします。幾つかの値の導関数計算。モデルのその他の値についてはグラフを拡張するため、何が起きているかについて、常に正確に見ることができます。

言語オプション


TensorFlowは、とても使いやすいPythonインターフェイスと、実用的なC++インターフェイスであなたの計算グラフをビルド、実行することができます。スタンドアロンTensorFlow PythonもしくはC++のプログラムを書くか、相互対話型のTensorFlow iPython ノートブックでメモを取り、コードを書き、集めたログを視覚化して試すことができます。これは-SWIGインターフェイスからあなたなお好きな言語へ貢献してもらうための-Go、Java、Lua、JavaScript、やRを使って始めることができます。

パフォーマンス最大化


32個のCPUと4個のカードにありったけの筋肉を使いたい?スレッド、キュー、非同期計算のためのファーストクラスサポートでTensorFlowはあなたの利用できるハードウェアを最大限に活用することができます。あなたのTensorFlowグラフの計算要素を異なるデバイスに自由にわりあててください。そしてコピーをTensorFlowに取り扱わせてください。

誰がTensorFlowを使えるの?


tensorFlowは、学生、研究者、趣味人、ハッカー、エンジニア、開発者、発明家、イノベータ.. Apache2.0 オープンソースライセンス に従えば、誰でも使えます。

Apache2.0 open source license
http://www.apache.org/licenses/LICENSE-2.0

TensofFlowは完全ではありません:機能改善や拡張しようとしています。我々はソースコードの初期リリースを構築し、活発にそれをより良くしています。我々はフィードバックの提供やソースコードの積極的な貢献により機能やライブラリをドライブする活発なオープンソースコミュニティを構築を望んでいます。

なぜGoogleはOSS化したのですか?


もしTensorFlowがとても偉大であるなら、何故所有し続けるよりオープンソース化したのですか?答えはあなたが考えているより簡単:我々は機械学習が製品のイノベートや未来の技術の核となる要素であると信じているからです。この領域の研究はグローバルで成長が早いのですが、標準ツールにかけています。世界中でもっとも優れた機械学習ツールボックスのひとつになると信じて共有化することで、研究アイディアの実現と機械学習製品化のオープンスタンダードを作成したいと願っています。Google技術者はTensorFlowをユーザに直面した製品やサービスに使用します、そして研究グループは研究出版物にそってTensorFlow実装を共有すます。

TensorFlowを始めよう

-----


MicrosoftはCNTKをOSS化しているし、GoogleはTensorFlowをOSS化した。
この2社は上にかいてあるとおり、機械学習のデファクトスタンダード狙いなのはわかった。

対してIBMのWatsonは..OSS化していないとすると..ただのニューラルネットワークじゃないってことだろうな、やっぱり...

2016年8月7日日曜日

IT系認定資格が全く意味のないコトに気づく

Oracle マスターやJava、Siebel、LCP、IBM系など
これまでいくつかのIT系認定試験を受けてきた。


市販本がでているものは購入して勉強したり、
公式トレーニングのテキストの文面に近い文言で
出題されることが比較的多いことがわかってからは
実際に受けさせてもらったり
受講したひとにテキストを借りて勉強したこともあった。

なかでも
既に合格した人に話を聞いて
"ここ勉強しとけよ"
が最強だった。

ただ
この辺りは実はダメなことも知っていた。

大抵の認定試験のポリシーには
受験した人からのフィードバックを禁じている事がほとんどだ。


..でも
つい最近しったのだが
というか
公然の秘密なのかもしれないけど


受験者から聞いた実際に出た問題をあつめてPDFにして販売している
サイトがいくつかあって、
一部は日本語化もされているものあったり、
たとえ日本語化されてなくても購入して翻訳して勉強したりすることで
ほぼ一発で合格できるということを知った。

IT系認定試験のヤミPDF

というやつ。

知ってる奴は
これだけ勉強して
なんなら答えだけ覚えておいて
それだけでとっちゃった
なんて奴もいるらしい..


http://www.killtest.jp/

とか

http://www.testvalue.net/

とか

テストのID番号でGoogleったら英語サイトだけど結構売られてる..


GMOの翻訳サービスとか使えば
翻訳すらしなくてもいい。


金があれば1日暗記するだけで受かるなんて..



...認定資格、意味無いじゃん..


2016年8月5日金曜日

サンプルコード「Amazon Machine Learningによるソーシャルメディアフィルタリング」のREADMEを翻訳してみる




最近巷を賑わせる人工知能を試そうと

Social Media Filtering with Amazon Machine Learning
https://github.com/awslabs/machine-learning-samples/tree/master/social-media
のREADME.mdを翻訳してみました。

勝手翻訳ですので、
参考にする場合は、At your ownでお願いします。

---

Amazon Machine Learningによるソーシャルメディアフィルタリング


Amazon Machine Learningは、企業にとってより良いソーシャルメディア活用を補助します。このアプリケーション例ではツィートを自動的に顧客サポート問題に特定する分析をおこないます。このアプリケーションは、企業のツイッターハンドルに記載されたすべてのツィートを継続的にモニタし、企業の顧客サポートチームが送信者へ接触しようとするかどうかを予測します。機械学習(ML)モデルの活用により、サポートの第一弾としてサポートコストの低減および顧客満足度の向上が可能です。おなじアプリケーションでAmazon Mechanical Turkを使ってAmazon Machine Learning、Amazon Kinesis、AWS Lambda、Amazon Simple Nortification Service(SNS)と組み合わせます。

この例は、以下のステップで動作します:

  •     学習データの集約
  •     Amazon Mechanical Turkを使って学習データをラベル付け
  •     MLモデルを作成
  •     モデルを設定
  •     警句敵モニタリングをセットアップ

ステップ1,2の省略


このリポジトリは最初の2つのステップ(トレーニングデータ集約とラベル付け)の結果例を含んでいるので、もしML動作確認を木にしているのであれば、ステップ3まで飛ばすことができます。ダウンロード可能な@awscloudアカウントから集約しラベル付けされた学習データサンプルはS3の https://aml-sample-data.s3.amazonaws.com/social-media/aml_training_dataset.csv (S3URLは s3://aml-sample-data/social-media/aml_training_dataset.csv )にあります。aml_training_dataset.csv という名前でローカルディレクトリへコピーしてください。これがステップ2のアウトプットです。

自分自身のアプリケーションのためにこのデータ例で学習したモデルを使ってみたくなるかもしれません。しかし、それは推奨しません。MLにおいて、データ品質は最も重要です。自分の顧客を分析するために他の誰かのデータを使うと、あまりよく動作しないでしょう。

ステップ0: 環境のセットアップ


python virtualenv npm node.js パッケージマネージャが必要です。Linux上であれば apt-get コマンドでインストールします:

sudo apt-get update
sudo apt-get install python-virtualenv python-dev libffi-dev npm

インストールしたら、実行してください。

source setup.sh

スクリプトでは npm とpythonの virtualenvを使って必要とする依存関係にあるパッケージと環境変数をカレントシェル内でセットアップします。

次のスクリプトはpython boto ライブラリに依存します。インストラクション を確認して、~/.aws/credentials内のbotoのために証明書をセットアップ方法を確認してください。AWS証明書の取得方法を インストラクション で確認してください。あなたが選択するAWSユーザは、スクリプトを実行する次の方針のサブセットへのアクセスも必要とします:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:*",
                "machinelearning:*",
                "kinesis:*",
                "lambda:*",
                "s3:*",
                "sns:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}


ステップ1: 学習データの集約


学習データを集めるために、次のコマンドを実行してください:

python gather-data.py @awscloud

@awscloud の代わりに企業のツイッターハンドルに変更し、 config.py にツィッターAPI認証情報を設定してください。認証情報の取得方法については https://dev.twitter.com/oauth/overview/application-owner-access-tokens を学習してください。

ここで line_separated_tweets_json.txt というファイルが提供されます、その他のスクリプトは後で読み込まれます。

ステップ2: Mechanical Turk を使ったトレーニンデータのラベル付け


このアプリケーションでは、多くの機械学習アプリケーション同様、人間の振る舞いや操作を模倣するようなMLモデル構築をためそうとします。良いモデルをつくることは、たくさんの人間の選択例を必要とします。これを実行することはたいていオプションですが、実際にはしばしばとても遅いかとても高価になります。教師付き機械学習(Supervised Machine Learning)において、これらのオプションはラベルもしくはモデルのターゲーットと呼ばれています。

Amazon Mechanical Turk (Mturk) は、大量のデータに高速かつ経済的にラベル付けする素晴らしい方法のひとつです。このセクションではプロセスを学びます。

ステップ2a:MTurkによるラベリングのためのツィートの準備


最初のステップは、Twitter API から生JSONデータを取得し、Mechanical Turkが扱えるCSV形式へ変換することです。このコマンドを実行します:

python build-mturk-csv.py

このスクリプトでは line_separated_tweets_json.txt を変換し mturk_unlabeled_dataset.csv へ出力します。

ステップ2b:MTurkジョブ実行


Mechanical Turk コンソールを使って、これらのツィートへラベル割当するためのHuman Intelligence Tasks (HITs) の集合を作成します。Turker はツィートに最もあてはまるラベルを選択するか問われます:

  •     要望(Request)
  •     質問(Question)
  •     問題報告(Problem Report)
  •     怒り(Angry)
  •     上記以外(None of the above (i.e. non-actionable))

これらの異なるカテゴリは、actionable / non-actionable の二つの属性の組から逸脱します。しかしより多くの詳細を求めることは、Turker がより内容に集中させ、同一データを使ってもより洗練されたMLモデルを構築するための機会を励起させることを補助します。

それぞれのツィートにとって、3つの HITsを作成します、このためツィート上の3つの異なる人間の選択間の合意を自動的に解釈することができます。

MTurkを使った学習ラベル生成のための詳細ステップ


    Mechanical Turk を使うためのアカウント作成
    新しいプロジェクトの開始
    オプションから Other を選択し、 Create Project をクリック
    次のページ上でプロパティを入力、(あなたがわからない場合の)推奨値:

  •         Project Name : ツィートへのラベリング
  •         Title : ツィートのカテゴライズ(警告:この HIT はコンテンツ認証を含んでいます)
  •         Description : ツィートを5カテゴリから1にカテゴリ分け
  •         Keywords : tweet(ツィート)、tweets(ツィート群)、categorization(カテゴリ分け)、labeling(ラベル付け)、sentiment(意味)
  •         Checkbox for adult content : コンテンツには攻撃的なツィートも含まれるためチェック付け( 詳細 を確認のこと)
  •         Rewards per assignment : より高い値の場合より早く結果をフェッチすることができます
  •         Number of assignments per HIT : 3
  •         Time allotted per assignment : 2
  •         HIT expires in : 7日
  •         Auto-approve and pay Workers in : 2時間
    デザインレイアウトのためのページ上で、 Source ボタンをクリックしコンテンツを mturk-project-template.xml からカットアンドペースト。プレビューし、フィットすると考えられているように編集してもよい。パラメータ値 ${tweet} とチェックボックス値は後のステップに依存するので編集しないまま残すべきです。
    プレビューしフィニッシュ。この操作によりプロジェクトテンプレートを構築。
    Create New Batch with an Existing Project(既存プロジェクトに新規バッチを構築) へすすむ
    作成したプロジェクトの Publish Batch ボタンを選択
    画面のインストラクションに従ってください。それらの一部として build-mturk-csv.py により提供されているCSVファイルを使います。
    HITs をプレビューし、ラベリングのためのバッチをサブミット(このステップはお金がかかります)

ステップ2c: MTurkからアウトプットを処理


すべての Turk HITs を完成させたら、結果を mturk_labeled_dataset.csv と呼ばれるファイルとしてダウンロードしてください。そして次のスクリプトを実行して、

python build-aml-training-dataset.py

それぞれのツィートの3つのHITレスポンスを二つの値で構成される属性を使って単一のデータセットに変換します。

ステップ3: 機械学習(ML)モデルの作成


CSV形式のラベル付けされた学習データが用意できたら、幾つかのAPIコールが必要となる機械学習モデルの構築をおこないます。そしてそれはこのスクリプトで自動化されています:

python create-aml-model.py aml_training_dataset.csv aml_training_dataset.csv.schema s3-bucket-name s3-key-name

このユーティリティは、binary classification(2値分類)を処理する機械学習モデルを構築します。入力データセットとパラメータ内のファイル名で対応するスキーマ定義が必要です。このユーティリティスクリプトはデータセットを2つのピースに分割します。データセットの70%は学習に使用され、30%は評価のために使用されます。学習と評価が成功すると、AUCにモデルの品質がプリントされます(1.0により近ければ良い)。

ステップ4: モデルの設定


モデルを構築したら、そのモデルがいかに敏感であるべきかを決める必要があります。モデルサマリページはモデルの敏感度合いを変更する設定オプションを提供します。モデルサマリへのリンクは前のステップでツールを実行した時にプリントされます。Amazon ML web コンソールからモデルを調べることも可能です。ここでスコアのしきい値をセットすることができます。低い値にすると多くのツィートがアクション可能として分類されますが、モデルがそうではないものでも何がアクション可能と予測してしまう、より多くの「偽陽性」もあります。逆の場合も同じです。

ステップ5: 継続的モニタリングのセットアップ


継続的モニタリングには次のパーツが必要となります:

  •     TwiiterストリーミングAPIからのツィートのレシーバ
  •     前のレシーバがツィートをプッシュするKinesisストリーム
  •     Kinesisストリームからレコードを処理するLambda関数
  •     入力ツィート上で予測をたてるLambda関数により呼び出されるリアルタイム機械学習エンドポイント
  •     Lambda関数がカスタマサービスからのレスポンスを必要とするツィートの場合に備えて通知をプッシュするためのSNSトピック

    注意:このステップ内でセットアップされるコンポーネント群は 継続してコストが発生 します。詳細はそれぞれの価格設スキームをチェックしてください。


ステップ5a: Kinesis/Lambda/機械学習リアルタイムエンドポイント/SNSのセットアップ


次のKinesis ストリーム、Lambda関数、機械学習リアルタイムエンドポイント、SNSトピックの構築を自動化するスクリプトを使います。

python create-lambda-function.py

このスクリプトはcreate-lambda-function.configが存在し、適切な値を含んでいることが前提となっています。create-lambda-function.config内の前提条件詳細は以下のとおり:

  •     awsAccountId : botoを使った認証に対応するAWSアカウントID。詳細は docs を参照のこと
  •     kinesisStream : Kinesisストリームの名前。制約については docs を参照のこと。
  •     lambdaFunctionName : Lambda関数の名前。制約については docs を参照のこと。
  •     lambdaExecutionRole : Lambda関数が使用する実行ロールの名前。詳細は docs を参照のこと。制約は docs を参照のこと。
  •     mlModelId : ツィート予測を処理する機械学習モデルIDの名前。これはステップ3のパートとして生成されたモデルのIDです。
  •     region : 各サービスのAWSリージョン。詳細は docs を参照のこと。
  •     snsTopic : Simple Notification Serviceで作成されたトピック名。制約は docs を参照のこと。


ステップ5b: 継続的モニタリングテストのセットアップ


このスクリプトの実行が成功すると、Kinesisストリームはツィートデータの受け入れ準備が完了します。次のスクリプトを使ってセットアップ動作のテストをします。

python push-json-to-kinesis.py line_separated_json.txt kinesisStreamName interval

次のパラメータはスクリプト実行に必要です。

  •     line_separated_json.txt : 行分割されたJSONデータを含むファイル
  •     kinesisStreamName : データをプッシュするストリームの名前
  •     interval : Kinesisストリームを呼び出す間隔(ミリ秒)

このスクリプトは、JSONデータを所定のKinesisストリームへプッシュするだけです。このステップと同様に、前のステップで取得した行分割されたツィートJSONデータをテストに再利用します。

ステップ5c: TwitterのストリーミングAPIを使ったツィートのKinesisへのプッシュ


このプロジェクトでは、Twitterの 公式ストリームAPI を使った簡単なフィルタとマッチするKinesisツィートへプッシュするサンプルアプリケーションを含んでいます。製品システムのために、GNIP を動作させてストリームを消費することができます。主題に関する "ブログ投稿:http://support.gnip.com/code/gnip-kinesis-ami.html や OSSコードgithub をごらんください。

ストリーミングをサポートするTwitterライブラリが必要です:
pip install twitter

config.py を編集し、Kinesisパーティション名、Twitterテキストフィルタ
まだやっていないのであれば、Kinesis パーティション名名、あなたが捜したいと思う Twitter テキストフィルタとTwitter認証を加えるために config.py を編集してください。 そして、簡単にサンプルスキャナをコールしてください。
python scanner.py

フィルタにマッチするツィートはリアル多無でKinesisストリームへプッシュします。Lambda関数は機械学習モデルを使ってこれらのツィートを分類し、設定されたSNSトピックへアクション可能と想定されるツィートのリンクつきで通知を送信します。これらの通知を取得する最も簡単な方法はSNSトピックへメールアドレスを 投稿 することです。


----

おどろいたのが、学習データの作成を

Amazon Mechanical Turk

にまかせている所。

これ..APIでコールできるけど、

実際の作業は『中の人』が人力で作業する

という
まさにアマゾンのブラックっぷりを象徴するかのような
悪名高きサービスだ。

サービス名も、
18世紀ころヨーロッパをまわったチェスの自動対戦機械"The Turk"が
実は中の人がはいっていたという話からとっている
ブラック企業ブラックジョークはいていて
笑っていいのかも
もはやわからない..


たしかまだ正式リリースになってないし
日本で使えるかどうかはわからないけど..


すごいねアマゾン、
IT企業であるIBMやGoogleだと多分こんなサービス思いつかないよ
しかも
APIのクセを勉強しなきゃいけなくなってデータサイエンティストが
塩漬けになるのだったら
いっそ『中の人』にまかせちゃえ
という発想がスゴイ..


既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...