این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

آموزش چند کارگر با کراس

مشاهده در TensorFlow.org در Google Colab اجرا کنید مشاهده منبع در GitHub بارگیری نوت بوک

بررسی اجمالی

این آموزش آموزش توزیع شده چند کارگر با مدل Keras را با استفاده از tf.distribute.Strategy API ، به طور خاص tf.distribute.experimental.MultiWorkerMirroredStrategy . با کمک این استراتژی ، یک مدل کراس که برای اجرای تک کاره طراحی شده است می تواند یکپارچه روی چندین کارگر با حداقل تغییر کد کار کند.

آموزش توزیع شده در راهنمای TensorFlow برای مرور کلی در مورد استراتژی های توزیع TensorFlow از کسانی که علاقه مند به درک عمیق تر از API های tf.distribute.Strategy پشتیبانی می کند.

برپایی

ابتدا TensorFlow و واردات لازم را تنظیم کنید.

 import os
import tensorflow as tf
import numpy as np
 

تهیه مجموعه داده

حال بیایید مجموعه داده MNIST را آماده کنیم. مجموعه داده های MNIST شامل 60،000 نمونه آموزش و 10،000 نمونه آزمون از رقم های دست نوشته 0-9 ، قالب بندی شده به عنوان تصاویر تک رنگ 28x28 پیکسلی است. در این مثال ، ما بخشی از مجموعه داده های داده را برای نمایش نشان می دهیم.

 def mnist_dataset(batch_size):
  (x_train, y_train), _ = tf.keras.datasets.mnist.load_data()
  # The `x` arrays are in uint8 and have values in the range [0, 255].
  # We need to convert them to float32 with values in the range [0, 1]
  x_train = x_train / np.float32(255)
  y_train = y_train.astype(np.int64)
  train_dataset = tf.data.Dataset.from_tensor_slices(
      (x_train, y_train)).shuffle(60000).repeat().batch(batch_size)
  return train_dataset
 

مدل کراس را بسازید

در اینجا ما از API tf.keras.Sequential برای ساخت و تدوین یک شبکه عصبی tf.keras.Sequential ساده مدل Keras برای آموزش با مجموعه داده MNIST استفاده می کنیم.

 def build_and_compile_cnn_model():
  model = tf.keras.Sequential([
      tf.keras.Input(shape=(28, 28)),
      tf.keras.layers.Reshape(target_shape=(28, 28, 1)),
      tf.keras.layers.Conv2D(32, 3, activation='relu'),
      tf.keras.layers.Flatten(),
      tf.keras.layers.Dense(128, activation='relu'),
      tf.keras.layers.Dense(10)
  ])
  model.compile(
      loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
      optimizer=tf.keras.optimizers.SGD(learning_rate=0.001),
      metrics=['accuracy'])
  return model
 

بیایید ابتدا آموزش مدل برای تعداد کمی از دوره ها را امتحان کنیم و نتایج را در یک کارگر مجزا مشاهده کنیم تا مطمئن شویم که همه چیز به درستی کار می کند. باید انتظار داشته باشید که شاهد افت ضایعات و دقت نزدیک شدن به 1.0 به عنوان پیشرفت های دوره باشید.

 per_worker_batch_size = 64
single_worker_dataset = mnist_dataset(per_worker_batch_size)
single_worker_model = build_and_compile_cnn_model()
single_worker_model.fit(single_worker_dataset, epochs=3, steps_per_epoch=70)
 
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step
Epoch 1/3
70/70 [==============================] - 0s 2ms/step - loss: 2.2701 - accuracy: 0.2451
Epoch 2/3
70/70 [==============================] - 0s 2ms/step - loss: 2.1827 - accuracy: 0.4777
Epoch 3/3
70/70 [==============================] - 0s 2ms/step - loss: 2.0865 - accuracy: 0.5955

<tensorflow.python.keras.callbacks.History at 0x7fc59381ac50>

پیکربندی چند کاره

حالا بیایید وارد دنیای آموزش چند کارگر شویم. در TF_CONFIG ، متغیر محیط TF_CONFIG برای آموزش در چندین ماشین مورد نیاز است ، که هر یک احتمالاً نقش متفاوتی دارند. TF_CONFIG یک رشته JSON است که برای تعیین پیکربندی خوشه روی هر کارگر که جزئی از خوشه است ، استفاده می شود.

دو مؤلفه TF_CONFIG : cluster و task . cluster اطلاعاتی راجع به خوشه آموزش ارائه می دهد ، این دیکته متشکل از انواع مختلف مشاغل مانند worker . در آموزش چند کارگر با MultiWorkerMirroredStrategy ، معمولاً یک worker وجود دارد که علاوه بر آنچه که یک worker معمولی انجام worker دهد ، مسئولیت کمی همچون صرفه جویی در ایست بازرسی و نوشتن پرونده خلاصه برای TensorBoard را بر عهده worker گیرد. از این کارگر بعنوان کارگر chief می شود و مرسوم است که worker با index 0 به عنوان worker اصلی منصوب شود (در واقع اینگونه نحوه اجرا tf.distribute.Strategy است). task از طرف دیگر اطلاعات مربوط به کار فعلی را ارائه می دهد. cluster مؤلفه اول برای همه کارگران یکسان است و task مؤلفه دوم در مورد هر کارگر متفاوت است و type و index آن کارگر را مشخص می کند.

در این مثال ، type کار را بر روی "worker" و index وظیفه را 0 . این بدان معناست که ماشینی که چنین تنظیماتی را دارد اولین کارگر است که به عنوان رئیس اصلی منصوب می شود و کارهای بیشتری نسبت به سایر کارگران انجام می دهد. توجه داشته باشید که سایر دستگاه ها باید متغیر محیط TF_CONFIG را نیز تنظیم کنند ، و باید دارای همان cluster یکسان باشند ، اما type کار یا index کار متفاوت index بسته به اینکه نقش آن ماشین ها چیست.

برای اهداف تصویرگری ، این آموزش نشان می دهد که چگونه فرد می تواند TF_CONFIG با 2 کارگر در localhost . در عمل ، کاربران می توانند چندین کارگر در آدرس / پورت IP خارجی ایجاد کنند و TF_CONFIG به طور مناسب بر روی هر کارگر تنظیم کنند.

 os.environ['TF_CONFIG'] = json.dumps({
    'cluster': {
        'worker': ["localhost:12345", "localhost:23456"]
    },
    'task': {'type': 'worker', 'index': 0}
})
 

توجه داشته باشید که در حالی که در این مثال میزان یادگیری ثابت است ، به طور کلی ممکن است لازم باشد میزان یادگیری را بر اساس اندازه دسته جهانی تنظیم کنید.

استراتژی مناسب را انتخاب کنید

در TensorFlow ، آموزش توزیع شده شامل آموزش همزمان است ، جایی که مراحل آموزش در کارگران و ماکت ها و آموزش ناهمزمان ، جایی که مراحل آموزش به طور همگام سازی نشده است ، همگام سازی می شود.

MultiWorkerMirroredStrategy ، که استراتژی پیشنهادی برای آموزش چند کارگر همزمان است ، در این راهنما نشان داده می شود. برای آموزش مدل ، از نمونه ای از tf.distribute.experimental.MultiWorkerMirroredStrategy . MultiWorkerMirroredStrategy کپی از همه متغیرهای موجود در لایه های مدل را در هر دستگاه در همه کارگران ایجاد می کند. این از CollectiveOps ، یک گزینه TensorFlow برای ارتباط جمعی ، برای جمع کردن شیب ها و نگه داشتن متغیرها در همگام سازی استفاده می کند. راهنمای tf.distribute.Strategy جزئیات بیشتری در مورد این استراتژی دارد.

 strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy()
 
WARNING:tensorflow:Collective ops is not configured at program startup. Some performance features may not be enabled.
INFO:tensorflow:Using MirroredStrategy with devices ('/device:GPU:0',)
INFO:tensorflow:Single-worker MultiWorkerMirroredStrategy with local_devices = ('/device:GPU:0',), communication = CollectiveCommunication.AUTO

MultiWorkerMirroredStrategy پیاده سازی های مختلفی را از طریق پارامتر CollectiveCommunication MultiWorkerMirroredStrategy ارائه می دهد. RING مجموعه های مستقر در حلقه را با استفاده از gRPC به عنوان لایه ارتباط متقابل میزبان پیاده سازی می کند. NCCL از NCCL Nvidia برای پیاده سازی جمعی استفاده می کند. AUTO انتخاب را به زمان اجرا معطل می کند. بهترین انتخاب برای اجرای جمعی بستگی به تعداد و نوع GPU و اتصال شبکه در خوشه دارد.

آموزش مدل با MultiWorkerMirroredStrategy

با ادغام API tf.distribute.Strategy در tf.keras ، تنها تغییری که شما برای توزیع آموزش به چند کارگر ایجاد خواهید کرد ، محصور کردن مدل مدل و فراخوانی model.compile() در داخل strategy.scope() . tf.keras strategy.scope() . دیکته دامنه استراتژی توزیع را چگونه و در کجا متغیرهای ایجاد می کند، و در مورد MultiWorkerMirroredStrategy ، متغیرهای ایجاد می MirroredVariable ، و آنها را بر روی هر یک از کارگران تکرار شده است.

 num_workers = 4

# Here the batch size scales up by number of workers since 
# `tf.data.Dataset.batch` expects the global batch size. Previously we used 64, 
# and now this becomes 128.
global_batch_size = per_worker_batch_size * num_workers
multi_worker_dataset = mnist_dataset(global_batch_size)

with strategy.scope():
  # Model building/compiling need to be within `strategy.scope()`.
  multi_worker_model = build_and_compile_cnn_model()

# Keras' `model.fit()` trains the model with specified number of epochs and
# number of steps per epoch. Note that the numbers here are for demonstration
# purposes only and may not sufficiently produce a model with good quality.
multi_worker_model.fit(multi_worker_dataset, epochs=3, steps_per_epoch=70)
 
Epoch 1/3
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/data/ops/multi_device_iterator_ops.py:601: get_next_as_optional (from tensorflow.python.data.ops.iterator_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use `tf.data.Iterator.get_next_as_optional()` instead.
70/70 [==============================] - 0s 3ms/step - loss: 2.2682 - accuracy: 0.2265
Epoch 2/3
70/70 [==============================] - 0s 3ms/step - loss: 2.1714 - accuracy: 0.4954
Epoch 3/3
70/70 [==============================] - 0s 3ms/step - loss: 2.0638 - accuracy: 0.6232

<tensorflow.python.keras.callbacks.History at 0x7fc5f4f062e8>

سایه بان داده ها و اندازه دسته ای

در آموزش چند کارگر با MultiWorkerMirroredStrategy ، برای اطمینان از همگرایی و عملکرد ، خرد کردن مجموعه داده لازم است. با این حال ، توجه داشته باشید که در قطعه کد بالا ، مجموعه داده ها مستقیماً بدون نیاز به shard به model.fit() شوند. این امر به این دلیل است که tf.distribute.Strategy API به طور خودکار از مجموعه داده استفاده می کند. این مجموعه داده ها را در سطح پرونده محافظت می کند که ممکن است باعث ایجاد محافظ های تند شود. در موارد شدید که فقط یک پرونده وجود دارد ، فقط بخش اول (یعنی کارگر) داده های آموزش یا ارزیابی را دریافت می کند و در نتیجه همه کارگران دچار خطا می شوند.

اگر برای آموزش خود را ترجیح می دهید shading دستی ، خرد کردن خودکار را می توان از طریق API tf.data.experimental.DistributeOptions خاموش است. بطور مشخص ،

 options = tf.data.Options()
options.experimental_distribute.auto_shard_policy = tf.data.experimental.AutoShardPolicy.OFF
dataset_no_auto_shard = multi_worker_dataset.with_options(options)
 

نکته دیگری که باید به آن توجه کنید اندازه دسته datasets . در کد قطعه بالا ، ما از global_batch_size = per_worker_batch_size * num_workers ، که برابر با num_workers برابر با اندازه کارگران مجرد است ، زیرا اندازه هر دسته کارگر موثر است اندازه دسته جهانی (پارامتر منتقل شده در tf.data.Dataset.batch() با تعداد کارگران تقسیم می شود ، و با این تغییر ، اندازه دسته هر کارگر را مانند گذشته نگه می داریم.

ارزیابی

اگر validation_data را به model.fit ، بین آموزش و ارزیابی برای هر دوره جایگزین خواهد شد. ارزیابی با استفاده از validation_data در همان مجموعه کارگران توزیع می شود و نتایج ارزیابی برای کل کارگران جمع می شود و در دسترس است. مشابه آموزش ، مجموعه داده های اعتبارسنجی به طور خودکار در سطح پرونده ها تقسیم می شود. شما باید یک اندازه دسته جهانی را در مجموعه داده validation_steps تنظیم کنید و validation_steps تنظیم کنید. یک مجموعه داده مکرر نیز برای ارزیابی توصیه می شود.

از طرف دیگر ، شما همچنین می توانید یک کار دیگر ایجاد کنید که بطور دوره ای نقاط بازرسی را می خواند و ارزیابی را انجام می دهد. این کاری است که Estimator انجام می دهد. اما این یک روش پیشنهادی برای انجام ارزیابی نیست و بنابراین جزئیات آن حذف شده است.

پیش بینی

در حال حاضر model.predict با MultiWorkerMirroredStrategy. کار نمی کند MultiWorkerMirroredStrategy.

کارایی

اکنون شما یک مدل MultiWorkerMirroredStrategy را در اختیار دارید که در چند کارگر با MultiWorkerMirroredStrategy برای کار در چندین کار MultiWorkerMirroredStrategy . شما می توانید تکنیک های زیر را برای MultiWorkerMirroredStrategy عملکرد آموزش چند کارگر با MultiWorkerMirroredStrategy .

  • MultiWorkerMirroredStrategy چندین پیاده سازی ارتباط جمعی را ارائه می دهد . RING مجموعه های مستقر در حلقه را با استفاده از gRPC به عنوان لایه ارتباط متقابل میزبان پیاده سازی می کند. NCCL از NCCL Nvidia برای پیاده سازی جمعی استفاده می کند. AUTO انتخاب را به زمان اجرا معطل می کند. بهترین انتخاب برای اجرای جمعی بستگی به تعداد و نوع GPU و اتصال شبکه در خوشه دارد. برای رد کردن انتخاب خودکار ، مقدار معتبر را به پارامتر communication سازنده MultiWorkerMirroredStrategy ، به عنوان مثال communication=tf.distribute.experimental.CollectiveCommunication.NCCL .
  • در صورت امکان متغیرها را در tf.float دهید. مدل رسمی ResNet نمونه ای از چگونگی انجام این کار را شامل می شود.

تحمل خطا

در آموزش همزمان ، اگر یکی از کارگران ناکام بماند و هیچ مکانیسم بازیابی شکست وجود نداشته باشد ، خوشه شکست می خورد. استفاده از Keras با tf.distribute.Strategy در مواردی که کارگران می میرند یا در غیر این صورت ناپایدار هستند ، از مزیت تحمل خطا برخوردار است. ما این کار را با حفظ وضعیت آموزش در سیستم پرونده توزیع شده مورد نظر خود انجام می دهیم ، به گونه ای که با شروع مجدد نمونه ای که قبلاً شکست خورده یا از قبل استفاده نشده است ، وضعیت آموزش بهبود می یابد.

از آنجا که همه کارگران از نظر دوره های آموزشی و مراحل همگام نگه داشته می شوند ، سایر کارگران باید برای ادامه کار مجدد کارگر شکست خورده یا پیش فرض منتظر بمانند.

پاسخ به تماس ModelCheckpoint

پاسخ به تماس ModelCheckpoint دیگر قابلیت تحمل خطا را فراهم نمی کند ، لطفا به جای آن از تماس BackupAndRestore استفاده کنید.

از پاسخ به تماس ModelCheckpoint می توان برای ذخیره پاسگاه ها استفاده کرد. اما با این کار ، اگر آموزش قطع شد یا با موفقیت به پایان رسید ، به منظور ادامه آموزش از ایست بازرسی ، کاربر وظیفه بارگیری مدل را به صورت دستی دارد. به صورت اختیاری کاربر می تواند برای ذخیره و بازیابی مدل / وزن در خارج از پاسخ به تماس ModelCheckpoint .

صرفه جویی و بارگیری مدل

برای صرفه جویی در مدل خود با استفاده از model.save یا tf.saved_model.save ، مقصد برای صرفه جویی باید برای هر کارگر متفاوت باشد. در مورد کارگران غیر اصلی ، شما باید مدل را در یک فهرست موقت ذخیره کنید و در حالت اصلی ، شما باید در فهرست مدل ارائه شده ذخیره کنید. برای جلوگیری از خطاهای ناشی از چندین کارگر که سعی در نوشتن در همان مکان دارند ، فهرستهای موقت در مورد کارگر باید منحصر به فرد باشند. مدلی که در کلیه دایرکتوری ها ذخیره شده است یکسان هستند و به طور معمول فقط به مدل ذخیره شده توسط رئیس باید برای بازیابی یا سرویس ارجاع شود. ما توصیه می کنیم که منطق تمیزکاری داشته باشید که پس از اتمام آموزش ، فهرستهای موقت ایجاد شده توسط کارگران را حذف کنید.

دلیل اینکه شما باید همزمان با رئیس و کارگران صرفه جویی کنید ، به این دلیل است که شما ممکن است در هنگام بازرسی متغیرها را جمع کنید که هم رئیس و هم کارگران را ملزم به شرکت در پروتکل ارتباطی allreduce می کند. از طرف دیگر ، اجازه دادن به رئیس و کارگران در همان فهرست مدل به دلیل مشاجره منجر به خطا خواهد شد.

با استفاده از MultiWorkerMirroredStrategy ، این برنامه بر روی هر کارگر اجرا می شود و برای اینکه بدانیم آیا کارگر فعلی رئیس است ، ما از شیء حل کننده خوشه ای که دارای ویژگی های task_type و task_id است استفاده می task_id . task_type به شما می گوید که شغل فعلی چیست (به عنوان مثال "کارگر") ، و task_id شناسه کارگر را به شما می گوید. کارگر با شناسه 0 بعنوان کارگر اصلی تعیین می شود.

در کد قطعه کد زیر ، write_filepath مسیر پرونده برای نوشتن را ارائه می دهد ، که بستگی به شناسه کارگر دارد. در مورد رئیس (کارگر با شناسه 0) ، آن را به مسیر پرونده اصلی می نویسد؛ برای دیگران ، یک فهرست راهنما ایجاد می کند (با شناسه در مسیر فهرست):

 model_path = '/tmp/keras-model'

def _is_chief(task_type, task_id):
  # If `task_type` is None, this may be operating as single worker, which works 
  # effectively as chief.
  return task_type is None or task_type == 'chief' or (
            task_type == 'worker' and task_id == 0)

def _get_temp_dir(dirpath, task_id):
  base_dirpath = 'workertemp_' + str(task_id)
  temp_dir = os.path.join(dirpath, base_dirpath)
  tf.io.gfile.makedirs(temp_dir)
  return temp_dir

def write_filepath(filepath, task_type, task_id):
  dirpath = os.path.dirname(filepath)
  base = os.path.basename(filepath)
  if not _is_chief(task_type, task_id):
    dirpath = _get_temp_dir(dirpath, task_id)
  return os.path.join(dirpath, base)

task_type, task_id = (strategy.cluster_resolver.task_type,
                      strategy.cluster_resolver.task_id)
write_model_path = write_filepath(model_path, task_type, task_id)
 

با این کار ، اکنون آماده ذخیره هستید:

 multi_worker_model.save(write_model_path)
 
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/tracking/tracking.py:111: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.
Instructions for updating:
This property should not be used in TensorFlow 2.0, as updates are applied automatically.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/tracking/tracking.py:111: Layer.updates (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.
Instructions for updating:
This property should not be used in TensorFlow 2.0, as updates are applied automatically.
INFO:tensorflow:Assets written to: /tmp/keras-model/assets

همانطور که در بالا توضیح دادیم ، بعداً این مدل فقط باید از مسیری که رئیس آن ذخیره شده است بارگیری شود ، بنابراین بیایید موارد موقت کارگران غیر اصلی را نجات دهیم:

 if not _is_chief(task_type, task_id):
  tf.io.gfile.rmtree(os.path.dirname(write_model_path))
 

اکنون ، زمان بارگذاری آن است ، اجازه دهید از API tf.keras.models.load_model مناسب استفاده tf.keras.models.load_model و با ادامه کار ادامه دهیم. در اینجا ، ما فقط فرض می کنیم که از کارگر مجرد برای بارگیری و ادامه آموزش استفاده می کنیم ، در این صورت شما با tf.keras.models.load_model در یک strategy.scope() دیگر تماس نمی tf.keras.models.load_model strategy.scope() .

 loaded_model = tf.keras.models.load_model(model_path)

# Now that we have the model restored, and can continue with the training.
loaded_model.fit(single_worker_dataset, epochs=2, steps_per_epoch=20)
 
Epoch 1/2
20/20 [==============================] - 0s 2ms/step - loss: 1.9825 - accuracy: 0.1102
Epoch 2/2
20/20 [==============================] - 0s 2ms/step - loss: 1.9367 - accuracy: 0.1117

<tensorflow.python.keras.callbacks.History at 0x7fc5f4b0d8d0>

ذخیره و بازیابی پاسگاه

از طرف دیگر ، چک باکس به شما امکان می دهد وزن مدل را ذخیره کنید و بدون نیاز به صرفه جویی در کل مدل ، آنها را بازیابی کنید. در اینجا ، شما یک tf.train.Checkpoint ایجاد می کنید که مدل را دنبال می کند ، که توسط یک tf.train.CheckpointManager مدیریت می شود ، به طوری که فقط آخرین پاسگاه حفظ می شود.

 checkpoint_dir = '/tmp/ckpt'

checkpoint = tf.train.Checkpoint(model=multi_worker_model)
write_checkpoint_dir = write_filepath(checkpoint_dir, task_type, task_id)
checkpoint_manager = tf.train.CheckpointManager(
  checkpoint, directory=write_checkpoint_dir, max_to_keep=1)
 

پس از راه اندازی CheckpointManager ، اکنون آماده ذخیره و حذف ایست های بازرسی کارگران غیر ارشد ذخیره شده هستید.

 checkpoint_manager.save()
if not _is_chief(task_type, task_id):
  tf.io.gfile.rmtree(write_checkpoint_dir)
 

اکنون ، هنگامی که شما نیاز به بازیابی دارید ، می توانید جدیدترین ایست بازرسی ذخیره شده با استفاده از عملکرد مناسب tf.train.latest_checkpoint را پیدا کنید. پس از بازگرداندن پاسگاه ، می توانید با آموزش ادامه دهید.

 latest_checkpoint = tf.train.latest_checkpoint(checkpoint_dir)
checkpoint.restore(latest_checkpoint)
multi_worker_model.fit(multi_worker_dataset, epochs=2, steps_per_epoch=20)
 
Epoch 1/2
20/20 [==============================] - 0s 3ms/step - loss: 1.9841 - accuracy: 0.6561
Epoch 2/2
20/20 [==============================] - 0s 3ms/step - loss: 1.9445 - accuracy: 0.6805

<tensorflow.python.keras.callbacks.History at 0x7fc5f49d9d30>

BackupAndRestore پاسخ به تماس

BackupAndRestore پاسخ به تماس فراهم می کند قابلیت تحمل خطا، توسط پشتیبان گیری از مدل و شماره دوره کنونی در یک فایل ایست بازرسی موقت تحت backup_dir آرگومان به BackupAndRestore . این کار در پایان هر دوره انجام می شود.

پس از قطع شدن کار و راه اندازی مجدد مشاغل ، پاسخ به تماس آخرین ایست بازرسی را بازیابی می کند و آموزش از ابتدای دوره قطع شده ادامه می یابد. هرگونه آموزش جزئی که قبلاً در دوره ناتمام قبل از وقفه انجام شده باشد ، دور خواهد شد ، به طوری که بر وضعیت مدل نهایی تأثیر نمی گذارد.

برای استفاده از آن ، نمونه ای از تماس tf.keras.callbacks.experimental.BackupAndRestore در تماس tf.keras.Model.fit() .

با MultiWorkerMirroredStrategy ، اگر یک کارگر قطع شود ، کل خوشه مکث می کند تا کارگر متوقف مجدداً راه اندازی شود. کارگران دیگر نیز مجدداً راه اندازی می شوند و کارگر متوقف شده مجدداً به خوشه باز می گردد. سپس ، هر کارگر پرونده ایست بازرسی را که قبلاً ذخیره شده بود ، می خواند و حالت قبلی خود را جمع می کند ، در نتیجه اجازه می دهد که خوشه در همگام سازی مجدداً برگردد. سپس آموزش ادامه می یابد.

پاسخ به تماس BackupAndRestore از CheckpointManager برای ذخیره و بازیابی حالت آموزش استفاده می کند ، که پرونده ای به نام ایست بازرسی تولید می کند که نقاط بازرسی موجود را به همراه آخرین مورد ردیابی می کند. به همین دلیل ، برای جلوگیری از برخورد نام ، نباید از backup_dir برای ذخیره سایر پاسگاه ها استفاده شود.

در حال حاضر ، پاسخ به تماس BackupAndRestore از کارگر مجرد و بدون استراتژی ، MirroredStrategy و چند کارگر با MultiWorkerMirroredStrategy پشتیبانی می کند. در زیر دو نمونه برای آموزش چند کارگر و آموزش تک کارگر آورده شده است.

 # Multi-worker training with MultiWorkerMirroredStrategy.

callbacks = [tf.keras.callbacks.experimental.BackupAndRestore(backup_dir='/tmp/backup')]
with strategy.scope():
  multi_worker_model = build_and_compile_cnn_model()
multi_worker_model.fit(multi_worker_dataset,
                       epochs=3,
                       steps_per_epoch=70,
                       callbacks=callbacks)
 
Epoch 1/3
70/70 [==============================] - 0s 3ms/step - loss: 2.2837 - accuracy: 0.1836
Epoch 2/3
70/70 [==============================] - 0s 3ms/step - loss: 2.2131 - accuracy: 0.4091
Epoch 3/3
70/70 [==============================] - 0s 3ms/step - loss: 2.1310 - accuracy: 0.5485

<tensorflow.python.keras.callbacks.History at 0x7fc5f49a3080>

اگر دایرکتوری backup_dir که در BackupAndRestore مشخص کرده BackupAndRestore ، BackupAndRestore ، ممکن است متوجه برخی پرونده های بازرسی موقتی شوید. این پرونده ها برای بازیابی نمونه های از دست رفته قبلی مورد نیاز هستند و پس از موفقیت در آموزش شما ، در پایان tf.keras.Model.fit() توسط کتابخانه حذف می شوند.

همچنین ببینید

  1. آموزش توزیع شده در راهنمای TensorFlow نمای کلی از استراتژی های توزیع موجود را ارائه می دهد.
  2. مدلهای رسمی که بسیاری از آنها برای اجرای چندین استراتژی توزیع می توانند پیکربندی شوند.
  3. بخش عملکرد در راهنمای اطلاعات مربوط به سایر استراتژی ها و ابزاری را که می توانید برای بهینه سازی عملکرد مدل های TensorFlow خود استفاده کنید ، ارائه می دهد.