তারিখটা মনে রেখো! গুগল I / O মে 18-20 মে এখনই রেজিস্টার করুন
This page was translated by the Cloud Translation API.
Switch to English

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

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

ওভারভিউ

tf.distribute.Strategy একাধিক GPUs, একাধিক মেশিন বা TPUs জুড়ে প্রশিক্ষণ বিতরণ করার জন্য একটি tf.distribute.Strategy এপিআই। এই এপিআই ব্যবহার করে, আপনি আপনার বিদ্যমান মডেলগুলি এবং ন্যূনতম কোড পরিবর্তনগুলি সহ প্রশিক্ষণ কোড বিতরণ করতে পারেন।

tf.distribute.Strategy এই মূল লক্ষ্যগুলি tf.distribute.Strategy করা হয়েছে:

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

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

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

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

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

# Import TensorFlow
import tensorflow as tf

কৌশলের ধরণ

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

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

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

প্রশিক্ষণ এপিআই মিররডস্ট্রজি টিপিউসট্রেজি মাল্টি ওয়ার্কারমিরর্ডার্ডস্ট্রেজি সেন্ট্রাল স্টোরেজস্ট্রেজি প্যারামিটার সার্ভারস্ট্রেটজি
কেরাস এপিআই সমর্থিত সমর্থিত সমর্থিত পরীক্ষামূলক সহায়তা সমর্থিত পরিকল্পিত পোস্ট ২.৪
কাস্টম প্রশিক্ষণ লুপ সমর্থিত সমর্থিত সমর্থিত পরীক্ষামূলক সহায়তা পরীক্ষামূলক সহায়তা
অনুমানকারী API সীমিত সমর্থন সমর্থিত নয় সীমিত সমর্থন সীমিত সমর্থন সীমিত সমর্থন

মিররডস্ট্রজি

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

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

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

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

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

আপনি যদি নিজের মেশিনে কিছু জিপিইউ ব্যবহার করতে চান তবে আপনি এটি এর মতো করতে পারেন:

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:0,/job:localhost/replica:0/task:0/device:GPU:1
INFO:tensorflow:Using MirroredStrategy with devices ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1')

আপনি ক্রস ডিভাইস যোগাযোগ ওভাররাইড করতে চান, আপনি এখন ব্যবহার করতে পারি না cross_device_ops একটি দৃষ্টান্ত সরবরাহ দ্বারা যুক্তি tf.distribute.CrossDeviceOps । বর্তমানে, 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 আপনাকে টেনসর প্রসেসিং ইউনিটগুলির (টিপিইউ) উপর আপনার টেনসরফ্লো প্রশিক্ষণ চালাতে দেয়। টিপিইউ হ'ল গুগলের বিশেষায়িত এএসআইসি, যা নাটকীয়ভাবে মেশিন লার্নিংয়ের কাজের চাপকে ত্বরান্বিত করার জন্য ডিজাইন করা হয়েছে। এগুলি গুগল কলাব, টেনসরফ্লো রিসার্চ ক্লাউড এবং ক্লাউড টিপিইউতে উপলব্ধ

বিতরণ প্রশিক্ষণ স্থাপত্য নিরিখে TPUStrategy একই MirroredStrategy - এটা সমলয় বিতরণ প্রশিক্ষণ বাস্তবায়ন করছে। টিপিইউগুলি একাধিক TPUStrategy কোর জুড়ে দক্ষ অল-হ্রাস এবং অন্যান্য সম্মিলিত ক্রিয়াকলাপগুলির নিজস্ব বাস্তবায়ন সরবরাহ করে, যা TPUStrategy ব্যবহৃত হয়।

আপনি এখানে 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 দৃষ্টান্তটি TPUClusterResolver সনাক্ত করতে সহায়তা করে। কুলাবে, আপনাকে এটিতে কোনও যুক্তি নির্দিষ্ট করার দরকার নেই।

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

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

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

tf.distribute.MultiWorkerMirroredStrategy খুব অনুরূপ MirroredStrategy । এটি একাধিক কর্মী, প্রতিটি সম্ভাব্য একাধিক জিপিইউ সহ সিঙ্ক্রোনাস বিতরণ প্রশিক্ষণ প্রয়োগ করে। 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:Using MirroredStrategy with devices ('/device:GPU:0',)
INFO:tensorflow:Single-worker MultiWorkerMirroredStrategy with local_devices = ('/device:GPU:0',), communication = CommunicationImplementation.AUTO

MultiWorkerMirroredStrategy ক্রস-ডিভাইস যোগাযোগের জন্য দুটি বাস্তবায়ন রয়েছে। CommunicationImplementation.RING আরপিসি ভিত্তিক এবং সিপিইউ এবং জিপিইউ উভয় সমর্থন করে। CommunicationImplementation.NCCL এনভিডির এনসিসিএল ব্যবহার করে এবং জিপিইউতে আর্ট পারফরম্যান্সের অবস্থা সরবরাহ করে তবে এটি সিপিইউ সমর্থন করে না। 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:Using MirroredStrategy with devices ('/device:GPU:0',)
INFO:tensorflow:Single-worker MultiWorkerMirroredStrategy with local_devices = ('/device:GPU:0',), communication = CommunicationImplementation.NCCL

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

প্যারামিটার সার্ভারস্ট্রেটজি

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

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

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

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

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

দ্রষ্টব্য আপনি যদি টিএফসিফনফিগক্লাস্টার TFConfigClusterResolver ব্যবহার করেন তবে আপনাকে TF_CONFIG পরিবেশ পরিবর্তনশীল কনফিগার করতে হবে। এটি MultiWorkerMirroredStrategy ওয়ার্কার MultiWorkerMirroredStrategy TF_CONFIG এর MultiWorkerMirroredStrategy তবে এর মধ্যে অতিরিক্ত MultiWorkerMirroredStrategy রয়েছে।

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

সেন্ট্রাল স্টোরেজস্ট্রেজি

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

এর দ্বারা 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 উদাহরণ তৈরি করবে যা সমস্ত দৃশ্যমান জিপিইউ এবং সিপিইউ ব্যবহার করবে। ভেরিয়েবলগুলিতে প্রয়োগ করার আগে প্রতিরূপগুলিতে পরিবর্তনগুলিতে আপডেট একত্রিত করা হবে।

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

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

ডিফল্ট কৌশল

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

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

default_strategy = tf.distribute.get_strategy()

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

  • এটি নিঃশর্তভাবে বিতরণ সচেতন লাইব্রেরি কোড লেখার অনুমতি দেয়। উদাহরণস্বরূপ, tf.optimizer গুলি tf.distribute.get_strategy() ব্যবহার করতে পারে এবং গ্রেডিয়েন্টগুলি হ্রাস করার জন্য সেই কৌশলটি ব্যবহার করতে পারে - এটি সর্বদা একটি কৌশল অবজেক্টকে ফিরিয়ে আনবে যার উপর আমরা হ্রাস এপিআই বলতে পারি।
# 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 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>
}

ওয়ানডেভাইস স্ট্রেটজি

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

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

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

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

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

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

tf.distribute.Strategy সহ tf.keras.Model.fit ব্যবহার করা

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

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

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

আমরা সব ধরণের কেরাস মডেলকে সমর্থন করি - ক্রমযুক্ত, কার্যকরী এবং উপশ্রেণীযুক্ত।

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

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',).

এই উদাহরণটিতে usees 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',).
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.3180
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: 1.0246
10/10 [==============================] - 1s 2ms/step - loss: 0.5432
0.5432368516921997

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

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
10/10 [==============================] - 1s 2ms/step - loss: 0.3866
Epoch 2/2
10/10 [==============================] - 0s 2ms/step - loss: 0.1709
<tensorflow.python.keras.callbacks.History at 0x7f36bfa9fc18>

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

# Compute global batch size using 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]

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

প্রশিক্ষণ এপিআই মিররডস্ট্রজি টিপিউসট্রেজি মাল্টি ওয়ার্কারমিরর্ডার্ডস্ট্রেজি প্যারামিটার সার্ভারস্ট্রেটজি সেন্ট্রাল স্টোরেজস্ট্রেজি
কেরাস এপিআই সমর্থিত সমর্থিত পরীক্ষামূলক সহায়তা পরীক্ষামূলক সহায়তা পরীক্ষামূলক সহায়তা

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

এখানে টিউটোরিয়াল এবং উদাহরণগুলির একটি তালিকা রয়েছে যা উপরের একীকরণের শেষ কেরাসের সাথে শেষ করে:

  1. টিউটোরিয়াল সঙ্গে MNIST প্রশিক্ষণের MirroredStrategy
  2. MultiWorkerMirroredStrategy ওয়ার্কারমিরর্ডার্ডস্ট্রেজি ব্যবহার করে MultiWorkerMirroredStrategy প্রশিক্ষণের জন্য টিউটোরিয়াল
  3. TPUStrategy ব্যবহার করে TPUStrategy প্রশিক্ষণের বিষয়ে গাইড on
  4. টিউটোরিয়াল সঙ্গে TensorFlow 2 পরামিতি সার্ভার প্রশিক্ষণের জন্য ParameterServerStrategy
  5. বিভিন্ন কৌশল ব্যবহার করে বাস্তবায়িত অত্যাধুনিক মডেলগুলির সংগ্রহ সহ টেনসরফ্লো মডেল গার্ডেনের সংগ্রহস্থল

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

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

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

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

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

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

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)

তারপরে, প্রশিক্ষণের এক ধাপ নির্ধারণ করুন। গ্রেডিয়েন্টগুলি গণনা করতেtf.GradientTape গ্রেডিয়েন্টtf.GradientTape ব্যবহার করুন এবং আমাদের মডেলের ভেরিয়েবলগুলি আপডেট করতে সেই গ্রেডিয়েন্টগুলি প্রয়োগ করতে অপ্টিমাইজার। এই প্রশিক্ষণ পদক্ষেপটি বিতরণ করতে, এটি একটি ফাংশন train_step রেখে tf.distrbute.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_losstf.nn.compute_average_loss উদাহরণস্বরূপ ক্ষতির পরিমাণটি যোগ করে এবং যোগটিকে বিশ্বব্যাপী_ব্যাচ_সাইজ দ্বারা বিভক্ত করে। এটি গুরুত্বপূর্ণ কারণ পরে পরে গ্রেডিয়েন্ট প্রতিটি প্রতিরূপ হিসেব করা হয়েছে, তবে তারা তাদেরকে summing দ্বারা প্রতিলিপি জুড়ে সমষ্টিগত হয়।
  2. এটি tf.distribute.Strategy.reduce দ্বারা tf.distribute.Strategy.run ফলাফলগুলিকে একত্রিত করার জন্য tf.distribute.Strategy.reduce এপিআই ব্যবহার করেছে। tf.distribute.Strategy.run প্রতিটি স্থানীয় প্রতিলিপি থেকে ফলাফল প্রদান করে এবং এই ফলটি গ্রাস করার একাধিক উপায় রয়েছে। সম্মিলিত মান পেতে আপনি তাদের reduce করতে পারেন। স্থানীয় প্রতিরূপে প্রতি এক করে ফলাফলের মধ্যে থাকা মানগুলির তালিকা পেতে আপনি tf.distribute.Strategy.experimental_local_results করতে পারেন।
  3. যখন apply_gradients একটি বিতরণ কৌশল স্কোপের মধ্যে ডাকা হয় তখন এর আচরণটি সংশোধন করা হয়। বিশেষত, সিঙ্ক্রোনাস প্রশিক্ষণের সময় প্রতিটি সমান্তরাল উদাহরণে গ্রেডিয়েন্টগুলি প্রয়োগ করার আগে, এটি গ্রেডিয়েন্টগুলির সমষ্টি-ওভার-অল-রেপ্লিকাগুলি সম্পাদন করে।

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

for dist_inputs in dist_dataset:
  print(distributed_train_step(dist_inputs))
tf.Tensor(0.7167484, shape=(), dtype=float32)
tf.Tensor(0.71152556, shape=(), dtype=float32)
tf.Tensor(0.70635474, shape=(), dtype=float32)
tf.Tensor(0.7012355, shape=(), dtype=float32)
tf.Tensor(0.6961673, shape=(), dtype=float32)
tf.Tensor(0.6911497, shape=(), dtype=float32)
tf.Tensor(0.6861821, shape=(), dtype=float32)
tf.Tensor(0.6812641, shape=(), dtype=float32)
tf.Tensor(0.6763952, shape=(), dtype=float32)
tf.Tensor(0.6715747, shape=(), dtype=float32)
tf.Tensor(0.66680235, shape=(), dtype=float32)
tf.Tensor(0.6620776, shape=(), dtype=float32)
tf.Tensor(0.6573999, shape=(), dtype=float32)
tf.Tensor(0.65276873, shape=(), dtype=float32)
tf.Tensor(0.6481838, shape=(), dtype=float32)
tf.Tensor(0.6436445, shape=(), dtype=float32)
tf.Tensor(0.6391503, shape=(), dtype=float32)
tf.Tensor(0.63470083, shape=(), dtype=float32)
tf.Tensor(0.6302957, shape=(), dtype=float32)
tf.Tensor(0.6259341, shape=(), dtype=float32)

উপরের উদাহরণে, আপনার প্রশিক্ষণে ইনপুট সরবরাহ করতে আপনি dist_dataset দিয়ে পুনরাবৃত্তি করেছিলেন। আমরা প্রদান tf.distribute.Strategy.make_experimental_numpy_dataset numpy ইনপুট সমর্থন। 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.62161595, shape=(), dtype=float32)
tf.Tensor(0.6173406, shape=(), dtype=float32)
tf.Tensor(0.6131077, shape=(), dtype=float32)
tf.Tensor(0.60891676, shape=(), dtype=float32)
tf.Tensor(0.60476726, shape=(), dtype=float32)
tf.Tensor(0.60065883, shape=(), dtype=float32)
tf.Tensor(0.59659094, shape=(), dtype=float32)
tf.Tensor(0.5925633, shape=(), dtype=float32)
tf.Tensor(0.5885753, shape=(), dtype=float32)
tf.Tensor(0.5846267, shape=(), dtype=float32)

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

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

প্রশিক্ষণ এপিআই মিররডস্ট্রজি টিপিউসট্রেজি মাল্টি ওয়ার্কারমিরর্ডার্ডস্ট্রেজি প্যারামিটার সার্ভারস্ট্রেটজি সেন্ট্রাল স্টোরেজস্ট্রেজি
কাস্টম প্রশিক্ষণ লুপ সমর্থিত সমর্থিত পরীক্ষামূলক সহায়তা পরীক্ষামূলক সহায়তা পরীক্ষামূলক সহায়তা

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

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

  1. টিউটোরিয়াল প্রশিক্ষণের ব্যবহার MNIST MirroredStrategy
  2. টিপিসট্রেটিজি ব্যবহার করে TPUStrategy প্রশিক্ষণের বিষয়ে গাইড
  3. বিভিন্ন কৌশল ব্যবহার করে বাস্তবায়িত অত্যাধুনিক মডেলগুলির সংকলন সহ টেনসরফ্লো মডেল গার্ডেনের সংগ্রহস্থল

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

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

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

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

TF_CONFIG এর দুটি উপাদান রয়েছে: ক্লাস্টার এবং কার্য। ক্লাস্টার প্রশিক্ষণ ক্লাস্টার সম্পর্কে তথ্য সরবরাহ করে, যা একটি ডিক যা বিভিন্ন ধরণের কাজের যেমন শ্রমিকের সমন্বয়ে গঠিত dict বহু-কর্মী প্রশিক্ষণে সাধারণত একজন কর্মী থাকেন যা নিয়মিত কর্মীর কাজ ছাড়াও টেনসরবার্ডের জন্য চেকপয়েন্ট সংরক্ষণ করা এবং সারসংক্ষেপ ফাইল লেখার মতো আরও কিছুটা দায়িত্ব গ্রহণ করে। এই জাতীয় কর্মীকে 'প্রধান' কর্মী হিসাবে উল্লেখ করা হয়, এবং এটি প্রথাগত যে সূচক 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 উল্লেখ করে যে তাদের হোস্ট এবং পোর্টগুলির সাথে ক্লাস্টারে তিনটি কর্মী এবং দুটি পিএস কাজ রয়েছে। "টাস্ক" অংশটি নির্দিষ্ট করে যে ক্লাস্টারে বর্তমান কর্মের ভূমিকা, কর্মী 1 (দ্বিতীয় কর্মী)। একটি ক্লাস্টারে বৈধ ভূমিকা "চিফ", "কর্মী", "পিএস" এবং "মূল্যায়নকারী"। tf.distribute.experimental.ParameterServerStrategy ব্যবহার করা ব্যতীত আর কোনও "পিএস" কাজ থাকা উচিত tf.distribute.experimental.ParameterServerStrategy

এরপর কি?

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