फ़ेडरेटेड लर्निंग

सिंहावलोकन

यह दस्तावेज़ उन इंटरफ़ेस का परिचय देता है जो फ़ेडरेटेड शिक्षण कार्यों को सुविधाजनक बनाते हैं, जैसे फ़ेडरेटेड प्रशिक्षण या टेन्सरफ़्लो में कार्यान्वित मौजूदा मशीन लर्निंग मॉडल के साथ मूल्यांकन। इन इंटरफेस को डिजाइन करने में, हमारा प्राथमिक लक्ष्य फ़ेडरेटेड लर्निंग के साथ प्रयोग करना संभव बनाना था, बिना इस ज्ञान की आवश्यकता के कि यह हुड के तहत कैसे काम करता है, और विभिन्न मौजूदा मॉडलों और डेटा पर कार्यान्वित फ़ेडरेटेड लर्निंग एल्गोरिदम का मूल्यांकन करना था। हम आपको मंच पर वापस योगदान करने के लिए प्रोत्साहित करते हैं। टीएफएफ को विस्तारशीलता और संयोजनशीलता को ध्यान में रखकर डिजाइन किया गया है, और हम योगदान का स्वागत करते हैं; हम यह देखने के लिए उत्साहित हैं कि आप क्या लेकर आते हैं!

इस परत द्वारा प्रस्तुत इंटरफ़ेस में निम्नलिखित तीन प्रमुख भाग शामिल हैं:

  • मॉडल . कक्षाएं और सहायक फ़ंक्शन जो आपको टीएफएफ के साथ उपयोग के लिए अपने मौजूदा मॉडल को लपेटने की अनुमति देते हैं। किसी मॉडल को लपेटना एकल रैपिंग फ़ंक्शन को कॉल करने जितना आसान हो सकता है (उदाहरण के लिए, tff.learning.models.from_keras_model ), या पूर्ण अनुकूलन के लिए tff.learning.models.VariableModel इंटरफ़ेस के उपवर्ग को परिभाषित करना।

  • फ़ेडरेटेड कंप्यूटेशन बिल्डर्स । सहायक कार्य जो आपके मौजूदा मॉडलों का उपयोग करके प्रशिक्षण या मूल्यांकन के लिए फ़ेडरेटेड संगणनाएँ बनाते हैं।

  • डेटासेट । डेटा के डिब्बाबंद संग्रह जिन्हें आप फ़ेडरेटेड शिक्षण परिदृश्यों के अनुकरण में उपयोग के लिए पायथन में डाउनलोड और एक्सेस कर सकते हैं। हालाँकि फ़ेडरेटेड लर्निंग को विकेन्द्रीकृत डेटा के साथ उपयोग के लिए डिज़ाइन किया गया है जिसे आसानी से एक केंद्रीकृत स्थान पर डाउनलोड नहीं किया जा सकता है, अनुसंधान और विकास के चरणों में डेटा का उपयोग करके प्रारंभिक प्रयोग करना अक्सर सुविधाजनक होता है जिसे स्थानीय रूप से डाउनलोड और हेरफेर किया जा सकता है, खासकर उन डेवलपर्स के लिए जो हो सकते हैं दृष्टिकोण के लिए नया.

इन इंटरफेस को मुख्य रूप से tff.learning नेमस्पेस में परिभाषित किया गया है, अनुसंधान डेटा सेट और अन्य सिमुलेशन-संबंधित क्षमताओं को छोड़कर जिन्हें tff.simulation में समूहीकृत किया गया है। इस परत को फेडरेटेड कोर (एफसी) द्वारा पेश किए गए निचले स्तर के इंटरफेस का उपयोग करके कार्यान्वित किया जाता है, जो एक रनटाइम वातावरण भी प्रदान करता है।

आगे बढ़ने से पहले, हम अनुशंसा करते हैं कि आप पहले छवि वर्गीकरण और पाठ निर्माण पर ट्यूटोरियल की समीक्षा करें, क्योंकि वे ठोस उदाहरणों का उपयोग करके यहां वर्णित अधिकांश अवधारणाओं का परिचय देते हैं। यदि आप टीएफएफ कैसे काम करता है इसके बारे में अधिक जानने में रुचि रखते हैं, तो आप निचले स्तर के इंटरफेस के परिचय के रूप में कस्टम एल्गोरिदम ट्यूटोरियल पर नज़र डालना चाहेंगे, जिसका उपयोग हम फ़ेडरेटेड संगणनाओं के तर्क को व्यक्त करने और मौजूदा कार्यान्वयन का अध्ययन करने के लिए करते हैं। tff.learning इंटरफ़ेस।

मॉडल

वास्तु संबंधी मान्यताएँ

क्रमबद्धता

टीएफएफ का उद्देश्य विभिन्न प्रकार के वितरित शिक्षण परिदृश्यों का समर्थन करना है जिसमें आपके द्वारा लिखा गया मशीन लर्निंग मॉडल कोड विभिन्न क्षमताओं वाले बड़ी संख्या में विषम ग्राहकों पर क्रियान्वित हो सकता है। जबकि स्पेक्ट्रम के एक छोर पर, कुछ अनुप्रयोगों में वे क्लाइंट शक्तिशाली डेटाबेस सर्वर हो सकते हैं, हमारे प्लेटफ़ॉर्म द्वारा समर्थित कई महत्वपूर्ण उपयोगों में सीमित संसाधनों के साथ मोबाइल और एम्बेडेड डिवाइस शामिल हैं। हम यह नहीं मान सकते कि ये डिवाइस पायथन रनटाइम को होस्ट करने में सक्षम हैं; इस बिंदु पर हम केवल यही मान सकते हैं कि वे स्थानीय TensorFlow रनटाइम की मेजबानी करने में सक्षम हैं। इस प्रकार, टीएफएफ में हम जो मौलिक वास्तुशिल्प धारणा बनाते हैं वह यह है कि आपका मॉडल कोड टेन्सरफ्लो ग्राफ के रूप में क्रमबद्ध होना चाहिए।

आप उत्सुक मोड का उपयोग करने जैसी नवीनतम सर्वोत्तम प्रथाओं का पालन करके अभी भी अपना टीएफ कोड विकसित कर सकते हैं (और करना भी चाहिए)। हालाँकि, अंतिम कोड क्रमबद्ध होना चाहिए (उदाहरण के लिए, उत्सुक-मोड कोड के लिए tf.function के रूप में लपेटा जा सकता है)। यह सुनिश्चित करता है कि निष्पादन के समय आवश्यक किसी भी पायथन स्थिति या नियंत्रण प्रवाह को क्रमबद्ध किया जा सकता है (संभवतः ऑटोग्राफ की मदद से)।

वर्तमान में, TensorFlow पूरी तरह से उत्सुक-मोड TensorFlow को क्रमबद्ध और डीसेरिएलाइज़ करने का समर्थन नहीं करता है। इस प्रकार, TFF में क्रमांकन वर्तमान में TF 1.0 पैटर्न का अनुसरण करता है, जहां सभी कोड को tf.Graph के अंदर बनाया जाना चाहिए जिसे TFF नियंत्रित करता है। इसका मतलब यह है कि वर्तमान में TFF पहले से निर्मित मॉडल का उपभोग नहीं कर सकता है; इसके बजाय, मॉडल परिभाषा तर्क को नो-आर्ग फ़ंक्शन में पैक किया गया है जो tff.learning.models.VariableModel लौटाता है। यह फ़ंक्शन तब TFF द्वारा कॉल किया जाता है ताकि यह सुनिश्चित किया जा सके कि मॉडल के सभी घटक क्रमबद्ध हैं। इसके अलावा, दृढ़ता से टाइप किया गया वातावरण होने के कारण, टीएफएफ को कुछ अतिरिक्त मेटाडेटा की आवश्यकता होगी, जैसे कि आपके मॉडल के इनपुट प्रकार का विनिर्देश।

एकत्रीकरण

हम दृढ़तापूर्वक अनुशंसा करते हैं कि अधिकांश उपयोगकर्ता केरस का उपयोग करके मॉडल बनाएं, नीचे केरस के लिए कन्वर्टर्स अनुभाग देखें। ये रैपर मॉडल अपडेट के एकत्रीकरण के साथ-साथ मॉडल के लिए परिभाषित किसी भी मेट्रिक्स को स्वचालित रूप से संभालते हैं। हालाँकि, यह समझना अभी भी उपयोगी हो सकता है कि सामान्य tff.learning.models.VariableModel के लिए एकत्रीकरण को कैसे संभाला जाता है।

फ़ेडरेटेड लर्निंग में हमेशा एकत्रीकरण की कम से कम दो परतें होती हैं: स्थानीय ऑन-डिवाइस एकत्रीकरण, और क्रॉस-डिवाइस (या फ़ेडरेटेड) एकत्रीकरण:

  • स्थानीय एकत्रीकरण . एकत्रीकरण का यह स्तर एक व्यक्तिगत ग्राहक के स्वामित्व वाले उदाहरणों के कई बैचों में एकत्रीकरण को संदर्भित करता है। यह मॉडल पैरामीटर (चर) दोनों पर लागू होता है, जो मॉडल के स्थानीय रूप से प्रशिक्षित होने पर क्रमिक रूप से विकसित होते रहते हैं, साथ ही आपके द्वारा गणना किए जाने वाले आंकड़े (जैसे औसत हानि, सटीकता और अन्य मेट्रिक्स), जिन्हें आपका मॉडल फिर से स्थानीय रूप से अपडेट करेगा। क्योंकि यह प्रत्येक व्यक्तिगत ग्राहक की स्थानीय डेटा स्ट्रीम पर पुनरावृत्त होता है।

    इस स्तर पर एकत्रीकरण करना आपके मॉडल कोड की ज़िम्मेदारी है, और इसे मानक TensorFlow संरचनाओं का उपयोग करके पूरा किया जाता है।

    प्रसंस्करण की सामान्य संरचना इस प्रकार है:

    • मॉडल पहले समुच्चय को धारण करने के लिए tf.Variable s का निर्माण करता है, जैसे बैचों की संख्या या संसाधित उदाहरणों की संख्या, प्रति-बैच या प्रति-उदाहरण हानियों का योग, आदि।

    • टीएफएफ आपके Model पर क्लाइंट डेटा के बाद के बैचों पर क्रमिक रूप से कई बार forward_pass विधि को लागू करता है, जो आपको साइड इफेक्ट के रूप में विभिन्न समुच्चय वाले वेरिएबल्स को अपडेट करने की अनुमति देता है।

    • अंत में, टीएफएफ आपके मॉडल पर report_local_unfinalized_metrics विधि को लागू करता है ताकि आपके मॉडल को क्लाइंट द्वारा निर्यात किए जाने वाले मेट्रिक्स के एक कॉम्पैक्ट सेट में एकत्र किए गए सभी सारांश आंकड़ों को संकलित करने की अनुमति मिल सके। यह वह जगह है जहां आपका मॉडल कोड, उदाहरण के लिए, औसत नुकसान को निर्यात करने के लिए संसाधित उदाहरणों की संख्या से नुकसान के योग को विभाजित कर सकता है, आदि।

  • संघीय एकत्रीकरण . एकत्रीकरण का यह स्तर सिस्टम में कई क्लाइंट्स (उपकरणों) में एकत्रीकरण को संदर्भित करता है। फिर, यह दोनों मॉडल पैरामीटर (वेरिएबल) पर लागू होता है, जिनका ग्राहकों के बीच औसत किया जा रहा है, साथ ही स्थानीय एकत्रीकरण के परिणामस्वरूप आपके मॉडल द्वारा निर्यात किए गए मेट्रिक्स पर भी लागू होता है।

    इस स्तर पर एकत्रीकरण करना टीएफएफ की जिम्मेदारी है। हालाँकि, एक मॉडल निर्माता के रूप में, आप इस प्रक्रिया को नियंत्रित कर सकते हैं (इस पर अधिक जानकारी नीचे दी गई है)।

    प्रसंस्करण की सामान्य संरचना इस प्रकार है:

    • प्रारंभिक मॉडल, और प्रशिक्षण के लिए आवश्यक कोई भी पैरामीटर, सर्वर द्वारा ग्राहकों के एक सबसेट को वितरित किया जाता है जो प्रशिक्षण या मूल्यांकन के दौर में भाग लेंगे।

    • प्रत्येक क्लाइंट पर, स्वतंत्र रूप से और समानांतर में, आपके मॉडल कोड को मॉडल पैरामीटर का एक नया सेट (प्रशिक्षण के दौरान) और स्थानीय मेट्रिक्स का एक नया सेट तैयार करने के लिए स्थानीय डेटा बैचों की एक स्ट्रीम पर बार-बार लागू किया जाता है, जैसा कि ऊपर वर्णित है (यह स्थानीय है) एकत्रीकरण)।

    • TFF पूरे सिस्टम में मॉडल मापदंडों और स्थानीय रूप से निर्यात किए गए मेट्रिक्स को संचित और एकत्रित करने के लिए एक वितरित एकत्रीकरण प्रोटोकॉल चलाता है। यह तर्क TFF की अपनी फ़ेडरेटेड संगणना भाषा (TensorFlow में नहीं) का उपयोग करके घोषणात्मक तरीके से व्यक्त किया गया है। एकत्रीकरण एपीआई पर अधिक जानकारी के लिए कस्टम एल्गोरिदम ट्यूटोरियल देखें।

सार इंटरफ़ेस

इस मूल कंस्ट्रक्टर + मेटाडेटा इंटरफ़ेस को इंटरफ़ेस tff.learning.models.VariableModel द्वारा इस प्रकार दर्शाया गया है:

  • कंस्ट्रक्टर, forward_pass और report_local_unfinalized_metrics तरीकों को मॉडल वेरिएबल्स, फॉरवर्ड पास और उन आंकड़ों का निर्माण करना चाहिए जिन्हें आप रिपोर्ट करना चाहते हैं। जैसा कि ऊपर चर्चा की गई है, उन विधियों द्वारा निर्मित TensorFlow क्रमबद्ध होना चाहिए।

  • input_spec प्रॉपर्टी, साथ ही 3 प्रॉपर्टी जो आपके प्रशिक्षित, गैर-प्रशिक्षित और स्थानीय चर के सबसेट लौटाती हैं, मेटाडेटा का प्रतिनिधित्व करती हैं। TFF इस जानकारी का उपयोग यह निर्धारित करने के लिए करता है कि आपके मॉडल के कुछ हिस्सों को फ़ेडरेटेड ऑप्टिमाइज़ेशन एल्गोरिदम से कैसे जोड़ा जाए, और निर्मित सिस्टम की शुद्धता को सत्यापित करने में सहायता के लिए आंतरिक प्रकार के हस्ताक्षरों को परिभाषित किया जाए (ताकि आपके मॉडल को उस डेटा पर तुरंत चालू न किया जा सके जो मेल नहीं खाता है) मॉडल को उपभोग के लिए डिज़ाइन किया गया है)।

इसके अलावा, अमूर्त इंटरफ़ेस tff.learning.models.VariableModel एक संपत्ति metric_finalizers उजागर करता है जो मीट्रिक के अपूर्ण मानों को लेता है ( report_local_unfinalized_metrics() द्वारा लौटाया जाता है) और अंतिम मीट्रिक मान लौटाता है। फ़ेडरेटेड प्रशिक्षण प्रक्रियाओं या मूल्यांकन गणनाओं को परिभाषित करते समय क्रॉस-क्लाइंट मेट्रिक्स एग्रीगेटर बनाने के लिए metric_finalizers और report_local_unfinalized_metrics() विधि का एक साथ उपयोग किया जाएगा। उदाहरण के लिए, एक सरल tff.learning.metrics.sum_then_finalize एग्रीगेटर पहले क्लाइंट से अपूर्ण मीट्रिक मानों का योग करेगा, और फिर सर्वर पर फ़ाइनलाइज़र फ़ंक्शंस को कॉल करेगा।

आप हमारे छवि वर्गीकरण ट्यूटोरियल के दूसरे भाग में अपने स्वयं के कस्टम tff.learning.models.VariableModel को परिभाषित करने के उदाहरण पा सकते हैं, साथ ही model_examples.py में परीक्षण के लिए हमारे द्वारा उपयोग किए जाने वाले उदाहरण मॉडल में भी।

केरस के लिए कन्वर्टर्स

TFF के लिए आवश्यक लगभग सभी जानकारी tf.keras इंटरफ़ेस को कॉल करके प्राप्त की जा सकती है, इसलिए यदि आपके पास Keras मॉडल है, तो आप tff.learning.models.VariableModel बनाने के लिए tff.learning.models.from_keras_model पर भरोसा कर सकते हैं।

ध्यान दें कि TFF अभी भी चाहता है कि आप एक कंस्ट्रक्टर प्रदान करें - एक बिना तर्क वाला मॉडल फ़ंक्शन जैसे कि निम्नलिखित:

def model_fn():
  keras_model = ...
  return tff.learning.models.from_keras_model(keras_model, sample_batch, loss=...)

मॉडल के अलावा, आप डेटा का एक नमूना बैच प्रदान करते हैं जिसका उपयोग TFF आपके मॉडल के इनपुट के प्रकार और आकार को निर्धारित करने के लिए करता है। यह सुनिश्चित करता है कि TFF उस डेटा के लिए मॉडल को ठीक से इंस्टेंट कर सकता है जो वास्तव में क्लाइंट डिवाइस पर मौजूद होगा (क्योंकि हम मानते हैं कि यह डेटा आम तौर पर उस समय उपलब्ध नहीं होता है जब आप क्रमबद्ध होने के लिए TensorFlow का निर्माण कर रहे हैं)।

केरस रैपर्स का उपयोग हमारे छवि वर्गीकरण और पाठ निर्माण ट्यूटोरियल में दिखाया गया है।

फ़ेडरेटेड कंप्यूटेशन बिल्डर्स

tff.learning पैकेज tff.Computation के लिए कई बिल्डर्स प्रदान करता है जो सीखने से संबंधित कार्य करते हैं; हम उम्मीद करते हैं कि भविष्य में ऐसी गणनाओं के सेट का विस्तार होगा।

वास्तु संबंधी मान्यताएँ

कार्यान्वयन

फ़ेडरेटेड गणना चलाने में दो अलग-अलग चरण होते हैं।

  • संकलित करें : टीएफएफ सबसे पहले फ़ेडरेटेड लर्निंग एल्गोरिदम को संपूर्ण वितरित गणना के एक अमूर्त क्रमबद्ध प्रतिनिधित्व में संकलित करता है । यह तब होता है जब TensorFlow क्रमांकन होता है, लेकिन अधिक कुशल निष्पादन का समर्थन करने के लिए अन्य परिवर्तन हो सकते हैं। हम कंपाइलर द्वारा उत्सर्जित क्रमबद्ध प्रतिनिधित्व को फ़ेडरेटेड गणना के रूप में संदर्भित करते हैं।

  • Execute TFF इन गणनाओं को निष्पादित करने के तरीके प्रदान करता है। अभी के लिए, निष्पादन केवल स्थानीय सिमुलेशन के माध्यम से समर्थित है (उदाहरण के लिए, सिम्युलेटेड विकेंद्रीकृत डेटा का उपयोग करके नोटबुक में)।

टीएफएफ के फ़ेडरेटेड लर्निंग एपीआई द्वारा उत्पन्न फ़ेडरेटेड गणना, जैसे कि एक प्रशिक्षण एल्गोरिदम जो फ़ेडरेटेड मॉडल औसत , या फ़ेडरेटेड मूल्यांकन का उपयोग करता है, में कई तत्व शामिल हैं, विशेष रूप से:

  • आपके मॉडल कोड का एक क्रमबद्ध रूप और साथ ही आपके मॉडल के प्रशिक्षण/मूल्यांकन लूप को चलाने के लिए फेडरेटेड लर्निंग फ्रेमवर्क द्वारा निर्मित अतिरिक्त टेन्सरफ्लो कोड (जैसे ऑप्टिमाइज़र का निर्माण, मॉडल अपडेट लागू करना, tf.data.Dataset s पर पुनरावृत्ति करना, और मेट्रिक्स की गणना करना, और सर्वर पर समग्र अद्यतन को लागू करना, कुछ नाम बताने के लिए)।

  • क्लाइंट और सर्वर के बीच संचार का एक घोषणात्मक विनिर्देश (आमतौर पर क्लाइंट डिवाइसों में एकत्रीकरण के विभिन्न रूप, और सर्वर से सभी क्लाइंट तक प्रसारण ), और यह वितरित संचार क्लाइंट-स्थानीय या सर्वर-स्थानीय निष्पादन के साथ कैसे जुड़ा हुआ है TensorFlow कोड का।

इस क्रमबद्ध रूप में प्रस्तुत फ़ेडरेटेड संगणनाएँ पायथन से अलग एक प्लेटफ़ॉर्म-स्वतंत्र आंतरिक भाषा में व्यक्त की जाती हैं, लेकिन फ़ेडरेटेड लर्निंग एपीआई का उपयोग करने के लिए, आपको इस प्रतिनिधित्व के विवरण के साथ खुद को चिंतित करने की आवश्यकता नहीं होगी। गणनाओं को आपके पायथन कोड में tff.Computation प्रकार की वस्तुओं के रूप में दर्शाया जाता है, जिसे अधिकांश भाग के लिए आप अपारदर्शी पायथन callable एस के रूप में मान सकते हैं।

ट्यूटोरियल में, आप उन फ़ेडरेटेड संगणनाओं का आह्वान करेंगे जैसे कि वे स्थानीय रूप से निष्पादित होने के लिए नियमित पायथन फ़ंक्शन थे। हालाँकि, TFF को निष्पादन वातावरण के अधिकांश पहलुओं के लिए अज्ञेयवादी तरीके से फ़ेडरेटेड संगणनाओं को व्यक्त करने के लिए डिज़ाइन किया गया है, ताकि उन्हें संभावित रूप से तैनात किया जा सके, उदाहरण के लिए, Android चलाने वाले उपकरणों के समूह, या डेटासेंटर में क्लस्टर के लिए। फिर, इसका मुख्य परिणाम क्रमबद्धता के बारे में मजबूत धारणाएँ हैं। विशेष रूप से, जब आप नीचे वर्णित build_... विधियों में से किसी एक को लागू करते हैं तो गणना पूरी तरह से क्रमबद्ध होती है।

मॉडलिंग अवस्था

टीएफएफ एक कार्यात्मक प्रोग्रामिंग वातावरण है, फिर भी फ़ेडरेटेड लर्निंग में रुचि की कई प्रक्रियाएं स्टेटफुल हैं। उदाहरण के लिए, एक प्रशिक्षण लूप जिसमें फ़ेडरेटेड मॉडल औसत के कई दौर शामिल होते हैं, एक उदाहरण है जिसे हम एक स्टेटफुल प्रक्रिया के रूप में वर्गीकृत कर सकते हैं। इस प्रक्रिया में, एक दौर से दूसरे दौर में विकसित होने वाली स्थिति में प्रशिक्षित किए जा रहे मॉडल मापदंडों का सेट और संभवतः ऑप्टिमाइज़र से जुड़ी अतिरिक्त स्थिति (उदाहरण के लिए, एक गति वेक्टर) शामिल होती है।

चूंकि टीएफएफ कार्यात्मक है, स्टेटफुल प्रक्रियाओं को टीएफएफ में गणना के रूप में तैयार किया जाता है जो वर्तमान स्थिति को इनपुट के रूप में स्वीकार करते हैं और फिर अद्यतन स्थिति को आउटपुट के रूप में प्रदान करते हैं। किसी स्टेटफुल प्रक्रिया को पूरी तरह से परिभाषित करने के लिए, किसी को यह भी निर्दिष्ट करना होगा कि प्रारंभिक स्थिति कहाँ से आती है (अन्यथा हम प्रक्रिया को बूटस्ट्रैप नहीं कर सकते हैं)। इसे सहायक वर्ग tff.templates.IterativeProcess की परिभाषा में कैद किया गया है, next क्रमशः initialize और पुनरावृत्ति के अनुरूप 2 गुण हैं।

उपलब्ध बिल्डर्स

फिलहाल, टीएफएफ विभिन्न बिल्डर फ़ंक्शन प्रदान करता है जो फ़ेडरेटेड प्रशिक्षण और मूल्यांकन के लिए फ़ेडरेटेड संगणनाएँ उत्पन्न करता है। दो उल्लेखनीय उदाहरणों में शामिल हैं:

  • tff.learning.algorithms.build_weighted_fed_avg , जो इनपुट के रूप में एक मॉडल फ़ंक्शन और एक क्लाइंट ऑप्टिमाइज़र लेता है, और एक स्टेटफुल tff.learning.templates.LearningProcess (जो tff.templates.IterativeProcess उपवर्गित करता है) लौटाता है।

  • tff.learning.build_federated_evaluation एक मॉडल फ़ंक्शन लेता है और मॉडलों के फ़ेडरेटेड मूल्यांकन के लिए एकल फ़ेडरेटेड गणना लौटाता है, क्योंकि मूल्यांकन स्टेटफुल नहीं है।

डेटासेट

वास्तु संबंधी मान्यताएँ

ग्राहक चयन

विशिष्ट फ़ेडरेटेड शिक्षण परिदृश्य में, हमारे पास संभावित रूप से करोड़ों क्लाइंट डिवाइसों की एक बड़ी आबादी है, जिनमें से केवल एक छोटा सा हिस्सा सक्रिय हो सकता है और किसी भी समय प्रशिक्षण के लिए उपलब्ध हो सकता है (उदाहरण के लिए, यह उन ग्राहकों तक सीमित हो सकता है जो किसी पावर स्रोत से प्लग इन किया गया है, मीटर वाले नेटवर्क पर नहीं, और अन्यथा निष्क्रिय)। आम तौर पर, प्रशिक्षण या मूल्यांकन में भाग लेने के लिए उपलब्ध ग्राहकों का समूह डेवलपर के नियंत्रण से बाहर होता है। इसके अलावा, चूंकि लाखों ग्राहकों का समन्वय करना अव्यावहारिक है, प्रशिक्षण या मूल्यांकन के एक विशिष्ट दौर में उपलब्ध ग्राहकों का केवल एक अंश शामिल होगा, जिसका नमूना यादृच्छिक रूप से लिया जा सकता है।

इसका मुख्य परिणाम यह है कि फ़ेडरेटेड संगणनाएँ, डिज़ाइन द्वारा, ऐसे तरीके से व्यक्त की जाती हैं जो प्रतिभागियों के सटीक सेट से बेखबर होती हैं; सभी प्रसंस्करण को अज्ञात ग्राहकों के एक अमूर्त समूह पर समग्र संचालन के रूप में व्यक्त किया जाता है, और वह समूह प्रशिक्षण के एक दौर से दूसरे दौर में भिन्न हो सकता है। ठोस प्रतिभागियों के लिए गणना का वास्तविक बंधन, और इस प्रकार उनके द्वारा गणना में फीड किए गए ठोस डेटा को, इस प्रकार गणना के बाहर ही तैयार किया जाता है।

अपने फ़ेडरेटेड लर्निंग कोड की यथार्थवादी तैनाती का अनुकरण करने के लिए, आप आम तौर पर एक प्रशिक्षण लूप लिखेंगे जो इस तरह दिखता है:

trainer = tff.learning.algorithms.build_weighted_fed_avg(...)
state = trainer.initialize()
federated_training_data = ...

def sample(federate_data):
  return ...

while True:
  data_for_this_round = sample(federated_training_data)
  result = trainer.next(state, data_for_this_round)
  state = result.state

इसे सुविधाजनक बनाने के लिए, सिमुलेशन में टीएफएफ का उपयोग करते समय, फ़ेडरेटेड डेटा को पायथन list के रूप में स्वीकार किया जाता है, जिसमें उस डिवाइस के स्थानीय tf.data.Dataset का प्रतिनिधित्व करने के लिए प्रति भाग लेने वाले क्लाइंट डिवाइस में एक तत्व होता है।

सार इंटरफ़ेस

सिम्युलेटेड फ़ेडरेटेड डेटा सेट से निपटने को मानकीकृत करने के लिए, TFF एक अमूर्त इंटरफ़ेस tff.simulation.datasets.ClientData प्रदान करता है, जो किसी को क्लाइंट के सेट की गणना करने और एक tf.data.Dataset बनाने की अनुमति देता है जिसमें किसी विशेष का डेटा होता है ग्राहक। उन tf.data.Dataset को उत्सुक मोड में उत्पन्न फ़ेडरेटेड संगणनाओं में इनपुट के रूप में सीधे फीड किया जा सकता है।

यह ध्यान दिया जाना चाहिए कि ग्राहक पहचान तक पहुंचने की क्षमता एक ऐसी सुविधा है जो केवल सिमुलेशन में उपयोग के लिए डेटासेट द्वारा प्रदान की जाती है, जहां ग्राहकों के विशिष्ट उपसमूहों से डेटा पर प्रशिक्षित करने की क्षमता की आवश्यकता हो सकती है (उदाहरण के लिए, विभिन्न की दैनिक उपलब्धता को अनुकरण करने के लिए) ग्राहकों के प्रकार)। संकलित गणना और अंतर्निहित रनटाइम में ग्राहक पहचान की कोई धारणा शामिल नहीं है। एक बार क्लाइंट के एक विशिष्ट उपसमूह से डेटा को इनपुट के रूप में चुना गया है, उदाहरण के लिए, tff.templates.IterativeProcess.next पर कॉल में, क्लाइंट की पहचान अब इसमें दिखाई नहीं देती है।

उपलब्ध डेटा सेट

हमने डेटासेट के लिए नेमस्पेस tff.simulation.datasets समर्पित किया है जो सिमुलेशन में उपयोग के लिए tff.simulation.datasets.ClientData इंटरफ़ेस को लागू करता है, और छवि वर्गीकरण और टेक्स्ट जेनरेशन ट्यूटोरियल का समर्थन करने के लिए इसे डेटासेट के साथ जोड़ा है। हम आपको प्लेटफ़ॉर्म पर अपने स्वयं के डेटासेट का योगदान करने के लिए प्रोत्साहित करना चाहते हैं।