این مستندات برای هر کسی است که به یک مرور سطح بالا از مفاهیم برنامه فدرال علاقه مند است. این فرض بر دانش TensorFlow Federated، به ویژه سیستم نوع آن است.
برای اطلاعات بیشتر در مورد برنامه فدرال، نگاه کنید به:
برنامه فدرال چیست؟
برنامه فدرال برنامه ای است که محاسبات و سایر منطق پردازش را در یک محیط فدرال اجرا می کند.
بیشتر، به طور خاص یک برنامه فدرال :
- محاسبات را اجرا می کند
- با استفاده از منطق برنامه
- با اجزای پلت فرم خاص
- و اجزای پلت فرم-آگنوستیک
- پارامترهای تعیین شده توسط برنامه
- و پارامترهای تعیین شده توسط مشتری
- زمانی که مشتری برنامه را اجرا می کند
- و ممکن است داده ها را در فضای ذخیره سازی پلتفرم به شکل زیر تحقق بخشد :
- استفاده در منطق پایتون
- تحمل خطا را اجرا کنید
- و ممکن است داده ها را برای ذخیره سازی مشتری منتشر کند
تعریف این مفاهیم و انتزاعات امکان توصیف روابط بین اجزای یک برنامه فدرال را فراهم می کند و اجازه می دهد تا این مؤلفه ها توسط نقش های مختلف مالکیت و تألیف شوند. این جداسازی به توسعهدهندگان اجازه میدهد تا با استفاده از مؤلفههایی که با سایر برنامههای فدرال به اشتراک گذاشته شدهاند، برنامههای فدرال را بسازند، معمولاً این به معنای اجرای منطق برنامه مشابه در بسیاری از پلتفرمهای مختلف است.
کتابخانه برنامه فدرال TFF ( tff.program ) انتزاعات مورد نیاز برای ایجاد یک برنامه فدرال را تعریف می کند و اجزای پلتفرم-آگنوستیک را ارائه می دهد.
اجزاء
<!--#include file="components.dot"-->
اجزای کتابخانه برنامه فدرال TFF به گونهای طراحی شدهاند که میتوانند توسط نقشهای مختلف مالک و تألیف شوند.
برنامه
این برنامه یک باینری پایتون است که:
- پارامترها را تعریف می کند (به عنوان مثال پرچم)
- اجزای پلتفرم خاص و اجزای پلتفرم آگنوستیک را می سازد
- محاسبات را با استفاده از منطق برنامه در یک زمینه فدرال اجرا می کند
به عنوان مثال:
# 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 دوباره شروع کرد؟