গুগল I / O মে 18-20 মে! স্থান সংরক্ষণ করুন এবং আপনার সময়সূচীটি এখনই নিবন্ধ করুন

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

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

ওভারভিউ

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

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

সেটআপ

প্রথমত, কিছু প্রয়োজনীয় আমদানি।

import json
import os
import sys

টেনসরফ্লো আমদানির আগে পরিবেশে কয়েকটি পরিবর্তন করুন make

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

os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

TF_CONFIG এনভায়রনমেন্ট ভেরিয়েবল পুনরায় সেট করুন, আপনি এই সম্পর্কে আরও পরে দেখতে পাবেন।

os.environ.pop('TF_CONFIG', None)

নিশ্চিত হয়ে নিন যে বর্তমান ডিরেক্টরিটি অজগরটির পথে রয়েছে। এটি পরে %%writefile দ্বারা লিখিত ফাইলগুলি আমদানির অনুমতি দেয়।

0 বি 70ec6310

এখন টেনসরফ্লো আমদানি করুন।

import tensorflow as tf

ডেটাসেট এবং মডেল সংজ্ঞা

এর পরে একটি সাধারণ মডেল এবং ডেটাসেট সেটআপ সহ একটি mnist.py ফাইল তৈরি করুন। এই অজগর ফাইলটি টিউটোরিয়ালে কর্মী-প্রক্রিয়াগুলি দ্বারা ব্যবহৃত হবে:

%%writefile mnist.py

import os
import tensorflow as tf
import numpy as np

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].
  # You 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

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
Writing mnist.py

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

import mnist

batch_size = 64
single_worker_dataset = mnist.mnist_dataset(batch_size)
single_worker_model = mnist.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 [==============================] - 1s 13ms/step - loss: 2.2959 - accuracy: 0.0977
Epoch 2/3
70/70 [==============================] - 1s 12ms/step - loss: 2.2311 - accuracy: 0.2726
Epoch 3/3
70/70 [==============================] - 1s 13ms/step - loss: 2.1668 - accuracy: 0.4236
<tensorflow.python.keras.callbacks.History at 0x7f62c6ec0780>

মাল্টি-ওয়ার্কার কনফিগারেশন

এখন বহু শ্রমিক প্রশিক্ষণের বিশ্বে প্রবেশ করা যাক। TF_CONFIG , একাধিক মেশিনে প্রশিক্ষণের জন্য TF_CONFIG এনভায়রনমেন্ট ভেরিয়েবলের প্রয়োজন, যার প্রত্যেকটিরই সম্ভবত আলাদা ভূমিকা রয়েছে। TF_CONFIG হ'ল একটি জেএসওএন স্ট্রিং যা ক্লাস্টারের অংশ যা প্রতিটি শ্রমিকের ক্লাস্টার কনফিগারেশন নির্দিষ্ট করতে ব্যবহৃত হয়।

এখানে একটি উদাহরণ কনফিগারেশন:

tf_config = {
    'cluster': {
        'worker': ['localhost:12345', 'localhost:23456']
    },
    'task': {'type': 'worker', 'index': 0}
}

এখানে JSON স্ট্রিং হিসাবে সিরিয়ালযুক্ত একই TF_CONFIG :

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

TF_CONFIG এর দুটি উপাদান রয়েছে: cluster এবং task

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

  • task বর্তমান টাস্কের তথ্য সরবরাহ করে এবং প্রতিটি কর্মীর চেয়ে আলাদা। এটি সেই শ্রমিকের type এবং index নির্দিষ্ট করে।

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

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

এই উদাহরণে আপনি 2 জন কর্মী ব্যবহার করবেন, উপরোক্ত প্রথম কর্মীর TF_CONFIG প্রদর্শিত হবে। দ্বিতীয় কর্মীর জন্য আপনি tf_config['task']['index']=1 সেট করবেন would

উপরে, tf_config মধ্যে কেবল স্থানীয় ভেরিয়েবল। প্রশিক্ষণটি কনফিগার করার জন্য এটি প্রকৃতপক্ষে ব্যবহার করতে, এই TF_CONFIG JSON হিসাবে ক্রমিক করা উচিত এবং TF_CONFIG পরিবেশে পরিবর্তনশীল রাখতে হবে।

নোটবুকগুলিতে পরিবেশের ভেরিয়েবল এবং সাবপ্রসেসেস

উপ-প্রক্রিয়াগুলি তাদের পিতামাতার কাছ থেকে পরিবেশের পরিবর্তনগুলি লাভ করে। সুতরাং আপনি যদি এই jupyter notebook প্রক্রিয়াতে পরিবেশের পরিবর্তনশীল সেট করেন:

os.environ['GREETINGS'] = 'Hello TensorFlow!'

আপনি একটি উপ-প্রক্রিয়া থেকে পরিবেশ পরিবর্তনশীল অ্যাক্সেস করতে পারেন:

echo ${GREETINGS}
Hello TensorFlow!

পরবর্তী বিভাগে, আপনি এটি TF_CONFIG - TF_CONFIG পাস করার জন্য ব্যবহার করবেন। আপনি সত্যই এইভাবে আপনার কাজগুলি আরম্ভ করবেন না, তবে এই টিউটোরিয়ালটির উদ্দেশ্যে এটি যথেষ্ট: একটি ন্যূনতম বহু-কর্মীর উদাহরণ প্রদর্শন করতে।

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

টেনসরফ্লোতে বিতরণ প্রশিক্ষণের দুটি প্রধান ফর্ম রয়েছে:

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

MultiWorkerMirroredStrategy , যা সিঙ্ক্রোনাস বহু-কর্মী প্রশিক্ষণের জন্য প্রস্তাবিত কৌশল, এই MultiWorkerMirroredStrategy প্রদর্শিত হবে। মডেলটিকে প্রশিক্ষণ দেওয়ার জন্য, tf.distribute.MultiWorkerMirroredStrategy উদাহরণ ব্যবহার করুন।

MultiWorkerMirroredStrategy সকল ডিভাইসে সমস্ত ডিভাইসে মডেলের স্তরগুলিতে সমস্ত ভেরিয়েবলের অনুলিপি তৈরি করে। সমষ্টিগত গ্রেডিয়েন্টগুলির জন্য এবং ভেরিয়েবলগুলিকে সিঙ্কে রাখার জন্য এটি CollectiveOps , একটি সম্মিলিত যোগাযোগের জন্য টেনসরফ্লো ব্যবহার করে। tf.distribute.Strategy এই কৌশল সম্পর্কে আরও বিশদ রয়েছে।

strategy = tf.distribute.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:CPU:0',)
INFO:tensorflow:Single-worker MultiWorkerMirroredStrategy with local_devices = ('/device:CPU:0',), communication = CommunicationImplementation.AUTO

MultiWorkerMirroredStrategy CommunicationOptions MultiWorkerMirroredStrategy পরামিতিটির মাধ্যমে একাধিক বাস্তবায়ন সরবরাহ করে। RING ক্রস-হোস্ট যোগাযোগ স্তর হিসাবে জিআরপিসি ব্যবহার করে রিং-ভিত্তিক সংগ্রহগুলি প্রয়োগ করে। NCCL বাস্তবায়নের জন্য এনসিসিএল NCCL ব্যবহার করে। AUTO রানটাইমের পছন্দকে পিছনে দেয়। সম্মিলিত বাস্তবায়নের সর্বোত্তম পছন্দ নির্ভর করে জিপিইউর সংখ্যা এবং ধরণের উপর এবং ক্লাস্টারে নেটওয়ার্ক আন্তঃসংযোগ।

মডেল প্রশিক্ষণ

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

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

MultiWorkerMirroredStrategy সহ আসলে চালানোর জন্য আপনাকে কর্মী প্রক্রিয়া চালাতে হবে এবং তাদের কাছে একটি TF_CONFIG পাস করতে হবে।

পূর্বে লেখা mnist.py ফাইলের মতো, এখানে main.py যা প্রতিটি কর্মী চালাবেন:

%%writefile main.py

import os
import json

import tensorflow as tf
import mnist

per_worker_batch_size = 64
tf_config = json.loads(os.environ['TF_CONFIG'])
num_workers = len(tf_config['cluster']['worker'])

strategy = tf.distribute.MultiWorkerMirroredStrategy()

global_batch_size = per_worker_batch_size * num_workers
multi_worker_dataset = mnist.mnist_dataset(global_batch_size)

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


multi_worker_model.fit(multi_worker_dataset, epochs=3, steps_per_epoch=70)
Writing main.py

উপরের কোড স্নিপেটে নোট করুন যে global_batch_size , যা Dataset.batch পাস হয়, per_worker_batch_size * num_workers সেট করা আছে। এটি নিশ্চিত করে যে প্রতিটি কর্মী per_worker_batch_size উদাহরণগুলির কর্মীদের সংখ্যা নির্বিশেষে প্রক্রিয়াজাত করে।

বর্তমান ডিরেক্টরিতে এখন পাইথন ফাইল দুটি রয়েছে:

ls *.py
main.py
mnist.py

সুতরাং TF_CONFIG -সিরিয়াল করে TF_CONFIG এবং এটিকে পরিবেশের ভেরিয়েবলগুলিতে যুক্ত করুন:

os.environ['TF_CONFIG'] = json.dumps(tf_config)

এখন, আপনি একজন শ্রমিকের প্রক্রিয়া যা চালানো হবে চালু করতে পারে main.py এবং ব্যবহার TF_CONFIG :

# first kill any previous runs
%killbgscripts
All background processes were killed.
python main.py &> job_0.log

উপরের কমান্ডটি সম্পর্কে কয়েকটি বিষয় লক্ষণীয়:

  1. এটি %%bash ব্যবহার করে যা কিছু ব্যাশ কমান্ড চালাতে একটি নোটবুক "যাদু"
  2. ব্যাকগ্রাউন্ডে bash প্রক্রিয়া চালাতে এটি --bg পতাকা ব্যবহার করে কারণ এই কর্মীটি শেষ করবে না। এটি শুরু হওয়ার আগে এটি সমস্ত শ্রমিকের জন্য অপেক্ষা করে।

ব্যাকগ্রাউন্ড ওয়ার্কার প্রক্রিয়া এই নোটবুকটিতে আউটপুট প্রিন্ট করবে না, সুতরাং &> এর আউটপুটটিকে কোনও ফাইলে পুনর্নির্দেশ করে, যাতে আপনি দেখতে পান see

সুতরাং, প্রক্রিয়াটি শুরু হতে কয়েক সেকেন্ড অপেক্ষা করুন:

import time
time.sleep(10)

এখন দেখুন শ্রমিকের লগফাইলে এ পর্যন্ত কী আউটপুট হয়েছে:

cat job_0.log
2021-02-23 02:20:33.706454: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2021-02-23 02:20:35.270749: I tensorflow/compiler/jit/xla_cpu_device.cc:41] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-02-23 02:20:35.271660: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2021-02-23 02:20:36.222960: E tensorflow/stream_executor/cuda/cuda_driver.cc:328] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2021-02-23 02:20:36.223030: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: kokoro-gcp-ubuntu-prod-692030523
2021-02-23 02:20:36.223039: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: kokoro-gcp-ubuntu-prod-692030523
2021-02-23 02:20:36.223151: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 450.51.5
2021-02-23 02:20:36.223184: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 450.51.5
2021-02-23 02:20:36.223191: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 450.51.5
2021-02-23 02:20:36.224026: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 AVX512F FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-02-23 02:20:36.224371: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-02-23 02:20:36.224902: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-02-23 02:20:36.228825: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:301] Initialize GrpcChannelCache for job worker -> {0 -> localhost:12345, 1 -> localhost:23456}
2021-02-23 02:20:36.229255: I tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:411] Started server with target: grpc://localhost:12345

লগ ফাইলের শেষ লাইনে বলা উচিত: Started server with target: grpc://localhost:12345 প্রথম কর্মী এখন প্রস্তুত, এবং অন্য সমস্ত কর্মী (গুলি) এগিয়ে যাওয়ার জন্য প্রস্তুত হওয়ার জন্য অপেক্ষা করছেন।

সুতরাং দ্বিতীয় কর্মী প্রক্রিয়াটি tf_config জন্য tf_config আপডেট করুন:

tf_config['task']['index'] = 1
os.environ['TF_CONFIG'] = json.dumps(tf_config)

এখন দ্বিতীয় কর্মী চালু করুন। এটি সমস্ত কর্মী সক্রিয় হওয়ার কারণে এটি প্রশিক্ষণ শুরু করবে (সুতরাং এই প্রক্রিয়াটির ব্যাকগ্রাউন্ড দেওয়ার দরকার নেই):

python main.py
Epoch 1/3
70/70 [==============================] - 6s 51ms/step - loss: 2.2830 - accuracy: 0.1437
Epoch 2/3
70/70 [==============================] - 3s 48ms/step - loss: 2.2478 - accuracy: 0.2122
Epoch 3/3
70/70 [==============================] - 3s 48ms/step - loss: 2.2050 - accuracy: 0.3511
2021-02-23 02:20:43.794926: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2021-02-23 02:20:45.375845: I tensorflow/compiler/jit/xla_cpu_device.cc:41] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-02-23 02:20:45.376779: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2021-02-23 02:20:46.347650: E tensorflow/stream_executor/cuda/cuda_driver.cc:328] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2021-02-23 02:20:46.347716: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: kokoro-gcp-ubuntu-prod-692030523
2021-02-23 02:20:46.347726: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: kokoro-gcp-ubuntu-prod-692030523
2021-02-23 02:20:46.347847: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 450.51.5
2021-02-23 02:20:46.347887: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 450.51.5
2021-02-23 02:20:46.347898: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 450.51.5
2021-02-23 02:20:46.348715: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 AVX512F FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-02-23 02:20:46.349096: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-02-23 02:20:46.349700: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-02-23 02:20:46.353497: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:301] Initialize GrpcChannelCache for job worker -> {0 -> localhost:12345, 1 -> localhost:23456}
2021-02-23 02:20:46.353936: I tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:411] Started server with target: grpc://localhost:23456
2021-02-23 02:20:47.285814: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:656] In AUTO-mode, and switching to DATA-based sharding, instead of FILE-based sharding as we cannot find appropriate reader dataset op(s) to shard. Error: Found an unshardable source dataset: name: "TensorSliceDataset/_2"
op: "TensorSliceDataset"
input: "Placeholder/_0"
input: "Placeholder/_1"
attr {
  key: "Toutput_types"
  value {
    list {
      type: DT_FLOAT
      type: DT_INT64
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
        dim {
          size: 28
        }
        dim {
          size: 28
        }
      }
      shape {
      }
    }
  }
}

2021-02-23 02:20:47.507974: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:116] None of the MLIR optimization passes are enabled (registered 2)
2021-02-23 02:20:47.508360: I tensorflow/core/platform/profile_utils/cpu_utils.cc:112] CPU Frequency: 2000140000 Hz

এখন আপনি যদি প্রথম কর্মীর দ্বারা রচিত লগগুলি পুনরায় পরীক্ষা করেন তবে আপনি দেখতে পাবেন যে এটি সেই মডেলটির প্রশিক্ষণে অংশ নিয়েছিল:

cat job_0.log
2021-02-23 02:20:33.706454: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2021-02-23 02:20:35.270749: I tensorflow/compiler/jit/xla_cpu_device.cc:41] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-02-23 02:20:35.271660: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2021-02-23 02:20:36.222960: E tensorflow/stream_executor/cuda/cuda_driver.cc:328] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2021-02-23 02:20:36.223030: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: kokoro-gcp-ubuntu-prod-692030523
2021-02-23 02:20:36.223039: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: kokoro-gcp-ubuntu-prod-692030523
2021-02-23 02:20:36.223151: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 450.51.5
2021-02-23 02:20:36.223184: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 450.51.5
2021-02-23 02:20:36.223191: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 450.51.5
2021-02-23 02:20:36.224026: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 AVX512F FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-02-23 02:20:36.224371: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-02-23 02:20:36.224902: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-02-23 02:20:36.228825: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:301] Initialize GrpcChannelCache for job worker -> {0 -> localhost:12345, 1 -> localhost:23456}
2021-02-23 02:20:36.229255: I tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:411] Started server with target: grpc://localhost:12345
2021-02-23 02:20:47.286117: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:656] In AUTO-mode, and switching to DATA-based sharding, instead of FILE-based sharding as we cannot find appropriate reader dataset op(s) to shard. Error: Found an unshardable source dataset: name: "TensorSliceDataset/_2"
op: "TensorSliceDataset"
input: "Placeholder/_0"
input: "Placeholder/_1"
attr {
  key: "Toutput_types"
  value {
    list {
      type: DT_FLOAT
      type: DT_INT64
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
        dim {
          size: 28
        }
        dim {
          size: 28
        }
      }
      shape {
      }
    }
  }
}

2021-02-23 02:20:47.508657: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:116] None of the MLIR optimization passes are enabled (registered 2)
2021-02-23 02:20:47.508964: I tensorflow/core/platform/profile_utils/cpu_utils.cc:112] CPU Frequency: 2000140000 Hz
Epoch 1/3
70/70 [==============================] - 6s 51ms/step - loss: 2.2830 - accuracy: 0.1437
Epoch 2/3
70/70 [==============================] - 3s 48ms/step - loss: 2.2478 - accuracy: 0.2122
Epoch 3/3
70/70 [==============================] - 3s 48ms/step - loss: 2.2050 - accuracy: 0.3511

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

# Delete the `TF_CONFIG`, and kill any background tasks so they don't affect the next section.
os.environ.pop('TF_CONFIG', None)
%killbgscripts
All background processes were killed.

গভীরতার বহু শ্রমিক প্রশিক্ষণ

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

ডেটাসেট শার্পিং

বহু-কর্মী প্রশিক্ষণে, রূপান্তর এবং কার্যকারিতা নিশ্চিত করার জন্য ডেটাসেট শারডিং প্রয়োজন।

পূর্ববর্তী বিভাগের উদাহরণটি tf.distribute.Strategy API দ্বারা সরবরাহিত ডিফল্ট অটোশেডিংয়ের উপর নির্ভর করে। আপনি সেট করে sharding নিয়ন্ত্রণ করতে পারেন tf.data.experimental.AutoShardPolicy এর tf.data.experimental.DistributeOptions । অটো-শারডিং সম্পর্কে আরও জানতে ডিস্ট্রিবিউটেড ইনপুট গাইডটি দেখুন

কীভাবে অটো শাড়িং বন্ধ করা যায় তার একটি দ্রুত উদাহরণ এখানে দেওয়া হয়েছে, সুতরাং প্রতিটি প্রতিলিপি প্রতিটি উদাহরণ প্রক্রিয়া করে (প্রস্তাবিত নয়):

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

global_batch_size = 64
multi_worker_dataset = mnist.mnist_dataset(batch_size=64)
dataset_no_auto_shard = multi_worker_dataset.with_options(options)

মূল্যায়ন

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

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

কর্মক্ষমতা

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

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

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

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

যখন কোনও শ্রমিক অনুপলব্ধ হয়ে যায়, অন্য শ্রমিকরা ব্যর্থ হবে (সম্ভবত একটি সময়সীমা পেরিয়ে যাওয়ার পরে)। এই ধরনের ক্ষেত্রে, অনুপলব্ধ কর্মী আবার চালু করা দরকার, পাশাপাশি অন্যান্য কর্মীরাও যে ব্যর্থ হয়েছে।

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

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

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

ModelCheckpoint ব্যবহারকারী ModelCheckpoint কলব্যাকের বাইরে মডেল / ModelCheckpoint সংরক্ষণ এবং পুনরুদ্ধার করতে পারেন।

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

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

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

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):
  # Note: there are two possible `TF_CONFIG` configuration.
  #   1) In addition to `worker` tasks, a `chief` task type is use;
  #      in this case, this function should be modified to 
  #      `return task_type == 'chief'`.
  #   2) Only `worker` task type is used; in this case, worker 0 is
  #      regarded as the chief. The implementation demonstrated here
  #      is for this case.
  # For the purpose of this colab section, we also add `task_type is None` 
  # case because it is effectively run with only single worker.
  return (task_type == 'worker' and task_id == 0) or task_type is None

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)
INFO:tensorflow:Assets written to: /tmp/keras-model/assets
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 the model is restored, and can continue with the training.
loaded_model.fit(single_worker_dataset, epochs=2, steps_per_epoch=20)
Epoch 1/2
20/20 [==============================] - 1s 13ms/step - loss: 2.3041 - accuracy: 7.8125e-04
Epoch 2/2
20/20 [==============================] - 0s 12ms/step - loss: 2.2873 - accuracy: 0.0023
<tensorflow.python.keras.callbacks.History at 0x7f62c4ef5048>

চেকপয়েন্ট সংরক্ষণ এবং পুনরুদ্ধার

অন্যদিকে, চেকপয়েন্টিং আপনাকে পুরো মডেলটি সংরক্ষণ না করে মডেলের ওজনগুলি সংরক্ষণ এবং পুনরুদ্ধার করতে দেয়। এখানে, আপনি একটি 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 [==============================] - 3s 13ms/step - loss: 2.3050 - accuracy: 0.0920
Epoch 2/2
20/20 [==============================] - 0s 12ms/step - loss: 2.2963 - accuracy: 0.0896
<tensorflow.python.keras.callbacks.History at 0x7f62c44a2710>

ব্যাকআপঅ্যান্ডস্ট্রোর কলব্যাক

BackupAndRestore কলব্যাক অধীনে মডেল এবং একটি অস্থায়ী চেকপয়েন্ট ফাইলে বর্তমান যুগে সংখ্যা ব্যাক আপ দ্বারা, ফল্ট সহনশীলতা কার্যকারিতা উপলব্ধ backup_dir আর্গুমেন্ট প্রাপ্ত করতে 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 = mnist.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 [==============================] - 4s 13ms/step - loss: 2.2930 - accuracy: 0.1316
Epoch 2/3
70/70 [==============================] - 1s 13ms/step - loss: 2.2467 - accuracy: 0.2765
Epoch 3/3
70/70 [==============================] - 1s 13ms/step - loss: 2.1963 - accuracy: 0.3645
<tensorflow.python.keras.callbacks.History at 0x7f62c4371390>

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

আরো দেখুন

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