সাহায্য Kaggle উপর TensorFlow সঙ্গে গ্রেট বেরিয়ার রিফ রক্ষা চ্যালেঞ্জ যোগদান

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

TensorFlow.org এ দেখুন Google Colab-এ চালান GitHub-এ উৎস দেখুন নোটবুক ডাউনলোড করুন

ওভারভিউ

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

গভীরভাবে আগ্রহী তাদের জন্য tf.distribute.Strategy API গুলি, TensorFlow বিতরণ প্রশিক্ষণ নির্দেশিকা বিতরণ নীতি TensorFlow সমর্থন একটি ওভারভিউ জন্য উপলব্ধ।

কীভাবে ব্যবহার করবেন তা জানার জন্য MultiWorkerMirroredStrategy Keras এবং একটি কাস্টম প্রশিক্ষণ লুপ সঙ্গে, পড়ুন Keras এবং MultiWorkerMirroredStrategy সঙ্গে কাস্টম প্রশিক্ষণ লুপ

মনে রাখবেন যে এই টিউটোরিয়ালটির উদ্দেশ্য হল দুটি কর্মী সহ একটি ন্যূনতম বহু-কর্মী উদাহরণ প্রদর্শন করা।

সেটআপ

কিছু প্রয়োজনীয় আমদানি দিয়ে শুরু করুন:

import json
import os
import sys

TensorFlow আমদানি করার আগে, পরিবেশে কিছু পরিবর্তন করুন:

  1. সমস্ত GPU নিষ্ক্রিয় করুন। এটি একই GPU ব্যবহার করার চেষ্টাকারী কর্মীদের দ্বারা সৃষ্ট ত্রুটিগুলিকে প্রতিরোধ করে৷ একটি বাস্তব-বিশ্বের অ্যাপ্লিকেশনে, প্রতিটি কর্মী আলাদা মেশিনে থাকবে।
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
  1. রিসেট করুন TF_CONFIG এনভায়রনমেন্ট ভেরিয়েবল (আপনি পরে এই সম্পর্কে আরো জানতে পারবেন):
os.environ.pop('TF_CONFIG', None)
  1. নিশ্চিত করুন যে বর্তমান ডিরেক্টরী পাইথন এর উপর তা নিশ্চিত করুন পথ-এই লেখা ফাইল আমদানি করতে নোটবুক পারবেন %%writefile পরে:
if '.' not in sys.path:
  sys.path.insert(0, '.')

এখন TensorFlow আমদানি করুন:

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 [0, 255] range.
  # You need to convert them to float32 with values in the [0, 1] range.
  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.layers.InputLayer(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
11501568/11490434 [==============================] - 0s 0us/step
2021-08-20 01:21:51.478839: E tensorflow/stream_executor/cuda/cuda_driver.cc:271] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2021-08-20 01:21:51.478914: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: kokoro-gcp-ubuntu-prod-2087993482
2021-08-20 01:21:51.478928: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: kokoro-gcp-ubuntu-prod-2087993482
2021-08-20 01:21:51.479029: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 470.57.2
2021-08-20 01:21:51.479060: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 470.57.2
2021-08-20 01:21:51.479067: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 470.57.2
2021-08-20 01:21:51.480364: 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.
Epoch 1/3
 1/70 [..............................] - ETA: 26s - loss: 2.3067 - accuracy: 0.0469
2021-08-20 01:21:52.316481: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:185] None of the MLIR Optimization Passes are enabled (registered 2)
70/70 [==============================] - 1s 12ms/step - loss: 2.2829 - accuracy: 0.1667
Epoch 2/3
70/70 [==============================] - 1s 12ms/step - loss: 2.2281 - accuracy: 0.3842
Epoch 3/3
70/70 [==============================] - 1s 12ms/step - loss: 2.1625 - accuracy: 0.5348
<keras.callbacks.History at 0x7f633d957390>

মাল্টি-কর্মী কনফিগারেশন

এখন মাল্টি-কর্মী প্রশিক্ষণের জগতে প্রবেশ করা যাক।

কাজ এবং কাজ সহ একটি ক্লাস্টার

TensorFlow সালে বিতরণ করা প্রশিক্ষণ জড়িত: একটি 'cluster' বিভিন্ন কাজ, এবং কাজ প্রতিটি এক বা একাধিক থাকতে পারে 'task' গুলি।

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

একটা দুই উপাদান TF_CONFIG : পরিবর্তনশীল 'cluster' এবং 'task'

  • একজন 'cluster' সব কর্মীদের জন্য সমান ও প্রশিক্ষণ ক্লাস্টার, যা যেমন কাজ বিভিন্ন ধরনের, এর মধ্যে রয়েছে একটি অভি সম্পর্কে তথ্য প্রদান করে 'worker' বা 'chief'

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

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

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

এখানে একই TF_CONFIG একটি JSON- স্ট্রিং হিসেবে ধারাবাহিকভাবে:

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

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

উপরোক্ত উদাহরণে কনফিগারেশনে, আপনি টাস্ক সেট 'type' থেকে 'worker' এবং কার্য 'index' থেকে 0 । অতএব, এই মেশিন প্রথম কর্মী। এটা তোলে হিসেবে নিয়োগ করা হবে 'chief' কর্মী এবং অন্যদের তুলনায় কাজ বেশি।

চিত্রণ উদ্দেশ্যে, এই টিউটোরিয়াল দেখায় কিভাবে আপনি আপ একটি সেট করতে পারেন TF_CONFIG দুই শ্রমিক সঙ্গে পরিবর্তনশীল একটি উপর localhost

বাস্তবে, আপনি বহিরাগত IP ঠিকানা / পোর্ট একাধিক শ্রমিক তৈরি এবং সেট হবে TF_CONFIG তদনুসারে প্রতিটি কর্মী উপর পরিবর্তনশীল।

এই টিউটোরিয়ালে, আপনি দুটি কর্মী ব্যবহার করবেন:

  • প্রথম ( 'chief' ) শ্রমিক TF_CONFIG উপরে দেখানো হয়।
  • দ্বিতীয় কর্মী জন্য, আপনি সেট হবে tf_config['task']['index']=1

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

সাবপ্রসেসগুলি তাদের পিতামাতার কাছ থেকে এনভায়রনমেন্ট ভেরিয়েবলের উত্তরাধিকারী হয়।

উদাহরণস্বরূপ, আপনি এই জুপিটার নোটবুক প্রক্রিয়ায় একটি পরিবেশ পরিবর্তনশীল সেট করতে পারেন:

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

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

echo ${GREETINGS}
Hello TensorFlow!

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

সঠিক কৌশল বেছে নিন

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

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

এই টিউটোরিয়ালটি কিভাবে প্রমান সমলয় মাল্টি কর্মী প্রশিক্ষণ সম্পাদনের জন্য একটি দৃষ্টান্ত ব্যবহার tf.distribute.MultiWorkerMirroredStrategy

MultiWorkerMirroredStrategy সব শ্রমিক একে ডিভাইসে মডেলের স্তরগুলোতে সব ভেরিয়েবল কপি তৈরি করে। এটি ব্যবহার করে CollectiveOps , সমষ্টিগত যোগাযোগের জন্য একটি TensorFlow অপ, সমষ্টিগত গ্রেডিয়েন্ট প্রয়োজন এবং সুসংগত ভেরিয়েবল রাখা। 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:Single-worker MultiWorkerMirroredStrategy with local_devices = ('/device:CPU:0',), communication = CommunicationImplementation.AUTO

MultiWorkerMirroredStrategy মাধ্যমে একাধিক বাস্তবায়নের উপলব্ধ CommunicationOptions পরামিতি: 1) RING কার্যকরী রিং-ভিত্তিক gRPC ক্রস হোস্ট যোগাযোগ স্তর হিসেবে ব্যবহার যৌথ; 2) NCCL ব্যবহার এনভিডিয়া কালেকটিভ কমিউনিকেশন লাইব্রেরী যৌথ বাস্তবায়ন করা; এবং 3) AUTO রানটাইম করতে পছন্দ অবকাশ। যৌথ বাস্তবায়নের সর্বোত্তম পছন্দ নির্ভর করে GPU-এর সংখ্যা এবং প্রকারের উপর এবং ক্লাস্টারে নেটওয়ার্ক আন্তঃসংযোগ।

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

একীকরণ সঙ্গে tf.distribute.Strategy মধ্যে এপিআই tf.keras , শুধুমাত্র সব পরিবর্তন বিতরণ করার মাল্টিপল-শ্রমিকদের প্রশিক্ষণ মডেল ভবন এবং পরিক্ষেপ হয় করতে হবে model.compile() কল ভিতরে strategy.scope() । বন্টন কৌশল এর সুযোগ নির্দেশনা কিভাবে এবং কোথায় ভেরিয়েবল নির্মিত এবং ক্ষেত্রে 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

সুতরাং JSON-ধারাবাহিকভাবে 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. এটি ব্যবহার করে --bg চালানোর পতাকা bash পটভূমিতে প্রক্রিয়া, কারণ এই কর্মী বিনষ্ট করা হবে না। এটি শুরু হওয়ার আগে সমস্ত কর্মীদের জন্য অপেক্ষা করে।

পশ্চাদপটে করা কর্মী প্রক্রিয়ায়, এই নোটবুক আউটপুট মুদ্রণ করতে হবে যাতে &> একটি ফাইলে তার আউটপুট পুননির্দেশনা যাতে আপনি পরিদর্শন করতে পারি পরে একটি লগ ফাইলে ঘটেছে।

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

import time
time.sleep(10)

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

cat job_0.log
2021-08-20 01:21:57.459034: E tensorflow/stream_executor/cuda/cuda_driver.cc:271] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2021-08-20 01:21:57.459133: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: kokoro-gcp-ubuntu-prod-2087993482
2021-08-20 01:21:57.459414: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: kokoro-gcp-ubuntu-prod-2087993482
2021-08-20 01:21:57.459531: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 470.57.2
2021-08-20 01:21:57.459575: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 470.57.2
2021-08-20 01:21:57.459586: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 470.57.2
2021-08-20 01:21:57.460413: 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-08-20 01:21:57.466180: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:272] Initialize GrpcChannelCache for job worker -> {0 -> localhost:12345, 1 -> localhost:23456}
2021-08-20 01:21:57.466667: I tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:427] Started server with target: grpc://localhost:12345

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

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

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

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

python main.py
Epoch 1/3
70/70 [==============================] - 6s 54ms/step - loss: 2.2796 - accuracy: 0.1292
Epoch 2/3
70/70 [==============================] - 4s 51ms/step - loss: 2.2285 - accuracy: 0.2898
Epoch 3/3
70/70 [==============================] - 4s 54ms/step - loss: 2.1706 - accuracy: 0.4835
2021-08-20 01:22:07.529925: E tensorflow/stream_executor/cuda/cuda_driver.cc:271] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2021-08-20 01:22:07.529987: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: kokoro-gcp-ubuntu-prod-2087993482
2021-08-20 01:22:07.529996: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: kokoro-gcp-ubuntu-prod-2087993482
2021-08-20 01:22:07.530089: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 470.57.2
2021-08-20 01:22:07.530125: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 470.57.2
2021-08-20 01:22:07.530136: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 470.57.2
2021-08-20 01:22:07.530785: 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-08-20 01:22:07.536395: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:272] Initialize GrpcChannelCache for job worker -> {0 -> localhost:12345, 1 -> localhost:23456}
2021-08-20 01:22:07.536968: I tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:427] Started server with target: grpc://localhost:23456
2021-08-20 01:22:08.764867: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:695] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: 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-08-20 01:22:08.983898: W tensorflow/core/framework/dataset.cc:679] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations.
2021-08-20 01:22:08.985655: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:185] None of the MLIR Optimization Passes are enabled (registered 2)

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

cat job_0.log
2021-08-20 01:21:57.459034: E tensorflow/stream_executor/cuda/cuda_driver.cc:271] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2021-08-20 01:21:57.459133: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: kokoro-gcp-ubuntu-prod-2087993482
2021-08-20 01:21:57.459414: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: kokoro-gcp-ubuntu-prod-2087993482
2021-08-20 01:21:57.459531: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 470.57.2
2021-08-20 01:21:57.459575: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 470.57.2
2021-08-20 01:21:57.459586: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 470.57.2
2021-08-20 01:21:57.460413: 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-08-20 01:21:57.466180: I tensorflow/core/distributed_runtime/rpc/grpc_channel.cc:272] Initialize GrpcChannelCache for job worker -> {0 -> localhost:12345, 1 -> localhost:23456}
2021-08-20 01:21:57.466667: I tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:427] Started server with target: grpc://localhost:12345
2021-08-20 01:22:08.759563: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:695] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: 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-08-20 01:22:08.976883: W tensorflow/core/framework/dataset.cc:679] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations.
2021-08-20 01:22:08.978435: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:185] None of the MLIR Optimization Passes are enabled (registered 2)
Epoch 1/3
70/70 [==============================] - 6s 54ms/step - loss: 2.2796 - accuracy: 0.1292
Epoch 2/3
70/70 [==============================] - 4s 52ms/step - loss: 2.2285 - accuracy: 0.2898
Epoch 3/3
70/70 [==============================] - 4s 54ms/step - loss: 2.1706 - accuracy: 0.4835

Unsurprisingly, এই দৌড়ে পরীক্ষা তুলনায় ধীর এই টিউটোরিয়ালের শুরুতে চালানো।

একটি একক মেশিনে একাধিক কর্মী চালানো শুধুমাত্র ওভারহেড যোগ করে।

এখানে লক্ষ্য ছিল প্রশিক্ষণের সময় উন্নত করা নয়, শুধুমাত্র বহু-কর্মী প্রশিক্ষণের একটি উদাহরণ দেওয়া।

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

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

এখন পর্যন্ত, আপনি শিখেছেন কিভাবে একটি মৌলিক মাল্টি-ওয়ার্কার সেটআপ করতে হয়।

টিউটোরিয়ালের বাকি সময়, আপনি অন্যান্য বিষয় সম্পর্কে বিস্তারিতভাবে শিখবেন, যা বাস্তব ব্যবহারের ক্ষেত্রে কার্যকর বা গুরুত্বপূর্ণ হতে পারে।

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

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

পূর্বের বিভাগে উদাহরণ দ্বারা নির্ধারিত ডিফল্ট autosharding উপর নির্ভর tf.distribute.Strategy API- টি। আপনি সেট করে sharding নিয়ন্ত্রণ করতে পারেন tf.data.experimental.AutoShardPolicy এর tf.data.experimental.DistributeOptions

স্বয়ং-sharding সম্পর্কে আরো জানতে, পড়ুন বন্টিত ইনপুট নির্দেশিকা

এখানে কিভাবে স্বয়ংক্রিয় বন্ধ sharding, তাই প্রতিটি প্রতিরূপ প্রত্যেক উদাহরণ (প্রস্তাবিত নয়) প্রক্রিয়া চালু করতে একটি দ্রুত উদাহরণ রয়েছে:

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_steps

একটি পুনরাবৃত্ত ডেটাসেট মূল্যায়নের জন্যও সুপারিশ করা হয়।

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

কর্মক্ষমতা

আপনি এখন একটি Keras মডেল যে সকল সঙ্গে একাধিক শ্রমিক চালানোর জন্য সেট আপ MultiWorkerMirroredStrategy

বহু-কর্মী প্রশিক্ষণের কর্মক্ষমতা পরিবর্তন করতে, আপনি নিম্নলিখিতগুলি চেষ্টা করতে পারেন:

  • tf.distribute.MultiWorkerMirroredStrategy একাধিক উপলব্ধ সমষ্টিগত যোগাযোগ বাস্তবায়নের :

    যৌথ বাস্তবায়নের সর্বোত্তম পছন্দ নির্ভর করে GPU এর সংখ্যা, GPU-এর ধরন এবং ক্লাস্টারে নেটওয়ার্ক ইন্টারকানেক্টের উপর। স্বয়ংক্রিয় পছন্দ ওভাররাইড করার জন্য, উল্লেখ communication_options এর প্যারামিটার MultiWorkerMirroredStrategy এর কন্সট্রাকটর। উদাহরণ স্বরূপ:

    communication_options=tf.distribute.experimental.CommunicationOptions(implementation=tf.distribute.experimental.CollectiveCommunication.NCCL)
    
  • থেকে ভেরিয়েবল কাস্ট tf.float সম্ভব হলে:

    • সরকারী ResNet মডেল অন্তর্ভুক্ত একটি উদাহরণ কিভাবে এই কাজ করা যেতে পারে এর।

দোষ সহনশীলতা

সিঙ্ক্রোনাস প্রশিক্ষণে, ক্লাস্টার ব্যর্থ হবে যদি একজন কর্মী ব্যর্থ হয় এবং কোনো ব্যর্থতা-পুনরুদ্ধারের ব্যবস্থা বিদ্যমান না থাকে।

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

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

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

ModelCheckpoint কলব্যাক আর দোষ সহনশীলতা কার্যকারিতা প্রদান করে, ব্যবহার করুন BackupAndRestore পরিবর্তে কলব্যাক।

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

বৈকল্পিকভাবে ব্যবহারকারী বাহিরে সংরক্ষণ করুন এবং মডেল / ওজন পুনরুদ্ধার করা চয়ন করতে পারেন ModelCheckpoint কলব্যাক।

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

আপনার মডেল ব্যবহার করে সংরক্ষণ করতে model.save বা tf.saved_model.save , সংরক্ষণ গন্তব্য চাহিদা প্রতিটি কর্মীর জন্য আলাদা হতে।

  • অ-প্রধান কর্মীদের জন্য, আপনাকে মডেলটিকে একটি অস্থায়ী ডিরেক্টরিতে সংরক্ষণ করতে হবে।
  • প্রধানের জন্য, আপনাকে প্রদত্ত মডেল ডিরেক্টরিতে সংরক্ষণ করতে হবে।

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

সমস্ত ডিরেক্টরিতে সংরক্ষিত মডেলটি অভিন্ন, এবং সাধারণত শুধুমাত্র প্রধান দ্বারা সংরক্ষিত মডেলটি পুনরুদ্ধার বা পরিবেশনের জন্য উল্লেখ করা উচিত।

আপনার কিছু ক্লিনআপ যুক্তি থাকা উচিত যা আপনার প্রশিক্ষণ শেষ হয়ে গেলে কর্মীদের দ্বারা তৈরি অস্থায়ী ডিরেক্টরিগুলি মুছে দেয়।

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

ব্যবহার MultiWorkerMirroredStrategy , প্রোগ্রাম অর্ডার জানেন যে কিনা বর্তমান কর্মী প্রধান প্রতিটি কর্মী চালানো হয়, এবং, এটা ক্লাস্টার সমাধানকারী বস্তু বৈশিষ্ট্য আছে সুবিধা নেয় task_type এবং task_id :

  • task_type আপনি বলে কি বর্তমান কাজ (যেমন হয় 'worker' )।
  • task_id আপনি শ্রমিকের আইডেন্টিফায়ার বলে।
  • সঙ্গে কর্মী task_id == 0 প্রধান কর্মী হিসেবে মনোনীত করা হয়।

কোড নিচে snippet, write_filepath ফাংশন লিখতে ফাইল পাথ, যা শ্রমিক উপর নির্ভর করে উপলব্ধ task_id :

  • প্রধান কর্মী (আমাদের সাথে যোগাযোগ task_id == 0 ), এটা মূল ফাইল পথে লিখেছেন।
  • অন্য যেসব কর্মীদের জন্য, এটি একটি অস্থায়ী directory- সৃষ্টি temp_dir -সঙ্গে task_id লিখতে ডিরেক্টরির পাথ:
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, the `task_type is None` case
  # is added because it is effectively run with only a 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)
2021-08-20 01:22:24.305980: W tensorflow/python/util/util.cc:348] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
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 এপিআই, এবং আরও কাজ চালিয়ে যান।

এখানে, শুধুমাত্র লোড একক কর্মী ব্যবহার করে এবং প্রশিক্ষণ, যে ক্ষেত্রে আপনি না কল অবিরত অনুমান tf.keras.models.load_model মধ্যে আরেকটি strategy.scope() (নোট যে strategy = tf.distribute.MultiWorkerMirroredStrategy() , সংজ্ঞায়িত আগে ):

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 16ms/step - loss: 2.2960 - accuracy: 0.0000e+00
Epoch 2/2
20/20 [==============================] - 0s 15ms/step - loss: 2.2795 - accuracy: 0.0000e+00
<keras.callbacks.History at 0x7f633b103910>

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

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

এখানে, আপনি একটি তৈরি করব 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)
2021-08-20 01:22:26.176660: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:695] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: 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-08-20 01:22:26.388321: W tensorflow/core/framework/dataset.cc:679] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations.
Epoch 1/2
20/20 [==============================] - 3s 13ms/step - loss: 2.2948 - accuracy: 0.0000e+00
Epoch 2/2
20/20 [==============================] - 0s 13ms/step - loss: 2.2785 - accuracy: 0.0000e+00
<keras.callbacks.History at 0x7f635d404450>

ব্যাকআপ এবং কলব্যাক পুনরুদ্ধার করুন

tf.keras.callbacks.experimental.BackupAndRestore কলব্যাক অধীনে মডেল এবং একটি অস্থায়ী চেকপয়েন্ট ফাইলে বর্তমান যুগে সংখ্যা ব্যাক আপ দ্বারা দোষ সহনশীলতা কার্যকারিতা উপলব্ধ backup_dir আর্গুমেন্ট প্রাপ্ত করতে BackupAndRestore । এটি প্রতিটি যুগের শেষে করা হয়।

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

এটি ব্যবহার করার সময় একটি দৃষ্টান্ত প্রদান tf.keras.callbacks.experimental.BackupAndRestoreModel.fit কল।

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

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

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

# Multi-worker training with MultiWorkerMirroredStrategy
# and the BackupAndRestore callback.

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)
2021-08-20 01:22:29.530251: W tensorflow/core/grappler/optimizers/data/auto_shard.cc:695] AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy because of the following reason: 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 {
      }
    }
  }
}
Epoch 1/3
70/70 [==============================] - 3s 12ms/step - loss: 2.2759 - accuracy: 0.1625
Epoch 2/3
70/70 [==============================] - 1s 12ms/step - loss: 2.2146 - accuracy: 0.2761
Epoch 3/3
70/70 [==============================] - 1s 12ms/step - loss: 2.1456 - accuracy: 0.4344
<keras.callbacks.History at 0x7f635d2aac90>

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

অতিরিক্ত সম্পদ

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