هذه الوثائق مخصصة لأي شخص مهتم بالحصول على نظرة عامة عالية المستوى حول مفاهيم البرامج الموحدة. يفترض معرفة 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 أم أن التدريب يحتاج إلى إعادة التشغيل في الجولة الأولى؟