ফেডারেটেড প্রোগ্রাম

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

ফেডারেটেড প্রোগ্রাম সম্পর্কে আরও তথ্যের জন্য, দেখুন:

একটি ফেডারেটেড প্রোগ্রাম কি?

একটি ফেডারেটেড প্রোগ্রাম হল একটি প্রোগ্রাম যা একটি ফেডারেটেড পরিবেশে গণনা এবং অন্যান্য প্রক্রিয়াকরণ যুক্তি নির্বাহ করে।

আরও, বিশেষত একটি ফেডারেটেড প্রোগ্রাম :

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

TFF এর ফেডারেটেড প্রোগ্রাম লাইব্রেরি ( tff.program ) একটি ফেডারেটেড প্রোগ্রাম তৈরি করতে প্রয়োজনীয় বিমূর্ততাগুলিকে সংজ্ঞায়িত করে এবং প্ল্যাটফর্ম-অজ্ঞেয়মূলক উপাদান প্রদান করে।

উপাদান

<!--#include file="components.dot"-->

TFF-এর ফেডারেটেড প্রোগ্রাম লাইব্রেরির উপাদানগুলি ডিজাইন করা হয়েছে যাতে সেগুলি বিভিন্ন ভূমিকার মালিকানা এবং লেখক হতে পারে৷

প্রোগ্রাম

প্রোগ্রামটি একটি পাইথন বাইনারি যা:

  1. প্যারামিটার সংজ্ঞায়িত করে (যেমন পতাকা)
  2. প্ল্যাটফর্ম-নির্দিষ্ট উপাদান এবং প্ল্যাটফর্ম-অজ্ঞেয়মূলক উপাদান তৈরি করে
  3. একটি ফেডারেটেড প্রসঙ্গে প্রোগ্রাম লজিক ব্যবহার করে গণনা চালায়

যেমন:

# Parameters set by the customer.
flags.DEFINE_string('output_dir', None, 'The output path.')

def main() -> None:

  # Parameters set by the program.
  total_rounds = 10
  num_clients = 3

  # Construct the platform-specific components.
  context = tff.program.NativeFederatedContext(...)
  data_source = tff.program.DatasetDataSource(...)

  # Construct the platform-agnostic components.
  summary_dir = os.path.join(FLAGS.output_dir, 'summary')
  metrics_manager = tff.program.GroupingReleaseManager([
      tff.program.LoggingReleaseManager(),
      tff.program.TensorBoardReleaseManager(summary_dir),
  ])
  program_state_dir = os.path.join(..., 'program_state')
  program_state_manager = tff.program.FileProgramStateManager(program_state_dir)

  # Define the computations.
  initialize = ...
  train = ...

  # Execute the computations using program logic.
  tff.framework.set_default_context(context)
  asyncio.run(
      train_federated_model(
          initialize=initialize,
          train=train,
          data_source=data_source,
          total_rounds=total_rounds,
          num_clients=num_clients,
          metrics_manager=metrics_manager,
          program_state_manager=program_state_manager,
      )
  )

পরামিতি

প্যারামিটারগুলি হল প্রোগ্রামের ইনপুট, এই ইনপুটগুলি গ্রাহক দ্বারা সেট করা হতে পারে, যদি সেগুলি পতাকা হিসাবে উন্মুক্ত হয়, অথবা সেগুলি প্রোগ্রাম দ্বারা সেট করা হতে পারে৷ উপরের উদাহরণে, output_dir হল একটি প্যারামিটার যা গ্রাহক দ্বারা সেট করা হয় এবং total_rounds এবং num_clients হল প্রোগ্রাম দ্বারা সেট করা প্যারামিটার।

প্ল্যাটফর্ম-নির্দিষ্ট উপাদান

প্ল্যাটফর্ম-নির্দিষ্ট উপাদানগুলি হল একটি প্ল্যাটফর্ম দ্বারা প্রদত্ত উপাদান যা TFF-এর ফেডারেটেড প্রোগ্রাম লাইব্রেরি দ্বারা সংজ্ঞায়িত বিমূর্ত ইন্টারফেসগুলি বাস্তবায়ন করে।

প্ল্যাটফর্ম-অজ্ঞেয় উপাদান

প্ল্যাটফর্ম-অজ্ঞেয় উপাদানগুলি হল একটি লাইব্রেরি (যেমন TFF) দ্বারা প্রদত্ত উপাদান যা TFF-এর ফেডারেটেড প্রোগ্রাম লাইব্রেরি দ্বারা সংজ্ঞায়িত বিমূর্ত ইন্টারফেসগুলি বাস্তবায়ন করে।

গণনা

গণনা হল বিমূর্ত ইন্টারফেস tff.Computation এর বাস্তবায়ন।

উদাহরণস্বরূপ, TFF প্ল্যাটফর্মে আপনি tff.tensorflow.computation বা tff.federated_computation ডেকোরেটর ব্যবহার করতে পারেন tff.framework.ConcreteComputation তৈরি করতে:

আরও তথ্যের জন্য একটি গণনার জীবন দেখুন।

প্রোগ্রাম লজিক

প্রোগ্রাম লজিক একটি পাইথন ফাংশন যা একটি ইনপুট হিসাবে নেয়:

এবং কিছু অপারেশন সঞ্চালন করে, যা সাধারণত অন্তর্ভুক্ত করে:

এবং কিছু আউটপুট দিতে পারে, যা সাধারণত অন্তর্ভুক্ত করে:

যেমন:

async def program_logic(
    initialize: tff.Computation,
    train: tff.Computation,
    data_source: tff.program.FederatedDataSource,
    total_rounds: int,
    num_clients: int,
    metrics_manager: tff.program.ReleaseManager[
        tff.program.ReleasableStructure, int
    ],
) -> None:
  state = initialize()
  start_round = 1

  data_iterator = data_source.iterator()
  for round_number in range(1, total_rounds + 1):
    train_data = data_iterator.select(num_clients)
    state, metrics = train(state, train_data)

    _, metrics_type = train.type_signature.result
    metrics_manager.release(metrics, metrics_type, round_number)

ভূমিকা

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

গ্রাহক

গ্রাহক সাধারণত:

কিন্তু হতে পারে:

প্ল্যাটফর্ম

প্ল্যাটফর্মটি সাধারণত:

কিন্তু হতে পারে:

লাইব্রেরি

একটি লাইব্রেরি সাধারণত:

ধারণা

<!--#include file="concepts.dot"-->

ফেডারেটেড প্রোগ্রাম আলোচনা করার সময় সংজ্ঞায়িত করার জন্য দরকারী কয়েকটি ধারণা আছে।

গ্রাহক সংগ্রহস্থল

গ্রাহক সঞ্চয়স্থান হল স্টোরেজ যা গ্রাহকের পড়ার এবং লেখার অ্যাক্সেস রয়েছে এবং প্ল্যাটফর্মের লেখার অ্যাক্সেস রয়েছে।

প্ল্যাটফর্ম স্টোরেজ

প্ল্যাটফর্ম স্টোরেজ এমন স্টোরেজ যা শুধুমাত্র প্ল্যাটফর্মের পড়ার এবং লেখার অ্যাক্সেস রয়েছে।

মুক্তি

একটি মান প্রকাশ করা হলে তা গ্রাহকের সঞ্চয়স্থানে মান উপলব্ধ করে (যেমন একটি ড্যাশবোর্ডে মান প্রকাশ করা, মানটি লগ করা বা ডিস্কে মান লেখা)।

বস্তুগত করা

একটি মানের রেফারেন্সকে বস্তুগত করা রেফারেন্সযুক্ত মানটিকে প্রোগ্রামে উপলব্ধ করে তোলে। প্রায়শই একটি মূল্যের রেফারেন্সকে বাস্তবায়িত করার জন্য মানটি প্রকাশ করতে বা প্রোগ্রাম লজিক ফল্ট সহনশীল করতে প্রয়োজন হয়।

দোষ সহনশীলতা

ত্রুটি সহনশীলতা হল প্রোগ্রাম লজিকের ক্ষমতা যা একটি গণনা চালানোর সময় ব্যর্থতা থেকে পুনরুদ্ধার করতে পারে। উদাহরণস্বরূপ, আপনি যদি সফলভাবে 100টির মধ্যে প্রথম 90টি রাউন্ড প্রশিক্ষণ দেন এবং তারপর ব্যর্থতার সম্মুখীন হন, তাহলে প্রোগ্রাম লজিক কি রাউন্ড 91 থেকে ট্রেনিং পুনরায় শুরু করতে সক্ষম নাকি 1 রাউন্ডে প্রশিক্ষণ পুনরায় চালু করতে হবে?