LoginSignup
42
40

More than 5 years have passed since last update.

[AWS]AmazonLinuxの仮想マシンの上にDocker入れて機械学習(TensorFlow)動かす

Posted at

自前の物理環境を用意せずにTensorFlowを動かしたかったので、AWSのmicroインスタンス上に環境を構築した際の手順まとめ。

TensorFlowって?

2015/11/10にGoogleが公開した機械学習技術のライブラリで、サンプルを眺めただけでも以下のような学習機が使えるようだ。
- 手書き文字認識
- リカレントニューラルネットワーク(RNN)
- 畳み込みニューラルネットワーク(CNN)

前提環境

  • AWS EC2 上のVM
  • Amazon Linux AMI 2015.03.1 (HVM), SSD Volume Type - ami-1c1b9f1c
  • Docker 1.7.1
  • Ubuntu 14.04LTS(Docker上のコンテナ)
  • AWSへの登録や仮想マシン登録は終わっている前提

AWS EC2 上のVMにDocker導入

VMにsshでログインし、以下のコマンドを入力すればDockerが導入される。

docker導入~自動起動設定
sudo yum install -y docker
sudo /etc/init.d/docker start
sudo chkconfig docker on
sudo docker -v
 Docker version 1.7.1, build 786b29d/1.7.1

DockerでUbuntu14.04のコンテナ起動

色々Dockerの起動オプションはあるけれど、とりあえず最低限の設定で。

Ubuntu14.04のコンテナ起動
sudo docker run -it ubuntu:14.04 bash

初回の場合、イメージのダウンロードでしばらく時間がかかる。
イメージのダウンロードが終わると、コンテナとしてUbuntuマシンが立ち上がり、以下のようなプロンプトが表示される。
root@5d1402469575:/#

Ubuntu14.04コンテナにTensorFlowインストール

Dockerでコンテナとして起動すると、本当に最低限のパッケージしか入っていないため、通常のUbuntuマシンにインストールするときと比べて手動で導入するものが多いかも。

Python系のインストール

 apt-get update
 apt-get install -y python
 apt-get install -y python-pip
 apt-get install -y python-dev
 python -V
  Python 2.7.6
 pip -V
  pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)

tensorflowモジュールのインストール

pipコマンドで一発。

pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl

TensorFlowでMINSTを試す

チュートリアルとして、機械学習で一般的な手書き文字認識用のデータセット、MINSTを使うPythonプログラムが用意されているため、これを動かしてみる。

gitのインストール

TensorFlowのチュートリアルは、githubで配布されているため、入手のためにまずgitを導入する。

apt-get install -y git
 git version 1.9.1

チュートリアルプロジェクトの入手

git clone --recurse-submodules https://github.com/tensorflow/tensorflow

コードの修正

チュートリアルの説明によれば、'fully_connected_feed.py'を実行すれば良いはずだが、エラーが発生したため、原因となっていたコードを修正。
(後述の「トラブルシュート」に備忘のため発生したエラーの内容を記載しておく)

/tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py
#from tensorflow.g3doc.tutorials.mnist import input_data
#from tensorflow.g3doc.tutorials.mnist import mnist
import input_data
import mnist

MNINSTの実行

cd /tensorflow/tensorflow/g3doc/tutorials/mnist
python fully_connected_feed.py

エラー発生せず動作すると、以下のように学習が進む様子が出力される。

fully_connected_feed.pyの実行結果
Succesfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting data/train-images-idx3-ubyte.gz
Succesfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting data/train-labels-idx1-ubyte.gz
Succesfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting data/t10k-images-idx3-ubyte.gz
Succesfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/t10k-labels-idx1-ubyte.gz
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 1
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 1
Step 0: loss = 2.32 (0.066 sec)
Step 100: loss = 2.14 (0.005 sec)
Step 200: loss = 1.93 (0.005 sec)
Step 300: loss = 1.57 (0.005 sec)
Step 400: loss = 1.32 (0.005 sec)
Step 500: loss = 0.91 (0.005 sec)
Step 600: loss = 0.98 (0.005 sec)
Step 700: loss = 0.65 (0.005 sec)
Step 800: loss = 0.63 (0.005 sec)
Step 900: loss = 0.62 (0.005 sec)
Training Data Eval:
  Num examples: 55000  Num correct: 47233  Precision @ 1: 0.8588
Validation Data Eval:
  Num examples: 5000  Num correct: 4329  Precision @ 1: 0.8658
Test Data Eval:
  Num examples: 10000  Num correct: 8691  Precision @ 1: 0.8691
Step 1000: loss = 0.56 (0.013 sec)
Step 1100: loss = 0.54 (0.108 sec)
Step 1200: loss = 0.51 (0.005 sec)
Step 1300: loss = 0.47 (0.005 sec)
Step 1400: loss = 0.43 (0.005 sec)
Step 1500: loss = 0.59 (0.005 sec)
Step 1600: loss = 0.41 (0.005 sec)
Step 1700: loss = 0.43 (0.005 sec)
Step 1800: loss = 0.37 (0.005 sec)
Step 1900: loss = 0.34 (0.005 sec)
Training Data Eval:
  Num examples: 55000  Num correct: 49217  Precision @ 1: 0.8949
Validation Data Eval:
  Num examples: 5000  Num correct: 4515  Precision @ 1: 0.9030
Test Data Eval:
  Num examples: 10000  Num correct: 9036  Precision @ 1: 0.9036

トラブルシュート

(1)ImportError: No module named g3doc.tutorials.mnistが出る

'fully_connected_feed.py'の内容を修正せずに実行すると、以下のようなエラーが出て途中で停止する。

python fully_connected_feed.py
Traceback (most recent call last):
  File "tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py", line 19, in <module>
    from tensorflow.g3doc.tutorials.mnist import input_data
ImportError: No module named g3doc.tutorials.mnist

(2)TypeError: init() got an unexpected keyword argument 'syntax'が出る

再現性がないが、以下のようなエラーが出て実行が停止したこと有り。

python fully_connected_feed.py 
Traceback (most recent call last):
  File "fully_connected_feed.py", line 15, in <module>
    import tensorflow.python.platform
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/__init__.py", line 4, in <module>
    from tensorflow.python import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/__init__.py", line 13, in <module>
    from tensorflow.core.framework.graph_pb2 import *
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/core/framework/graph_pb2.py", line 16, in <module>
    from tensorflow.core.framework import attr_value_pb2 as tensorflow_dot_core_dot_framework_dot_attr__value__pb2
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/core/framework/attr_value_pb2.py", line 16, in <module>
    from tensorflow.core.framework import tensor_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__pb2
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/core/framework/tensor_pb2.py", line 16, in <module>
    from tensorflow.core.framework import tensor_shape_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__shape__pb2
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/core/framework/tensor_shape_pb2.py", line 22, in <module>
    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'というPythonモジュールのバージョンが古いため発生していた模様。再インストールにより解消。

python
>>> import google.protobuf
>>> print google.protobuf.__version__
3.0.0a1

TensorFlowを動かすためには、3.0.0a4以上でないとダメ。
protobufを再インストールする

pip uninstall protobuf
pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
42
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
40