برنامه فدرال

این مستندات برای هر کسی است که به یک مرور سطح بالا از مفاهیم برنامه فدرال علاقه مند است. این فرض بر دانش TensorFlow Federated، به ویژه سیستم نوع آن است.

برای اطلاعات بیشتر در مورد برنامه فدرال، نگاه کنید به:

برنامه فدرال چیست؟

برنامه فدرال برنامه ای است که محاسبات و سایر منطق پردازش را در یک محیط فدرال اجرا می کند.

بیشتر، به طور خاص یک برنامه فدرال :

تعریف این مفاهیم و انتزاعات امکان توصیف روابط بین اجزای یک برنامه فدرال را فراهم می کند و اجازه می دهد تا این مؤلفه ها توسط نقش های مختلف مالکیت و تألیف شوند. این جداسازی به توسعه‌دهندگان اجازه می‌دهد تا با استفاده از مؤلفه‌هایی که با سایر برنامه‌های فدرال به اشتراک گذاشته شده‌اند، برنامه‌های فدرال را بسازند، معمولاً این به معنای اجرای منطق برنامه مشابه در بسیاری از پلتفرم‌های مختلف است.

کتابخانه برنامه فدرال 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"-->

چند مفهوم وجود دارد که تعریف آنها هنگام بحث در مورد برنامه های فدرال مفید است.

ذخیره سازی مشتری

فضای ذخیره سازی مشتری فضای ذخیره سازی است که مشتری به آن دسترسی خواندن و نوشتن دارد و پلتفرم به آن دسترسی نوشتن دارد.

فضای ذخیره سازی پلت فرم

فضای ذخیره‌سازی پلتفرم ، فضای ذخیره‌سازی است که فقط پلتفرم به آن دسترسی خواندن و نوشتن دارد.

رها کنید

انتشار یک مقدار، ارزش را در اختیار ذخیره‌سازی مشتری قرار می‌دهد (مثلاً انتشار مقدار در داشبورد، ثبت مقدار، یا نوشتن مقدار در دیسک).

ماد شدن

مادیت کردن یک مرجع مقدار، مقدار ارجاع شده را در دسترس برنامه قرار می دهد. غالباً برای آزاد کردن مقدار یا برای تحمل خطای منطقی برنامه ، تحقق یک مرجع ارزش مورد نیاز است.

تحمل خطا

تحمل خطا توانایی منطق برنامه برای بازیابی پس از شکست در هنگام اجرای محاسبات است. به عنوان مثال، اگر 90 دور اول از 100 راند را با موفقیت تمرین کنید و سپس با شکست مواجه شوید، آیا منطق برنامه قادر به از سرگیری تمرینات از دور 91 است یا آیا باید تمرین را از دور 1 دوباره شروع کرد؟