انضم إلى TensorFlow في مؤتمر Google I / O ، 11-12 مايو سجل الآن

الموحدة الأساسية

تقدم هذه الوثيقة طبقة الأساسية من TFF التي هي بمثابة الأساس لل اتحاد التعلم ، واحتمال المستقبل غير التعلم خوارزميات الاتحادية.

للحصول على مقدمة لطيفة لـ Federated Core ، يرجى قراءة البرامج التعليمية التالية ، حيث أنها تقدم بعض المفاهيم الأساسية عن طريق المثال وتوضح خطوة بخطوة إنشاء خوارزمية متوسط ​​موحدة بسيطة.

ونحن أيضا ندعوك للتعرف على نفسك مع اتحاد التعلم والدروس المرتبطة بها على تصنيف الصور و توليد النص ، كما توفر استخدامات API الاتحادية الأساسية (FC API) للتعلم الاتحادية السياق مهم لبعض الخيارات التي قمنا بها في تصميم هذه الطبقة.

ملخص

الأهداف والاستخدامات المقصودة والنطاق

من الأفضل فهم Federated Core (FC) على أنها بيئة برمجة لتنفيذ العمليات الحسابية الموزعة ، أي الحسابات التي تتضمن أجهزة كمبيوتر متعددة (الهواتف المحمولة والأجهزة اللوحية والأجهزة المضمنة وأجهزة كمبيوتر سطح المكتب وأجهزة الاستشعار وخوادم قاعدة البيانات وما إلى ذلك) والتي قد تؤدي كل منها أداء غير- معالجة تافهة محليًا ، والتواصل عبر الشبكة لتنسيق عملهم.

على المدى الموزعة هو عام جدا، وTFF لا يستهدف جميع الأنواع الممكنة من الخوارزميات توزيعها هناك، لذلك نحن نفضل استخدام أقل العامة الاتحادية حساب المصطلح لوصف أنواع من الخوارزميات التي يمكن التعبير عنها في هذا الإطار.

مع تحديد حساب الاتحادية المدى بشكل رسمي تماما خارج نطاق هذه الوثيقة، والتفكير في أنواع الخوارزميات قد نرى أعرب في شبة الكود في نشر البحوث التي تصف خوارزمية التعلم توزيع جديدة.

هدف FC، في nusthell، هو تمكين التمثيل المدمجة بالمثل، على مستوى تشبه شبة الكود مماثل من التجريد، من منطق البرنامج ليست شبة الكود، وإنما، وهذا قابل للتنفيذ في مجموعة متنوعة من البيئات المستهدفة.

السمة الرئيسية المحددة لأنواع الخوارزميات التي تم تصميم FC للتعبير عنها هي أن تصرفات المشاركين في النظام موصوفة بطريقة جماعية. وهكذا، فإننا نميل إلى الحديث عن كل جهاز محليا تحويل البيانات، والأجهزة تنسق العمل من خلال البث منسق مركزي، وجمع، أو تجميع نتائجها.

في حين TFF تم تصميمه ليكون قادرا على الذهاب أبعد من أبنية خدمة العملاء بسيطة، فإن فكرة معالجة الجماعي أمر أساسي. ويرجع ذلك إلى أصول TFF في التعلم الموحد ، وهي تقنية مصممة في الأصل لدعم العمليات الحسابية على البيانات التي يحتمل أن تكون حساسة والتي تظل تحت سيطرة أجهزة العميل ، والتي قد لا يتم تنزيلها ببساطة إلى موقع مركزي لأسباب تتعلق بالخصوصية. بينما يساهم كل عميل في هذه الأنظمة بالبيانات وقوة المعالجة نحو حساب نتيجة بواسطة النظام (نتيجة نتوقع عمومًا أن تكون ذات قيمة لجميع المشاركين) ، فإننا نسعى أيضًا للحفاظ على خصوصية كل عميل وإخفاء هويته.

وبالتالي ، في حين أن معظم أطر الحوسبة الموزعة مصممة للتعبير عن المعالجة من منظور المشاركين الفرديين - أي على مستوى تبادل الرسائل الفردية من نقطة إلى نقطة ، والترابط بين انتقالات الحالة المحلية للمشارك مع الرسائل الواردة والصادرة تم تصميم TFF في اتحاد الأساسية لوصف سلوك النظام من منظور واسع النظام العالمي (على غرار، على سبيل المثال، مابريديوس ).

ونتيجة لذلك، في حين أن الأطر وزعت لأغراض عامة قد تقدم عمليات مثل إرسال واستقبال عن بناء كتل، FC يوفر بناء كتل مثل tff.federated_sum ، tff.federated_reduce ، أو tff.federated_broadcast التي تغلف بسيطة وزعت البروتوكولات.

لغة

واجهة بايثون

يستخدم TFF لغة الداخلية لتمثيل الحسابات الاتحادية، يتم تعريف بناء جملة التي كتبها تمثيل للتسلسل في computation.proto . على الرغم من ذلك ، لن يحتاج مستخدمو FC API بشكل عام إلى التفاعل مع هذه اللغة مباشرة. بدلا من ذلك، نحن نقدم API بيثون (و tff مساحة الاسم) التي يلتف التفافية أنها وسيلة لتحديد الحسابات.

على وجه التحديد، يوفر 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. وإن كان ذلك يتم التعبير عن رمز من الناحية الفنية في بيثون، والغرض منه هو بناء التمثيل للتسلسل من tf.Graph تحتها، وهذا هو الرسم البياني، وليس رمز بيثون، التي يتم تنفيذها داخليا بواسطة وقت التشغيل TensorFlow. وبالمثل، يمكن للمرء أن يفكر في tff.federated_mean كما إدراج المرجع الاتحادية إلى حساب الاتحادية ممثلة get_average_temperature .

يتعلق جزء من سبب تعريف FC للغة بحقيقة أن الحسابات الفيدرالية ، كما هو مذكور أعلاه ، تحدد السلوكيات الجماعية الموزعة ، وعلى هذا النحو ، فإن منطقها غير محلي. على سبيل المثال ، يوفر TFF المشغلين والمدخلات والمخرجات التي قد توجد في أماكن مختلفة في الشبكة.

هذا يستدعي لغة ونظام كتابة يلتقطان مفهوم التوزيع.

اكتب النظام

تقدم Federated Core الفئات التالية من الأنواع. في وصف هذه الأنواع ، نشير إلى منشئي النوع بالإضافة إلى تقديم تدوين مضغوط ، لأنه طريقة سهلة أو لوصف أنواع الحسابات والمشغلين.

أولاً ، فيما يلي فئات الأنواع المشابهة من الناحية المفاهيمية لتلك الموجودة في اللغات السائدة الحالية:

  • أنواع موتر ( tff.TensorType ). كما هو الحال في TensorFlow، هذه لها dtype و shape . والفرق الوحيد هو أن الأجسام من هذا النوع لا تقتصر على tf.Tensor الحالات في بيثون التي تمثل مخرجات التقاط TensorFlow في الرسم البياني TensorFlow، ولكن يمكن أن تشمل أيضا وحدة من البيانات التي يمكن أن تنتج، على سبيل المثال، كمخرج من توزيعها بروتوكول التجميع. وبالتالي ، فإن نوع موتر TFF هو ببساطة نسخة مجردة من التمثيل المادي الملموس لهذا النوع في Python أو TensorFlow.

    TFF في TensorTypes يمكن أن يكون أكثر صرامة في حياتهم (جامدة) العلاج من الأشكال من TensorFlow. على سبيل المثال، TFF في نظام الأنواع يعامل على موتر مع مرتبة غير معروفة كما تنازل من أي موتر آخرين من نفس dtype ، ولكن لا تنازل لأي موتر مع مرتبة ثابتة. يمنع هذا العلاج بعض حالات فشل وقت التشغيل (على سبيل المثال ، محاولة إعادة تشكيل موتر ذي رتبة غير معروفة إلى شكل مع عدد غير صحيح من العناصر) ، على حساب مزيد من الصرامة في الحسابات التي يقبلها TFF على أنها صالحة.

    التدوين الصغير لأنواع موتر هو dtype أو dtype[shape] . على سبيل المثال، int32 و int32[10] هي أنواع من الأعداد الصحيحة وناقلات كثافة العمليات، على التوالي.

  • أنواع التسلسل ( tff.SequenceType ). هذه هي يعادل TFF ومجردة من مفهوم الخرسانة TensorFlow من tf.data.Dataset الصورة. يمكن استهلاك عناصر التسلسل بطريقة متسلسلة ، ويمكن أن تتضمن أنواعًا معقدة.

    تمثيل المدمجة من أنواع التسلسل T* ، حيث T هو نوع من العناصر. على سبيل المثال int32* يمثل تسلسل صحيح.

  • أنواع الصفوف (tuple) المسماة ( tff.StructType ). وهذه هي الطريقة TFF من بناء الصفوف والقاموس مثل الهياكل التي تحتوي على عدد محدد مسبقا من العناصر مع أنواع محددة، واسمه أو لم تسمها. الأهم من ذلك ، أن مفهوم tuple المسمى TFF يشمل المكافئ المجرد لمجموعات Python للحج ، أي مجموعات من العناصر التي تم تسمية بعضها ، ولكن ليس كلها ، وبعضها موضعي.

    التدوين الصغير لالصفوف اسمه هو <n_1=T_1, ..., n_k=T_k> ، حيث n_k هي أسماء العناصر الاختيارية، و T_k هي أنواع العناصر. على سبيل المثال، <int32,int32> هو التدوين الصغير لزوج من الأعداد الصحيحة غير مسمى، و <X=float32,Y=float32> هو التدوين الصغير لزوج من يطفو اسمه X و Y التي قد تمثل نقطة على متن طائرة . يمكن أن تتداخل الصفوف وكذلك يخلط مع أنواع أخرى، على سبيل المثال، <X=float32,Y=float32>* سيكون التدوين الصغير لسلسلة من النقاط.

  • أنواع وظيفة ( tff.FunctionType ). TFF هو إطار البرمجة وظيفية، مع وظائف تعامل على أنها قيم من الدرجة الأولى . تحتوي الدوال على وسيطة واحدة على الأكثر ونتيجة واحدة بالضبط.

    التدوين الصغير لوظائف غير (T -> U) ، حيث T هو نوع من حجة، و U هو نوع من النتيجة، أو ( -> U) اذا لم يكن هناك حجة (على الرغم من وظائف عدم الحجة هي المنحطة مفهوم موجود في الغالب على مستوى Python فقط). على سبيل المثال (int32* -> int32) هو تدوين لنوع من الوظائف التي تقلل من تسلسل عدد صحيح إلى قيمة عددية واحدة.

تتناول الأنواع التالية جانب الأنظمة الموزعة في حسابات TFF. وبما أن هذه المفاهيم هي فريدة من نوعها إلى حد ما TFF، ونحن نشجعكم على الرجوع إلى خوارزميات مخصصة البرنامج التعليمي لشرح وأمثلة إضافية.

  • النوع من المواضع. هذا النوع لا يتعرض بعد في API العامة الأخرى مما كانت عليه في شكل 2 الحرفية tff.SERVER و tff.CLIENTS التي يمكن ان يخطر لك كثوابت من هذا النوع. يتم استخدامه داخليًا ، ومع ذلك ، سيتم تقديمه في واجهة برمجة التطبيقات العامة في الإصدارات المستقبلية. تمثيل المدمجة من هذا النوع هو 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 يمثل الصفوف (tuple) اسمه من الوزن والتحيز التنسورات في الملقم. وبما أننا قد انخفض الأقواس المعقوفة، وهذا يدل على all_equal تم تعيين بت، أي هناك فقط الصفوف (tuple) واحدة (بغض النظر عن عدد النماذج المقلده الخادم قد يكون هناك في كتلة استضافة هذه القيمة).

اللبنات

لغة اتحاد الأساسية هي شكل من أشكال امدا حساب التفاضل والتكامل ، مع عدد قليل من العناصر الإضافية.

يوفر تجريدات البرمجة التالية المعروضة حاليًا في واجهة برمجة التطبيقات العامة:

  • TensorFlow الحسابية ( tff.tf_computation ). هذه هي مقاطع التعليمات البرمجية TensorFlow ملفوفة كما مكونات قابلة للاستخدام في TFF باستخدام 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 التي تشكل الجزء الأكبر من FC API، ومعظمها تمثل توزيع مشغلي الاتصالات للاستخدام مع 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 (على افتراض السياق من المثال أعلاه).

  • تشكيل الصفوف واختيار عناصرها. تعابير بيثون من النموذج [x, y] ، x[y] ، أو xy التي تظهر في أجساد وظائف مزينة tff.federated_computation .