यह दस्तावेज़ टीएफएफ की मुख्य परत का परिचय देता है जो फ़ेडरेटेड लर्निंग और संभावित भविष्य के गैर-शिक्षण फ़ेडरेटेड एल्गोरिदम के लिए आधार के रूप में कार्य करता है।
फ़ेडरेटेड कोर के एक सौम्य परिचय के लिए, कृपया निम्नलिखित ट्यूटोरियल पढ़ें, क्योंकि वे उदाहरण के तौर पर कुछ मूलभूत अवधारणाओं का परिचय देते हैं और एक सरल फ़ेडरेटेड औसत एल्गोरिदम के निर्माण को चरण-दर-चरण प्रदर्शित करते हैं।
हम आपको फ़ेडरेटेड लर्निंग और छवि वर्गीकरण और पाठ निर्माण पर संबंधित ट्यूटोरियल से परिचित होने के लिए भी प्रोत्साहित करेंगे, क्योंकि फ़ेडरेटेड लर्निंग के लिए फ़ेडरेटेड कोर एपीआई (एफसी एपीआई) का उपयोग हमारे द्वारा चुने गए कुछ विकल्पों के लिए महत्वपूर्ण संदर्भ प्रदान करता है। इस परत को डिज़ाइन करना।
सिंहावलोकन
लक्ष्य, इच्छित उपयोग और दायरा
फ़ेडरेटेड कोर (एफसी) को वितरित संगणनाओं को लागू करने के लिए एक प्रोग्रामिंग वातावरण के रूप में सबसे अच्छी तरह से समझा जाता है, अर्थात, ऐसी संगणनाएँ जिनमें कई कंप्यूटर (मोबाइल फोन, टैबलेट, एम्बेडेड डिवाइस, डेस्कटॉप कंप्यूटर, सेंसर, डेटाबेस सर्वर, आदि) शामिल होते हैं जो प्रत्येक गैर-निष्पादित कर सकते हैं। स्थानीय स्तर पर तुच्छ प्रसंस्करण, और अपने काम को समन्वित करने के लिए पूरे नेटवर्क में संचार करें।
वितरित शब्द बहुत सामान्य है, और टीएफएफ सभी संभावित प्रकार के वितरित एल्गोरिदम को लक्षित नहीं करता है, इसलिए हम इस ढांचे में व्यक्त किए जा सकने वाले एल्गोरिदम के प्रकारों का वर्णन करने के लिए कम सामान्य शब्द फ़ेडरेटेड कंप्यूटेशन का उपयोग करना पसंद करते हैं।
जबकि फ़ेडरेटेड कंप्यूटेशन शब्द को पूरी तरह से औपचारिक तरीके से परिभाषित करना इस दस्तावेज़ के दायरे से बाहर है, उन एल्गोरिदम के प्रकारों के बारे में सोचें जिन्हें आप एक शोध प्रकाशन में छद्मकोड में व्यक्त देख सकते हैं जो एक नए वितरित शिक्षण एल्गोरिदम का वर्णन करता है।
संक्षेप में, एफसी का लक्ष्य प्रोग्राम लॉजिक के समान छद्म कोड-जैसे अमूर्त स्तर पर समान कॉम्पैक्ट प्रतिनिधित्व को सक्षम करना है, जो छद्म कोड नहीं है, बल्कि विभिन्न लक्ष्य वातावरणों में निष्पादन योग्य है।
एफसी को व्यक्त करने के लिए डिज़ाइन किए गए एल्गोरिदम के प्रकारों की मुख्य परिभाषित विशेषता यह है कि सिस्टम प्रतिभागियों के कार्यों को सामूहिक तरीके से वर्णित किया जाता है। इस प्रकार, हम प्रत्येक उपकरण के बारे में बात करते हैं जो स्थानीय रूप से डेटा को परिवर्तित करता है, और उपकरण एक केंद्रीकृत समन्वयक द्वारा काम का समन्वय करते हैं, उनके परिणामों को प्रसारित करते हैं , एकत्र करते हैं , या एकत्र करते हैं ।
जबकि TFF को सरल क्लाइंट-सर्वर आर्किटेक्चर से आगे जाने में सक्षम होने के लिए डिज़ाइन किया गया है, सामूहिक प्रसंस्करण की धारणा मौलिक है। यह फ़ेडरेटेड लर्निंग में टीएफएफ की उत्पत्ति के कारण है, एक ऐसी तकनीक जो मूल रूप से संभावित संवेदनशील डेटा पर गणना का समर्थन करने के लिए डिज़ाइन की गई है जो क्लाइंट डिवाइसों के नियंत्रण में रहती है, और जिसे गोपनीयता कारणों से केवल केंद्रीकृत स्थान पर डाउनलोड नहीं किया जा सकता है। जबकि ऐसे सिस्टम में प्रत्येक ग्राहक सिस्टम द्वारा परिणाम की गणना करने के लिए डेटा और प्रसंस्करण शक्ति का योगदान देता है (एक परिणाम जो हम आम तौर पर सभी प्रतिभागियों के लिए मूल्यवान होने की उम्मीद करते हैं), हम प्रत्येक ग्राहक की गोपनीयता और गुमनामी को संरक्षित करने का भी प्रयास करते हैं।
इस प्रकार, जबकि वितरित कंप्यूटिंग के लिए अधिकांश ढांचे को व्यक्तिगत प्रतिभागियों के परिप्रेक्ष्य से प्रसंस्करण को व्यक्त करने के लिए डिज़ाइन किया गया है - अर्थात, व्यक्तिगत बिंदु-से-बिंदु संदेश आदान-प्रदान के स्तर पर, और आने वाले और बाहर जाने वाले संदेशों के साथ प्रतिभागी के स्थानीय राज्य संक्रमण की अन्योन्याश्रयता , TFF के फ़ेडरेटेड कोर को वैश्विक सिस्टम-व्यापी परिप्रेक्ष्य से सिस्टम के व्यवहार का वर्णन करने के लिए डिज़ाइन किया गया है (उदाहरण के लिए, MapReduce के समान)।
नतीजतन, जबकि सामान्य उद्देश्यों के लिए वितरित ढांचे बिल्डिंग ब्लॉक के रूप में भेजने और प्राप्त करने जैसे संचालन की पेशकश कर सकते हैं, एफसी tff.federated_sum
, tff.federated_reduce
, या tff.federated_broadcast
जैसे बिल्डिंग ब्लॉक प्रदान करता है जो सरल वितरित प्रोटोकॉल को समाहित करता है।
भाषा
पायथन इंटरफ़ेस
टीएफएफ फ़ेडरेटेड संगणनाओं का प्रतिनिधित्व करने के लिए एक आंतरिक भाषा का उपयोग करता है, जिसका वाक्यविन्यास computation.proto में क्रमबद्ध प्रतिनिधित्व द्वारा परिभाषित किया गया है। हालाँकि, एफसी एपीआई के उपयोगकर्ताओं को आम तौर पर इस भाषा के साथ सीधे बातचीत करने की आवश्यकता नहीं होगी। बल्कि, हम एक पायथन एपीआई ( tff
नेमस्पेस) प्रदान करते हैं जो गणनाओं को परिभाषित करने के तरीके के रूप में इसके चारों ओर लपेटता है।
विशेष रूप से, टीएफएफ tff.federated_computation
जैसे पायथन फ़ंक्शन डेकोरेटर प्रदान करता है जो सजाए गए कार्यों के निकायों का पता लगाता है, और टीएफएफ की भाषा में फ़ेडरेटेड गणना तर्क के क्रमबद्ध प्रतिनिधित्व का उत्पादन करता है। tff.federated_computation
से सजाया गया एक फ़ंक्शन ऐसे क्रमबद्ध प्रतिनिधित्व के वाहक के रूप में कार्य करता है, और इसे किसी अन्य गणना के मुख्य भाग में बिल्डिंग ब्लॉक के रूप में एम्बेड कर सकता है, या लागू होने पर मांग पर इसे निष्पादित कर सकता है।
यहाँ सिर्फ एक उदाहरण है; अधिक उदाहरण कस्टम एल्गोरिदम ट्यूटोरियल में पाए जा सकते हैं।
@tff.federated_computation(federated_language.FederatedType(np.float32, tff.CLIENTS))
def get_average_temperature(sensor_readings):
return tff.federated_mean(sensor_readings)
गैर-उत्सुक TensorFlow से परिचित पाठक इस दृष्टिकोण को Python कोड लिखने के समान पाएंगे जो Python कोड के एक अनुभाग में tf.add
या tf.reduce_sum
जैसे फ़ंक्शंस का उपयोग करता है जो TensorFlow ग्राफ़ को परिभाषित करता है। यद्यपि कोड को तकनीकी रूप से पायथन में व्यक्त किया गया है, इसका उद्देश्य नीचे एक tf.Graph
का क्रमबद्ध प्रतिनिधित्व बनाना है, और यह ग्राफ़ है, न कि पायथन कोड, जिसे आंतरिक रूप से TensorFlow रनटाइम द्वारा निष्पादित किया जाता है। इसी तरह, कोई tff.federated_mean
को get_average_temperature
द्वारा दर्शाए गए फ़ेडरेटेड गणना में फ़ेडरेटेड ऑप डालने के रूप में सोच सकता है।
एफसी द्वारा किसी भाषा को परिभाषित करने के कारण का एक हिस्सा इस तथ्य से संबंधित है कि, जैसा कि ऊपर उल्लेख किया गया है, फ़ेडरेटेड संगणनाएँ वितरित सामूहिक व्यवहार को निर्दिष्ट करती हैं, और इस तरह, उनका तर्क गैर-स्थानीय है। उदाहरण के लिए, TFF ऑपरेटर, इनपुट और आउटपुट प्रदान करता है जो नेटवर्क में विभिन्न स्थानों पर मौजूद हो सकते हैं।
इसके लिए एक ऐसी भाषा और एक प्रकार की प्रणाली की आवश्यकता होती है जो वितरितता की धारणा को समझ सके।
सिस्टम टाइप करें
फ़ेडरेटेड कोर निम्नलिखित श्रेणियों के प्रकार प्रदान करता है। इन प्रकारों का वर्णन करने में, हम टाइप कंस्ट्रक्टरों को इंगित करते हैं और साथ ही एक कॉम्पैक्ट नोटेशन भी पेश करते हैं, क्योंकि यह एक आसान तरीका है या गणना और ऑपरेटरों के प्रकारों का वर्णन करता है।
सबसे पहले, यहां उन प्रकारों की श्रेणियां दी गई हैं जो वैचारिक रूप से मौजूदा मुख्यधारा की भाषाओं में पाए जाने वाले समान हैं:
टेंसर प्रकार (
federated_language.TensorType
)। TensorFlow की तरह ही, इनमेंdtype
औरshape
हैं। एकमात्र अंतर यह है कि इस प्रकार की वस्तुएं पायथन मेंtf.Tensor
उदाहरणों तक सीमित नहीं हैं जो TensorFlow ग्राफ़ में TensorFlow ऑप्स के आउटपुट का प्रतिनिधित्व करती हैं, बल्कि इसमें डेटा की इकाइयाँ भी शामिल हो सकती हैं जिन्हें उत्पादित किया जा सकता है, उदाहरण के लिए, वितरित के आउटपुट के रूप में एकत्रीकरण प्रोटोकॉल. इस प्रकार, TFF टेंसर प्रकार Python या TensorFlow में इस प्रकार के ठोस भौतिक प्रतिनिधित्व का एक अमूर्त संस्करण है।TFF के
TensorTypes
TensorFlow की तुलना में आकृतियों के अपने (स्थैतिक) उपचार में अधिक सख्त हो सकते हैं। उदाहरण के लिए, टीएफएफ का टाइपसिस्टम अज्ञात रैंक वाले एक टेंसर को उसीdtype
के किसी भी अन्य टेंसर से असाइन करने योग्य मानता है, लेकिन निश्चित रैंक वाले किसी भी टेंसर को असाइन करने योग्य नहीं मानता है। यह उपचार कुछ रनटाइम विफलताओं को रोकता है (उदाहरण के लिए, अज्ञात रैंक के टेंसर को गलत संख्या में तत्वों के साथ एक आकार में बदलने का प्रयास), टीएफएफ जिन गणनाओं को वैध मानता है उनमें अधिक सख्ती की कीमत पर।टेंसर प्रकारों के लिए कॉम्पैक्ट नोटेशन
dtype
याdtype[shape]
है। उदाहरण के लिए,int32
औरint32[10]
क्रमशः पूर्णांक और int वैक्टर के प्रकार हैं।अनुक्रम प्रकार (
federated_language.SequenceType
). ये TFF के TensorFlow कीtf.data.Dataset
s की ठोस अवधारणा के अमूर्त समकक्ष हैं। अनुक्रमों के तत्वों का क्रमिक तरीके से उपभोग किया जा सकता है, और इसमें जटिल प्रकार शामिल हो सकते हैं।अनुक्रम प्रकारों का संक्षिप्त प्रतिनिधित्व
T*
है, जहांT
तत्वों का प्रकार है। उदाहरण के लिएint32*
एक पूर्णांक अनुक्रम का प्रतिनिधित्व करता है।नामित टुपल प्रकार (
federated_language.StructType
)। ये टीएफएफ के टुपल्स और डिक्शनरी-जैसी संरचनाओं के निर्माण के तरीके हैं जिनमें विशिष्ट प्रकार के नामित या अनाम तत्वों की पूर्वनिर्धारित संख्या होती है। महत्वपूर्ण रूप से, टीएफएफ की नामित टुपल अवधारणा में पायथन के तर्क टुपल्स के अमूर्त समकक्ष शामिल हैं, यानी, तत्वों का संग्रह जिनमें से कुछ, लेकिन सभी का नाम नहीं है, और कुछ स्थितीय हैं।नामित टुपल्स के लिए कॉम्पैक्ट नोटेशन
<n_1=T_1, ..., n_k=T_k>
है, जहांn_k
वैकल्पिक तत्व नाम हैं, औरT_k
तत्व प्रकार हैं। उदाहरण के लिए,<int32,int32>
अनाम पूर्णांकों की एक जोड़ी के लिए एक कॉम्पैक्ट नोटेशन है, और<X=float32,Y=float32>
X
औरY
नामक फ्लोट्स की एक जोड़ी के लिए एक कॉम्पैक्ट नोटेशन है जो एक विमान पर एक बिंदु का प्रतिनिधित्व कर सकता है . टुपल्स को नेस्ट किया जा सकता है और साथ ही अन्य प्रकारों के साथ मिलाया जा सकता है, उदाहरण के लिए,<X=float32,Y=float32>*
बिंदुओं के अनुक्रम के लिए एक कॉम्पैक्ट नोटेशन होगा।फ़ंक्शन प्रकार (
federated_language.FunctionType
)। टीएफएफ एक कार्यात्मक प्रोग्रामिंग ढांचा है, जिसमें कार्यों को प्रथम श्रेणी मूल्यों के रूप में माना जाता है। फ़ंक्शंस में अधिकतम एक तर्क होता है, और बिल्कुल एक परिणाम होता है।फ़ंक्शंस के लिए कॉम्पैक्ट नोटेशन
(T -> U)
है, जहांT
तर्क का प्रकार है, औरU
परिणाम का प्रकार है, या( -> U)
यदि कोई तर्क नहीं है (हालांकि बिना तर्क वाले फ़ंक्शंस पतित हैं अवधारणा जो अधिकतर पायथन स्तर पर ही मौजूद है)। उदाहरण के लिए(int32* -> int32)
एक प्रकार के फ़ंक्शंस के लिए एक नोटेशन है जो पूर्णांक अनुक्रम को एकल पूर्णांक मान तक कम करता है।
निम्नलिखित प्रकार टीएफएफ गणना के वितरित सिस्टम पहलू को संबोधित करते हैं। चूंकि ये अवधारणाएं टीएफएफ के लिए कुछ हद तक अनूठी हैं, हम आपको अतिरिक्त टिप्पणी और उदाहरणों के लिए कस्टम एल्गोरिदम ट्यूटोरियल का संदर्भ लेने के लिए प्रोत्साहित करते हैं।
प्लेसमेंट प्रकार . यह प्रकार अभी तक सार्वजनिक एपीआई में दो शाब्दिक
tff.SERVER
औरtff.CLIENTS
के रूप में सामने नहीं आया है, जिन्हें आप इस प्रकार के स्थिरांक के रूप में सोच सकते हैं। हालाँकि, इसका उपयोग आंतरिक रूप से किया जाता है, और इसे भविष्य के रिलीज़ में सार्वजनिक एपीआई में पेश किया जाएगा। इस प्रकार का संक्षिप्त प्रतिनिधित्वplacement
है।प्लेसमेंट सिस्टम प्रतिभागियों के एक समूह का प्रतिनिधित्व करता है जो एक विशेष भूमिका निभाते हैं। प्रारंभिक रिलीज़ क्लाइंट-सर्वर गणनाओं को लक्षित कर रही है, जिसमें प्रतिभागियों के 2 समूह हैं: क्लाइंट और एक सर्वर (आप बाद वाले को सिंगलटन समूह के रूप में सोच सकते हैं)। हालाँकि, अधिक विस्तृत आर्किटेक्चर में, अन्य भूमिकाएँ भी हो सकती हैं, जैसे कि बहु-स्तरीय प्रणाली में मध्यवर्ती एग्रीगेटर, जो विभिन्न प्रकार के एकत्रीकरण का प्रदर्शन कर सकते हैं, या सर्वर द्वारा उपयोग किए जाने वाले डेटा संपीड़न/डीकंप्रेसन की तुलना में विभिन्न प्रकार के डेटा संपीड़न/डीकंप्रेसन का उपयोग कर सकते हैं। ग्राहकों।
प्लेसमेंट की धारणा को परिभाषित करने का प्राथमिक उद्देश्य फ़ेडरेटेड प्रकारों को परिभाषित करने के आधार के रूप में है।
फ़ेडरेटेड प्रकार (
federated_language.FederatedType
). फ़ेडरेटेड प्रकार का मान वह होता है जिसे एक विशिष्ट प्लेसमेंट (जैसेtff.SERVER
याtff.CLIENTS
) द्वारा परिभाषित सिस्टम प्रतिभागियों के समूह द्वारा होस्ट किया जाता है। एक फ़ेडरेटेड प्रकार को प्लेसमेंट मान द्वारा परिभाषित किया जाता है (इस प्रकार, यह एक आश्रित प्रकार है), सदस्य घटकों का प्रकार (प्रत्येक प्रतिभागी किस प्रकार की सामग्री स्थानीय रूप से होस्ट कर रहा है), और अतिरिक्त बिटall_equal
जो निर्दिष्ट करता है कि सभी प्रतिभागी स्थानीय रूप से हैं या नहीं एक ही आइटम की मेजबानी.फ़ेडरेटेड प्रकार के मानों के लिए कॉम्पैक्ट नोटेशन जिसमें प्रकार
T
के आइटम (सदस्य घटक) शामिल हैं, समूह (प्लेसमेंट)G
द्वारा होस्ट किया गया प्रत्येक क्रमशःT@G
या{T}@G
है, जिसमेंall_equal
बिट सेट है या सेट नहीं है।उदाहरण के लिए:
{int32}@CLIENTS
एक फ़ेडरेटेड मान का प्रतिनिधित्व करता है जिसमें संभावित रूप से भिन्न पूर्णांकों का एक सेट होता है, प्रत्येक क्लाइंट डिवाइस के लिए एक। ध्यान दें कि हम एकल फ़ेडरेटेड मान के बारे में बात कर रहे हैं जिसमें डेटा के कई आइटम शामिल हैं जो पूरे नेटवर्क में कई स्थानों पर दिखाई देते हैं। इसके बारे में सोचने का एक तरीका "नेटवर्क" आयाम के साथ एक प्रकार का टेंसर है, हालांकि यह सादृश्य सही नहीं है क्योंकि टीएफएफ संघीय मूल्य के सदस्य घटकों तक यादृच्छिक पहुंच की अनुमति नहीं देता है।{<X=float32,Y=float32>*}@CLIENTS
एक फ़ेडरेटेड डेटा सेट का प्रतिनिधित्व करता है, एक मान जिसमेंXY
निर्देशांक के कई अनुक्रम होते हैं, प्रति क्लाइंट डिवाइस एक अनुक्रम।<weights=float32[10,5],bias=float32[5]>@SERVER
सर्वर पर वज़न और बायस टेंसर के नामित टपल का प्रतिनिधित्व करता है। चूंकि हमने घुंघराले ब्रेसिज़ को हटा दिया है, यह इंगित करता है किall_equal
बिट सेट है, यानी, केवल एक टपल है (चाहे इस मान को होस्ट करने वाले क्लस्टर में कितने सर्वर प्रतिकृतियां हों)।
इमारत ब्लॉकों
फेडरेटेड कोर की भाषा कुछ अतिरिक्त तत्वों के साथ लैम्ब्डा-कैलकुलस का एक रूप है।
यह वर्तमान में सार्वजनिक एपीआई में प्रदर्शित निम्नलिखित प्रोग्रामिंग सार प्रदान करता है:
TensorFlow संगणनाएँ (
tff.tensorflow.computation
)। ये TensorFlow कोड के अनुभाग हैं जिन्हेंtff.tensorflow.computation
डेकोरेटर का उपयोग करके TFF में पुन: प्रयोज्य घटकों के रूप में लपेटा गया है। उनके पास हमेशा कार्यात्मक प्रकार होते हैं, और TensorFlow में फ़ंक्शन के विपरीत, वे संरचित पैरामीटर ले सकते हैं या अनुक्रम प्रकार के संरचित परिणाम लौटा सकते हैं।यहां एक उदाहरण दिया गया है, प्रकार
(int32* -> int)
की एक TF गणना जो पूर्णांकों के योग की गणना करने के लिएtf.data.Dataset.reduce
ऑपरेटर का उपयोग करती है:@tff.tensorflow.computation(federated_language.SequenceType(np.int32)) def add_up_integers(x): return x.reduce(np.int32(0), lambda x, y: x + y)
इंट्रिनिक्स या फ़ेडरेटेड ऑपरेटर्स (
tff.federated_...
). यहtff.federated_sum
याtff.federated_broadcast
जैसे फ़ंक्शंस की एक लाइब्रेरी है जो FC API का बड़ा हिस्सा बनाती है, जिनमें से अधिकांश TFF के साथ उपयोग के लिए वितरित संचार ऑपरेटरों का प्रतिनिधित्व करते हैं।हम इन्हें आंतरिक के रूप में संदर्भित करते हैं क्योंकि, कुछ हद तक आंतरिक कार्यों की तरह, वे ऑपरेटरों का एक ओपन-एंडेड, एक्स्टेंसिबल सेट हैं जिन्हें टीएफएफ द्वारा समझा जाता है, और निचले स्तर के कोड में संकलित किया जाता है।
इनमें से अधिकांश ऑपरेटरों के पास फ़ेडरेटेड प्रकार के पैरामीटर और परिणाम हैं, और अधिकांश टेम्पलेट हैं जिन्हें विभिन्न प्रकार के डेटा पर लागू किया जा सकता है।
उदाहरण के लिए,
tff.federated_broadcast
एक कार्यात्मक प्रकारT@SERVER -> T@CLIENTS
के टेम्पलेट ऑपरेटर के रूप में सोचा जा सकता है।लैम्ब्डा एक्सप्रेशन (
tff.federated_computation
)। टीएफएफ में एक लैम्ब्डा अभिव्यक्ति पायथन मेंlambda
याdef
के बराबर है; इसमें पैरामीटर नाम और एक बॉडी (अभिव्यक्ति) शामिल है जिसमें इस पैरामीटर के संदर्भ शामिल हैं।पायथन कोड में, इन्हें पायथन फ़ंक्शंस को
tff.federated_computation
से सजाकर और एक तर्क को परिभाषित करके बनाया जा सकता है।यहां लैम्ब्डा अभिव्यक्ति का एक उदाहरण दिया गया है जिसका उल्लेख हम पहले ही कर चुके हैं:
@tff.federated_computation(federated_language.FederatedType(np.float32, tff.CLIENTS)) def get_average_temperature(sensor_readings): return tff.federated_mean(sensor_readings)
प्लेसमेंट शाब्दिक . अभी के लिए, केवल
tff.SERVER
औरtff.CLIENTS
ही सरल क्लाइंट-सर्वर गणनाओं को परिभाषित करने की अनुमति देते हैं।फ़ंक्शन मंगलाचरण (
__call__
)। कार्यात्मक प्रकार वाली किसी भी चीज़ को मानक पायथन__call__
सिंटैक्स का उपयोग करके लागू किया जा सकता है। आह्वान एक अभिव्यक्ति है, जिसका प्रकार आह्वान किए जाने वाले फ़ंक्शन के परिणाम के प्रकार के समान है।उदाहरण के लिए:
add_up_integers(x)
एक तर्कx
पर पहले परिभाषित TensorFlow गणना के आह्वान का प्रतिनिधित्व करता है। इस अभिव्यक्ति का प्रकारint32
है।tff.federated_mean(sensor_readings)
sensor_readings
पर फ़ेडरेटेड औसत ऑपरेटर के आह्वान का प्रतिनिधित्व करता है। इस अभिव्यक्ति का प्रकारfloat32@SERVER
है (उपरोक्त उदाहरण से संदर्भ मानते हुए)।
टुपल्स बनाना और उनके तत्वों का चयन करना ।
[x, y]
,x[y]
, याxy
रूप की पायथन अभिव्यक्तियाँ जोtff.federated_computation
से सजाए गए फ़ंक्शन के मुख्य भाग में दिखाई देती हैं।
यह दस्तावेज़ टीएफएफ की मुख्य परत का परिचय देता है जो फ़ेडरेटेड लर्निंग और संभावित भविष्य के गैर-शिक्षण फ़ेडरेटेड एल्गोरिदम के लिए आधार के रूप में कार्य करता है।
फ़ेडरेटेड कोर के एक सौम्य परिचय के लिए, कृपया निम्नलिखित ट्यूटोरियल पढ़ें, क्योंकि वे उदाहरण के तौर पर कुछ मूलभूत अवधारणाओं का परिचय देते हैं और एक सरल फ़ेडरेटेड औसत एल्गोरिदम के निर्माण को चरण-दर-चरण प्रदर्शित करते हैं।
हम आपको फ़ेडरेटेड लर्निंग और छवि वर्गीकरण और पाठ निर्माण पर संबंधित ट्यूटोरियल से परिचित होने के लिए भी प्रोत्साहित करेंगे, क्योंकि फ़ेडरेटेड लर्निंग के लिए फ़ेडरेटेड कोर एपीआई (एफसी एपीआई) का उपयोग हमारे द्वारा चुने गए कुछ विकल्पों के लिए महत्वपूर्ण संदर्भ प्रदान करता है। इस परत को डिज़ाइन करना।
सिंहावलोकन
लक्ष्य, इच्छित उपयोग और दायरा
फ़ेडरेटेड कोर (एफसी) को वितरित संगणनाओं को लागू करने के लिए एक प्रोग्रामिंग वातावरण के रूप में सबसे अच्छी तरह से समझा जाता है, अर्थात, ऐसी संगणनाएँ जिनमें कई कंप्यूटर (मोबाइल फोन, टैबलेट, एम्बेडेड डिवाइस, डेस्कटॉप कंप्यूटर, सेंसर, डेटाबेस सर्वर, आदि) शामिल होते हैं जो प्रत्येक गैर-प्रदर्शन कर सकते हैं। स्थानीय स्तर पर तुच्छ प्रसंस्करण, और अपने काम को समन्वित करने के लिए पूरे नेटवर्क में संचार करते हैं।
वितरित शब्द बहुत सामान्य है, और टीएफएफ सभी संभावित प्रकार के वितरित एल्गोरिदम को लक्षित नहीं करता है, इसलिए हम इस ढांचे में व्यक्त किए जा सकने वाले एल्गोरिदम के प्रकारों का वर्णन करने के लिए कम सामान्य शब्द फ़ेडरेटेड कंप्यूटेशन का उपयोग करना पसंद करते हैं।
जबकि फ़ेडरेटेड कंप्यूटेशन शब्द को पूरी तरह से औपचारिक तरीके से परिभाषित करना इस दस्तावेज़ के दायरे से बाहर है, उन एल्गोरिदम के प्रकारों के बारे में सोचें जिन्हें आप एक शोध प्रकाशन में छद्मकोड में व्यक्त देख सकते हैं जो एक नए वितरित शिक्षण एल्गोरिदम का वर्णन करता है।
संक्षेप में, एफसी का लक्ष्य प्रोग्राम लॉजिक के समान छद्म कोड-जैसे अमूर्त स्तर पर समान कॉम्पैक्ट प्रतिनिधित्व को सक्षम करना है, जो छद्म कोड नहीं है, बल्कि विभिन्न लक्ष्य वातावरणों में निष्पादन योग्य है।
एफसी को व्यक्त करने के लिए डिज़ाइन किए गए एल्गोरिदम के प्रकारों की मुख्य परिभाषित विशेषता यह है कि सिस्टम प्रतिभागियों के कार्यों को सामूहिक तरीके से वर्णित किया जाता है। इस प्रकार, हम प्रत्येक उपकरण के बारे में बात करते हैं जो स्थानीय रूप से डेटा को परिवर्तित करता है, और उपकरण एक केंद्रीकृत समन्वयक द्वारा काम का समन्वय करते हैं, उनके परिणामों को प्रसारित करते हैं , एकत्र करते हैं , या एकत्र करते हैं ।
जबकि टीएफएफ को सरल क्लाइंट-सर्वर आर्किटेक्चर से परे जाने में सक्षम होने के लिए डिज़ाइन किया गया है, सामूहिक प्रसंस्करण की धारणा मौलिक है। यह फ़ेडरेटेड लर्निंग में टीएफएफ की उत्पत्ति के कारण है, एक ऐसी तकनीक जो मूल रूप से संभावित संवेदनशील डेटा पर गणना का समर्थन करने के लिए डिज़ाइन की गई है जो क्लाइंट डिवाइसों के नियंत्रण में रहती है, और जिसे गोपनीयता कारणों से केवल केंद्रीकृत स्थान पर डाउनलोड नहीं किया जा सकता है। जबकि ऐसे सिस्टम में प्रत्येक ग्राहक सिस्टम द्वारा परिणाम की गणना करने के लिए डेटा और प्रसंस्करण शक्ति का योगदान देता है (एक परिणाम जो हम आम तौर पर सभी प्रतिभागियों के लिए मूल्यवान होने की उम्मीद करते हैं), हम प्रत्येक ग्राहक की गोपनीयता और गुमनामी को संरक्षित करने का भी प्रयास करते हैं।
इस प्रकार, जबकि वितरित कंप्यूटिंग के लिए अधिकांश ढांचे को व्यक्तिगत प्रतिभागियों के परिप्रेक्ष्य से प्रसंस्करण को व्यक्त करने के लिए डिज़ाइन किया गया है - अर्थात, व्यक्तिगत बिंदु-से-बिंदु संदेश आदान-प्रदान के स्तर पर, और आने वाले और बाहर जाने वाले संदेशों के साथ प्रतिभागी के स्थानीय राज्य संक्रमण की अन्योन्याश्रयता , TFF के फ़ेडरेटेड कोर को वैश्विक सिस्टम-व्यापी परिप्रेक्ष्य से सिस्टम के व्यवहार का वर्णन करने के लिए डिज़ाइन किया गया है (उदाहरण के लिए, MapReduce के समान)।
नतीजतन, जबकि सामान्य उद्देश्यों के लिए वितरित ढांचे बिल्डिंग ब्लॉक के रूप में भेजने और प्राप्त करने जैसे संचालन की पेशकश कर सकते हैं, एफसी tff.federated_sum
, tff.federated_reduce
, या tff.federated_broadcast
जैसे बिल्डिंग ब्लॉक प्रदान करता है जो सरल वितरित प्रोटोकॉल को समाहित करता है।
भाषा
पायथन इंटरफ़ेस
टीएफएफ फ़ेडरेटेड संगणनाओं का प्रतिनिधित्व करने के लिए एक आंतरिक भाषा का उपयोग करता है, जिसका वाक्यविन्यास computation.proto में क्रमबद्ध प्रतिनिधित्व द्वारा परिभाषित किया गया है। हालाँकि, एफसी एपीआई के उपयोगकर्ताओं को आम तौर पर इस भाषा के साथ सीधे बातचीत करने की आवश्यकता नहीं होगी। बल्कि, हम एक पायथन एपीआई ( tff
नेमस्पेस) प्रदान करते हैं जो गणनाओं को परिभाषित करने के तरीके के रूप में इसके चारों ओर लपेटता है।
विशेष रूप से, टीएफएफ tff.federated_computation
जैसे पायथन फ़ंक्शन डेकोरेटर प्रदान करता है जो सजाए गए कार्यों के निकायों का पता लगाता है, और टीएफएफ की भाषा में फ़ेडरेटेड गणना तर्क के क्रमबद्ध प्रतिनिधित्व का उत्पादन करता है। tff.federated_computation
से सजाया गया एक फ़ंक्शन ऐसे क्रमबद्ध प्रतिनिधित्व के वाहक के रूप में कार्य करता है, और इसे किसी अन्य गणना के मुख्य भाग में बिल्डिंग ब्लॉक के रूप में एम्बेड कर सकता है, या लागू होने पर मांग पर इसे निष्पादित कर सकता है।
यहाँ सिर्फ एक उदाहरण है; अधिक उदाहरण कस्टम एल्गोरिदम ट्यूटोरियल में पाए जा सकते हैं।
@tff.federated_computation(federated_language.FederatedType(np.float32, tff.CLIENTS))
def get_average_temperature(sensor_readings):
return tff.federated_mean(sensor_readings)
गैर-उत्सुक TensorFlow से परिचित पाठक इस दृष्टिकोण को Python कोड लिखने के समान पाएंगे जो Python कोड के एक अनुभाग में tf.add
या tf.reduce_sum
जैसे फ़ंक्शंस का उपयोग करता है जो TensorFlow ग्राफ़ को परिभाषित करता है। यद्यपि कोड को तकनीकी रूप से पायथन में व्यक्त किया गया है, इसका उद्देश्य नीचे एक tf.Graph
का क्रमबद्ध प्रतिनिधित्व बनाना है, और यह ग्राफ़ है, न कि पायथन कोड, जिसे आंतरिक रूप से TensorFlow रनटाइम द्वारा निष्पादित किया जाता है। इसी तरह, कोई tff.federated_mean
को get_average_temperature
द्वारा दर्शाए गए फ़ेडरेटेड संगणना में फ़ेडरेटेड ऑप डालने के रूप में सोच सकता है।
एफसी द्वारा किसी भाषा को परिभाषित करने के कारण का एक हिस्सा इस तथ्य से संबंधित है कि, जैसा कि ऊपर उल्लेख किया गया है, फ़ेडरेटेड संगणनाएँ वितरित सामूहिक व्यवहार को निर्दिष्ट करती हैं, और इस तरह, उनका तर्क गैर-स्थानीय है। उदाहरण के लिए, TFF ऑपरेटर, इनपुट और आउटपुट प्रदान करता है जो नेटवर्क में विभिन्न स्थानों पर मौजूद हो सकते हैं।
इसके लिए एक भाषा और एक प्रकार की प्रणाली की आवश्यकता होती है जो वितरितता की धारणा को पकड़ती है।
सिस्टम टाइप करें
फ़ेडरेटेड कोर निम्नलिखित प्रकार की श्रेणियां प्रदान करता है। इन प्रकारों का वर्णन करने में, हम टाइप कंस्ट्रक्टरों को इंगित करते हैं और साथ ही एक कॉम्पैक्ट नोटेशन भी पेश करते हैं, क्योंकि यह एक आसान तरीका है या गणना और ऑपरेटरों के प्रकारों का वर्णन करता है।
सबसे पहले, यहां उन प्रकारों की श्रेणियां दी गई हैं जो वैचारिक रूप से मौजूदा मुख्यधारा की भाषाओं में पाए जाने वाले समान हैं:
टेंसर प्रकार (
federated_language.TensorType
)। TensorFlow की तरह ही, इनमेंdtype
औरshape
हैं। एकमात्र अंतर यह है कि इस प्रकार की वस्तुएं पायथन मेंtf.Tensor
उदाहरणों तक ही सीमित नहीं हैं जो TensorFlow ग्राफ़ में TensorFlow ऑप्स के आउटपुट का प्रतिनिधित्व करती हैं, बल्कि इसमें डेटा की इकाइयाँ भी शामिल हो सकती हैं जिन्हें उत्पादित किया जा सकता है, उदाहरण के लिए, वितरित के आउटपुट के रूप में एकत्रीकरण प्रोटोकॉल. इस प्रकार, TFF टेंसर प्रकार Python या TensorFlow में इस प्रकार के ठोस भौतिक प्रतिनिधित्व का एक अमूर्त संस्करण है।TFF के
TensorTypes
TensorFlow की तुलना में आकृतियों के अपने (स्थैतिक) उपचार में अधिक सख्त हो सकते हैं। उदाहरण के लिए, टीएफएफ का टाइपसिस्टम अज्ञात रैंक वाले एक टेंसर को उसीdtype
के किसी भी अन्य टेंसर से असाइन करने योग्य मानता है, लेकिन निश्चित रैंक वाले किसी भी टेंसर को असाइन करने योग्य नहीं मानता है। यह उपचार कुछ रनटाइम विफलताओं को रोकता है (उदाहरण के लिए, अज्ञात रैंक के टेंसर को गलत संख्या में तत्वों के साथ एक आकार में बदलने का प्रयास), टीएफएफ जिन गणनाओं को वैध मानता है उनमें अधिक सख्ती की कीमत पर।टेंसर प्रकारों के लिए कॉम्पैक्ट नोटेशन
dtype
याdtype[shape]
है। उदाहरण के लिए,int32
औरint32[10]
क्रमशः पूर्णांक और int वैक्टर के प्रकार हैं।अनुक्रम प्रकार (
federated_language.SequenceType
). ये TFF के TensorFlow कीtf.data.Dataset
s की ठोस अवधारणा के अमूर्त समकक्ष हैं। अनुक्रमों के तत्वों का क्रमिक तरीके से उपभोग किया जा सकता है, और इसमें जटिल प्रकार शामिल हो सकते हैं।अनुक्रम प्रकारों का संक्षिप्त प्रतिनिधित्व
T*
है, जहांT
तत्वों का प्रकार है। उदाहरण के लिएint32*
एक पूर्णांक अनुक्रम का प्रतिनिधित्व करता है।नामित टुपल प्रकार (
federated_language.StructType
)। ये टीएफएफ के टुपल्स और डिक्शनरी-जैसी संरचनाओं के निर्माण के तरीके हैं जिनमें विशिष्ट प्रकार के नामित या अनाम तत्वों की पूर्वनिर्धारित संख्या होती है। महत्वपूर्ण रूप से, टीएफएफ की नामित टुपल अवधारणा में पायथन के तर्क टुपल्स के अमूर्त समकक्ष शामिल हैं, यानी, तत्वों का संग्रह जिनमें से कुछ, लेकिन सभी का नाम नहीं है, और कुछ स्थितीय हैं।नामित टुपल्स के लिए कॉम्पैक्ट नोटेशन
<n_1=T_1, ..., n_k=T_k>
है, जहांn_k
वैकल्पिक तत्व नाम हैं, औरT_k
तत्व प्रकार हैं। उदाहरण के लिए,<int32,int32>
अनाम पूर्णांकों की एक जोड़ी के लिए एक कॉम्पैक्ट नोटेशन है, और<X=float32,Y=float32>
X
औरY
नामक फ्लोट्स की एक जोड़ी के लिए एक कॉम्पैक्ट नोटेशन है जो एक विमान पर एक बिंदु का प्रतिनिधित्व कर सकता है . टुपल्स को नेस्ट किया जा सकता है और साथ ही अन्य प्रकारों के साथ मिलाया जा सकता है, उदाहरण के लिए,<X=float32,Y=float32>*
बिंदुओं के अनुक्रम के लिए एक कॉम्पैक्ट नोटेशन होगा।फ़ंक्शन प्रकार (
federated_language.FunctionType
)। टीएफएफ एक कार्यात्मक प्रोग्रामिंग ढांचा है, जिसमें कार्यों को प्रथम श्रेणी मूल्यों के रूप में माना जाता है। फ़ंक्शंस में अधिकतम एक तर्क होता है, और बिल्कुल एक परिणाम होता है।फ़ंक्शंस के लिए कॉम्पैक्ट नोटेशन
(T -> U)
है, जहांT
तर्क का प्रकार है, औरU
परिणाम का प्रकार है, या( -> U)
यदि कोई तर्क नहीं है (हालांकि बिना तर्क वाले फ़ंक्शंस पतित हैं अवधारणा जो अधिकतर पायथन स्तर पर ही मौजूद है)। उदाहरण के लिए(int32* -> int32)
एक प्रकार के फ़ंक्शंस के लिए एक नोटेशन है जो पूर्णांक अनुक्रम को एकल पूर्णांक मान तक कम कर देता है।
निम्नलिखित प्रकार टीएफएफ गणना के वितरित सिस्टम पहलू को संबोधित करते हैं। चूंकि ये अवधारणाएं टीएफएफ के लिए कुछ हद तक अनूठी हैं, हम आपको अतिरिक्त टिप्पणी और उदाहरणों के लिए कस्टम एल्गोरिदम ट्यूटोरियल का संदर्भ लेने के लिए प्रोत्साहित करते हैं।
प्लेसमेंट प्रकार . यह प्रकार अभी तक सार्वजनिक एपीआई में दो शाब्दिक
tff.SERVER
औरtff.CLIENTS
के रूप में सामने नहीं आया है, जिन्हें आप इस प्रकार के स्थिरांक के रूप में सोच सकते हैं। हालाँकि, इसका उपयोग आंतरिक रूप से किया जाता है, और इसे भविष्य के रिलीज़ में सार्वजनिक एपीआई में पेश किया जाएगा। इस प्रकार का संक्षिप्त प्रतिनिधित्वplacement
है।प्लेसमेंट सिस्टम प्रतिभागियों के एक समूह का प्रतिनिधित्व करता है जो एक विशेष भूमिका निभाते हैं। प्रारंभिक रिलीज़ क्लाइंट-सर्वर गणनाओं को लक्षित कर रही है, जिसमें प्रतिभागियों के 2 समूह हैं: क्लाइंट और एक सर्वर (आप बाद वाले को सिंगलटन समूह के रूप में सोच सकते हैं)। हालाँकि, अधिक विस्तृत आर्किटेक्चर में, अन्य भूमिकाएँ भी हो सकती हैं, जैसे कि बहु-स्तरीय प्रणाली में मध्यवर्ती एग्रीगेटर, जो विभिन्न प्रकार के एकत्रीकरण का प्रदर्शन कर सकते हैं, या सर्वर द्वारा उपयोग किए जाने वाले डेटा संपीड़न/डीकंप्रेसन की तुलना में विभिन्न प्रकार के डेटा संपीड़न/डीकंप्रेसन का उपयोग कर सकते हैं। ग्राहकों।
प्लेसमेंट की धारणा को परिभाषित करने का प्राथमिक उद्देश्य फ़ेडरेटेड प्रकारों को परिभाषित करने के आधार के रूप में है।
फ़ेडरेटेड प्रकार (
federated_language.FederatedType
). फ़ेडरेटेड प्रकार का मान वह होता है जिसे एक विशिष्ट प्लेसमेंट (जैसेtff.SERVER
याtff.CLIENTS
) द्वारा परिभाषित सिस्टम प्रतिभागियों के समूह द्वारा होस्ट किया जाता है। एक फ़ेडरेटेड प्रकार को प्लेसमेंट मान द्वारा परिभाषित किया जाता है (इस प्रकार, यह एक आश्रित प्रकार है), सदस्य घटकों का प्रकार (प्रत्येक प्रतिभागी किस प्रकार की सामग्री स्थानीय रूप से होस्ट कर रहा है), और अतिरिक्त बिटall_equal
जो निर्दिष्ट करता है कि सभी प्रतिभागी स्थानीय रूप से हैं या नहीं एक ही आइटम की मेजबानी.फ़ेडरेटेड प्रकार के मानों के लिए कॉम्पैक्ट नोटेशन जिसमें प्रकार
T
के आइटम (सदस्य घटक) शामिल हैं, समूह (प्लेसमेंट)G
द्वारा होस्ट किया गया प्रत्येक क्रमशःT@G
या{T}@G
है, जिसमेंall_equal
बिट सेट है या सेट नहीं है।उदाहरण के लिए:
{int32}@CLIENTS
एक फ़ेडरेटेड मान का प्रतिनिधित्व करता है जिसमें संभावित रूप से भिन्न पूर्णांकों का एक सेट होता है, प्रत्येक क्लाइंट डिवाइस के लिए एक। ध्यान दें कि हम एकल फ़ेडरेटेड मान के बारे में बात कर रहे हैं जिसमें डेटा के कई आइटम शामिल हैं जो पूरे नेटवर्क में कई स्थानों पर दिखाई देते हैं। इसके बारे में सोचने का एक तरीका "नेटवर्क" आयाम के साथ एक प्रकार का टेंसर है, हालांकि यह सादृश्य सही नहीं है क्योंकि टीएफएफ संघीय मूल्य के सदस्य घटकों तक यादृच्छिक पहुंच की अनुमति नहीं देता है।{<X=float32,Y=float32>*}@CLIENTS
एक फ़ेडरेटेड डेटा सेट का प्रतिनिधित्व करता है, एक मान जिसमेंXY
निर्देशांक के कई अनुक्रम होते हैं, प्रति क्लाइंट डिवाइस एक अनुक्रम।<weights=float32[10,5],bias=float32[5]>@SERVER
सर्वर पर वज़न और बायस टेंसर के नामित टपल का प्रतिनिधित्व करता है। चूंकि हमने घुंघराले ब्रेसिज़ हटा दिए हैं, यह इंगित करता है किall_equal
बिट सेट है, यानी, केवल एक टपल है (चाहे इस मान को होस्ट करने वाले क्लस्टर में कितने सर्वर प्रतिकृतियां हों)।
इमारत ब्लॉकों
फेडरेटेड कोर की भाषा कुछ अतिरिक्त तत्वों के साथ लैम्ब्डा-कैलकुलस का एक रूप है।
यह वर्तमान में सार्वजनिक एपीआई में प्रदर्शित निम्नलिखित प्रोग्रामिंग सार प्रदान करता है:
TensorFlow संगणनाएँ (
tff.tensorflow.computation
)। ये TensorFlow कोड के अनुभाग हैं जिन्हेंtff.tensorflow.computation
डेकोरेटर का उपयोग करके TFF में पुन: प्रयोज्य घटकों के रूप में लपेटा गया है। उनके पास हमेशा कार्यात्मक प्रकार होते हैं, और TensorFlow में फ़ंक्शन के विपरीत, वे संरचित पैरामीटर ले सकते हैं या अनुक्रम प्रकार के संरचित परिणाम लौटा सकते हैं।यहां एक उदाहरण दिया गया है, प्रकार
(int32* -> int)
की एक TF गणना जो पूर्णांकों के योग की गणना करने के लिएtf.data.Dataset.reduce
ऑपरेटर का उपयोग करती है:@tff.tensorflow.computation(federated_language.SequenceType(np.int32)) def add_up_integers(x): return x.reduce(np.int32(0), lambda x, y: x + y)
इंट्रिनिक्स या फ़ेडरेटेड ऑपरेटर्स (
tff.federated_...
). यहtff.federated_sum
याtff.federated_broadcast
जैसे फ़ंक्शंस की एक लाइब्रेरी है जो FC API का बड़ा हिस्सा बनाती है, जिनमें से अधिकांश TFF के साथ उपयोग के लिए वितरित संचार ऑपरेटरों का प्रतिनिधित्व करते हैं।हम इन्हें आंतरिक के रूप में संदर्भित करते हैं क्योंकि, कुछ हद तक आंतरिक कार्यों की तरह, वे ऑपरेटरों का एक ओपन-एंडेड, एक्स्टेंसिबल सेट हैं जिन्हें टीएफएफ द्वारा समझा जाता है, और निचले स्तर के कोड में संकलित किया जाता है।
इनमें से अधिकांश ऑपरेटरों के पास फ़ेडरेटेड प्रकार के पैरामीटर और परिणाम हैं, और अधिकांश टेम्पलेट हैं जिन्हें विभिन्न प्रकार के डेटा पर लागू किया जा सकता है।
उदाहरण के लिए,
tff.federated_broadcast
एक कार्यात्मक प्रकारT@SERVER -> T@CLIENTS
के टेम्पलेट ऑपरेटर के रूप में सोचा जा सकता है।लैम्ब्डा एक्सप्रेशन (
tff.federated_computation
)। टीएफएफ में एक लैम्ब्डा अभिव्यक्ति पायथन मेंlambda
याdef
के बराबर है; इसमें पैरामीटर नाम और एक बॉडी (अभिव्यक्ति) शामिल है जिसमें इस पैरामीटर के संदर्भ शामिल हैं।पायथन कोड में, इन्हें पायथन फ़ंक्शंस को
tff.federated_computation
से सजाकर और एक तर्क को परिभाषित करके बनाया जा सकता है।यहां लैम्ब्डा अभिव्यक्ति का एक उदाहरण दिया गया है जिसका उल्लेख हम पहले ही कर चुके हैं:
@tff.federated_computation(federated_language.FederatedType(np.float32, tff.CLIENTS)) def get_average_temperature(sensor_readings): return tff.federated_mean(sensor_readings)
प्लेसमेंट शाब्दिक . अभी के लिए, केवल
tff.SERVER
औरtff.CLIENTS
ही सरल क्लाइंट-सर्वर गणनाओं को परिभाषित करने की अनुमति देते हैं।फ़ंक्शन मंगलाचरण (
__call__
)। कार्यात्मक प्रकार वाली किसी भी चीज़ को मानक पायथन__call__
सिंटैक्स का उपयोग करके लागू किया जा सकता है। आह्वान एक अभिव्यक्ति है, जिसका प्रकार आह्वान किए जाने वाले फ़ंक्शन के परिणाम के प्रकार के समान है।उदाहरण के लिए:
add_up_integers(x)
एक तर्कx
पर पहले परिभाषित TensorFlow गणना के आह्वान का प्रतिनिधित्व करता है। इस अभिव्यक्ति का प्रकारint32
है।tff.federated_mean(sensor_readings)
sensor_readings
पर फ़ेडरेटेड औसत ऑपरेटर के आह्वान का प्रतिनिधित्व करता है। इस अभिव्यक्ति का प्रकारfloat32@SERVER
है (उपरोक्त उदाहरण से संदर्भ मानते हुए)।
टुपल्स बनाना और उनके तत्वों का चयन करना ।
[x, y]
,x[y]
, याxy
रूप की पायथन अभिव्यक्तियाँ जोtff.federated_computation
से सजाए गए फ़ंक्शन के मुख्य भाग में दिखाई देती हैं।