फ़ेडरेटेड कोर

यह दस्तावेज़ उस के लिए एक आधार के रूप में कार्य करता है TFF के मुख्य परत का परिचय संघीय लर्निंग , और संभावित भविष्य के गैर सीखने फ़ेडरेटेड एल्गोरिदम।

फ़ेडरेटेड कोर के एक सौम्य परिचय के लिए, कृपया निम्नलिखित ट्यूटोरियल पढ़ें, क्योंकि वे उदाहरण के द्वारा कुछ मूलभूत अवधारणाओं का परिचय देते हैं और एक सरल फ़ेडरेटेड औसत एल्गोरिथ्म के निर्माण को चरण-दर-चरण प्रदर्शित करते हैं।

हम यह भी से अवगत होने के लिए प्रोत्साहित करते हैं संघीय लर्निंग और पर जुड़े ट्यूटोरियल छवि वर्गीकरण और पाठ पीढ़ी , के रूप में फ़ेडरेटेड सीखने के लिए संघीय कोर एपीआई का उपयोग करता है (एफसी एपीआई) विकल्प हम अपने द्वारा किए गए से कुछ के लिए महत्वपूर्ण संदर्भ प्रदान इस परत को डिजाइन करना।

अवलोकन

लक्ष्य, इच्छित उपयोग और दायरा

फ़ेडरेटेड कोर (FC) को वितरित गणनाओं को लागू करने के लिए एक प्रोग्रामिंग वातावरण के रूप में सबसे अच्छी तरह से समझा जाता है, अर्थात, ऐसी गणनाएँ जिनमें कई कंप्यूटर (मोबाइल फोन, टैबलेट, एम्बेडेड डिवाइस, डेस्कटॉप कंप्यूटर, सेंसर, डेटाबेस सर्वर, आदि) शामिल होते हैं, जो प्रत्येक गैर- स्थानीय रूप से तुच्छ प्रसंस्करण, और अपने काम के समन्वय के लिए पूरे नेटवर्क में संचार करते हैं।

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

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

एफसी का लक्ष्य है, एक nusthell में, अमूर्त की एक ऐसी ही स्यूडोकोड की तरह स्तर, कार्यक्रम तर्क की कि स्यूडोकोड नहीं है पर इसी तरह कॉम्पैक्ट प्रतिनिधित्व,, बल्कि, कि लक्ष्य के वातावरण की एक किस्म में निष्पादन योग्य है सक्षम करने के लिए है।

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

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

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

नतीजतन, जबकि सामान्य प्रयोजनों के लिए वितरित चौखटे जैसे भेजें संचालन की पेशकश और ब्लॉक के निर्माण के रूप में प्राप्त हो सकता है, एफसी जैसे ब्लॉक के निर्माण प्रदान करता है tff.federated_sum , tff.federated_reduce , या tff.federated_broadcast कि Encapsulate सरल वितरित प्रोटोकॉल।

भाषा

पायथन इंटरफ़ेस

TFF फ़ेडरेटेड संगणना प्रतिनिधित्व करने के लिए एक आंतरिक भाषा का उपयोग करता है, जिनमें से वाक्य रचना में serializable प्रतिनिधित्व द्वारा परिभाषित किया गया है computation.proto । एफसी एपीआई के उपयोगकर्ताओं को आम तौर पर इस भाषा के साथ सीधे बातचीत करने की आवश्यकता नहीं होगी, हालांकि। बल्कि, हम एक अजगर एपीआई (प्रदान tff नाम स्थान) है कि wraps एक तरह से संगणना परिभाषित करने के लिए के रूप में यह arounds।

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

यहाँ सिर्फ एक उदाहरण है; अधिक उदाहरण में पाया जा सकता कस्टम एल्गोरिदम ट्यूटोरियल।

@tff.federated_computation(tff.type_at_clients(tf.float32))
def get_average_temperature(sensor_readings):
  return tff.federated_mean(sensor_readings)

गैर उत्सुक TensorFlow से परिचित पाठकों अजगर कोड लिखने के लिए इस दृष्टिकोण के अनुरूप पाएंगे कि जैसे उपयोगों कार्यों tf.add या tf.reduce_sum अजगर कोड का एक वर्ग है कि एक TensorFlow ग्राफ को परिभाषित करता है में। यद्यपि कोड तकनीकी रूप से अजगर में व्यक्त किया है, इसका उद्देश्य एक के एक serializable प्रतिनिधित्व के निर्माण के लिए है tf.Graph नीचे, और यह ग्राफ, नहीं पायथन कोड, है कि आंतरिक रूप से TensorFlow क्रम द्वारा क्रियान्वित है। इसी तरह, एक के बारे में सोच सकते हैं tff.federated_mean के प्रतिनिधित्व वाले एक फ़ेडरेटेड गणना में एक फ़ेडरेटेड सेशन डालने के रूप में get_average_temperature

एफसी द्वारा किसी भाषा को परिभाषित करने के कारणों का एक हिस्सा इस तथ्य से जुड़ा है कि, जैसा कि ऊपर उल्लेख किया गया है, फ़ेडरेटेड संगणनाएँ वितरित सामूहिक व्यवहारों को निर्दिष्ट करती हैं, और जैसे, उनका तर्क गैर-स्थानीय है। उदाहरण के लिए, टीएफएफ ऑपरेटरों, इनपुट और आउटपुट प्रदान करता है जो नेटवर्क में विभिन्न स्थानों पर मौजूद हो सकते हैं।

यह एक भाषा और एक प्रकार की प्रणाली की मांग करता है जो वितरण की धारणा को पकड़ती है।

सिस्टम टाइप करें

फ़ेडरेटेड कोर निम्न प्रकार की श्रेणियां प्रदान करता है। इन प्रकारों का वर्णन करने में, हम टाइप कंस्ट्रक्टर्स की ओर इशारा करते हैं और साथ ही एक कॉम्पैक्ट नोटेशन का परिचय देते हैं, क्योंकि यह एक आसान तरीका है या कम्प्यूटेशंस और ऑपरेटरों के प्रकारों का वर्णन करता है।

सबसे पहले, यहां उन प्रकारों की श्रेणियां दी गई हैं जो अवधारणात्मक रूप से मौजूदा मुख्यधारा की भाषाओं में पाए जाने वाले समान हैं:

  • टेन्सर प्रकार ( tff.TensorType )। बस के रूप में TensorFlow में, इन है dtype और shape । फर्क सिर्फ इतना है कि इस प्रकार की वस्तुओं तक सीमित नहीं हैं है tf.Tensor अजगर में उदाहरणों कि एक TensorFlow ग्राफ में TensorFlow ऑप्स के आउटपुट का प्रतिनिधित्व करते हैं, लेकिन यह भी एक वितरित की एक आउटपुट के रूप में, डेटा है कि उत्पादन किया जा सकता है, जैसे की इकाइयों शामिल हो सकते हैं एकत्रीकरण प्रोटोकॉल। इस प्रकार, TFF टेंसर प्रकार केवल Python या TensorFlow में इस प्रकार के ठोस भौतिक प्रतिनिधित्व का एक सार संस्करण है।

    टेन्सर प्रकार के लिए कॉम्पैक्ट अंकन है dtype या dtype[shape] । उदाहरण के लिए, int32 और int32[10] पूर्णांकों और पूर्णांक वैक्टर के प्रकार, क्रमशः रहे हैं।

  • अनुक्रम प्रकार ( tff.SequenceType )। इनमें से TensorFlow के ठोस अवधारणा के TFF के सार बराबर हैं tf.data.Dataset रों। अनुक्रम के तत्वों का क्रमिक तरीके से सेवन किया जा सकता है, और इसमें जटिल प्रकार शामिल हो सकते हैं।

    अनुक्रम प्रकार के कॉम्पैक्ट प्रतिनिधित्व है T* , जहां T तत्वों के प्रकार है। उदाहरण के लिए int32* एक पूर्णांक अनुक्रम का प्रतिनिधित्व करता है।

  • नामांकित टपल प्रकार ( tff.StructType )। ये tuples और संरचनाओं विशिष्ट प्रकार के साथ तत्वों की एक पूर्वनिर्धारित संख्या है, नामित या अनाम शब्दकोश की तरह के निर्माण की TFF के तरीका है। महत्वपूर्ण रूप से, टीएफएफ की नामित टुपल अवधारणा में पायथन के तर्क टुपल्स के अमूर्त समकक्ष शामिल हैं, यानी, तत्वों का संग्रह जिनमें से कुछ, लेकिन सभी का नाम नहीं है, और कुछ स्थितीय हैं।

    नामित tuples के लिए कॉम्पैक्ट अंकन है <n_1=T_1, ..., n_k=T_k> , जहां n_k वैकल्पिक तत्व नाम हैं, और T_k तत्व प्रकार हैं। उदाहरण के लिए, <int32,int32> अनाम पूर्णांकों की एक जोड़ी के लिए एक कॉम्पैक्ट अंकन है, और <X=float32,Y=float32> नामित तैरता की एक जोड़ी के लिए एक कॉम्पैक्ट अंकन है X और Y है कि एक हवाई जहाज पर एक बिंदु का प्रतिनिधित्व कर सकते . Tuples, साथ ही मिश्रित रूप में अन्य प्रकार के साथ नेस्ट किया जा सकता है जैसे, <X=float32,Y=float32>* अंक की एक दृश्य के लिए एक कॉम्पैक्ट अंकन किया जाएगा।

  • समारोह प्रकार ( tff.FunctionType )। TFF एक कार्यात्मक प्रोग्रामिंग ढांचे, के रूप में व्यवहार कार्यों के साथ है प्रथम श्रेणी के मान । फ़ंक्शंस में अधिकतम एक तर्क होता है, और बिल्कुल एक परिणाम होता है।

    कार्यों के लिए कॉम्पैक्ट अंकन है (T -> U) , जहां T एक बहस के प्रकार है, और U परिणाम के प्रकार है, या ( -> U) वहाँ कोई तर्क है कि अगर (हालांकि कोई तर्क कार्यों एक पतित हैं अवधारणा जो ज्यादातर सिर्फ पायथन स्तर पर मौजूद है)। उदाहरण के लिए (int32* -> int32) कार्यों है कि एक एकल पूर्णांक मान के लिए एक पूर्णांक अनुक्रम को कम का एक प्रकार के लिए एक अंकन है।

निम्नलिखित प्रकार TFF संगणनाओं के वितरित सिस्टम पहलू को संबोधित करते हैं। इन अवधारणाओं TFF के लिए कुछ हद तक अद्वितीय हैं के रूप में, हम आप का उल्लेख करने के लिए प्रोत्साहित करते हैं कस्टम एल्गोरिदम अतिरिक्त टिप्पणी और उदाहरण के लिए ट्यूटोरियल।

  • प्लेसमेंट प्रकार। इस प्रकार अब तक सार्वजनिक 2 शाब्दिक के रूप में अन्य की तुलना में एपीआई में उजागर नहीं किया गया है tff.SERVER और tff.CLIENTS आप इस प्रकार के स्थिरांक के रूप में के बारे में सोच सकते हैं। हालाँकि, इसका उपयोग आंतरिक रूप से किया जाता है, और इसे भविष्य के रिलीज़ में सार्वजनिक API में पेश किया जाएगा। इस प्रकार के कॉम्पैक्ट प्रतिनिधित्व है placement

    कोई नियुक्ति प्रणाली प्रतिभागियों है कि एक विशेष भूमिका निभाते हैं का एक सामूहिक प्रतिनिधित्व करता है। आरंभिक रिलीज क्लाइंट-सर्वर संगणना, जिसमें प्रतिभागियों के 2 समूह हैं लक्षित कर रहा है: ग्राहकों और एक सर्वर (यदि आप एक सिंगलटन समूह के रूप में उत्तरार्द्ध के बारे में सोच सकते हैं)। हालाँकि, अधिक विस्तृत आर्किटेक्चर में, अन्य भूमिकाएँ भी हो सकती हैं, जैसे कि एक बहु-स्तरीय प्रणाली में मध्यवर्ती एग्रीगेटर, जो विभिन्न प्रकार के एकत्रीकरण का प्रदर्शन कर सकते हैं, या सर्वर द्वारा उपयोग किए जाने वाले की तुलना में विभिन्न प्रकार के डेटा संपीड़न/विघटन का उपयोग कर सकते हैं। ग्राहकों।

    प्लेसमेंट की धारणा को परिभाषित करने के प्राथमिक उद्देश्य फ़ेडरेटेड प्रकार परिभाषित करने के लिए एक आधार के रूप है।

  • संघीय प्रकार ( tff.FederatedType )। एक फ़ेडरेटेड प्रकार का मान एक है कि (जैसे एक विशिष्ट प्लेसमेंट द्वारा परिभाषित प्रणाली प्रतिभागियों के एक समूह द्वारा की मेजबानी की है tff.SERVER या tff.CLIENTS )। एक फ़ेडरेटेड प्रकार प्लेसमेंट मूल्य (इस प्रकार, यह है एक से परिभाषित किया गया है निर्भर प्रकार ), सदस्य घटकों के प्रकार (किस तरह की सामग्री के प्रतिभागियों में से प्रत्येक के स्थानीय रूप से होस्ट कर रहा है), और अतिरिक्त बिट all_equal कि निर्दिष्ट करता है सभी प्रतिभागियों को स्थानीय रूप से कर रहे हैं कि क्या एक ही वस्तु की मेजबानी।

    मूल्यों उस प्रकार के आइटम (सदस्य घटक) शामिल की फ़ेडरेटेड प्रकार के लिए कॉम्पैक्ट अंकन T , प्रत्येक समूह (प्लेसमेंट) द्वारा की मेजबानी G है T@G या {T}@G साथ all_equal बिट सेट या सेट क्रमशः नहीं।

    उदाहरण के लिए:

    • {int32}@CLIENTS एक फ़ेडरेटेड मूल्य है कि संभावित अलग पूर्णांकों, ग्राहक प्रति उपकरण एक का एक सेट के होते हैं प्रतिनिधित्व करता है। ध्यान दें कि हम है कि नेटवर्क में एक साथ कई स्थानों पर दिखाए डेटा के कई आइटम को शामिल के रूप में एक फ़ेडरेटेड मूल्य के बारे में बात कर रहे हैं। हालांकि इस सादृश्य सही क्योंकि TFF की अनुमति नहीं देता नहीं है एक तरह से इसके बारे में सोचने के लिए एक "नेटवर्क" आयाम के साथ टेन्सर का एक प्रकार के रूप में है, रैंडम एक्सेस एक फ़ेडरेटेड मूल्य के सदस्य घटकों को।

    • {<X=float32,Y=float32>*}@CLIENTS एक फ़ेडरेटेड डेटा सेट, कि एक से अधिक दृश्यों के होते हैं एक मूल्य का प्रतिनिधित्व XY निर्देशांक, ग्राहक प्रति उपकरण एक अनुक्रम।

    • <weights=float32[10,5],bias=float32[5]>@SERVER सर्वर पर वजन और पूर्वाग्रह tensors के नाम पर रखा गया टपल प्रतिनिधित्व करता है। जब से हम घुंघराले ब्रेसिज़ गिरा दिया गया है, यह इंगित करता all_equal बिट सेट किया गया है, यानी, वहाँ (चाहे कितने सर्वर प्रतिकृतियां वहाँ एक समूह यह मान की मेजबानी में हो सकता है की) केवल एक ही टपल है।

इमारत ब्लॉकों

संघीय कोर की भाषा का एक रूप है लैम्ब्डा-पथरी कुछ अतिरिक्त तत्वों के साथ,।

यह वर्तमान में सार्वजनिक एपीआई में उजागर निम्नलिखित प्रोग्रामिंग एब्स्ट्रैक्शन प्रदान करता है:

  • TensorFlow संगणना ( tff.tf_computation )। इन का उपयोग कर TFF में पुन: प्रयोज्य घटकों के रूप में लिपटे TensorFlow कोड के वर्गों रहे हैं tff.tf_computation डेकोरेटर। उनके पास हमेशा कार्यात्मक प्रकार होते हैं, और TensorFlow में कार्यों के विपरीत, वे संरचित पैरामीटर ले सकते हैं या अनुक्रम प्रकार के संरचित परिणाम वापस कर सकते हैं।

    यहाँ एक उदाहरण है, प्रकार का एक TF गणना है (int32* -> int) का उपयोग करता है tf.data.Dataset.reduce पूर्णांकों की राशि की गणना करने के ऑपरेटर:

    @tff.tf_computation(tff.SequenceType(tf.int32))
    def add_up_integers(x):
      return x.reduce(np.int32(0), lambda x, y: x + y)
    
  • Intrinsics या फ़ेडरेटेड ऑपरेटरों ( tff.federated_... )। इस तरह के रूप में कार्य करता है की एक पुस्तकालय है tff.federated_sum या tff.federated_broadcast कि एफसी एपीआई, जिनमें से अधिकांश TFF साथ प्रयोग के लिए संचार ऑपरेटरों वितरित प्रतिनिधित्व के थोक का गठन।

    क्योंकि कुछ हद तक की तरह हम intrinsics के रूप में इन का उल्लेख आंतरिक कार्यों , वे एक ओपन एंडेड, ऑपरेटरों की विस्तृत सेट कि TFF से समझ रहे हैं, और निचले स्तर कोड में नीचे संकलित कर रहे हैं।

    इनमें से अधिकांश ऑपरेटरों के पास फ़ेडरेटेड प्रकार के पैरामीटर और परिणाम हैं, और अधिकांश ऐसे टेम्प्लेट हैं जिन्हें विभिन्न प्रकार के डेटा पर लागू किया जा सकता है।

    उदाहरण के लिए, tff.federated_broadcast एक कार्यात्मक प्रकार का एक टेम्पलेट ऑपरेटर के रूप में सोचा जा सकता है T@SERVER -> T@CLIENTS

  • लैम्ब्डा भाव ( tff.federated_computation )। TFF में एक लैम्ब्डा अभिव्यक्ति एक के बराबर है lambda या def अजगर में; इसमें पैरामीटर नाम और एक बॉडी (एक्सप्रेशन) होता है जिसमें इस पैरामीटर के संदर्भ होते हैं।

    अजगर कोड में, इन के साथ सजाने अजगर कार्यों द्वारा बनाया जा सकता tff.federated_computation और एक तर्क को परिभाषित।

    यहाँ एक लैम्ब्डा एक्सप्रेशन का उदाहरण दिया गया है जिसका हम पहले ही उल्लेख कर चुके हैं:

    @tff.federated_computation(tff.type_at_clients(tf.float32))
    def get_average_temperature(sensor_readings):
      return tff.federated_mean(sensor_readings)
    
  • प्लेसमेंट शाब्दिक। अभी के लिए, केवल tff.SERVER और tff.CLIENTS सरल क्लाइंट-सर्वर संगणना परिभाषित करने के लिए अनुमति देने के लिए।

  • समारोह आमंत्रण ( __call__ )। कुछ भी एक कार्यात्मक प्रकार है कि मानक अजगर का उपयोग कर लागू किया जा सकता है __call__ वाक्य रचना। आमंत्रण एक अभिव्यक्ति है, जिसका प्रकार वही है जो फ़ंक्शन के परिणाम के प्रकार को लागू किया जा रहा है।

    उदाहरण के लिए:

    • add_up_integers(x) TensorFlow गणना पर एक बहस पहले परिभाषित की एक मंगलाचरण का प्रतिनिधित्व करता है x । इस अभिव्यक्ति के प्रकार है int32

    • tff.federated_mean(sensor_readings) पर फ़ेडरेटेड औसत ऑपरेटर की एक मंगलाचरण का प्रतिनिधित्व करता है sensor_readings । इस अभिव्यक्ति के प्रकार है float32@SERVER (उपरोक्त उदाहरण से संदर्भ कल्पना करते हुए)।

  • Tuples बनाने और उनके तत्वों का चयन। फार्म के अजगर भाव [x, y] , x[y] , या xy कि के साथ सजाया कार्यों के शरीर में दिखाई tff.federated_computation