यह दस्तावेज़ीकरण ऐसे किसी भी व्यक्ति के लिए है जो फ़ेडरेटेड प्रोग्राम अवधारणाओं के उच्च-स्तरीय अवलोकन में रुचि रखता है। यह TensorFlow Federated, विशेष रूप से इसके प्रकार प्रणाली का ज्ञान मानता है।
फ़ेडरेटेड प्रोग्राम के बारे में अधिक जानकारी के लिए देखें:
फ़ेडरेटेड प्रोग्राम क्या है?
फ़ेडरेटेड प्रोग्राम एक प्रोग्राम है जो फ़ेडरेटेड वातावरण में गणना और अन्य प्रसंस्करण तर्क निष्पादित करता है।
अधिक, विशेष रूप से एक फ़ेडरेटेड प्रोग्राम :
- गणनाएँ निष्पादित करता है
- प्रोग्राम तर्क का उपयोग करना
- प्लेटफ़ॉर्म-विशिष्ट घटकों के साथ
- और प्लेटफ़ॉर्म-अज्ञेयवादी घटक
- प्रोग्राम द्वारा निर्धारित पैरामीटर दिए गए
- और ग्राहक द्वारा निर्धारित पैरामीटर
- जब ग्राहक प्रोग्राम चलाता है
- और प्लेटफ़ॉर्म स्टोरेज में डेटा को मूर्त रूप दे सकता है:
- पायथन लॉजिक में उपयोग करें
- दोष सहनशीलता लागू करें
- और ग्राहक भंडारण के लिए डेटा जारी कर सकता है
इन अवधारणाओं और अमूर्तताओं को परिभाषित करने से एक संघीय कार्यक्रम के घटकों के बीच संबंधों का वर्णन करना संभव हो जाता है और इन घटकों को विभिन्न भूमिकाओं के स्वामित्व और लेखक की अनुमति मिलती है। यह डिकॉउलिंग डेवलपर्स को अन्य फ़ेडरेटेड प्रोग्रामों के साथ साझा किए गए घटकों का उपयोग करके फ़ेडरेटेड प्रोग्राम बनाने की अनुमति देता है, आमतौर पर इसका मतलब कई अलग-अलग प्लेटफार्मों पर एक ही प्रोग्राम तर्क को निष्पादित करना है।
टीएफएफ की फ़ेडरेटेड प्रोग्राम लाइब्रेरी ( tff.program ) फ़ेडरेटेड प्रोग्राम बनाने के लिए आवश्यक अमूर्तताओं को परिभाषित करती है और प्लेटफ़ॉर्म-अज्ञेयवादी घटक प्रदान करती है।
अवयव
<!--#include file="components.dot"-->
टीएफएफ के फ़ेडरेटेड प्रोग्राम लाइब्रेरी के घटकों को डिज़ाइन किया गया है ताकि उनका स्वामित्व और लेखन विभिन्न भूमिकाओं द्वारा किया जा सके।
कार्यक्रम
प्रोग्राम एक पायथन बाइनरी है जो:
- पैरामीटर परिभाषित करता है (जैसे झंडे)
- प्लेटफ़ॉर्म-विशिष्ट घटकों और प्लेटफ़ॉर्म-अज्ञेयवादी घटकों का निर्माण करता है
- फ़ेडरेटेड संदर्भ में प्रोग्राम तर्क का उपयोग करके गणना निष्पादित करता है
उदाहरण के लिए:
# 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.Computation
का कार्यान्वयन हैं।
उदाहरण के लिए, TFF प्लेटफ़ॉर्म में आप tff.framework.ConcreteComputation
बनाने के लिए tff.tensorflow.computation
या tff.federated_computation
डेकोरेटर का उपयोग कर सकते हैं:
अधिक जानकारी के लिए गणना का जीवन देखें।
प्रोग्राम तर्क
प्रोग्राम लॉजिक एक पायथन फ़ंक्शन है जो इनपुट के रूप में लेता है:
- ग्राहक और कार्यक्रम द्वारा निर्धारित पैरामीटर
- प्लेटफ़ॉर्म-विशिष्ट घटक
- प्लेटफ़ॉर्म-अज्ञेयवादी घटक
- संगणना
और कुछ ऑपरेशन करता है, जिसमें आम तौर पर शामिल हैं:
- संगणना निष्पादित करना
- पायथन तर्क को क्रियान्वित करना
- प्लेटफ़ॉर्म स्टोरेज में डेटा को भौतिक बनाना :
- पायथन लॉजिक में उपयोग करें
- दोष सहनशीलता लागू करें
और कुछ आउटपुट प्राप्त कर सकता है, जिसमें आम तौर पर शामिल हैं:
- ग्राहक भंडारण को मेट्रिक्स के रूप में डेटा जारी करना
उदाहरण के लिए:
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 में फिर से शुरू करने की आवश्यकता है?