gceをtensorflowの「計算エンジン」にする
TRANSCRIPT
ニューラルネット(NN)との関わり
今はやりのディープラーニングは第3次ブーム第2次ブームのバックプロパゲーションの頃にニューラルネットワークやりたくて⼤学に⼊る⼤学でスキーにはまり研究には打ち込まず⽩⾺に移住して現在に⾄る
ディープラーニングをすごくざっくり説明
ディープラーニングはすごく多層でも学習できるバックプロパゲーションバックプロパゲーションは多層でも学習可能なパーセプトロンパーセプトロンは1層だけのニューラルネット
ディープラーニングバックプロパゲーションを単に多層にしてもうまく学習が収束しなかった技術的⼯夫により超多層でも収束するようになったCNN(畳み込みNN)は画像認識でよく使われている
ディープラーニング(CNN)概念図
ディープラーニングの本質的進化は?
当時は今ほどはうまくいかなかったDropout,LeRU(AutoEncoderはCNNでは使われない)などの技術的進化はあった…が本質的進化か?じゃあなにが本質的進化だったのか?
⼤規模ネットワークと⼤規模教師データ
実験できるネットワーク規模がぜんぜん違う学習に使えるCPUパワーが桁違いSPARCstation20-61(60MHz):unixbench10Corei5(1コア-2.6GHz):unixbench1000
⼤量のタグ付き画像データが利⽤できる
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/
インスタンス⽣成時の注意点ゾーン: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
インスタンス毎の学習時間⽐較
TensorFlowのMNISTサンプル10,000epoch学習時間
CPU数 時間(秒) 倍率1 59.207 1.0
4 36.877 1.6
16 26.778 2.2
そんなに画期的に速くはならない…
GoogleCloudMachineLearning(CloudML)
スケーラブルな機械学習プラットフォームTensorFlowを利⽤するGPUで⾼速化されると書かれているただし、まだ「LIMITEDPREVIEW」
TensorProcessingUnit(TPU)
TPUはGoogleが機械学習専⽤に開発したチップAlphaGoもTPUで動かしたらしいCloudMLもTPUでサービスという記事もあったがほんと?