GCEをTensorFlowの
「計算エンジン」にする
⾃⼰紹介
さとうきよし
有限会社ジーワークス
⽩⾺在住
ニューラルネット(NN)
との関わり
今はやりのディープラーニングは第3次ブーム
第2次ブームのバックプロパゲーションの頃にニューラル
ネットワークやりたくて⼤学に⼊る
⼤学でスキーにはまり研究には打ち込まず⽩⾺に移住し
て現在に⾄る
こんなことを話します
Google	Compute	Engine(GCE)でTensorFlowを使うと
gcloudコマンドのおかげで
Googleの速いマシンが⼿元にある気分で使えるよ
ディープラーニングを
すごくざっくり説明
ディープラーニングはすごく多層でも学習できる
バックプロパゲーション
バックプロパゲーションは多層でも学習可能な
パーセプトロン
パーセプトロンは1層だけのニューラルネット
パーセプトロンてなに?
ニューロンという神経細胞モデルで脳をモデル化
最初期のニューラルネットワーク
基本的な学習⽅法はディープラーニングもだいたい同じ
バックプロパゲーション
パーセプトロンを多層にしても学習可能にした
教師信号が出⼒層から⼊⼒層へ向かって伝搬していくの
でバックプロパゲーションと呼ばれる
バックプロパゲーション概念図
ディープラーニング
バックプロパゲーションを単に多層にしてもうまく学習
が収束しなかった
技術的⼯夫により超多層でも収束するようになった
CNN(畳み込みNN)は画像認識でよく使われている
ディープラーニング(CNN)概念図
ネオコグニトロン
第2時ブームの時すでに存在してた多層NN
CNNの先祖と⾔われている
ネオコグニトロンと現在のCNNの違いは?
実はほとんど違いがない
ネオコグニトロン概念図
ディープラーニングの
本質的進化は?
当時は今ほどはうまくいかなかった
Dropout,	LeRU	(AutoEncoderはCNNでは使われない)
などの技術的進化はあった
…が本質的進化か?
じゃあなにが本質的進化だったのか?
⼤規模ネットワークと
⼤規模教師データ
実験できるネットワーク規模がぜんぜん違う
学習に使えるCPUパワーが桁違い
SPARCstation20-61	(60MHz)	:	unixbench	10
Corei5	(1コア-2.6GHz)	:	unixbench	1000
⼤量のタグ付き画像データが利⽤できる
巨⼤なネットワークで
⼤規模データを
学習させてこその
ディープラーニング
⾼速化
学習には⾮常にCPUパワーが必要
結果を出すだけなら実は軽い
並列化と⼤変相性が良い
マルチCPUやGPUを使って学習を⾼速化する
TensorFlowとは
TensorFlowはGoogle製の機械学習ライブラリ
Pythonから利⽤する
汎⽤のTensor(⾏列)演算ライブラリ
マルチCPUやGPUをそのままで活⽤できる
Google	Compute	Engineとは
Google	Compute	Engine(GCE)はGCP版のEC2
安い
プリエンプティブでさらに安い(7割引き)
速い
最低10分で1分きざみ
VMの起動時間が短い
gcloudコマンドで操作出来るのがすごく良い
GCEと他との⽐較
サービス名 unixbench ⽉額
GCEスタンダード	(n1-standard-1) 1640 $26
EC2	(m3.medium) 920 $26
Azure	(Standard	A1) 680 $29
EC2	(GPU+32CPU	オンデマンド) $1872
GCE	(32CPU	⾮プリエンプティブ) $622
(参考)	http://www.apps-gcp.com/cloud-bench-20160705/
GCEは「Compute	Engine」
と⾔うだけあって
計算⽤途と相性が良い
GCEを使えるようにする
Googleアカウントの準備
Google	Developer	Consoleへのアクセス
Compute	Engineからプロジェクトの作成
住所⽒名やクレジットカード情報の登録
インスタンス⽣成時の注意点
ゾーン:us-east1-b
usだと値段が安い
マシンタイプ:vCPUx1	($25.95/⽉)
ブートディスク:Ubuntu	16.04	LTS
TensorFlowが簡単に⼊る
可⽤性ポリシー:プリエンプティブ(オン)
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.
$ 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 list
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
tensorflow-1 us-east1-b n1-standard-1 10.142.0.2 TERMINATE
tensorflow-2 us-east1-b n1-standard-1 10.142.0.3 TERMINATE
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操作アプリ
Google	Cloud	Console
スマホ⽤アプリからもGoogle	Cloud	Platformの操作が可
能
インスタンスの状況確認やスタート・ストップが可能
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
$ 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 mnist
import input_data
import 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.tfexample
tensorflow-4.us-east1-b.tfexample
tensorflow-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インスタンスとの
⽐較
AWS	GPUインスタンスでは7〜8倍になる
やっぱGPUのほうが速い
GCEはGPUインスタンスが「ない」
やっぱAWSのほうが
いいんでは…?
Google	Cloud	Machine	Learning
(Cloud	ML)
スケーラブルな機械学習プラットフォーム
TensorFlowを利⽤する
GPUで⾼速化されると書かれている
ただし、まだ「LIMITED	PREVIEW」
Tensor	Processing	Unit
(TPU)
TPUはGoogleが機械学習専⽤に開発したチップ
AlphaGoもTPUで動かしたらしい
Cloud	MLもTPUでサービスという記事もあったがほん
と?
きっとCloud	ML始まったら
めちゃ速いはず!
(…と期待)
まとめ
機械学習はとりあえずTensorFlowベースで書いとくのが
良さそう
gcloudコマンドのおかげで⼿元に速いマシンがある気分
で学習させられる
早くCloud	ML使えるようになるといいなあ

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