TensorFlow.org पर देखें | Google Colab में चलाएं | GitHub पर स्रोत देखें | नोटबुक डाउनलोड करें |
अवलोकन
tf.distribute.Strategy API आपके प्रशिक्षण को कई प्रोसेसिंग इकाइयों में वितरित करने के लिए एक अमूर्तता प्रदान करता है। यह आपको कम से कम परिवर्तनों के साथ मौजूदा मॉडल और प्रशिक्षण कोड का उपयोग करके वितरित प्रशिक्षण करने की अनुमति देता है।
यह ट्यूटोरियल दर्शाता है कि एक मशीन पर कई GPU पर सिंक्रोनस प्रशिक्षण के साथ इन-ग्राफ प्रतिकृति करने के लिए tf.distribute.MirroredStrategy का उपयोग कैसे करें। रणनीति अनिवार्य रूप से प्रत्येक प्रोसेसर में मॉडल के सभी चर की प्रतिलिपि बनाती है। फिर, यह सभी प्रोसेसर से ग्रेडिएंट को संयोजित करने के लिए ऑल-रिड्यूस का उपयोग करता है, और मॉडल की सभी प्रतियों के लिए संयुक्त मान लागू करता है।
आप मॉडल बनाने के लिए tf.keras API का उपयोग करेंगे और प्रशिक्षण के लिए Model.fit का उपयोग करेंगे। (कस्टम प्रशिक्षण लूप और MirroredStrategy के साथ वितरित प्रशिक्षण के बारे में जानने के लिए, इस ट्यूटोरियल को देखें।)
MirroredStrategy आपके मॉडल को एक मशीन पर कई जीपीयू पर प्रशिक्षित करती है। एकाधिक श्रमिकों पर कई GPU पर तुल्यकालिक प्रशिक्षण के लिए, tf.distribute.MultiWorkerMirroredStrategy का उपयोग tf.distribute.MultiWorkerMirroredStrategy Model.fit या एक कस्टम प्रशिक्षण लूप के साथ करें। अन्य विकल्पों के लिए, वितरित प्रशिक्षण मार्गदर्शिका देखें।
विभिन्न अन्य रणनीतियों के बारे में जानने के लिए, TensorFlow गाइड के साथ वितरित प्रशिक्षण है ।
सेट अप
import tensorflow_datasets as tfds
import tensorflow as tf
import os
# Load the TensorBoard notebook extension.
%load_ext tensorboard
print(tf.__version__)
2.8.0-rc1
डेटासेट डाउनलोड करें
TensorFlow डेटासेट से MNIST डेटासेट लोड करें। यह tf.data प्रारूप में एक डेटासेट देता है।
with_info तर्क को True पर सेट करने में संपूर्ण डेटासेट का मेटाडेटा शामिल होता है, जिसे यहां info में सहेजा जा रहा है। अन्य बातों के अलावा, इस मेटाडेटा ऑब्जेक्ट में ट्रेन की संख्या और परीक्षण उदाहरण शामिल हैं।
datasets, info = tfds.load(name='mnist', with_info=True, as_supervised=True)
mnist_train, mnist_test = datasets['train'], datasets['test']
वितरण रणनीति को परिभाषित करें
MirroredStrategy ऑब्जेक्ट बनाएं। यह वितरण को संभालेगा और आपके मॉडल को अंदर बनाने के लिए एक संदर्भ प्रबंधक ( MirroredStrategy.scope ) प्रदान करेगा।
strategy = tf.distribute.MirroredStrategy()
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)
print('Number of devices: {}'.format(strategy.num_replicas_in_sync))
Number of devices: 1
इनपुट पाइपलाइन सेट करें
कई GPU के साथ एक मॉडल को प्रशिक्षित करते समय, आप बैच आकार को बढ़ाकर अतिरिक्त कंप्यूटिंग शक्ति का प्रभावी ढंग से उपयोग कर सकते हैं। सामान्य तौर पर, सबसे बड़े बैच आकार का उपयोग करें जो GPU मेमोरी को फिट करता है और तदनुसार सीखने की दर को ट्यून करता है।
# You can also do info.splits.total_num_examples to get the total
# number of examples in the dataset.
num_train_examples = info.splits['train'].num_examples
num_test_examples = info.splits['test'].num_examples
BUFFER_SIZE = 10000
BATCH_SIZE_PER_REPLICA = 64
BATCH_SIZE = BATCH_SIZE_PER_REPLICA * strategy.num_replicas_in_sync
एक फ़ंक्शन को परिभाषित करें जो छवि पिक्सेल मानों को [0, 255] श्रेणी से [0, 1] श्रेणी ( सुविधा स्केलिंग ) तक सामान्य करता है:
def scale(image, label):
image = tf.cast(image, tf.float32)
image /= 255
return image, label
इस scale फ़ंक्शन को प्रशिक्षण और परीक्षण डेटा पर लागू करें, और फिर tf.data.Dataset API का उपयोग प्रशिक्षण डेटा ( Dataset.shuffle ) को फेरबदल करने के लिए करें, और इसे बैच करें ( Dataset.batch )। ध्यान दें कि आप प्रदर्शन को बेहतर बनाने के लिए प्रशिक्षण डेटा का इन-मेमोरी कैश भी रख रहे हैं ( Dataset.cache )।
train_dataset = mnist_train.map(scale).cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE)
eval_dataset = mnist_test.map(scale).batch(BATCH_SIZE)
मॉडल बनाएं
Strategy.scope के संदर्भ में केरस मॉडल बनाएं और संकलित करें:
with strategy.scope():
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(28, 28, 1)),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(10)
])
model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=tf.keras.optimizers.Adam(),
metrics=['accuracy'])
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
कॉलबैक को परिभाषित करें
निम्नलिखित tf.keras.callbacks को परिभाषित करें:
-
tf.keras.callbacks.TensorBoard: TensorBoard के लिए एक लॉग लिखता है, जो आपको ग्राफ़ की कल्पना करने की अनुमति देता है। -
tf.keras.callbacks.ModelCheckpoint: मॉडल को एक निश्चित आवृत्ति पर सहेजता है, जैसे कि प्रत्येक युग के बाद। -
tf.keras.callbacks.LearningRateScheduler: सीखने की दर को बाद में बदलने के लिए शेड्यूल करता है, उदाहरण के लिए, प्रत्येक युग/बैच।
उदाहरण के लिए, नोटबुक में सीखने की दर प्रदर्शित करने के लिए PrintLR नामक एक कस्टम कॉलबैक जोड़ें।
# Define the checkpoint directory to store the checkpoints.
checkpoint_dir = './training_checkpoints'
# Define the name of the checkpoint files.
checkpoint_prefix = os.path.join(checkpoint_dir, "ckpt_{epoch}")
# Define a function for decaying the learning rate.
# You can define any decay function you need.
def decay(epoch):
if epoch < 3:
return 1e-3
elif epoch >= 3 and epoch < 7:
return 1e-4
else:
return 1e-5
# Define a callback for printing the learning rate at the end of each epoch.
class PrintLR(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
print('\nLearning rate for epoch {} is {}'.format(epoch + 1,
model.optimizer.lr.numpy()))
# Put all the callbacks together.
callbacks = [
tf.keras.callbacks.TensorBoard(log_dir='./logs'),
tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_prefix,
save_weights_only=True),
tf.keras.callbacks.LearningRateScheduler(decay),
PrintLR()
]
ट्रेन और मूल्यांकन
अब, मॉडल पर Model.fit को कॉल करके और ट्यूटोरियल की शुरुआत में बनाए गए डेटासेट में पास करके मॉडल को सामान्य तरीके से प्रशिक्षित करें। यह चरण समान है चाहे आप प्रशिक्षण वितरित कर रहे हों या नहीं।
EPOCHS = 12
model.fit(train_dataset, epochs=EPOCHS, callbacks=callbacks)
2022-01-26 05:38:28.865380: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:547] The `assert_cardinality` transformation is currently not handled by the auto-shard rewrite and will be removed.
Epoch 1/12
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
933/938 [============================>.] - ETA: 0s - loss: 0.2029 - accuracy: 0.9399
Learning rate for epoch 1 is 0.0010000000474974513
938/938 [==============================] - 10s 4ms/step - loss: 0.2022 - accuracy: 0.9401 - lr: 0.0010
Epoch 2/12
930/938 [============================>.] - ETA: 0s - loss: 0.0654 - accuracy: 0.9813
Learning rate for epoch 2 is 0.0010000000474974513
938/938 [==============================] - 3s 3ms/step - loss: 0.0652 - accuracy: 0.9813 - lr: 0.0010
Epoch 3/12
931/938 [============================>.] - ETA: 0s - loss: 0.0453 - accuracy: 0.9864
Learning rate for epoch 3 is 0.0010000000474974513
938/938 [==============================] - 3s 3ms/step - loss: 0.0453 - accuracy: 0.9864 - lr: 0.0010
Epoch 4/12
923/938 [============================>.] - ETA: 0s - loss: 0.0246 - accuracy: 0.9933
Learning rate for epoch 4 is 9.999999747378752e-05
938/938 [==============================] - 3s 3ms/step - loss: 0.0244 - accuracy: 0.9934 - lr: 1.0000e-04
Epoch 5/12
929/938 [============================>.] - ETA: 0s - loss: 0.0211 - accuracy: 0.9944
Learning rate for epoch 5 is 9.999999747378752e-05
938/938 [==============================] - 3s 3ms/step - loss: 0.0212 - accuracy: 0.9944 - lr: 1.0000e-04
Epoch 6/12
930/938 [============================>.] - ETA: 0s - loss: 0.0192 - accuracy: 0.9950
Learning rate for epoch 6 is 9.999999747378752e-05
938/938 [==============================] - 3s 3ms/step - loss: 0.0194 - accuracy: 0.9950 - lr: 1.0000e-04
Epoch 7/12
927/938 [============================>.] - ETA: 0s - loss: 0.0179 - accuracy: 0.9953
Learning rate for epoch 7 is 9.999999747378752e-05
938/938 [==============================] - 3s 3ms/step - loss: 0.0179 - accuracy: 0.9953 - lr: 1.0000e-04
Epoch 8/12
938/938 [==============================] - ETA: 0s - loss: 0.0153 - accuracy: 0.9966
Learning rate for epoch 8 is 9.999999747378752e-06
938/938 [==============================] - 3s 3ms/step - loss: 0.0153 - accuracy: 0.9966 - lr: 1.0000e-05
Epoch 9/12
927/938 [============================>.] - ETA: 0s - loss: 0.0151 - accuracy: 0.9966
Learning rate for epoch 9 is 9.999999747378752e-06
938/938 [==============================] - 3s 3ms/step - loss: 0.0150 - accuracy: 0.9966 - lr: 1.0000e-05
Epoch 10/12
935/938 [============================>.] - ETA: 0s - loss: 0.0148 - accuracy: 0.9966
Learning rate for epoch 10 is 9.999999747378752e-06
938/938 [==============================] - 3s 3ms/step - loss: 0.0148 - accuracy: 0.9966 - lr: 1.0000e-05
Epoch 11/12
937/938 [============================>.] - ETA: 0s - loss: 0.0146 - accuracy: 0.9967
Learning rate for epoch 11 is 9.999999747378752e-06
938/938 [==============================] - 3s 3ms/step - loss: 0.0146 - accuracy: 0.9967 - lr: 1.0000e-05
Epoch 12/12
926/938 [============================>.] - ETA: 0s - loss: 0.0145 - accuracy: 0.9967
Learning rate for epoch 12 is 9.999999747378752e-06
938/938 [==============================] - 3s 3ms/step - loss: 0.0144 - accuracy: 0.9967 - lr: 1.0000e-05
<keras.callbacks.History at 0x7fad70067c10>
सहेजी गई चौकियों की जाँच करें:
# Check the checkpoint directory.ls {checkpoint_dir}
checkpoint ckpt_4.data-00000-of-00001 ckpt_1.data-00000-of-00001 ckpt_4.index ckpt_1.index ckpt_5.data-00000-of-00001 ckpt_10.data-00000-of-00001 ckpt_5.index ckpt_10.index ckpt_6.data-00000-of-00001 ckpt_11.data-00000-of-00001 ckpt_6.index ckpt_11.index ckpt_7.data-00000-of-00001 ckpt_12.data-00000-of-00001 ckpt_7.index ckpt_12.index ckpt_8.data-00000-of-00001 ckpt_2.data-00000-of-00001 ckpt_8.index ckpt_2.index ckpt_9.data-00000-of-00001 ckpt_3.data-00000-of-00001 ckpt_9.index ckpt_3.index
यह जांचने के लिए कि मॉडल कितना अच्छा प्रदर्शन करता है, नवीनतम चेकपॉइंट लोड करें और मॉडल को कॉल करें। परीक्षण डेटा पर Model.evaluate करें:
model.load_weights(tf.train.latest_checkpoint(checkpoint_dir))
eval_loss, eval_acc = model.evaluate(eval_dataset)
print('Eval loss: {}, Eval accuracy: {}'.format(eval_loss, eval_acc))
2022-01-26 05:39:15.260539: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:547] The `assert_cardinality` transformation is currently not handled by the auto-shard rewrite and will be removed. 157/157 [==============================] - 2s 4ms/step - loss: 0.0373 - accuracy: 0.9879 Eval loss: 0.03732967749238014, Eval accuracy: 0.9879000186920166
आउटपुट की कल्पना करने के लिए, TensorBoard लॉन्च करें और लॉग देखें:
%tensorboard --logdir=logs

ls -sh ./logs
total 4.0K 4.0K trainप्लेसहोल्डर26
सहेजे गए मॉडल में निर्यात करें
Model.save का उपयोग करके ग्राफ़ और वेरिएबल्स को प्लेटफॉर्म-एग्नोस्टिक Model.save फॉर्मेट में एक्सपोर्ट करें। आपका मॉडल सहेजे जाने के बाद, आप उसे Strategy.scope के साथ या उसके बिना लोड कर सकते हैं।
path = 'saved_model/'
model.save(path, save_format='tf')
2022-01-26 05:39:18.012847: W tensorflow/python/util/util.cc:368] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them. INFO:tensorflow:Assets written to: saved_model/assets INFO:tensorflow:Assets written to: saved_model/assets
अब, बिना Strategy.scope के मॉडल को लोड करें:
unreplicated_model = tf.keras.models.load_model(path)
unreplicated_model.compile(
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=tf.keras.optimizers.Adam(),
metrics=['accuracy'])
eval_loss, eval_acc = unreplicated_model.evaluate(eval_dataset)
print('Eval loss: {}, Eval Accuracy: {}'.format(eval_loss, eval_acc))
157/157 [==============================] - 1s 2ms/step - loss: 0.0373 - accuracy: 0.9879 Eval loss: 0.03732967749238014, Eval Accuracy: 0.9879000186920166
मॉडल को Strategy.scope के साथ लोड करें:
with strategy.scope():
replicated_model = tf.keras.models.load_model(path)
replicated_model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer=tf.keras.optimizers.Adam(),
metrics=['accuracy'])
eval_loss, eval_acc = replicated_model.evaluate(eval_dataset)
print ('Eval loss: {}, Eval Accuracy: {}'.format(eval_loss, eval_acc))
2022-01-26 05:39:19.489971: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:547] The `assert_cardinality` transformation is currently not handled by the auto-shard rewrite and will be removed. 157/157 [==============================] - 3s 3ms/step - loss: 0.0373 - accuracy: 0.9879 Eval loss: 0.03732967749238014, Eval Accuracy: 0.9879000186920166प्लेसहोल्डर33
अतिरिक्त संसाधन
अधिक उदाहरण जो Model.fit API के साथ विभिन्न वितरण रणनीतियों का उपयोग करते हैं:
- टीपीयू ट्यूटोरियल पर
tf.distribute.MirroredStrategyका उपयोग करके सॉल्व ग्लू टास्कtf.distribute.TPUStrategy.वितरण का उपयोग करता है। - वितरण रणनीति ट्यूटोरियल का उपयोग करके एक मॉडल को सहेजें और लोड करें यह दर्शाता है कि
tf.distribute.Strategyके साथ सहेजे गए मॉडल एपीआई का उपयोग कैसे करें। - आधिकारिक TensorFlow मॉडल को कई वितरण रणनीतियों को चलाने के लिए कॉन्फ़िगर किया जा सकता है।
TensorFlow वितरण रणनीतियों के बारे में अधिक जानने के लिए:
- tf.distribute.Strategy ट्यूटोरियल के साथ कस्टम प्रशिक्षण दिखाता है कि कस्टम प्रशिक्षण लूप के साथ एकल-कार्यकर्ता प्रशिक्षण के लिए
tf.distribute.MirroredStrategyका उपयोग कैसे करें। - केरस ट्यूटोरियल के साथ बहु-कार्यकर्ता प्रशिक्षण दिखाता है कि
MultiWorkerMirroredStrategyके साथModel.fitका उपयोग कैसे करें। - Keras और MultiWorkerMirroredStrategy ट्यूटोरियल के साथ कस्टम ट्रेनिंग लूप दिखाता है कि
MultiWorkerMirroredStrategyऔर एक कस्टम ट्रेनिंग लूप का उपयोग कैसे करें। - TensorFlow गाइड में वितरित प्रशिक्षण उपलब्ध वितरण रणनीतियों का अवलोकन प्रदान करता है।
- tf.function गाइड के साथ बेहतर प्रदर्शन अन्य रणनीतियों और उपकरणों के बारे में जानकारी प्रदान करता है, जैसे कि TensorFlow Profiler जिसका उपयोग आप अपने TensorFlow मॉडल के प्रदर्शन को अनुकूलित करने के लिए कर सकते हैं।
TensorFlow.org पर देखें
Google Colab में चलाएं
GitHub पर स्रोत देखें
नोटबुक डाउनलोड करें