L'API d'estratègia de distribució de TensorFlow 2.0 és una eina poderosa que simplifica la formació distribuïda proporcionant una interfície d'alt nivell per distribuir i escalar càlculs a diversos dispositius i màquines. Permet als desenvolupadors aprofitar fàcilment la potència computacional de diverses GPU o fins i tot de diverses màquines per entrenar els seus models de manera més ràpida i eficient.
La formació distribuïda és essencial per manejar grans conjunts de dades i models complexos que requereixen recursos computacionals importants. Amb l'API d'estratègia de distribució, TensorFlow 2.0 ofereix una manera perfecta de distribuir càlculs entre diversos dispositius, com ara GPU, dins d'una única màquina o entre diverses màquines. Això permet un processament paral·lel i permet temps d'entrenament més ràpids.
L'API d'estratègia de distribució de TensorFlow 2.0 admet diverses estratègies per distribuir càlculs, com ara l'entrenament síncron, l'entrenament asíncron i els servidors de paràmetres. L'entrenament síncron garanteix que tots els dispositius o màquines es mantenen sincronitzats durant l'entrenament, mentre que l'entrenament asíncron permet una major flexibilitat pel que fa a la disponibilitat de dispositius o màquines. Els servidors de paràmetres, d'altra banda, permeten compartir paràmetres de manera eficient entre diversos dispositius o màquines.
Per utilitzar l'API d'estratègia de distribució, els desenvolupadors han de definir el seu model i el seu bucle d'entrenament dins d'un àmbit d'estratègia. Aquest àmbit especifica l'estratègia de distribució que s'utilitzarà i assegura que tots els càlculs rellevants es distribueixen en conseqüència. TensorFlow 2.0 proporciona diverses estratègies de distribució integrades, com ara MirroredStrategy, que entrena el model de manera sincrònica en diverses GPU, i MultiWorkerMirroredStrategy, que amplia MirroredStrategy per donar suport a la formació a diverses màquines.
Aquí teniu un exemple de com es pot utilitzar l'API d'estratègia de distribució a TensorFlow 2.0:
python import tensorflow as tf strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = tf.keras.Sequential([...]) # Define your model optimizer = tf.keras.optimizers.Adam() loss_object = tf.keras.losses.SparseCategoricalCrossentropy() train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(batch_size) @tf.function def distributed_train_step(inputs): features, labels = inputs with tf.GradientTape() as tape: predictions = model(features, training=True) loss = loss_object(labels, predictions) gradients = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(gradients, model.trainable_variables)) return loss for epoch in range(num_epochs): total_loss = 0.0 num_batches = 0 for inputs in train_dataset: per_replica_loss = strategy.run(distributed_train_step, args=(inputs,)) total_loss += strategy.reduce(tf.distribute.ReduceOp.SUM, per_replica_loss, axis=None) num_batches += 1 average_loss = total_loss/num_batches print("Epoch {}: Loss = {}".format(epoch, average_loss))
En aquest exemple, primer creem un objecte MirroredStrategy, que distribuirà els càlculs a totes les GPU disponibles. A continuació, definim el nostre model, optimitzador, funció de pèrdua i conjunt de dades d'entrenament dins de l'àmbit de l'estratègia. La funció `distributed_train_step` està decorada amb `@tf.function` per fer-la compatible amb TensorFlow graph i optimitzar la seva execució.
Durant l'entrenament, iterem sobre els lots del conjunt de dades d'entrenament i cridem al mètode `strategy.run` per executar la funció `distributed_train_step` a cada rèplica. Aleshores, les pèrdues per rèplica es redueixen mitjançant el mètode `strategy.reduce`, i la pèrdua mitjana es calcula i s'imprimeix per a cada època.
Mitjançant l'ús de l'API d'estratègia de distribució a TensorFlow 2.0, els desenvolupadors poden escalar fàcilment el seu procés d'entrenament per aprofitar diversos dispositius o màquines, donant com a resultat un entrenament més ràpid i eficient dels seus models.
Altres preguntes i respostes recents sobre Fonaments de TensorFlow de l’EITC/AI/TFF:
- Com es pot utilitzar una capa d'incrustació per assignar automàticament eixos adequats per a una trama de representació de paraules com a vectors?
- Quin és l'objectiu de la agrupació màxima en una CNN?
- Com s'aplica el procés d'extracció de característiques en una xarxa neuronal convolucional (CNN) al reconeixement d'imatges?
- És necessari utilitzar una funció d'aprenentatge asíncrona per als models d'aprenentatge automàtic que s'executen a TensorFlow.js?
- Quin és el paràmetre del nombre màxim de paraules de l'API TensorFlow Keras Tokenizer?
- Es pot utilitzar l'API TensorFlow Keras Tokenizer per trobar les paraules més freqüents?
- Què és TOCO?
- Quina relació hi ha entre diverses èpoques en un model d'aprenentatge automàtic i la precisió de la predicció a partir de l'execució del model?
- L'API de pack neighbors a Neural Structured Learning de TensorFlow produeix un conjunt de dades d'entrenament augmentat basat en dades de gràfics naturals?
- Què és l'API pack neighbors en Neural Structured Learning de TensorFlow?
Vegeu més preguntes i respostes a EITC/AI/TFF TensorFlow Fundamentals