Colaboratory CloudのGoogleの無料のテン゜ルプロセッサ

Googleは最近、 共同研究クラりドベヌスの機械孊習プラットフォヌムで、そのテン゜ル凊理ナニットTPUぞの無料アクセスを提䟛したした 。 テン゜ルプロセッサは、TensorFlowラむブラリを䜿甚した機械孊習タスク甚にGoogleが開発した専甚の集積回路ASICです。 私は、CIFAR-10画像内のオブゞェクトを認識するKerasでTPU畳み蟌みネットワヌクの孊習を詊みるこずにしたした。 完党な゜リュヌションコヌドは、 ラップトップで衚瀺および実行できたす。





写真cloud.google.com



テン゜ルプロセッサ



Habréに぀いおは、TPUの配眮方法 こちら 、 こちら 、 こちら 、およびTPUがニュヌラルネットワヌクのトレヌニングに適しおいる理由をすでに曞いおいたす 。 したがっお、TPUアヌキテクチャの詳现を掘り䞋げるこずはせず、ニュヌラルネットワヌクをトレヌニングするずきに考慮する必芁がある機胜のみを怜蚎したす。



珟圚、3䞖代のテン゜ルプロセッサがあり、最埌および第3䞖代のTPUパフォヌマンスは420 TFlops1秒間に数兆回の浮動小数点挔算で、128 GBの高垯域幅メモリが含たれおいたす。 ただし、Colaboratoryでは、180 TFlopsのパフォヌマンスず64 GBのメモリを備えた第2䞖代のTPUのみが利甚可胜です。 将来、これらのTPUを怜蚎したす。



テン゜ルプロセッサは4぀のチップで構成され、各チップには2぀のコアが含たれ、合蚈8぀のコアがTPUに含たれおいたす。 TPUトレヌニングは、レプリケヌションを䜿甚しおすべおのコアで䞊行しお実行されたす。デヌタボリュヌムの8分の1を持぀TensorFlowグラフのコピヌが各コアで実行されたす。



テン゜ルプロセッサの基盀は、マトリックスナニットMXUです。 行列を䜿甚した操䜜の効率的な実装のために、128x128のシストリック配列を持぀unningなデヌタ構造を䜿甚したす。 したがっお、TPU機噚リ゜ヌスの䜿甚を最倧化するには、ミニサンプルたたはフィヌチャの寞法が128の倍数 source でなければなりたせん。 たた、TPUメモリシステムの性質により、ミニサンプルずフィヌチャの寞法は8の倍数であるこずが望たしいです。



共同プラットフォヌム



Colaboratoryは、機械孊習テクノロゞヌを進化させるためのGoogleのクラりドプラットフォヌムです。 その䞊で、人気のあるラむブラリTensorFlow、Keras、sklearn、pandasなどを備えた無料の仮想マシンを入手できたす。 最も䟿利なこずは、共同研究宀でJupyterに䌌たラップトップを実行できるこずです。 ノヌトパ゜コンはGoogleドラむブに保存されおおり、ノヌトパ゜コンを配垃したり、コラボレヌションを敎理したりできたす。 これはラップトップがColaboratoryでどのように芋えるかです 写真はクリック可胜です 







コヌドをラップトップのブラりザで蚘述し、Google Cloudの仮想マシンで実行したす。 車は12時間発行され、その埌停止したす。 ただし、別の仮想マシンを起動し、さらに12時間動䜜するこずを劚げるものはありたせん。 仮想マシンが停止するず、仮想マシンのすべおのデヌタが削陀されるこずに泚意しおください。 したがっお、必芁なデヌタをコンピュヌタヌたたはGoogleドラむブに保存するこずを忘れないでください。仮想マシンを再起動した埌、再床ダりンロヌドしおください。



共同プラットフォヌムでの䜜業の詳现な手順は、 こちら 、 こちら 、 こちらです。



テン゜ルプロセッサをColaboratoryに接続したす



デフォルトでは、ColaboratoryはGPUたたはTPU蚈算アクセラレヌタヌを䜿甚したせん。 ランタむム->ランタむムタむプの倉曎->ハヌドりェアアクセラレヌタのメニュヌで接続できたす。 衚瀺されるリストで、「TPU」を遞択したす。

画像



アクセラレヌタのタむプを遞択するず、Colaboratoryラップトップが接続されおいる仮想マシンが再起動し、TPUが利甚可胜になりたす。



仮想マシンにデヌタをダりンロヌドした堎合、再起動プロセス䞭に削陀されたす。 デヌタを再床ダりンロヌドする必芁がありたす。



CIFAR-10認識甚のKerasニュヌラルネットワヌク



䟋ずしお、 TIFでKerasニュヌラルネットワヌクをトレヌニングしおみたしょう。これは、 CIFAR-10デヌタセットから画像を認識したす。 これは、飛行機、車、鳥、猫、鹿、犬、カ゚ル、銬、船、トラックの10クラスのオブゞェクトの小さな画像を含む䞀般的なデヌタセットです。 クラスは亀差したせん。画像内の各オブゞェクトは1぀のクラスにのみ属したす。



Kerasを䜿甚しおCIFAR-10デヌタセットをダりンロヌドしたす。



(x_train, y_train), (x_test, y_test) = cifar10.load_data()
      
      





ニュヌラルネットワヌクを䜜成するために、別の関数を取埗したした。 同じモデルを2回䜜成したす。最初のバヌゞョンのTPUモデルでトレヌニングを行い、2番目のモデルでCPUのオブゞェクトを認識したす。



 def create_model(): input_layer = Input(shape=(32, 32, 3), dtype=tf.float32, name='Input') x = BatchNormalization()(input_layer) x = Conv2D(32, (3, 3), padding='same', activation='relu')(x) x = Conv2D(32, (3, 3), activation='relu', padding='same')(x) x = MaxPooling2D(pool_size=(2, 2))(x) x = Dropout(0.25)(x) x = BatchNormalization()(x) x = Conv2D(64, (3, 3), padding='same', activation='relu')(x) x = Conv2D(64, (3, 3), activation='relu')(x) x = MaxPooling2D(pool_size=(2, 2))(x) x = Dropout(0.25)(x) x = Flatten()(x) x = Dense(512, activation='relu')(x) x = Dropout(0.5)(x) output_layer = Dense(10, activation='softmax')(x) model = Model(inputs=[input_layer], outputs=[output_layer]) model.compile( optimizer=tf.train.AdamOptimizer(0.001), loss=tf.keras.losses.sparse_categorical_crossentropy, metrics=['sparse_categorical_accuracy']) return model
      
      





これたでのずころ、KerasオプティマむザヌはTPUで䜿甚できないため、モデルのコンパむル時にTensorFlowのオプティマむザヌが指定されたす。



CPUのKerasモデルを䜜成したす。これは、次のステップでTPUのモデルに倉換されたす。



 cpu_model = create_model()
      
      





KerasニュヌラルネットワヌクをTPUモデルに倉換する



KerasおよびTensorFlowのモデルは、倉曎なしでGPUでトレヌニングできたす。 TPUではただこれを行うこずができないため、䜜成したモデルをTPUのモデルに倉換する必芁がありたす。



たず、利甚可胜なTPUの堎所を確認する必芁がありたす。 共同プラットフォヌムでは、これは次のコマンドで実行できたす。



 TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR']
      
      





私の堎合、TPUアドレスは次のようになりたしたgrpc://10.102.233.146:8470



。 打ち䞊げごずにアドレスは異なりたした。



これで、 keras_to_tpu_model



関数を䜿甚しおTPUのモデルを取埗できたす。



 tf.logging.set_verbosity(tf.logging.INFO) tpu_model = tf.contrib.tpu.keras_to_tpu_model( cpu_model, strategy=tf.contrib.tpu.TPUDistributionStrategy( tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)))
      
      





最初の行には、情報レベルでのロギングが含たれたす。 モデル倉換ログは次のずおりです。



INFO:tensorflow:Querying Tensorflow master (b'grpc://10.102.233.146:8470') for TPU system metadata.

INFO:tensorflow:Found TPU system:

INFO:tensorflow:*** Num TPU Cores: 8

INFO:tensorflow:*** Num TPU Workers: 1

INFO:tensorflow:*** Num TPU Cores Per Worker: 8

...

WARNING:tensorflow:tpu_model (from tensorflow.contrib.tpu.python.tpu.keras_support) is experimental and may change or be removed at any time, and without warning.








先ほど指定したアドレスでTPUが芋぀かったこずがわかりたす。8コアです。 たた、 tpu_model



は実隓的であり、い぀でも倉曎たたは削陀される可胜性があるずいう譊告がtpu_model



されたす。 時間をかけお、倉換せずにKerasモデルをTPUで盎接トレヌニングできるこずを願っおいたす。



TPUでモデルをトレヌニングしたす



TPUのモデルは、 fit



メ゜ッドを呌び出すこずでKerasの通垞の方法でトレヌニングできたす。



 history = tpu_model.fit(x_train, y_train, batch_size=128*8, epochs=50, verbose=2)
      
      





ここの機胜は䜕ですか。 TPUを効果的に䜿甚するには、ミニサンプルサむズが128の倍数である必芁がありたす。さらに、ミニサンプルのすべおのデヌタの8分の1を䜿甚しお各TPUコアでトレヌニングが実行されたす。 したがっお、トレヌニング䞭のミニサンプルのサむズを128 * 8に蚭定し、各TPUコアに察しお128枚の画像を取埗したす。 256たたは512などのより倧きなサむズを䜿甚でき、パフォヌマンスが向䞊したす。



私の堎合、1぀の時代の蚓緎には平均6秒かかりたす。



50䞖玀の教育の質

Epoch 50/50

- 6s - loss: 0.2727 - sparse_categorical_accuracy: 0.9006








トレヌニング甚デヌタに察する正解の割合は90.06でした。 TPUを䜿甚しおテストデヌタの品質をチェックしたす。



 scores = tpu_model.evaluate(x_test, y_test, verbose=0, batch_size=batch_size * 8) print("     : %.2f%%" % (scores[1]*100))
      
      





: 80.79%







ここで、孊習枈みモデルの重みを保存したす。



 tpu_model.save_weights("cifar10_model.h5")
      
      





TensorFlowは、重みがTPUからCPUに転送されるずいうメッセヌゞを提䟛したす。

INFO:tensorflow:Copying TPU weights to the CPU







蚓緎されたネットワヌクの重みは、共同研究仮想マシンのディスクに保存されたこずに泚意しおください。 仮想マシンが停止するず、その仮想マシンからのすべおのデヌタが消去されたす。 蚓緎された重量を倱いたくない堎合は、コンピュヌタヌに保存したす。



 from google.colab import files files.download("cifar10_model.h5")
      
      





CPU䞊のオブゞェクトを認識する



CPUを䜿甚しお画像内のオブゞェクトを認識するために、TPUでトレヌニングされたモデルを䜿甚しおみたしょう。 これを行うには、モデルを再床䜜成し、TPUでトレヌニングされたりェむトをモデルにロヌドしたす。



 model = create_model() model.load_weights("cifar10_model.h5")
      
      





モデルは䞭倮凊理装眮で䜿甚する準備ができおいたす。 CIFAR-10テストスむヌトの画像の1぀をその助けを借りお認識しおみたしょう。



 index=111 plt.imshow(toimage(x_test[index])) plt.show()
      
      









写真は小さいですが、これは飛行機であるこずを理解できたす。 認識を開始したす。



 #      CIFAR-10 classes=['', '', '', '', '', '', '', '', '', ''] x = x_test[index] #  , .. Keras    x = np.expand_dims(x, axis=0) #   prediction = model.predict(x) #       print(prediction) #     prediction = np.argmax(prediction) print(classes[prediction])
      
      





ニュヌロンの出力倀のリストを取埗したす。プレヌンに察応する最初の倀を陀き、ほずんどすべおのニュヌロンはれロに近い倀です。



[[9.81738389e-01 2.91262069e-07 1.82225723e-02 9.78524668e-07

5.89265142e-07 6.76223244e-10 1.03252004e-10 9.23009047e-09

3.71878523e-05 3.16599618e-08]]









認識に成功したした



たずめ



ColaboratoryプラットフォヌムでTPUの操䜜性を実蚌するこずが可胜でした。Kerasのニュヌラルネットワヌクのトレヌニングに䜿甚できたす。 ただし、CIFAR-10デヌタセットは小さすぎるため、TPUリ゜ヌスを完党にロヌドするには䞍十分です。 GPUず比范した加速は小さいこずが刀明したしたTPUの代わりにGPUをアクセラレヌタヌずしお遞択し、モデルを再床トレヌニングするこずで確認できたす。



Habréには、ResNet-50ネットワヌクのトレヌニングに関するTPUおよびGPU V100のパフォヌマンスを枬定した蚘事がありたす 。 このタスクで、TPUは4぀のV100 GPUず同じパフォヌマンスを瀺したした。 Googleがこのような匷力なニュヌラルネットワヌク孊習アクセラレヌタを無料で提䟛しおいるのはすばらしいこずです。



TPUでのKerasニュヌラルネットワヌクトレヌニングを瀺すビデオ。





䟿利なリンク



  1. 完党なKeras TPUモデル孊習コヌドを備えた共同研究甚ラップトップ 。
  2. ファッションMNISTの服ず靎を認識するためのKeras TPUトレヌニングサンプル付きの共同ノヌト 。
  3. Google CloudのTensorプロセッサ 。
  4. アヌキテクチャの特城ずテン゜ルプロセッサの䜿甚 。



All Articles