গুগল আই/ও একটি মোড়ক! TensorFlow সেশনগুলি দেখুন সেশনগুলি দেখুন

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

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

ওভারভিউ

tf.distribute.Strategy হল একটি TensorFlow API যা একাধিক GPU, একাধিক মেশিন বা TPU-তে প্রশিক্ষণ বিতরণ করতে পারে। এই API ব্যবহার করে, আপনি ন্যূনতম কোড পরিবর্তনের সাথে আপনার বিদ্যমান মডেল এবং প্রশিক্ষণ কোড বিতরণ করতে পারেন।

tf.distribute.Strategy .কৌশল এই মূল লক্ষ্যগুলি মাথায় রেখে ডিজাইন করা হয়েছে:

  • গবেষক, মেশিন লার্নিং ইঞ্জিনিয়ার, ইত্যাদি সহ একাধিক ব্যবহারকারীর অংশগুলি ব্যবহার এবং সমর্থন করা সহজ।
  • বক্সের বাইরে ভাল পারফরম্যান্স প্রদান করুন।
  • কৌশলগুলির মধ্যে সহজ স্যুইচিং।

আপনি Keras Model.fit এর মতো উচ্চ-স্তরের API সহ tf.distribute.Strategy ব্যবহার করে প্রশিক্ষণ বিতরণ করতে পারেন, সেইসাথে কাস্টম প্রশিক্ষণ লুপ (এবং, সাধারণভাবে, TensorFlow ব্যবহার করে যে কোনো গণনা)।

TensorFlow 2.x-এ, আপনি আপনার প্রোগ্রামগুলি সাগ্রহে চালাতে পারেন, অথবা tf.function ব্যবহার করে একটি গ্রাফে। tf.distribute.Strategy কার্যকর করার এই উভয় মোডকে সমর্থন করতে চায়, কিন্তু tf.function এর সাথে সবচেয়ে ভালো কাজ করে। Eager মোড শুধুমাত্র ডিবাগিং উদ্দেশ্যে সুপারিশ করা হয় এবং tf.distribute.TPUStrategy জন্য সমর্থিত নয়। যদিও প্রশিক্ষণ এই গাইডের ফোকাস, এই API বিভিন্ন প্ল্যাটফর্মে মূল্যায়ন এবং ভবিষ্যদ্বাণী বিতরণের জন্যও ব্যবহার করা যেতে পারে।

আপনি আপনার কোডে খুব কম পরিবর্তন করে tf.distribute.Strategy ব্যবহার করতে পারেন, কারণ TensorFlow-এর অন্তর্নিহিত উপাদানগুলিকে কৌশল-সচেতন হওয়ার জন্য পরিবর্তন করা হয়েছে। এর মধ্যে রয়েছে ভেরিয়েবল, স্তর, মডেল, অপ্টিমাইজার, মেট্রিক্স, সারাংশ এবং চেকপয়েন্ট।

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

TensorFlow সেট আপ করুন

import tensorflow as tf

কৌশলের ধরন

tf.distribute.Strategy বিভিন্ন অক্ষ বরাবর বেশ কিছু ব্যবহারের ক্ষেত্রে কভার করতে চায়। এই সমন্বয়গুলির মধ্যে কিছু বর্তমানে সমর্থিত এবং অন্যগুলি ভবিষ্যতে যোগ করা হবে৷ এই অক্ষগুলির মধ্যে কয়েকটি হল:

  • সিঙ্ক্রোনাস বনাম অ্যাসিঙ্ক্রোনাস প্রশিক্ষণ: ডেটা সমান্তরালতার সাথে প্রশিক্ষণ বিতরণের এই দুটি সাধারণ উপায়। সিঙ্ক প্রশিক্ষণে, সমস্ত কর্মীরা সিঙ্কে ইনপুট ডেটার বিভিন্ন স্লাইস এবং প্রতিটি ধাপে গ্রেডিয়েন্টের সমষ্টির উপর প্রশিক্ষণ দেয়। অ্যাসিঙ্ক প্রশিক্ষণে, সমস্ত কর্মী স্বাধীনভাবে ইনপুট ডেটার উপর প্রশিক্ষণ নিচ্ছে এবং অ্যাসিঙ্ক্রোনাসভাবে ভেরিয়েবল আপডেট করছে। সাধারণত সিঙ্ক প্রশিক্ষণ প্যারামিটার সার্ভার আর্কিটেকচারের মাধ্যমে অল-রিডুস এবং অ্যাসিঙ্কের মাধ্যমে সমর্থিত হয়।
  • হার্ডওয়্যার প্ল্যাটফর্ম: আপনি একটি মেশিনে একাধিক GPU, বা নেটওয়ার্কের একাধিক মেশিনে (প্রতিটি 0 বা তার বেশি GPU সহ), বা ক্লাউড TPU-তে আপনার প্রশিক্ষণ স্কেল করতে চাইতে পারেন।

এই ব্যবহারের ক্ষেত্রে সমর্থন করার জন্য, TensorFlow-এর MirroredStrategy , TPUStrategy , MultiWorkerMirroredStrategy , ParameterServerStrategy , CentralStorageStrategy , সেইসাথে অন্যান্য কৌশল উপলব্ধ রয়েছে৷ পরবর্তী বিভাগে ব্যাখ্যা করা হয়েছে যে টেনসরফ্লো-এর কোন পরিস্থিতিতে এগুলোর কোনটি সমর্থিত। এখানে একটি দ্রুত ওভারভিউ আছে:

প্রশিক্ষণ API MirroredStrategy TPUStrategy MultiWorkerMirroredStrategy CentralStorageStrategy ParameterServerStrategy
কেরাস Model.fit সমর্থিত সমর্থিত সমর্থিত পরীক্ষামূলক সমর্থন পরীক্ষামূলক সমর্থন
কাস্টম প্রশিক্ষণ লুপ সমর্থিত সমর্থিত সমর্থিত পরীক্ষামূলক সমর্থন পরীক্ষামূলক সমর্থন
অনুমানকারী API সীমিত সমর্থন সমর্থিত নয় সীমিত সমর্থন সীমিত সমর্থন সীমিত সমর্থন

মিররড স্ট্র্যাটেজি

tf.distribute.MirroredStrategy এক মেশিনে একাধিক GPU-তে সিঙ্ক্রোনাস বিতরণ করা প্রশিক্ষণ সমর্থন করে। এটি প্রতি GPU ডিভাইসে একটি প্রতিরূপ তৈরি করে। মডেলের প্রতিটি পরিবর্তনশীল সমস্ত প্রতিলিপি জুড়ে মিরর করা হয়। একসাথে, এই ভেরিয়েবলগুলি একটি একক ধারণাগত পরিবর্তনশীল গঠন করে যার নাম MirroredVariable . এই ভেরিয়েবলগুলি অভিন্ন আপডেট প্রয়োগ করে একে অপরের সাথে সিঙ্কে রাখা হয়।

দক্ষ অল-রিডুস অ্যালগরিদমগুলি সমস্ত ডিভাইস জুড়ে পরিবর্তনশীল আপডেটগুলিকে যোগাযোগ করতে ব্যবহৃত হয়। অল-রিডুস অ্যাগ্রিগেট টেনসরগুলিকে যোগ করে সমস্ত ডিভাইস জুড়ে, এবং সেগুলিকে প্রতিটি ডিভাইসে উপলব্ধ করে। এটি একটি ফিউজড অ্যালগরিদম যা খুবই দক্ষ এবং সিঙ্ক্রোনাইজেশনের ওভারহেডকে উল্লেখযোগ্যভাবে কমাতে পারে। ডিভাইসগুলির মধ্যে উপলব্ধ যোগাযোগের প্রকারের উপর নির্ভর করে অনেকগুলি অল-রিডুস অ্যালগরিদম এবং বাস্তবায়ন উপলব্ধ রয়েছে৷ ডিফল্টরূপে, এটি NVIDIA কালেক্টিভ কমিউনিকেশন লাইব্রেরি ( NCCL ) ব্যবহার করে সর্ব-কমানোর বাস্তবায়ন হিসাবে। আপনি অন্য কয়েকটি বিকল্প থেকে বেছে নিতে পারেন বা আপনার নিজের লিখতে পারেন।

এখানে MirroredStrategy তৈরি করার সবচেয়ে সহজ উপায় রয়েছে:

mirrored_strategy = tf.distribute.MirroredStrategy()
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)

এটি একটি MirroredStrategy স্ট্র্যাটেজি ইনস্ট্যান্স তৈরি করবে, যা টেনসরফ্লোতে দৃশ্যমান সমস্ত GPU এবং NCCL-কে ক্রস-ডিভাইস যোগাযোগ হিসাবে ব্যবহার করবে।

আপনি যদি আপনার মেশিনে শুধুমাত্র কিছু GPU ব্যবহার করতে চান, তাহলে আপনি এটি করতে পারেন:

mirrored_strategy = tf.distribute.MirroredStrategy(devices=["/gpu:0", "/gpu:1"])
WARNING:tensorflow:Some requested devices in `tf.distribute.Strategy` are not visible to TensorFlow: /job:localhost/replica:0/task:0/device:GPU:1,/job:localhost/replica:0/task:0/device:GPU:0
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1')

আপনি যদি ক্রস ডিভাইস যোগাযোগ ওভাররাইড করতে চান, তাহলে আপনি tf.distribute.CrossDeviceOps এর একটি উদাহরণ সরবরাহ করে cross_device_ops আর্গুমেন্ট ব্যবহার করে তা করতে পারেন। বর্তমানে, tf.distribute.HierarchicalCopyAllReduce এবং tf.distribute.ReductionToOneDevice হল tf.distribute.NcclAllReduce ছাড়া দুটি বিকল্প, যা ডিফল্ট।

mirrored_strategy = tf.distribute.MirroredStrategy(
    cross_device_ops=tf.distribute.HierarchicalCopyAllReduce())
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)

টিপিইউ কৌশল

tf.distribute.TPUStrategy আপনাকে টেনসর প্রসেসিং ইউনিটে (TPUs) আপনার টেনসরফ্লো প্রশিক্ষণ চালাতে দেয়। TPUs হল Google-এর বিশেষায়িত ASICs যা মেশিন লার্নিং কাজের চাপকে নাটকীয়ভাবে ত্বরান্বিত করার জন্য ডিজাইন করা হয়েছে। এগুলি Google Colab , TPU Research Cloud , এবং Cloud TPU-তে পাওয়া যায়।

ডিস্ট্রিবিউটেড ট্রেনিং আর্কিটেকচারের ক্ষেত্রে, TPUStrategy একই MirroredStrategy স্ট্র্যাটেজি—এটি সিঙ্ক্রোনাস ডিস্ট্রিবিউটেড ট্রেনিং প্রয়োগ করে। TPU গুলি একাধিক TPU কোর জুড়ে দক্ষ অল-রিডুস এবং অন্যান্য যৌথ ক্রিয়াকলাপের নিজস্ব বাস্তবায়ন প্রদান করে, যেগুলি TPUStrategy এ ব্যবহৃত হয়।

এখানে আপনি কিভাবে TPUStrategy সূচনা করবেন:

cluster_resolver = tf.distribute.cluster_resolver.TPUClusterResolver(
    tpu=tpu_address)
tf.config.experimental_connect_to_cluster(cluster_resolver)
tf.tpu.experimental.initialize_tpu_system(cluster_resolver)
tpu_strategy = tf.distribute.TPUStrategy(cluster_resolver)

TPUClusterResolver উদাহরণ টিপিইউগুলি সনাক্ত করতে সাহায্য করে। Colab-এ, আপনাকে এটির জন্য কোনো আর্গুমেন্ট উল্লেখ করতে হবে না।

আপনি যদি ক্লাউড TPU-এর জন্য এটি ব্যবহার করতে চান:

  • tpu আর্গুমেন্টে আপনাকে অবশ্যই আপনার TPU সম্পদের নাম উল্লেখ করতে হবে।
  • প্রোগ্রামের শুরুতে আপনাকে অবশ্যই TPU সিস্টেমটি স্পষ্টভাবে শুরু করতে হবে। TPUs গণনার জন্য ব্যবহার করার আগে এটি প্রয়োজন। টিপিইউ সিস্টেম শুরু করার ফলে টিপিইউ মেমরিও মুছে যায়, তাই অবস্থা হারানো এড়াতে প্রথমে এই পদক্ষেপটি সম্পূর্ণ করা গুরুত্বপূর্ণ।

মাল্টিওয়ার্কার মিররড স্ট্র্যাটেজি

tf.distribute.MultiWorkerMirroredStrategy MirroredStrategy এর মতো। এটি একাধিক কর্মীদের মধ্যে সিঙ্ক্রোনাস বিতরণ করা প্রশিক্ষণ প্রয়োগ করে, প্রতিটি সম্ভাব্য একাধিক GPU সহ। tf.distribute.MirroredStrategy এর মতই, এটি সমস্ত কর্মী জুড়ে প্রতিটি ডিভাইসে মডেলের সমস্ত ভেরিয়েবলের কপি তৈরি করে।

এখানে MultiWorkerMirroredStrategy তৈরির সবচেয়ে সহজ উপায় রয়েছে:

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:GPU:0',), communication = CommunicationImplementation.AUTO

MultiWorkerMirroredStrategy এর ক্রস-ডিভাইস যোগাযোগের জন্য দুটি বাস্তবায়ন রয়েছে। CommunicationImplementation.RING হল RPC- ভিত্তিক এবং CPU এবং GPU উভয়কেই সমর্থন করে। CommunicationImplementation.NCCL NCCL ব্যবহার করে এবং GPU-তে অত্যাধুনিক কর্মক্ষমতা প্রদান করে কিন্তু এটি CPU-কে সমর্থন করে না। CollectiveCommunication.AUTO টেনসরফ্লোতে পছন্দকে পিছিয়ে দেয়। আপনি নিম্নলিখিত উপায়ে তাদের নির্দিষ্ট করতে পারেন:

communication_options = tf.distribute.experimental.CommunicationOptions(
    implementation=tf.distribute.experimental.CommunicationImplementation.NCCL)
strategy = tf.distribute.MultiWorkerMirroredStrategy(
    communication_options=communication_options)
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:GPU:0',), communication = CommunicationImplementation.NCCL

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

MultiWorkerMirroredStrategy সম্পর্কে আরও বিস্তারিত জানার জন্য, নিম্নলিখিত টিউটোরিয়ালগুলি বিবেচনা করুন:

প্যারামিটার সার্ভার কৌশল

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

TensorFlow 2-এ, প্যারামিটার সার্ভার প্রশিক্ষণ tf.distribute.experimental.coordinator.ClusterCoordinator ক্লাসের মাধ্যমে একটি কেন্দ্রীয় সমন্বয়কারী-ভিত্তিক আর্কিটেকচার ব্যবহার করে।

এই বাস্তবায়নে, worker এবং parameter server কাজগুলি tf.distribute.Server চালায় যেগুলি সমন্বয়কারীর কাছ থেকে কাজগুলি শোনে। সমন্বয়কারী সংস্থান তৈরি করে, প্রশিক্ষণের কাজগুলি প্রেরণ করে, চেকপয়েন্ট লেখে এবং টাস্ক ব্যর্থতার সাথে ডিল করে।

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

strategy = tf.distribute.experimental.ParameterServerStrategy(
    tf.distribute.cluster_resolver.TFConfigClusterResolver(),
    variable_partitioner=variable_partitioner)
coordinator = tf.distribute.experimental.coordinator.ClusterCoordinator(
    strategy)

ParameterServerStrategy সম্পর্কে আরও জানতে, Keras Model.fit এর সাথে প্যারামিটার সার্ভার প্রশিক্ষণ এবং একটি কাস্টম প্রশিক্ষণ লুপ টিউটোরিয়াল দেখুন।

TensorFlow 1-এ, ParameterServerStrategy সার্ভার স্ট্র্যাটেজি শুধুমাত্র tf.compat.v1.distribute.experimental.ParameterServerStrategy চিহ্নের মাধ্যমে একটি অনুমানকারীর সাথে উপলব্ধ।

কেন্দ্রীয় স্টোরেজ কৌশল

tf.distribute.experimental.CentralStorageStrategy পাশাপাশি সিঙ্ক্রোনাস প্রশিক্ষণও করে। ভেরিয়েবলগুলি মিরর করা হয় না, পরিবর্তে সেগুলি সিপিইউতে স্থাপন করা হয় এবং সমস্ত স্থানীয় GPU তে অপারেশনগুলি প্রতিলিপি করা হয়। শুধুমাত্র একটি GPU থাকলে, সমস্ত ভেরিয়েবল এবং অপারেশন সেই GPU-তে স্থাপন করা হবে।

এর দ্বারা CentralStorageStrategy এর একটি উদাহরণ তৈরি করুন:

central_storage_strategy = tf.distribute.experimental.CentralStorageStrategy()
INFO:tensorflow:ParameterServerStrategy (CentralStorageStrategy if you are using a single machine) with compute_devices = ['/job:localhost/replica:0/task:0/device:GPU:0'], variable_device = '/job:localhost/replica:0/task:0/device:GPU:0'

এটি একটি CentralStorageStrategy উদাহরণ তৈরি করবে যা সমস্ত দৃশ্যমান GPU এবং CPU ব্যবহার করবে। প্রতিলিপিতে ভেরিয়েবলের আপডেট ভেরিয়েবলে প্রয়োগ করার আগে একত্রিত করা হবে।

অন্যান্য কৌশল

উপরের কৌশলগুলি ছাড়াও, আরও দুটি কৌশল রয়েছে যা tf.distribute API ব্যবহার করার সময় প্রোটোটাইপিং এবং ডিবাগিংয়ের জন্য কার্যকর হতে পারে।

ডিফল্ট কৌশল

ডিফল্ট স্ট্র্যাটেজি হল একটি ডিস্ট্রিবিউশন স্ট্র্যাটেজি যা উপস্থিত থাকে যখন কোনো সুস্পষ্ট ডিস্ট্রিবিউশন কৌশল থাকে না। এটি tf.distribute.Strategy ইন্টারফেস প্রয়োগ করে কিন্তু এটি একটি পাস-থ্রু এবং কোন প্রকৃত বিতরণ প্রদান করে না। উদাহরণস্বরূপ, Strategy.run(fn) শুধু fn কল করবে। এই কৌশল ব্যবহার করে লেখা কোড কোন কৌশল ছাড়াই লেখা কোডের মতোই আচরণ করা উচিত। আপনি এটিকে "নো-অপ" কৌশল হিসাবে ভাবতে পারেন।

ডিফল্ট কৌশলটি একটি একক-এবং কেউ এটির আরও উদাহরণ তৈরি করতে পারে না। এটি tf.distribute.get_strategy ব্যবহার করে যেকোন স্পষ্ট কৌশলের সুযোগের বাইরে প্রাপ্ত করা যেতে পারে (একই API যা একটি সুস্পষ্ট কৌশলের সুযোগের মধ্যে বর্তমান কৌশলটি পেতে ব্যবহার করা যেতে পারে)।

default_strategy = tf.distribute.get_strategy()

এই কৌশল দুটি প্রধান উদ্দেশ্য পরিবেশন করে:

  • এটি বিতরণ-সচেতন লাইব্রেরি কোড নিঃশর্তভাবে লেখার অনুমতি দেয়। উদাহরণস্বরূপ, tf.optimizer s-এ আপনি tf.distribute.get_strategy ব্যবহার করতে পারেন এবং গ্রেডিয়েন্ট কমানোর জন্য সেই কৌশলটি ব্যবহার করতে পারেন—এটি সর্বদা একটি কৌশল অবজেক্ট ফিরিয়ে দেবে যার উপর আপনি Strategy.reduce API কল করতে পারেন।
# In optimizer or other library code
# Get currently active strategy
strategy = tf.distribute.get_strategy()
strategy.reduce("SUM", 1., axis=None)  # reduce some values
1.0
  • লাইব্রেরি কোডের মতো, এটি শর্তসাপেক্ষ যুক্তির প্রয়োজন ছাড়াই বিতরণ কৌশলের সাথে এবং ছাড়াই কাজ করার জন্য শেষ ব্যবহারকারীদের প্রোগ্রাম লিখতে ব্যবহার করা যেতে পারে। এখানে একটি নমুনা কোড স্নিপেট এটি ব্যাখ্যা করে:
if tf.config.list_physical_devices('GPU'):
  strategy = tf.distribute.MirroredStrategy()
else:  # Use the Default Strategy
  strategy = tf.distribute.get_strategy()

with strategy.scope():
  # Do something interesting
  print(tf.Variable(1.))
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)
MirroredVariable:{
  0: <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=1.0>
}

OneDevice Strategy

tf.distribute.OneDeviceStrategy হল একটি নির্দিষ্ট ডিভাইসে সমস্ত ভেরিয়েবল এবং গণনা রাখার একটি কৌশল।

strategy = tf.distribute.OneDeviceStrategy(device="/gpu:0")

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

এই কৌশলের মাধ্যমে বিতরণ করা ইনপুট নির্দিষ্ট ডিভাইসে প্রিফেচ করা হবে। ডিফল্ট কৌশলে, কোন ইনপুট বিতরণ নেই।

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

এখন পর্যন্ত আপনি বিভিন্ন কৌশল সম্পর্কে শিখেছেন এবং কীভাবে আপনি তাদের ইনস্ট্যান্টিয়েট করতে পারেন। পরবর্তী কয়েকটি বিভাগ বিভিন্ন উপায় দেখায় যা আপনি আপনার প্রশিক্ষণ বিতরণ করতে ব্যবহার করতে পারেন।

Keras Model.fit এর সাথে tf.distribute.Strategy ব্যবহার করুন

tf.distribute.Strategy tf.keras একীভূত করা হয়েছে, যা কেরাস API স্পেসিফিকেশনের TensorFlow-এর বাস্তবায়ন। tf.keras মডেল তৈরি এবং প্রশিক্ষণের জন্য একটি উচ্চ-স্তরের API। tf.keras ব্যাকএন্ডে একীভূত করার মাধ্যমে, Model.fit ব্যবহার করে কেরাস প্রশিক্ষণ কাঠামোতে লেখা আপনার প্রশিক্ষণ বিতরণ করা আপনার জন্য নিরবচ্ছিন্ন।

আপনার কোডে আপনাকে যা পরিবর্তন করতে হবে তা এখানে:

  1. উপযুক্ত tf.distribute.Strategy এর একটি উদাহরণ তৈরি করুন।
  2. কেরাস মডেল, অপ্টিমাইজার এবং মেট্রিক্স strategy.scope ভিতরে তৈরি করুন।

টেনসরফ্লো বন্টন কৌশল সব ধরনের কেরাস মডেলকে সমর্থন করে- অনুক্রমিক , কার্যকরী এবং উপশ্রেণীভুক্ত

একটি Dense স্তর সহ একটি খুব সাধারণ কেরাস মডেলের জন্য এটি করার জন্য এখানে কোডের একটি স্নিপেট রয়েছে:

mirrored_strategy = tf.distribute.MirroredStrategy()

with mirrored_strategy.scope():
  model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(1,))])

model.compile(loss='mse', optimizer='sgd')
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0',)
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).

এই উদাহরণটি MirroredStrategy ব্যবহার করে, তাই আপনি একাধিক GPU সহ একটি মেশিনে এটি চালাতে পারেন। কৌশল.স্কোপ strategy.scope() কেরাসকে নির্দেশ করে যে প্রশিক্ষণ বিতরণ করার জন্য কোন কৌশল ব্যবহার করতে হবে। এই সুযোগের মধ্যে মডেল/অপ্টিমাইজার/মেট্রিক্স তৈরি করা আপনাকে নিয়মিত ভেরিয়েবলের পরিবর্তে বিতরণ করা ভেরিয়েবল তৈরি করতে দেয়। একবার এটি সেট আপ হয়ে গেলে, আপনি সাধারণত আপনার মডেলের মতো ফিট করতে পারেন। MirroredStrategy উপলব্ধ জিপিইউ, গ্রেডিয়েন্টের সমষ্টি এবং আরও অনেক কিছুতে মডেলের প্রশিক্ষণের প্রতিলিপি করার যত্ন নেয়।

dataset = tf.data.Dataset.from_tensors(([1.], [1.])).repeat(100).batch(10)
model.fit(dataset, epochs=2)
model.evaluate(dataset)
Epoch 1/2
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
2021-10-26 01:27:56.527729: 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: "TensorDataset/_2"
op: "TensorDataset"
input: "Placeholder/_0"
input: "Placeholder/_1"
attr {
  key: "Toutput_types"
  value {
    list {
      type: DT_FLOAT
      type: DT_FLOAT
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
        dim {
          size: 1
        }
      }
      shape {
        dim {
          size: 1
        }
      }
    }
  }
}
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
10/10 [==============================] - 3s 2ms/step - loss: 2.2552
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
INFO:tensorflow:Reduce to /job:localhost/replica:0/task:0/device:CPU:0 then broadcast to ('/job:localhost/replica:0/task:0/device:CPU:0',).
Epoch 2/2
10/10 [==============================] - 0s 2ms/step - loss: 0.9968
2021-10-26 01:27:59.372113: 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: "TensorDataset/_2"
op: "TensorDataset"
input: "Placeholder/_0"
input: "Placeholder/_1"
attr {
  key: "Toutput_types"
  value {
    list {
      type: DT_FLOAT
      type: DT_FLOAT
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
        dim {
          size: 1
        }
      }
      shape {
        dim {
          size: 1
        }
      }
    }
  }
}
10/10 [==============================] - 1s 2ms/step - loss: 0.6190
0.6190494298934937

এখানে একটি tf.data.Dataset প্রশিক্ষণ এবং ইভাল ইনপুট প্রদান করে। আপনি NumPy অ্যারে ব্যবহার করতে পারেন:

import numpy as np

inputs, targets = np.ones((100, 1)), np.ones((100, 1))
model.fit(inputs, targets, epochs=2, batch_size=10)
Epoch 1/2
2021-10-26 01:28:00.609977: 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: Did not find a shardable source, walked to a node which is not a dataset: name: "FlatMapDataset/_9"
op: "FlatMapDataset"
input: "PrefetchDataset/_8"
attr {
  key: "Targuments"
  value {
    list {
    }
  }
}
attr {
  key: "f"
  value {
    func {
      name: "__inference_Dataset_flat_map_slice_batch_indices_997"
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
        dim {
          size: 10
        }
      }
    }
  }
}
attr {
  key: "output_types"
  value {
    list {
      type: DT_INT64
    }
  }
}
. Consider either turning off auto-sharding or switching the auto_shard_policy to DATA to shard this dataset. You can do this by creating a new `tf.data.Options()` object then setting `options.experimental_distribute.auto_shard_policy = AutoShardPolicy.DATA` before applying the options object to the dataset via `dataset.with_options(options)`.
10/10 [==============================] - 1s 2ms/step - loss: 0.4406
Epoch 2/2
10/10 [==============================] - 0s 2ms/step - loss: 0.1947
<keras.callbacks.History at 0x7fb81813d2d0>

উভয় ক্ষেত্রেই- Dataset বা NumPy-এর সাথে প্রদত্ত ইনপুটের প্রতিটি ব্যাচ একাধিক প্রতিলিপিগুলির মধ্যে সমানভাবে বিভক্ত। উদাহরণস্বরূপ, আপনি যদি 2টি GPU-এর সাথে MirroredStrategy ব্যবহার করেন, তাহলে 10 আকারের প্রতিটি ব্যাচকে 2টি GPU-এর মধ্যে ভাগ করা হবে, প্রতিটি ধাপে 5টি ইনপুট উদাহরণ পাবে। আপনি আরও GPU যোগ করার সাথে সাথে প্রতিটি যুগ দ্রুত প্রশিক্ষণ পাবে। সাধারণত, অতিরিক্ত কম্পিউটিং শক্তির কার্যকর ব্যবহার করার জন্য আপনি আরও এক্সিলারেটর যুক্ত করার সাথে সাথে আপনার ব্যাচের আকার বাড়াতে চান। মডেলের উপর নির্ভর করে আপনাকে আপনার শেখার হার পুনরায় টিউন করতে হবে। প্রতিলিপির সংখ্যা পেতে আপনি strategy.num_replicas_in_sync ব্যবহার করতে পারেন।

# Compute a global batch size using a number of replicas.
BATCH_SIZE_PER_REPLICA = 5
global_batch_size = (BATCH_SIZE_PER_REPLICA *
                     mirrored_strategy.num_replicas_in_sync)
dataset = tf.data.Dataset.from_tensors(([1.], [1.])).repeat(100)
dataset = dataset.batch(global_batch_size)

LEARNING_RATES_BY_BATCH_SIZE = {5: 0.1, 10: 0.15}
learning_rate = LEARNING_RATES_BY_BATCH_SIZE[global_batch_size]

এখন কি সমর্থিত?

প্রশিক্ষণ API MirroredStrategy TPUStrategy MultiWorkerMirroredStrategy ParameterServerStrategy CentralStorageStrategy
কেরাস Model.fit সমর্থিত সমর্থিত সমর্থিত পরীক্ষামূলক সমর্থন পরীক্ষামূলক সমর্থন

উদাহরণ এবং টিউটোরিয়াল

এখানে টিউটোরিয়াল এবং উদাহরণগুলির একটি তালিকা রয়েছে যা Model.fit এর সাথে উপরের ইন্টিগ্রেশন এন্ড-টু-এন্ড চিত্রিত করে:

  1. টিউটোরিয়াল : Model.fit এবং MirroredStrategy এর সাথে প্রশিক্ষণ।
  2. টিউটোরিয়াল : Model.fit এবং MultiWorkerMirroredStrategy এর সাথে প্রশিক্ষণ।
  3. গাইড : Model.fit এবং TPUStrategy ব্যবহার করার একটি উদাহরণ রয়েছে।
  4. টিউটোরিয়াল : Model.fit এবং ParameterServerStrategy সহ প্যারামিটার সার্ভার প্রশিক্ষণ।
  5. টিউটোরিয়াল : Model.fit এবং TPUStrategy সহ GLUE বেঞ্চমার্ক থেকে অনেক কাজের জন্য BERT ফাইন-টিউনিং।
  6. বিভিন্ন কৌশল ব্যবহার করে বাস্তবায়িত অত্যাধুনিক মডেলের সংগ্রহ ধারণকারী টেনসরফ্লো মডেল গার্ডেন ভান্ডার

কাস্টম প্রশিক্ষণ লুপ সহ tf.distribute.Strategy ব্যবহার করুন

উপরে যেমন দেখানো হয়েছে, Model.fit tf.distribute.Strategy সাথে tf.distribute.Strategy ব্যবহার করার জন্য আপনার কোডের মাত্র কয়েকটি লাইন পরিবর্তন করতে হবে। একটু বেশি প্রচেষ্টার সাথে, আপনি কাস্টম প্রশিক্ষণ লুপ সহ tf.distribute.Strategy ব্যবহার করতে পারেন।

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

tf.distribute.Strategy ক্লাসগুলি কাস্টম ট্রেনিং লুপগুলিকে সমর্থন করার জন্য পদ্ধতিগুলির একটি মূল সেট প্রদান করে। এগুলি ব্যবহার করার জন্য প্রাথমিকভাবে কোডের ছোটখাটো পুনর্গঠনের প্রয়োজন হতে পারে, তবে একবার এটি হয়ে গেলে, আপনি কেবল কৌশল উদাহরণ পরিবর্তন করে GPU, TPU এবং একাধিক মেশিনের মধ্যে স্যুইচ করতে সক্ষম হবেন।

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

প্রথমে, কৌশলের সুযোগের মধ্যে মডেল এবং অপ্টিমাইজার তৈরি করুন। এটি নিশ্চিত করে যে মডেল এবং অপ্টিমাইজারের সাথে তৈরি যেকোন ভেরিয়েবল মিরর করা ভেরিয়েবল।

with mirrored_strategy.scope():
  model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(1,))])
  optimizer = tf.keras.optimizers.SGD()

এরপরে, ইনপুট ডেটাসেট তৈরি করুন এবং কৌশলের উপর ভিত্তি করে ডেটাসেট বিতরণ করতে tf.distribute.Strategy.experimental_distribute_dataset কল করুন।

dataset = tf.data.Dataset.from_tensors(([1.], [1.])).repeat(100).batch(
    global_batch_size)
dist_dataset = mirrored_strategy.experimental_distribute_dataset(dataset)
2021-10-26 01:28:01.831942: 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: "TensorDataset/_2"
op: "TensorDataset"
input: "Placeholder/_0"
input: "Placeholder/_1"
attr {
  key: "Toutput_types"
  value {
    list {
      type: DT_FLOAT
      type: DT_FLOAT
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
        dim {
          size: 1
        }
      }
      shape {
        dim {
          size: 1
        }
      }
    }
  }
}

তারপর, প্রশিক্ষণের একটি ধাপ সংজ্ঞায়িত করুন। গ্রেডিয়েন্ট গণনা করতে tf.GradientTape ব্যবহার করুন এবং আপনার মডেলের ভেরিয়েবল আপডেট করতে সেই গ্রেডিয়েন্টগুলি প্রয়োগ করতে অপ্টিমাইজার ব্যবহার করুন। এই প্রশিক্ষণ ধাপটি বিতরণ করার জন্য, এটিকে একটি ফাংশন train_step এ রাখুন এবং এটিকে tf.distribute.Strategy.run এ পাস করুন এবং আগে তৈরি করা dist_dataset থেকে আপনি যে ডেটাসেট ইনপুট পেয়েছেন:

loss_object = tf.keras.losses.BinaryCrossentropy(
  from_logits=True,
  reduction=tf.keras.losses.Reduction.NONE)

def compute_loss(labels, predictions):
  per_example_loss = loss_object(labels, predictions)
  return tf.nn.compute_average_loss(per_example_loss, global_batch_size=global_batch_size)

def train_step(inputs):
  features, labels = inputs

  with tf.GradientTape() as tape:
    predictions = model(features, training=True)
    loss = compute_loss(labels, predictions)

  gradients = tape.gradient(loss, model.trainable_variables)
  optimizer.apply_gradients(zip(gradients, model.trainable_variables))
  return loss

@tf.function
def distributed_train_step(dist_inputs):
  per_replica_losses = mirrored_strategy.run(train_step, args=(dist_inputs,))
  return mirrored_strategy.reduce(tf.distribute.ReduceOp.SUM, per_replica_losses,
                         axis=None)

উপরের কোডে নোট করার জন্য কয়েকটি অন্যান্য জিনিস:

  1. আপনি ক্ষতি গণনা করার জন্য tf.nn.compute_average_loss ব্যবহার করেছেন। tf.nn.compute_average_loss প্রতি উদাহরণ হারের যোগফলকে যোগ করে এবং যোগফলকে global_batch_size দিয়ে ভাগ করে। এটি গুরুত্বপূর্ণ কারণ পরবর্তীতে প্রতিটি প্রতিলিপিতে গ্রেডিয়েন্ট গণনা করার পরে, তাদের সমষ্টির মাধ্যমে প্রতিলিপি জুড়ে একত্রিত করা হয়।
  2. এছাড়াও tf.distribute.Strategy.run দ্বারা প্রত্যাবর্তিত ফলাফলগুলিকে একত্রিত করতে আপনি tf.distribute.Strategy.reduce API ব্যবহার করেছেন। tf.distribute.Strategy.run প্রতিটি স্থানীয় প্রতিরূপ থেকে ফলাফল প্রদান করে এবং এই ফলাফলটি ব্যবহার করার একাধিক উপায় রয়েছে। আপনি একটি সমষ্টিগত মান পেতে তাদের reduce পারেন। এছাড়াও আপনি ফলাফলে থাকা মানগুলির তালিকা পেতে tf.distribute.Strategy.experimental_local_results করতে পারেন, প্রতি স্থানীয় প্রতিলিপিতে একটি।
  3. যখন আপনি একটি বন্টন কৌশল সুযোগের মধ্যে apply_gradients কল করেন, তখন এর আচরণ পরিবর্তন করা হয়। বিশেষত, সিঙ্ক্রোনাস প্রশিক্ষণের সময় প্রতিটি সমান্তরাল দৃষ্টান্তে গ্রেডিয়েন্ট প্রয়োগ করার আগে, এটি গ্রেডিয়েন্টগুলির সমষ্টি-ওভার-অল-প্রতিলিপিগুলি সম্পাদন করে।

অবশেষে, একবার আপনি প্রশিক্ষণের ধাপটি সংজ্ঞায়িত করলে, আপনি dist_dataset এর উপর পুনরাবৃত্তি করতে পারেন এবং একটি লুপে প্রশিক্ষণ চালাতে পারেন:

for dist_inputs in dist_dataset:
  print(distributed_train_step(dist_inputs))
tf.Tensor(0.18686396, shape=(), dtype=float32)
tf.Tensor(0.18628375, shape=(), dtype=float32)
tf.Tensor(0.18570684, shape=(), dtype=float32)
tf.Tensor(0.18513316, shape=(), dtype=float32)
tf.Tensor(0.1845627, shape=(), dtype=float32)
tf.Tensor(0.18399543, shape=(), dtype=float32)
tf.Tensor(0.18343134, shape=(), dtype=float32)
tf.Tensor(0.18287037, shape=(), dtype=float32)
tf.Tensor(0.18231256, shape=(), dtype=float32)
tf.Tensor(0.18175781, shape=(), dtype=float32)
tf.Tensor(0.18120615, shape=(), dtype=float32)
tf.Tensor(0.18065754, shape=(), dtype=float32)
tf.Tensor(0.18011193, shape=(), dtype=float32)
tf.Tensor(0.17956935, shape=(), dtype=float32)
tf.Tensor(0.17902976, shape=(), dtype=float32)
tf.Tensor(0.17849308, shape=(), dtype=float32)
tf.Tensor(0.17795937, shape=(), dtype=float32)
tf.Tensor(0.17742859, shape=(), dtype=float32)
tf.Tensor(0.17690066, shape=(), dtype=float32)
tf.Tensor(0.17637561, shape=(), dtype=float32)

উপরের উদাহরণে, আপনি আপনার প্রশিক্ষণে ইনপুট প্রদান করতে dist_dataset এর উপর পুনরাবৃত্তি করেছেন। NumPy ইনপুট সমর্থন করার জন্য আপনাকে tf.distribute.Strategy.make_experimental_numpy_dataset ও প্রদান করা হয়েছে। tf.distribute.Strategy.experimental_distribute_dataset কল করার আগে আপনি একটি ডেটাসেট তৈরি করতে এই API ব্যবহার করতে পারেন।

আপনার ডেটার উপর পুনরাবৃত্তি করার আরেকটি উপায় হল স্পষ্টভাবে পুনরাবৃত্তিকারী ব্যবহার করা। আপনি এটি করতে চাইতে পারেন যখন আপনি সম্পূর্ণ ডেটাসেটের উপর পুনরাবৃত্তির বিপরীতে নির্দিষ্ট সংখ্যক পদক্ষেপের জন্য চালাতে চান। উপরের পুনরাবৃত্তিটি এখন পরিবর্তন করা হবে প্রথমে একটি ইটারেটর তৈরি করতে এবং তারপরে ইনপুট ডেটা পেতে স্পষ্টভাবে next কল করুন।

iterator = iter(dist_dataset)
for _ in range(10):
  print(distributed_train_step(next(iterator)))
tf.Tensor(0.17585339, shape=(), dtype=float32)
tf.Tensor(0.17533402, shape=(), dtype=float32)
tf.Tensor(0.17481743, shape=(), dtype=float32)
tf.Tensor(0.17430364, shape=(), dtype=float32)
tf.Tensor(0.17379259, shape=(), dtype=float32)
tf.Tensor(0.17328428, shape=(), dtype=float32)
tf.Tensor(0.17277871, shape=(), dtype=float32)
tf.Tensor(0.17227581, shape=(), dtype=float32)
tf.Tensor(0.17177561, shape=(), dtype=float32)
tf.Tensor(0.17127804, shape=(), dtype=float32)

এটি কাস্টম প্রশিক্ষণ লুপ বিতরণ করতে tf.distribute.Strategy API ব্যবহার করার সবচেয়ে সহজ ক্ষেত্রে কভার করে।

এখন কি সমর্থিত?

প্রশিক্ষণ API MirroredStrategy TPUStrategy MultiWorkerMirroredStrategy ParameterServerStrategy CentralStorageStrategy
কাস্টম প্রশিক্ষণ লুপ সমর্থিত সমর্থিত সমর্থিত পরীক্ষামূলক সমর্থন পরীক্ষামূলক সমর্থন

উদাহরণ এবং টিউটোরিয়াল

এখানে কাস্টম প্রশিক্ষণ লুপ সহ বিতরণ কৌশল ব্যবহার করার জন্য কিছু উদাহরণ রয়েছে:

  1. টিউটোরিয়াল : একটি কাস্টম প্রশিক্ষণ লুপ এবং MirroredStrategy সহ প্রশিক্ষণ।
  2. টিউটোরিয়াল : একটি কাস্টম প্রশিক্ষণ লুপ এবং MultiWorkerMirroredStrategy সহ প্রশিক্ষণ।
  3. গাইড : TPUStrategy সহ একটি কাস্টম প্রশিক্ষণ লুপের একটি উদাহরণ রয়েছে৷
  4. টিউটোরিয়াল : একটি কাস্টম প্রশিক্ষণ লুপ এবং ParameterServerStrategy সার্ভার স্ট্র্যাটেজি সহ প্যারামিটার সার্ভার প্রশিক্ষণ।
  5. বিভিন্ন কৌশল ব্যবহার করে বাস্তবায়িত অত্যাধুনিক মডেলের সংগ্রহ ধারণকারী টেনসরফ্লো মডেল গার্ডেন ভান্ডার

অন্যান্য বিষয়

এই বিভাগে এমন কিছু বিষয় রয়েছে যা একাধিক ব্যবহারের ক্ষেত্রে প্রাসঙ্গিক।

TF_CONFIG পরিবেশ পরিবর্তনশীল সেট আপ করা হচ্ছে

বহু-কর্মী প্রশিক্ষণের জন্য, যেমন আগে উল্লেখ করা হয়েছে, আপনাকে আপনার ক্লাস্টারে চলমান প্রতিটি বাইনারির জন্য 'TF_CONFIG' পরিবেশ পরিবর্তনশীল সেট আপ করতে হবে। 'TF_CONFIG' এনভায়রনমেন্ট ভেরিয়েবল হল একটি JSON স্ট্রিং যা নির্দিষ্ট করে কোন টাস্কগুলি একটি ক্লাস্টার গঠন করে, তাদের ঠিকানা এবং ক্লাস্টারে প্রতিটি টাস্কের ভূমিকা। tensorflow/ecosystem রেপো একটি Kubernetes টেমপ্লেট প্রদান করে, যা আপনার প্রশিক্ষণের কাজের জন্য 'TF_CONFIG' সেট আপ করে।

'TF_CONFIG' এর দুটি উপাদান রয়েছে: একটি ক্লাস্টার এবং একটি টাস্ক।

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

'TF_CONFIG' এর একটি উদাহরণ হল:

os.environ["TF_CONFIG"] = json.dumps({
    "cluster": {
        "worker": ["host1:port", "host2:port", "host3:port"],
        "ps": ["host4:port", "host5:port"]
    },
   "task": {"type": "worker", "index": 1}
})

এই 'TF_CONFIG' নির্দিষ্ট করে যে "cluster" -এ তাদের হোস্ট এবং পোর্ট সহ তিনটি কর্মী এবং দুটি "ps" কাজ রয়েছে৷ "task" অংশটি "cluster" -কর্মী 1 (দ্বিতীয় কর্মী)-এ বর্তমান কাজের ভূমিকা নির্দিষ্ট করে। একটি ক্লাস্টারে বৈধ ভূমিকা হল "chief" , "worker" , "ps" এবং "evaluator"tf.distribute.experimental.ParameterServerStrategy ব্যবহার করা ছাড়া কোনো "ps" কাজ থাকা উচিত নয়।

এরপর কি?

tf.distribute.Strategy সক্রিয়ভাবে বিকাশের অধীনে রয়েছে। এটি ব্যবহার করে দেখুন এবং GitHub সমস্যাগুলি ব্যবহার করে আপনার প্রতিক্রিয়া প্রদান করুন।