KerasでTPUを使ってトレーニングをする

こんにちは、GMOアドマーケティングのS.Rです。

Googleが開発しているTPUをご存知ですか?TPUはディープラーニングを高速化するため、Googleが開発したプロセッサです。TPUでディープラーニングのモデルのトレーニング時間は20倍以上の改良が可能です。2018年9月26日にColabというGoogleが提供されている、 機械学習のオンラインノートサービスでTPUインスタンスの無料提供を始めました。今回はColabでTPUを利用する方法を投稿させていただきます。本記事中の図説は、筆者が自らの環境で作成したものを含みます。

1 Colabのインスタンスを作る

Colabの利用を始める最初のStepは、Colabのファイルを作ります。Google Driveの管理画面へ遷移し、新しいColabのファイルを作ります(図1)。

図1: Colabのインステンスを作る

2 TPUを設定する

作成されたファイルのメニューのRuntimeをクリックし、ポップアップメニューからchange runtime typeをクリックします。Notebook settings画面でHardware acceleratorでTPUを選択します。

3 TPUとCPU,GPUの計算力の比較

3.1 スペックの比較

現在のサーバーによく使われるCPUとGPUのスッペグ情報とTPUの公式サイトよりTPUとCPU,GPUの計算力の比較図を作ってみました。計測単位はTFLOPS(浮動小数点演算を1秒間に1兆回行うことを表す単位)です。

図3:TPUとCPU,GPUの計算力

3.2 実戦でBenchmark

図3から見るとTPUの計算力はGPUの計算力10倍以上ですが実際の運用する時は本当にそんなに早くなるのでしょうか?早速例を使って実際のPerformanceをbenchmarkしてみます。

3.2.1 Library

今回は下記のディープラーニングのツールまたはライブラリを利用してました。

  • Tensorflow

ディープラーニングに対応しており、Googleの各種サービスなどでも広く活用されている。 2017年2月15日に TensorFlow 1.0 がリリースされた。 対応プログラミング言語はC言語、C++、Python、Java、Go。 対応OSは64ビットのLinux(ただしバイナリ配布はUbuntu用)、macOS、Windows。ハードウェアは CPU、NVIDIA GPU、Google TPU、Snapdragon Hexagon DSP などに対応していて、Android Neural Networks API 経由で Android 端末のハードウェアアクセラレータも使用できる。 (TensorFlow、 2018年6月22日、ウィキペディア日本語版、https://ja.wikipedia.org/wiki/TensorFlow#%E6%A6%82%E8%A6%81

  • Keras

Kerasの公式より下記の紹介があります。

Kerasは,Pythonで書かれた,TensorFlowまたはCNTK,Theano上で実行可能な高水準のニューラルネットワークライブラリです。 Kerasは,迅速な実験を可能にすることに重点を置いて開発されました。 アイデアから結果に到達するまでのリードタイムをできるだけ小さくすることが、良い研究をするための鍵になります。(Keras: Pythonの深層学習ライブラリ、https://keras.io/ja/

 

3.2.2 ソースコード:

MNISTのデータ使ってマルチTPUを利用する例を作ってみました。MNISTは手書き数字画像(図4)70000枚を集めた画像データセットになります, 60000枚は学習データ、10000枚がテストデータになっています。

図4:MNISTの画像例

 

Step1 : 使ってるLibarayをImportします:

Step2:MINISTのデータをダウンロードします:

Step3:Kerasのモデルをbuildする:

Step4:TPUを初期化する:

Step5:TPUのモデルを作る:

Step6:モデルをfitする:

Step7:インスタンスをGPUに変更する:

図5: インステンスをGPUに変更する

Step8:GPUモデルをfitする:

step3のコードでモデルを作ってモデルをFitする。

実行時間:

下記の表はGPUとTPUでモデルをフィッティング時間です。この表から見るとTPUで同じモデルをフィッティングする時間が56%を軽減できます。

Device 実行時間
TPU 195s
GPU 443s

4まとめ

今回はTPUでモデルをトレーニングするの一例を紹介しました。いかがでしたでしょうか。

基本的に高い計算力を使うと、モデルの精度、作成速度が改善できます。もし今回のブログが皆さんのディープラーニング モデルの実装にお役に立てば幸いです。