Commutez automatiquement TPU / GPU / CPU avec le modèle Tensorflow.Keras

introduction

Cet article décrit comment écrire un programme capable de lire des informations sur le matériel (principalement des informations d'exécution Colaboratory) et de basculer automatiquement entre TPU et GPU (y compris le processeur) lors de l'utilisation de TensorFlow.keras. C'est résumé. ~~ (Parce qu'il est devenu difficile de commenter manuellement) ~~

Généralement, MNIST avec Keras et TPU publié sur Site officiel (Google Cloud, Cloud TPU Docs) /github/tensorflow/tpu/blob/master/tools/colab/keras_mnist_tpu.ipynb) est résumé. Si vous connaissez tensorflow.keras, il peut être plus facile de lire la source de référence.

Suppléments, mises en garde, etc.

Code qui bascule automatiquement entre TPU / GPU / CPU

#Obtenir des informations sur le matériel
import tensorflow as tf

try:
  tpu = tf.distribute.cluster_resolver.TPUClusterResolver() # TPU detection
except ValueError:
  tpu = None
  gpus = tf.config.experimental.list_logical_devices("GPU")

if tpu:
  tf.tpu.experimental.initialize_tpu_system(tpu)
  strategy = tf.distribute.experimental.TPUStrategy(tpu, steps_per_run=128) # Going back and forth between TPU and host is expensive. Better to run 128 batches on the TPU before reporting back.
  print('Running on TPU ', tpu.cluster_spec().as_dict()['worker'])
elif len(gpus) > 1:
  strategy = tf.distribute.MirroredStrategy([gpu.name for gpu in gpus])
  print('Running on multiple GPUs ', [gpu.name for gpu in gpus])
elif len(gpus) == 1:
  strategy = tf.distribute.get_strategy() # default strategy that works on CPU and single GPU
  print('Running on single GPU ', gpus[0].name)
else:
  strategy = tf.distribute.get_strategy() # default strategy that works on CPU and single GPU
  print('Running on CPU')
print("Number of accelerators: ", strategy.num_replicas_in_sync)


#Avec stratégie lors de la création, du chargement et de la compilation de modèles.scope()Entourez de
from tensorflow import keras
with strategy.scope():
    model = make_model()

Si vous faites les deux points suivants sans penser à une difficulté particulière, vous pourrez changer TPU / GPU / CPU sans autorisation en fonction du matériel.

  1. ʻimport tensorflow as tf~print (" Le nombre d'accélérateurs (abrégé`) est collé par copier-coller
  2. Mettez la définition du modèle et la partie chargement du modèle dans la portée de with strategy.scope ():

Quelque chose comme un commentaire

en conclusion

Dans cet article, j'ai expliqué comment utiliser tensorflow.keras pour basculer automatiquement entre TPU / GPU / CPU en fonction de l'état du matériel. Tirez parti du TPU avec tensorflow.keras pour une meilleure vie d'apprentissage en profondeur.

Recommended Posts

Commutez automatiquement TPU / GPU / CPU avec le modèle Tensorflow.Keras
[PyTorch] CPU vs GPU vs TPU [Réglage fin]