This page was translated by the Cloud Translation API.
Switch to English

কেরাসের সাথে বহু শ্রমিক প্রশিক্ষণ

টেনসরফ্লো.আর.জে দেখুন গুগল কোলাবে চালান গিটহাবের উত্স দেখুন নোটবুক ডাউনলোড করুন

সংক্ষিপ্ত বিবরণ

এই টিউটোরিয়ালটি tf.distribute.Strategy এপিআই, বিশেষত tf.distribute.experimental.MultiWorkerMirroredStrategy tf.distribute.Strategy ব্যবহার করে কেরাস মডেলের সাথে বহু-কর্মী বিতরণ প্রশিক্ষণ প্রদর্শন করে। এই কৌশলটির সাহায্যে, একটি কেরাস মডেল যা একক কর্মী চালানোর জন্য ডিজাইন করা হয়েছিল তা ন্যূনতম কোড পরিবর্তন সহ একাধিক কর্মীদের উপর নির্বিঘ্নে কাজ করতে পারে।

টেনসরফ্লো গাইডের বিতরণ প্রশিক্ষণ বিতরণ কৌশলগুলির সংক্ষিপ্তসার জন্য উপলব্ধ যা tf.distribute.Strategy API গুলি সম্পর্কে গভীর tf.distribute.Strategy আগ্রহী তাদের জন্য সমর্থন করে।

সেটআপ

প্রথমে টেনসরফ্লো এবং প্রয়োজনীয় আমদানি সেটআপ করুন।

 import os
import tensorflow as tf
import numpy as np
 

ডেটাসেট প্রস্তুত করা হচ্ছে

এখন, এমএনআইএসটি ডেটাসেট প্রস্তুত করি। এমএনআইএসটি ডেটাসেটে , 000০,০০০ প্রশিক্ষণের উদাহরণ এবং হস্তাক্ষর অঙ্কগুলির ১০-৯ পরীক্ষার 10,000 টি উদাহরণ রয়েছে, 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
 

কেরাস মডেলটি তৈরি করুন

আমাদের এমএনআইএসটি ডেটাসেটের সাথে প্রশিক্ষণের জন্য একটি সহজ tf.keras.Sequential নিউরাল নেটওয়ার্ক কেরাস মডেলটি তৈরি এবং সংকলনের জন্য আমরা এখানে tf.keras.Sequential API ব্যবহার tf.keras.Sequential

 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 হ'ল একটি জেএসওএন স্ট্রিং যা ক্লাস্টারের অংশ হিসাবে প্রতিটি কর্মীর ক্লাস্টার কনফিগারেশন নির্দিষ্ট করতে ব্যবহৃত হয়।

TF_CONFIG এর দুটি উপাদান রয়েছে: cluster এবং taskcluster প্রশিক্ষণ ক্লাস্টার সম্পর্কে তথ্য সরবরাহ করে, যা একটি ডিক যা বিভিন্ন ধরণের কাজের যেমন worker সমন্বয়ে গঠিত dict মাল্টি ওয়ার্কার MultiWorkerMirroredStrategy সাথে একাধিক কর্মী প্রশিক্ষণে, সাধারণত একজন worker যা নিয়মিত worker করে তা ছাড়া টেনসরবার্ডের জন্য চেকপয়েন্ট সংরক্ষণ করা এবং সারসংক্ষেপ ফাইল লেখার মতো আরও কিছুটা দায়িত্ব গ্রহণ করে। এই ধরনের কর্মী হিসাবে উল্লেখ করা হয় chief কর্মী, এবং এটি গতানুগতিক যে worker সঙ্গে index 0 প্রধান হিসেবে নিযুক্ত worker (আসলে এই হল কিভাবে tf.distribute.Strategy বাস্তবায়িত হয়)। task অন্যদিকে বর্তমান কাজের তথ্য প্রদান করে। প্রথম উপাদান cluster সমস্ত শ্রমিকের জন্য একই, এবং দ্বিতীয় উপাদান task প্রতিটি কর্মীর উপর পৃথক এবং সেই শ্রমিকের type এবং index নির্দিষ্ট করে।

এই উদাহরণে, আমরা কাজের সেট type করতে "worker" এবং কার্য index থেকে 0 । এর অর্থ এই মেশিনটিতে এমন সেটিং রয়েছে প্রথম কর্মী, যা প্রধান কর্মী হিসাবে নিযুক্ত হবে এবং অন্যান্য শ্রমিকের চেয়ে বেশি কাজ করবে। নোট করুন যে অন্যান্য মেশিনগুলিতেও TF_CONFIG এনভায়রনমেন্ট ভেরিয়েবল সেট থাকা দরকার, এবং এতে একই cluster TF_CONFIG থাকা উচিত, তবে those মেশিনগুলির ভূমিকা কী তার উপর নির্ভর করে বিভিন্ন টাস্ক type বা টাস্ক index থাকা উচিত।

চিত্রণ উদ্দেশ্যে, এই টিউটোরিয়াল দেখায় কিভাবে একজন সেট করতে পারেন TF_CONFIG 2 কর্মচারীদের সাথে localhost । অনুশীলনে, ব্যবহারকারীরা বহিরাগত আইপি ঠিকানা / পোর্টগুলিতে একাধিক কর্মী তৈরি করতে এবং প্রতিটি কর্মীর উপর TF_CONFIG সেট করে।

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

নোট করুন যে শেখার হারটি এই উদাহরণে স্থির হওয়ার পরে, সাধারণভাবে বৈশ্বিক ব্যাচের আকারের উপর ভিত্তি করে শিক্ষার হারটি সামঞ্জস্য করা প্রয়োজন হতে পারে।

সঠিক কৌশল চয়ন করুন

টেনসরফ্লোতে বিতরণকৃত প্রশিক্ষণটি সিঙ্ক্রোনাস প্রশিক্ষণ নিয়ে কাজ করে, যেখানে প্রশিক্ষণের পদক্ষেপগুলি কর্মী এবং প্রতিরূপ জুড়ে সমন্বয় করা হয়, এবং অ্যাসিনক্রোনাস প্রশিক্ষণ, যেখানে প্রশিক্ষণের পদক্ষেপগুলি কঠোরভাবে সিঙ্ক করা হয় না।

MultiWorkerMirroredStrategy , যা সিঙ্ক্রোনাস বহু-কর্মী প্রশিক্ষণের জন্য প্রস্তাবিত কৌশল, এই MultiWorkerMirroredStrategy প্রদর্শিত হবে। মডেলটিকে প্রশিক্ষণের জন্য, tf.distribute.experimental.MultiWorkerMirroredStrategy . tf.distribute.experimental.MultiWorkerMirroredStrategy উদাহরণ ব্যবহার করুন। MultiWorkerMirroredStrategy সকল ডিভাইসে সমস্ত ডিভাইসে মডেলের স্তরগুলিতে সমস্ত ভেরিয়েবলের অনুলিপি তৈরি করে। সমষ্টিগত গ্রেডিয়েন্টগুলি এবং ভেরিয়েবলগুলিকে সিঙ্কে রাখার জন্য এটি CollectiveOps , একটি সম্মিলিত যোগাযোগের জন্য টেনসরফ্লো ব্যবহার করে। 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 প্যারামিটারের মাধ্যমে একাধিক বাস্তবায়ন সরবরাহ করে। RING ক্রস-হোস্ট যোগাযোগ স্তর হিসাবে জিআরপিসি ব্যবহার করে রিং-ভিত্তিক সংগ্রহগুলি প্রয়োগ করে। NCCL বাস্তবায়নের জন্য এনসিসিএল NCCL ব্যবহার করে। AUTO রানটাইমের পছন্দকে পিছনে দেয়। সম্মিলিত প্রয়োগের সেরা পছন্দটি জিপিইউর সংখ্যা এবং ধরণের উপর নির্ভর করে এবং ক্লাস্টারে নেটওয়ার্ক আন্তঃসংযোগ করে।

মাল্টি ওয়ার্কারমিরর্ডার্ডস্ট্রেজি দিয়ে মডেলটিকে প্রশিক্ষণ দিন

tf.distribute.Strategy API কে tf.keras এর সাথে একীকরণের মাধ্যমে, আপনি বহু-কর্মীদের প্রশিক্ষণ বিতরণ করার জন্য একমাত্র পরিবর্তনটি হ'ল মডেল বিল্ডিং এবং model.compile() কলটির অভ্যন্তরে strategy.scope() কল করুন। বন্টন কৌশল এর সুযোগ নির্দেশনা কিভাবে এবং কোথায় ভেরিয়েবল নির্মিত এবং ক্ষেত্রে MultiWorkerMirroredStrategy সৃষ্টি ভেরিয়েবল MirroredVariable s, এবং তারা শ্রমিকদের প্রতিটি প্রতিলিপি করা হয়।

 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 সাথে বহু-কর্মী প্রশিক্ষণে, রূপান্তর এবং কার্যকারিতা নিশ্চিত করার জন্য ডেটাসেটটি MultiWorkerMirroredStrategy করা দরকার। তবে নোট করুন যে উপরের কোড স্নিপেটে, ডেটাসেটগুলি model.fit() প্রয়োজন ছাড়াই সরাসরি model.fit() হয়; এটি কারণ tf.distribute.Strategy এপিআই স্বয়ংক্রিয়ভাবে ডেটাসেট tf.distribute.Strategy যত্ন নেয়। এটি ফাইল স্তরে ডেটাসেটটি শারড করে যা স্কিউড শারড তৈরি করতে পারে। চরম ক্ষেত্রে যেখানে কেবল একটি ফাইল রয়েছে, কেবলমাত্র প্রথম শারড (অর্থাত্ শ্রমিক) প্রশিক্ষণ বা মূল্যায়নের ডেটা পাবে এবং ফলস্বরূপ সমস্ত শ্রমিক ত্রুটি পাবে।

আপনি যদি আপনার প্রশিক্ষণের জন্য ম্যানুয়াল tf.data.experimental.DistributeOptions api এর মাধ্যমে স্বয়ংক্রিয়ভাবে tf.data.experimental.DistributeOptions বন্ধ করা tf.data.experimental.DistributeOptions । concretely,

 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 ব্যবহার global_batch_size = per_worker_batch_size * num_workers যা এটি একক কর্মীর ক্ষেত্রে যতটা num_workers চেয়ে num_workers বেশি, কারণ প্রতি শ্রমিক ব্যাচের আকার কার্যকর গ্লোবাল ব্যাচের আকার (প্যারামিটারটি tf.data.Dataset.batch() পাস হয়েছে tf.data.Dataset.batch() ) শ্রমিক সংখ্যা দ্বারা বিভক্ত, এবং এই পরিবর্তনের সাথে আমরা প্রতি শ্রমিক ব্যাচের আকার আগের মতো রাখছি।

মূল্যায়ন

আপনি পাস যদি validation_data মধ্যে model.fit , এটা প্রতিটি যুগে জন্য প্রশিক্ষণ ও মূল্যায়ন মধ্যে বিকল্প হবে। validation_data গ্রহণের মূল্যায়ন একই কর্মীদের একই validation_data বিতরণ করা হয় এবং মূল্যায়নের ফলাফলগুলি একত্রিত হয় এবং সমস্ত শ্রমিকের জন্য উপলব্ধ। প্রশিক্ষণের মতো, বৈধতা ডেটাসেটটি স্বয়ংক্রিয়ভাবে ফাইল পর্যায়ে তীক্ষ্ণ হয়। আপনি বৈধতা ডেটা সেটটি এবং সেটে একটি বিশ্বব্যাপী ব্যাচ আকার সেট করতে হবে validation_steps । পুনরাবৃত্ত ডেটাসেটও মূল্যায়নের জন্য প্রস্তাবিত।

বিকল্পভাবে, আপনি আরও একটি কাজ তৈরি করতে পারেন যা পর্যায়ক্রমে চেকপয়েন্টগুলি পড়ে এবং মূল্যায়ন চালায়। এটিই অনুমানকারী করে। তবে মূল্যায়ন করার জন্য এটি কোনও প্রস্তাবিত উপায় নয় এবং সুতরাং এর বিশদ বাদ দেওয়া হয়।

ভবিষ্যদ্বাণী

বর্তমানে model.predict কাজ করে না MultiWorkerMirroredStrategy.

কর্মক্ষমতা

আপনার কাছে এখন একটি কেরাস মডেল রয়েছে যা মাল্টি ওয়ার্কারমিরর্ডার্ডস্ট্রেজি সহ একাধিক কর্মী চালাতে MultiWorkerMirroredStrategy । আপনি মাল্টি ওয়ার্কার MultiWorkerMirroredStrategy সাথে মাল্টি-ওয়ার্কার ট্রেনিংয়ের পারফরম্যান্স MultiWorkerMirroredStrategy জন্য নিম্নলিখিত কৌশলগুলি ব্যবহার করতে পারেন।

  • MultiWorkerMirroredStrategy একাধিক সম্মিলিত যোগাযোগ বাস্তবায়ন সরবরাহ করেRING ক্রস-হোস্ট যোগাযোগ স্তর হিসাবে জিআরপিসি ব্যবহার করে রিং-ভিত্তিক সংগ্রহগুলি প্রয়োগ করে। NCCL বাস্তবায়নের জন্য এনসিসিএল NCCL ব্যবহার করে। AUTO রানটাইমের পছন্দকে পিছনে দেয়। সম্মিলিত প্রয়োগের সেরা পছন্দটি জিপিইউর সংখ্যা এবং ধরণের উপর নির্ভর করে এবং ক্লাস্টারে নেটওয়ার্ক আন্তঃসংযোগ করে। স্বয়ংক্রিয় পছন্দটি ওভাররাইড করার জন্য, MultiWorkerMirroredStrategy এর MultiWorkerMirroredStrategy communication প্যারামিটারের জন্য একটি বৈধ মান উল্লেখ করুন, যেমন communication=tf.distribute.experimental.CollectiveCommunication.NCCL . communication=tf.distribute.experimental.CollectiveCommunication.NCCL
  • সম্ভব হলে ভেরিয়েবলগুলি tf.float কাস্ট করুন। অফিসিয়াল রেসনেট মডেলটিতে এটি কীভাবে করা যায় তার একটি উদাহরণ অন্তর্ভুক্ত।

ফল্ট সহনশীলতা

সিঙ্ক্রোনাস ট্রেনিংয়ে, ক্লাস্টারটি ব্যর্থ হয় যদি কোনও শ্রমিক ব্যর্থ হয় এবং কোনও ব্যর্থতা-পুনরুদ্ধার ব্যবস্থা না থাকে। tf.distribute.Strategy দিয়ে কেরাস ব্যবহার করা ক্ষেত্রে শ্রমিকরা মারা যায় বা অন্যথায় অস্থির হয় এমন ক্ষেত্রে দোষ সহনশীলতার সুবিধা নিয়ে আসে। আমরা আপনার পছন্দসই বিতরণ করা ফাইল সিস্টেমে প্রশিক্ষণের স্থিতি সংরক্ষণ করে এটি করি, যেমন পূর্বে ব্যর্থ বা প্রিম্প্ট হওয়া পুনরায় সূচনা করার পরে, প্রশিক্ষণ রাষ্ট্রটি পুনরুদ্ধার হয়।

যেহেতু সমস্ত কর্মীদের প্রশিক্ষণ যুগ এবং পদক্ষেপের ক্ষেত্রে একত্রে রাখা হয়েছে, তাই অন্য শ্রমিকদের ব্যর্থ বা নিরস্ত শ্রমিকদের চালিয়ে যাওয়ার জন্য পুনরায় আরম্ভ করার জন্য অপেক্ষা করতে হবে।

মডেলচেকপয়েন্ট কলব্যাক

ModelCheckpoint কলব্যাক আর ত্রুটি সহিষ্ণুতা কার্যকারিতা সরবরাহ করে না, দয়া করে পরিবর্তে BackupAndRestore কলব্যাক ব্যবহার করুন।

ModelCheckpoint এখনও চেকপয়েন্টগুলি সংরক্ষণ করতে ব্যবহার করা যেতে পারে। তবে এটির সাহায্যে, যদি প্রশিক্ষণটি বাধাগ্রস্ত হয় বা সফলভাবে শেষ করা হয়, চেকপয়েন্ট থেকে প্রশিক্ষণ চালিয়ে যেতে, ব্যবহারকারী নিজেই মডেলটি লোড করার জন্য দায়বদ্ধ। ModelCheckpoint ব্যবহারকারী ModelCheckpoint কলব্যাকের বাইরে মডেল / ModelCheckpoint সংরক্ষণ এবং পুনরুদ্ধার করতে পারেন।

মডেল সংরক্ষণ এবং লোড হচ্ছে

model.save বা tf.saved_model.save ব্যবহার করে আপনার মডেলটি সংরক্ষণ করতে, প্রতিটি কর্মীর জন্য সংরক্ষণের গন্তব্যটি পৃথক হওয়া দরকার। নন-চিফ কর্মীদের ক্ষেত্রে আপনাকে মডেলটিকে একটি অস্থায়ী ডিরেক্টরিতে সংরক্ষণ করতে হবে এবং প্রধান হিসাবে আপনাকে প্রদত্ত মডেল ডিরেক্টরিতে সংরক্ষণ করতে হবে। একাধিক শ্রমিক একই স্থানে লেখার চেষ্টা করার ফলে ত্রুটিগুলি রোধ করার জন্য শ্রমিকের অস্থায়ী ডিরেক্টরিগুলি অনন্য হওয়া দরকার। সমস্ত ডিরেক্টরিতে সংরক্ষিত মডেলটি অভিন্ন এবং সাধারণত প্রধান দ্বারা সংরক্ষিত মডেলটি পুনরুদ্ধার বা পরিবেশনের জন্য উল্লেখ করা উচিত। আমরা আপনাকে সুপারিশ করি যে আপনার কিছু ক্লিনআপ যুক্তি রয়েছে যা আপনার প্রশিক্ষণ শেষ হয়ে গেলে শ্রমিকদের দ্বারা তৈরি অস্থায়ী ডিরেক্টরিগুলি মুছে দেয়।

আপনাকে একই সাথে প্রধান এবং কর্মীদের বাঁচানোর দরকার কারণ হ'ল চেকপয়েন্টের সময় আপনি ভেরিয়েবলগুলি একত্রিত করতে পারেন যার জন্য অলরেডুস যোগাযোগ প্রোটোকলে অংশ নিতে প্রধান এবং কর্মী উভয়েরই প্রয়োজন। অন্যদিকে, প্রধান এবং কর্মীদের একই মডেল ডিরেক্টরিতে সংরক্ষণ করার কারণে বিতর্ক হওয়ার কারণে ত্রুটি ঘটবে।

MultiWorkerMirroredStrategy সহ প্রোগ্রামটি প্রতিটি কর্মীর উপর পরিচালিত হয় এবং বর্তমান কর্মী প্রধান কিনা তা জানতে, আমরা ক্লাস্টার task_type অবজেক্টটির সুবিধা গ্রহণ করি যা task_type এবং 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))
 

এখন, যখন এটি লোড করার সময় এসেছে, আসুন সুবিধাজনক tf.keras.models.load_model API ব্যবহার করুন এবং আরও কাজ চালিয়ে যান। এখানে আমরা অনুমান করি যে প্রশিক্ষণ লোড করতে এবং চালিয়ে যাওয়ার জন্য কেবলমাত্র একক কর্মী ব্যবহার করা হচ্ছে, tf.keras.models.load_model আপনি অন্য tf.keras.models.load_model strategy.scope() মধ্যে tf.keras.models.load_model কল করবেন না।

 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 কলব্যাক অধীনে মডেল এবং একটি অস্থায়ী চেকপয়েন্ট ফাইলে বর্তমান যুগে সংখ্যা ব্যাক আপ দ্বারা, ফল্ট সহনশীলতা কার্যকারিতা উপলব্ধ backup_dir আর্গুমেন্ট প্রাপ্ত করতে BackupAndRestore । এটি প্রতিটি যুগের শেষে করা হয়।

একবার চাকরী বাধাগ্রস্ত হয়ে পুনরায় চালু হয়ে গেলে কলব্যাকটি শেষ চেকপয়েন্টটি পুনরুদ্ধার করে, এবং প্রশিক্ষণ বাধাগ্রস্থ যুগের শুরু থেকেই অব্যাহত থাকে। বাধা দেওয়ার আগে অসম্পূর্ণ যুগে ইতিমধ্যে সম্পন্ন যে কোনও আংশিক প্রশিক্ষণ নিক্ষেপ করা হবে, যাতে এটি চূড়ান্ত মডেল অবস্থাকে প্রভাবিত করে না।

এটি ব্যবহার করতে, tf.keras.callbacks.experimental.BackupAndRestore একটি উদাহরণ tf.keras.callbacks.experimental.BackupAndRestore . tf.keras.Model.fit() কল এ সরবরাহ করুন।

মাল্টি ওয়ার্কারমিরর্ডার্ডস্ট্রেজি সহ, যদি কোনও শ্রমিক বাধা পায়, বাধা দেওয়া শ্রমিক পুনরায় চালু না করা পর্যন্ত পুরো ক্লাস্টারটি বিরতি দেয়। অন্যান্য কর্মীরাও পুনরায় চালু হবে, এবং বাধা শ্রমিক ক্লাস্টারে পুনরায় যোগদান করবে। তারপরে, প্রতিটি কর্মী চেকপয়েন্ট ফাইলটি পড়ে যা আগে সংরক্ষণ করা হয়েছিল এবং তার পূর্বের অবস্থাটি তুলে ধরে, ফলে ক্লাস্টারটিকে পুনরায় সিঙ্কে ফিরে যেতে দেয়। তারপরে প্রশিক্ষণ অব্যাহত থাকে।

BackupAndRestore কলব্যাক প্রশিক্ষণ BackupAndRestore সংরক্ষণ এবং পুনরুদ্ধার করতে CheckpointManager BackupAndRestore ব্যবহার করে, যা চেকপয়েন্ট নামে একটি ফাইল উত্পন্ন করে যা সর্বশেষতমের সাথে বিদ্যমান চেকপয়েন্টগুলি ট্র্যাক করে। এই কারণে, নাম সংঘর্ষ এড়াতে backup_dir অন্য চেকপয়েন্টগুলি সঞ্চয় করতে পুনরায় ব্যবহার করা উচিত নয়।

বর্তমানে, BackupAndRestore কলব্যাক কোনও কৌশল ছাড়াই, BackupAndRestore এবং মাল্টি ওয়ার্কারমিরর্ডার্ডস্ট্রেজি সহ একাধিক কর্মী সমর্থন করে। মাল্টি-ওয়ার্কার প্রশিক্ষণ এবং একক শ্রমিক প্রশিক্ষণের জন্য দুটি উদাহরণ নীচে দেওয়া হয়েছে।

 # 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 ডিরেক্টরিটি পরীক্ষা করেন তবে আপনি কিছু অস্থায়ীভাবে উত্পন্ন চেকপয়েন্ট ফাইলগুলি লক্ষ্য করতে পারেন। পূর্ববর্তী হারিয়ে যাওয়া দৃষ্টান্তগুলি পুনরুদ্ধার করার জন্য এই ফাইলগুলির প্রয়োজন হয় এবং আপনার প্রশিক্ষণের সফলভাবে বেরিয়ে আসার পরে tf.keras.Model.fit() লাইব্রেরি দ্বারা tf.keras.Model.fit() এর শেষে সরানো হবে।

আরো দেখুন

  1. টেনসরফ্লো গাইডে বিতরণ প্রশিক্ষণ উপলব্ধ বন্টন কৌশলগুলির একটি ওভারভিউ সরবরাহ করে।
  2. অফিসিয়াল মডেলগুলি , যার মধ্যে অনেকগুলি একাধিক বিতরণ কৌশল চালানোর জন্য কনফিগার করা যেতে পারে।
  3. গাইডের পারফরম্যান্স বিভাগটি আপনার টেনসরফ্লো মডেলগুলির পারফরম্যান্স অনুকূল করতে অন্যান্য কৌশল এবং সরঞ্জামগুলি সম্পর্কে তথ্য সরবরাহ করে।