gceをtensorflowの「計算エンジン」にする

40
GCETensorFlow「計算エンジン」にする

Upload: kiyoshi-satoh

Post on 23-Jan-2017

772 views

Category:

Technology


0 download

TRANSCRIPT

GCEをTensorFlowの「計算エンジン」にする

⾃⼰紹介さとうきよし有限会社ジーワークス⽩⾺在住

ニューラルネット(NN)との関わり

今はやりのディープラーニングは第3次ブーム第2次ブームのバックプロパゲーションの頃にニューラルネットワークやりたくて⼤学に⼊る⼤学でスキーにはまり研究には打ち込まず⽩⾺に移住して現在に⾄る

こんなことを話しますGoogleComputeEngine(GCE)でTensorFlowを使うと

gcloudコマンドのおかげでGoogleの速いマシンが⼿元にある気分で使えるよ

ディープラーニングをすごくざっくり説明

ディープラーニングはすごく多層でも学習できるバックプロパゲーションバックプロパゲーションは多層でも学習可能なパーセプトロンパーセプトロンは1層だけのニューラルネット

パーセプトロンてなに?ニューロンという神経細胞モデルで脳をモデル化最初期のニューラルネットワーク基本的な学習⽅法はディープラーニングもだいたい同じ

バックプロパゲーションパーセプトロンを多層にしても学習可能にした教師信号が出⼒層から⼊⼒層へ向かって伝搬していくのでバックプロパゲーションと呼ばれる

バックプロパゲーション概念図

ディープラーニングバックプロパゲーションを単に多層にしてもうまく学習が収束しなかった技術的⼯夫により超多層でも収束するようになったCNN(畳み込みNN)は画像認識でよく使われている

ディープラーニング(CNN)概念図

ネオコグニトロン第2時ブームの時すでに存在してた多層NNCNNの先祖と⾔われているネオコグニトロンと現在のCNNの違いは?実はほとんど違いがない

ネオコグニトロン概念図

ディープラーニングの本質的進化は?

当時は今ほどはうまくいかなかったDropout,LeRU(AutoEncoderはCNNでは使われない)などの技術的進化はあった…が本質的進化か?じゃあなにが本質的進化だったのか?

⼤規模ネットワークと⼤規模教師データ

実験できるネットワーク規模がぜんぜん違う学習に使えるCPUパワーが桁違いSPARCstation20-61(60MHz):unixbench10Corei5(1コア-2.6GHz):unixbench1000

⼤量のタグ付き画像データが利⽤できる

巨⼤なネットワークで⼤規模データを学習させてこそのディープラーニング

⾼速化学習には⾮常にCPUパワーが必要結果を出すだけなら実は軽い並列化と⼤変相性が良いマルチCPUやGPUを使って学習を⾼速化する

TensorFlowとはTensorFlowはGoogle製の機械学習ライブラリPythonから利⽤する汎⽤のTensor(⾏列)演算ライブラリマルチCPUやGPUをそのままで活⽤できる

GoogleComputeEngineとはGoogleComputeEngine(GCE)はGCP版のEC2安いプリエンプティブでさらに安い(7割引き)速い最低10分で1分きざみVMの起動時間が短いgcloudコマンドで操作出来るのがすごく良い

GCEと他との⽐較サービス名 unixbench ⽉額GCEスタンダード(n1-standard-1) 1640 $26

EC2(m3.medium) 920 $26

Azure(StandardA1) 680 $29

EC2(GPU+32CPUオンデマンド) $1872

GCE(32CPU⾮プリエンプティブ) $622

(参考)http://www.apps-gcp.com/cloud-bench-20160705/

GCEは「ComputeEngine」と⾔うだけあって計算⽤途と相性が良い

GCEを使えるようにするGoogleアカウントの準備GoogleDeveloperConsoleへのアクセスComputeEngineからプロジェクトの作成住所⽒名やクレジットカード情報の登録

インスタンス⽣成時の注意点ゾーン:us-east1-busだと値段が安いマシンタイプ:vCPUx1($25.95/⽉)ブートディスク:Ubuntu16.04LTSTensorFlowが簡単に⼊る可⽤性ポリシー:プリエンプティブ(オン)24時間しかもたないインスタンスだが7割安!

インスタンスの⽣成「作成」ボタンを押すと⽣成されるだいたい20〜30秒ほどで起動「接続」のカラムの「SSH」を押すとブラウザの別ウィンドウが開いてその中でSSHのコンソールが動くユーザはGoogleアカウント名で勝⼿に作られるので注意

gcloudとはローカルのコンソール上からGCEを操作出来るコマンドツールvagrantでVMを扱っているような気軽さでGCEを使えるので⼤変便利Linux/Mac/Windowsのどの環境からでも利⽤できる

gcloudコマンドのインストール

環境にあったファイルをダウンロードしてインストール$ wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-115.0.0-linux-x86_64.tar.gz$ tar -zxf google-cloud-sdk-115.0.0-linux-x86_64.tar.gz$ google-cloud-sdk/install.sh$ source .bashrc

Googleアカウントのひも付けgcloudコマンドでどのGoogleアカウントに対して操作を⾏なうかひも付けるブラウザが開いてGoogleアカウント選択画⾯になる選択するとそのアカウントとひも付け設定が保存$ gcloud auth login

gcloudのデフォルト設定gcloudコマンドで使うデフォルトのプロジェクトとゾーン指定$ gcloud config set project tfexample$ gcloud config set compute/zone us-east1-b

稼働してるインスタンスの確認

$ gcloud compute instances listNAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUStensorflow-1 us-east1-b n1-standard-1 10.142.0.2 TERMINATEDtensorflow-2 us-east1-b n1-standard-1 10.142.0.3 TERMINATED

gcloudコマンドでのインスタンスの稼働

GCEコンソール最終⾏の「同等のRESTまたはコマンドライン」から「コマンドライン」を選択「gcloudコマンドライン」が表⽰されるのでこれをコンソールにコピペして実⾏$ gcloud compute instances start tensorflow-1$ gcloud compute instances stop tensorflow-1

gcloudコマンドからssh接続現在のログイン名のユーザが勝⼿に作られますこれは最初だいぶびっくりしますがGCEではそういうもんだ、と思うことにしました$ gcloud compute ssh tensorflow-1

通常のsshコマンドで接続「config-ssh」で現在起動しているインスタンスへのssh接続設定が「.ssh/config」に作られる$ gcloud compute config-ssh

FQDN名は【インスタンス名】.【ゾーン名】.【プロジェクト名】scpやansibleも普通に使える!$ ssh tensorflow-1.us-east1-b.tfexample

GCP操作アプリGoogleCloudConsoleスマホ⽤アプリからもGoogleCloudPlatformの操作が可能インスタンスの状況確認やスタート・ストップが可能sshも可能だからトラブル発⽣時に出先から対応ができそう

TensorFlowのインストールpython環境を整える

$ sudo apt-get install python-pip python-dev

TensorFlowを⼊れる$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl$ sudo pip install --upgrade $TF_BINARY_URL

MNISTを学習させてみるチュートリアルのファイルを持ってくる

$ git clone https://github.com/tensorflow/tensorflow$ cd tensorflow/tensorflow/g3doc/tutorials/mnist

fully_connected_feed.pyを修正#from tensorflow.examples.tutorials.mnist import input_data#from tensorflow.examples.tutorials.mnist import mnistimport input_dataimport mnist

MNIST学習実⾏$ python fully_connected_feed.py

ansibleで学習⾃動化mnist.yml

- hosts: targets user: tfuser tasks: - shell: python mnist/fully_connected_feed.py > mnist.log - fetch: src=mnist.log dest=logs

hosts

[targets]tensorflow-1.us-east1-b.tfexampletensorflow-4.us-east1-b.tfexampletensorflow-16.us-east1-b.tfexample

ansibleで⼀気に実⾏$ ansible-playbook -i hosts mnist.yml

Google様のマシンが⾃分ちにある気分!

インスタンス毎の学習時間⽐較

TensorFlowのMNISTサンプル10,000epoch学習時間

CPU数 時間(秒) 倍率1 59.207 1.0

4 36.877 1.6

16 26.778 2.2

そんなに画期的に速くはならない…

EC2のGPUインスタンスとの⽐較

AWSGPUインスタンスでは7〜8倍になるやっぱGPUのほうが速いGCEはGPUインスタンスが「ない」

やっぱAWSのほうがいいんでは…?

GoogleCloudMachineLearning(CloudML)

スケーラブルな機械学習プラットフォームTensorFlowを利⽤するGPUで⾼速化されると書かれているただし、まだ「LIMITEDPREVIEW」

TensorProcessingUnit(TPU)

TPUはGoogleが機械学習専⽤に開発したチップAlphaGoもTPUで動かしたらしいCloudMLもTPUでサービスという記事もあったがほんと?

きっとCloudML始まったらめちゃ速いはず!(…と期待)

まとめ機械学習はとりあえずTensorFlowベースで書いとくのが良さそうgcloudコマンドのおかげで⼿元に速いマシンがある気分で学習させられる早くCloudML使えるようになるといいなあ