আপনার স্থানীয় টেনসরফ্লো সর্বত্র সর্বত্র ইভেন্টের জন্য আরএসভিপি!
This page was translated by the Cloud Translation API.
Switch to English

কাস্টম ফেডারেটেড অ্যালগরিদম, পর্ব 1: ফেডারেটড কোরের পরিচিতি

টেনসরফ্লো.আর.জে দেখুন গুগল কোলাবে চালান গিটহাবের উত্স দেখুন নোটবুক ডাউনলোড করুন

এই টিউটোরিয়ালটি দ্বি-বিভাগের সিরিজের প্রথম অংশ যা এটি দেখায় যে কীভাবে ফেডারেটেড কোর (এফসি) ব্যবহার করে টেনসরফ্লো ফেডারেটে (টিএফএফ) কাস্টমস ধরণের ফেডারেটেড অ্যালগরিদমগুলি প্রয়োগ করতে হয় - নিম্ন স্তরের ইন্টারফেসগুলির একটি সেট যা ভিত্তি হিসাবে কাজ করে আমরা ফেডারেট লার্নিং (এফএল) স্তরটি প্রয়োগ করেছি।

এই প্রথম অংশটি আরও ধারণামূলক; আমরা টিএফএফ-তে ব্যবহৃত কয়েকটি মূল ধারণা এবং প্রোগ্রামিং বিমূর্ততা প্রবর্তন করি এবং আমরা তাপমাত্রা সেন্সরগুলির বিতরণকারী অ্যারের সাথে খুব সাধারণ উদাহরণে তাদের ব্যবহারটি প্রদর্শন করি। এই সিরিজের দ্বিতীয় অংশে , আমরা ফেডেরেটেড প্রশিক্ষণ এবং মূল্যায়ন অ্যালগরিদমগুলির একটি সাধারণ সংস্করণটি প্রয়োগ করতে এখানে যে পদ্ধতিগুলি ব্যবহার করি আমরা তা ব্যবহার করি। ফলো-আপ হিসাবে, আমরা আপনাকে tff.learning ফেডারেটের গড়ের প্রয়োগের অধ্যয়ন করতে উত্সাহিত করি।

এই সিরিজটির শেষে, আপনি সনাক্ত করতে সক্ষম হবেন যে ফেডারেটেড কোরগুলির প্রয়োগগুলি অগত্যা শেখার মধ্যে সীমাবদ্ধ নয়। আমরা যে প্রোগ্রামিং বিমূর্তিগুলি অফার করি তা বেশ জেনেরিক এবং ব্যবহার করা যেতে পারে উদাহরণস্বরূপ, বিতরণ করা ডেটার উপর বিশ্লেষণ এবং অন্যান্য কাস্টম ধরণের গণনা প্রয়োগ করতে।

যদিও এই টিউটোরিয়ালটি স্ব-অন্তর্নিহিত হওয়ার জন্য তৈরি করা হয়েছে, আমরা আপনাকে প্রথমে tff.learning কাঠামো এবং tff.learning লার্নিং এপিআই ( tff.learning ) এর উচ্চ স্তরের এবং আরও মৃদু পরিচয়ের জন্য চিত্রের শ্রেণিবদ্ধকরণ এবং পাঠ্য প্রজন্মের টিউটোরিয়ালগুলি পড়তে উত্সাহিত করি as এটি আপনাকে এখানে আমাদের যে প্রসঙ্গে বর্ণিত হয়েছে সে ধারণাগুলি রাখতে সহায়তা করবে।

উদ্দিষ্ট ব্যবহারসমূহ

সংক্ষেপে বলা যায়, ফেডারেটেড কোর (এফসি) এমন একটি বিকাশ পরিবেশ যা বিতর্কিত যোগাযোগ অপারেটরগুলির সাথে টেনসরফ্লো কোডের সংমিশ্রণকারী টেনসরফ্লো কোডকে সংযুক্ত করে প্রোগ্রামের যুক্তিকে সংহত করে তোলে, যেমন ফেডারেটেড অ্যাভারেজিংয়ে ব্যবহৃত হয় - গণনা বিতরণকৃত পরিমাণ, গড় এবং অন্যান্য ধরণের সিস্টেমে ক্লায়েন্ট ডিভাইসের সেট, ব্রডকাস্টিং মডেল এবং those ডিভাইসগুলিতে পরামিতি ইত্যাদির উপর বিতরণকৃত সংগ্রহগুলির of

আপনি tf.contrib.distribute সম্পর্কে সচেতন হতে tf.contrib.distribute , এবং এই মুহুর্তে জিজ্ঞাসা করা একটি প্রাকৃতিক প্রশ্ন হতে পারে: কীভাবে এই কাঠামোটির পার্থক্য রয়েছে? উভয় ফ্রেমওয়ার্কগুলি সর্বোপরি টেনসরফ্লো গণনা বিতরণ করার চেষ্টা করে।

এটি সম্পর্কে চিন্তা করার এক উপায় হ'ল, যেখানে tf.contrib.distribute এর উল্লিখিত লক্ষ্য tf.contrib.distribute ব্যবহারকারীরা বিতরণকৃত প্রশিক্ষণ সক্ষম করতে ন্যূনতম পরিবর্তন সহ বিদ্যমান মডেলগুলি এবং প্রশিক্ষণ কোডটি ব্যবহার করতে পারবেন এবং বিতরণকৃত অবকাঠামোগত সুবিধা কীভাবে গ্রহণ করবেন সে সম্পর্কে অনেক বেশি ফোকাস রয়েছে বিদ্যমান প্রশিক্ষণ কোডকে আরও দক্ষ করে তোলার জন্য, টিএফএফের ফেডারেটেড কোরের লক্ষ্য হ'ল গবেষকরা এবং অনুশীলনকারীদের তারা তাদের সিস্টেমে বিতরণ করা যোগাযোগের নির্দিষ্ট ধরণগুলির উপর সুস্পষ্ট নিয়ন্ত্রণ প্রদান। এফসির ফোকাসটি বাস্তবায়িত বিতরণ প্রশিক্ষণ সক্ষমতার একটি কংক্রিট সেট না করে বিতরণকৃত ডেটা ফ্লো অ্যালগরিদমগুলি প্রকাশের জন্য একটি নমনীয় এবং এক্সটেনসিবল ভাষা সরবরাহের দিকে থাকে।

টিএফএফ-এর এফসি এপিআইয়ের প্রাথমিক লক্ষ্য দর্শকদের মধ্যে অন্যতম হ'ল গবেষক এবং অনুশীলনকারীরা যারা নতুন ফেডারেশন লার্নিং অ্যালগরিদমগুলির সাথে পরীক্ষা করতে চান এবং সূক্ষ্ম নকশার পছন্দগুলির ফলাফলগুলির মূল্যায়ন করতে পারেন যেগুলি বিতরণ ব্যবস্থায় ডেটা প্রবাহকে যেভাবে সাজানো হয়, তবুও সিস্টেম প্রয়োগের বিবরণ দ্বারা জর্জরিত না হয়ে। এফসি এপিআই যে বিমূর্ততাটির লক্ষ্য নির্ধারণ করছে তা প্রায় একটি সিউডোকোডের সাথে সম্পর্কিত যা একটি গবেষণামূলক প্রকাশনায় ফেডারেশন লার্নিং অ্যালগরিদমের মেকানিক্স বর্ণনা করতে ব্যবহার করতে পারে - সিস্টেমে কী ডেটা রয়েছে এবং কীভাবে এটি রূপান্তরিত হয়, তবে এর স্তরে না ফেলেই স্বতন্ত্র পয়েন্ট-টু-পয়েন্ট নেটওয়ার্ক মেসেজ এক্সচেঞ্জ।

সামগ্রিকভাবে টিএফএফ পরিস্থিতিগুলিকে টার্গেট করে যেখানে ডেটা বিতরণ করা হয় এবং অবশ্যই তা অবশ্যই থাকে, যেমন গোপনীয়তার কারণে, এবং যেখানে কোনও কেন্দ্রীভূত স্থানে সমস্ত ডেটা সংগ্রহ করা একটি কার্যকর বিকল্প নয়। মেশিন লার্নিং অ্যালগরিদমগুলি প্রয়োগের ক্ষেত্রে এর জড়িত রয়েছে যা পরিসরের ক্ষেত্রে তুলনামূলকভাবে একটি ডেটা সেন্টারে কেন্দ্রীভূত অবস্থানে সমস্ত ডেটা সংগ্রহ করা যেতে পারে তার জন্য সুস্পষ্ট নিয়ন্ত্রণের বর্ধিত ডিগ্রি প্রয়োজন।

আমরা শুরু করার আগে

আমরা কোডটিতে ডুব দেওয়ার আগে দয়া করে নীচের "হ্যালো ওয়ার্ল্ড" উদাহরণটি চালানোর চেষ্টা করুন যাতে আপনার পরিবেশটি সঠিকভাবে সেটআপ হয়েছে। যদি এটি কাজ না করে তবে দয়া করে নির্দেশাবলীর জন্য ইনস্টলেশন গাইড দেখুন।

!pip install --quiet --upgrade tensorflow-federated-nightly
!pip install --quiet --upgrade nest-asyncio

import nest_asyncio
nest_asyncio.apply()
import collections

import numpy as np
import tensorflow as tf
import tensorflow_federated as tff
@tff.federated_computation
def hello_world():
  return 'Hello, World!'

hello_world()
b'Hello, World!'

সংযুক্ত তথ্য

টিএফএফের একটি স্বাতন্ত্র্যসূচক বৈশিষ্ট্য হ'ল এটি আপনাকে ফেডারেশনযুক্ত ডেটাতে টেনসরফ্লো-ভিত্তিক গণনাগুলি নিখুঁতভাবে প্রকাশ করতে দেয়। আমরা এই টিউটোরিয়ালে সংঘবদ্ধ ডেটা শব্দটি ব্যবহার করব একটি বিতরণ সিস্টেমে ডিভাইসগুলির একটি গ্রুপ জুড়ে হোস্ট করা ডেটা আইটেমগুলির সংগ্রহকে উল্লেখ করতে। উদাহরণস্বরূপ, মোবাইল ডিভাইসে চলমান অ্যাপ্লিকেশনগুলি কোনও কেন্দ্রীভূত অবস্থানে আপলোড না করে ডেটা সংগ্রহ এবং স্থানীয়ভাবে সঞ্চয় করতে পারে। বা, বিতরণ সেন্সরগুলির একটি অ্যারে তাদের অবস্থানগুলিতে তাপমাত্রা রিডিং সংগ্রহ এবং সঞ্চয় করতে পারে।

উপরোক্ত উদাহরণগুলির মতো সংযুক্ত ডেটা টিএফএফ -তে প্রথম-শ্রেণীর নাগরিক হিসাবে গণ্য করা হয়, অর্থাত্ তারা ফাংশনের পরামিতি এবং ফলাফল হিসাবে উপস্থিত হতে পারে এবং তাদের প্রকারভেদ রয়েছে। এই ধারণাটিকে শক্তিশালী করার জন্য, আমরা ফেডারেশনযুক্ত ডেটা সেটগুলিকে ফেডারেটেড মান বা ফেডারেটেড ধরণের মান হিসাবে উল্লেখ করব।

বোঝার জন্য গুরুত্বপূর্ণ বিষয়টি হ'ল আমরা একক ফেড্রেটেড মান হিসাবে সমস্ত ডিভাইস জুড়ে ডেটা আইটেমগুলির সম্পূর্ণ সংগ্রহকে মডেলিং করছি (উদাহরণস্বরূপ, বিতরণ করা অ্যারেতে সমস্ত সংবেদকের পুরো সংগ্রহের তাপমাত্রার পাঠক)।

উদাহরণস্বরূপ, এখানে ক্লায়েন্ট ডিভাইসের একটি গ্রুপ হোস্টেড ফেডারেশন ফ্লোটের প্রকারটি টিএফএফ-এ কীভাবে সংজ্ঞায়িত করা যায় তা এখানে। বিতরণকৃত সেন্সরগুলির একটি অ্যারে জুড়ে তাপমাত্রা পঠনের একটি সংগ্রহ এই ফেডারেটেড ধরণের মান হিসাবে মডেল করা যেতে পারে।

federated_float_on_clients = tff.type_at_clients(tf.float32)

আরো সাধারণভাবে, TFF একটি ফেডারেট প্রকার TYPE নির্দিষ্ট করে সংজ্ঞায়িত করা হয় T সদস্য উপাদানসমূহের - তথ্য আইটেম পৃথক ডিভাইসের উপর অবস্থিত এবং গ্রুপ G ডিভাইস যার উপর এই ধরনের ফেডারেট মান হোস্ট করা হয় (প্লাস এক তৃতীয়াংশ, shortlyচ্ছিক কিছু তথ্য যা আমরা শীঘ্রই উল্লেখ করব)। গোষ্ঠী পড়ুন G মান বসানো একটি ফেডারেট মান হোস্টিং ডিভাইস। সুতরাং, tff.CLIENTS একটি স্থান নির্ধারণের একটি উদাহরণ।

str(federated_float_on_clients.member)
'float32'
str(federated_float_on_clients.placement)
'CLIENTS'

সদস্য পদে T এবং প্লেসমেন্ট G সহ একটি {T}@G নীচে দেখানো হিসাবে {T}@G G হিসাবে উপস্থাপিত হতে পারে।

str(federated_float_on_clients)
'{float32}@CLIENTS'

কোঁকড়া ধনুর্বন্ধনী {} এই সংক্ষিপ্ত মধ্যে স্বরলিপি একটি অনুস্মারক হিসেবে পরিবেশন করা যে সদস্য সংগঠকদের (বিভিন্ন ডিভাইসের ডাটা আইটেম), ভিন্ন হতে পারে হিসাবে আপনি যেমন আশা তাপমাত্রা সেন্সর রিডিং এর, তাই দল হিসেবে ক্লায়েন্টদের যৌথভাবে একটি হোস্টিং করা হয় বহু - T টাইপযুক্ত আইটেমগুলির সেট যা একসাথে সংঘবদ্ধ মান গঠন করে।

এটি লক্ষ করা গুরুত্বপূর্ণ যে একটি ফেডারেশনযুক্ত মূল্যের সদস্য উপাদানগুলি সাধারণত প্রোগ্রামারটির কাছে অস্বচ্ছ, অর্থাত্, একটি ফেডারেশনযুক্ত মান সিস্টেমের কোনও ডিভাইসের সনাক্তকারী দ্বারা চিহ্নিত সাধারণ dict হিসাবে ভাবা উচিত নয় - এই মানগুলি লক্ষ্য করে সম্মিলিতভাবে কেবল ফেডারেট অপারেটরদের দ্বারা রূপান্তরিত হতে হবে যা বিভিন্ন ধরণের বিতরণ যোগাযোগ প্রোটোকলের (যেমন সমষ্টি হিসাবে) বিমূর্তভাবে প্রতিনিধিত্ব করে। যদি এটি খুব বিমূর্ত মনে হয়, তবে চিন্তা করবেন না - আমরা শীঘ্রই এটিতে ফিরে আসব এবং আমরা এটিকে দৃ concrete় উদাহরণ দিয়ে চিত্রিত করব।

টিএফএফ-এ সংঘবদ্ধ প্রকার দুটি স্বাদে আসে: যেখানে ফেডারেশন মূল্যের সদস্যের উপাদানগুলি পৃথক হতে পারে (যেমন উপরে দেখানো হয়েছে) এবং তারা যেখানে সমান বলে পরিচিত তারা। এই তৃতীয়, ঐচ্ছিক দ্বারা নিয়ন্ত্রিত হয় all_equal মাপদণ্ড tff.FederatedType কন্সট্রাক্টর (নির্ধারিত লিঙ্ক False )।

federated_float_on_clients.all_equal
False

প্ল্যাসেন্ট G সহ একটি সংঘবদ্ধ ধরণের যেখানে T টাইপযুক্ত সমস্ত সদস্যের সমান বলে জানা যায় তাকে T@G হিসাবে সংক্ষিপ্তভাবে উপস্থাপন করা যায় ( {T}@G T@G বিপরীতে, অর্থাত্ কোঁকড়া ধনুর্বন্ধনী প্রতিফলনের জন্য বাদ পড়ে) একাধিক সদস্যের সমন্বয়কারী সদস্যের উপাদানটি একটি আইটেম নিয়ে থাকে)।

str(tff.type_at_clients(tf.float32, all_equal=True))
'float32@CLIENTS'

ব্যবহারিক পরিস্থিতিতে উত্থাপিত হতে পারে এমন ধরণের একটি সংঘবদ্ধ মানের একটি উদাহরণ হাইডারপ্যারামিটার (যেমন একটি শেখার হার, একটি ক্লিপিংয়ের আদর্শ, ইত্যাদি) যা একটি সার্ভার দ্বারা ফেডারেট প্রশিক্ষণে অংশ নেওয়া একটি গ্রুপের ডিভাইসগুলিতে সম্প্রচারিত হয়েছিল।

আরেকটি উদাহরণ হ'ল সার্ভারে প্রাক-প্রশিক্ষিত একটি মেশিন লার্নিং মডেলের পরামিতিগুলির সেট, যা ক্লায়েন্ট ডিভাইসের একটি গ্রুপে সম্প্রচারিত হয়েছিল, যেখানে তারা প্রতিটি ব্যবহারকারীর জন্য ব্যক্তিগতকৃত হতে পারে।

উদাহরণস্বরূপ, ধরুন আমাদের একটি সাধারণ এক-মাত্রিক লিনিয়ার রিগ্রেশন মডেলের জন্য float32 পরামিতিগুলির a এবং b । আমরা টিএফএফ-তে ব্যবহারের জন্য নিম্নলিখিত (নন-ফেডারেশনযুক্ত) ধরণের মডেলগুলি তৈরি করতে পারি। কোণ ধনুর্বন্ধনী <> মুদ্রিত টাইপ স্ট্রিং নামকরণ বা নামহীন tuples জন্য একটি কম্প্যাক্ট TFF স্বরলিপি হয়।

simple_regression_model_type = (
    tff.StructType([('a', tf.float32), ('b', tf.float32)]))

str(simple_regression_model_type)
'<a=float32,b=float32>'

নোট করুন যে আমরা কেবল উপরের dtype নির্দিষ্টকরণ dtype । অ-স্কেলার প্রকারগুলিও সমর্থিত। উপরের কোডে, tf.float32 হল আরও সাধারণ tff.TensorType(dtype=tf.float32, shape=[]) শর্টকাট স্বরলিপি।

যখন এই মডেলটি ক্লায়েন্টগুলিতে সম্প্রচারিত হয়, তখন ফলাফলযুক্ত ফেডারেশন মানটির ধরণটি নীচের মত প্রদর্শিত হতে পারে।

str(tff.type_at_clients(
    simple_regression_model_type, all_equal=True))
'<a=float32,b=float32>@CLIENTS'

উপরের ফেডারেশন ফ্লোট সহ প্রতিসম প্রতিসাম্য, আমরা এই জাতীয় ধরণের একটি ফেডারেশন টুপল হিসাবে উল্লেখ করব। আরও সাধারণভাবে, আমরা প্রায়শই ফেডারেটেড এক্সওয়াইজেড শব্দটি একটি ফেডারেটেড মান উল্লেখ করতে ব্যবহার করব যেখানে সদস্যের সদস্যরা এক্সওয়াইজেড- সদৃশ। সুতরাং, আমরা ফেডারেটেড টিউপস , ফেডারেটেড সিকোয়েন্সস , ফেডারেটেড মডেলস ইত্যাদির মতো জিনিসগুলির বিষয়ে কথা বলব।

এখন, float32@CLIENTS -এ ফিরে আসার সময় - এটি একাধিক ডিভাইস জুড়ে প্রতিলিপিযুক্ত প্রদর্শিত হচ্ছে, এটি আসলে একক float32 , কারণ সমস্ত সদস্য একই are সাধারণভাবে, যদি আপনি কোন সব সমান ফেডারেট ধরনের, অর্থাত্, মনে হতে পারে ফর্ম এক T@G , একটি অ-ফেডারেট টাইপ isomorphic যেমন T , উভয় ক্ষেত্রেই, সেখানে আসলে যেহেতু শুধুমাত্র একটি একক (যদিও সম্ভাব্য প্রতিলিপি) আইটেমটি টাইপ T

T এবং T@G মধ্যে আইসোমর্ফিজম দেওয়া, আপনি ভাবতে পারেন যে কোনও উদ্দেশ্য, যদি কোনও উত্তর থাকে তবে এর উদ্দেশ্যগুলি কী কার্যকর হতে পারে। পড়তে.

স্থান

নকশা ওভারভিউ

পূর্ববর্তী বিভাগে, আমরা প্লেসমেন্টের ধারণাটি চালু করেছি - সিস্টেমের অংশগ্রহণকারীদের গোষ্ঠী যা যৌথভাবে একটি tff.CLIENTS মান হোস্ট করছে এবং আমরা tff.CLIENTS একটি স্থান নির্ধারণের উদাহরণ হিসাবে উল্লেখ করেছি।

প্লেসমেন্টের ধারণাটি কেন এত মৌলিক তা ব্যাখ্যা করার জন্য আমাদের এটিকে টিএফএফ টাইপ সিস্টেমে অন্তর্ভুক্ত করার দরকার ছিল, টিএফএফ-এর কিছু উদ্দেশ্যমূলক ব্যবহার সম্পর্কে এই টিউটোরিয়ালটির শুরুতে আমরা কী উল্লেখ করেছি all

যদিও এই টিউটোরিয়ালে, আপনি কেবলমাত্র সিমুলেটেড পরিবেশে টিএফএফ কোডটি স্থানীয়ভাবে কার্যকর করা দেখতে পাবেন, আমাদের লক্ষ্য টিএফএফের একটি লিখিত কোড সক্ষম করার জন্য যা আপনি কোনও বিতরণ সিস্টেমে শারীরিক ডিভাইসের গোষ্ঠীতে কার্যকর করার জন্য ব্যবহার করতে পারেন, সম্ভাব্যভাবে মোবাইল বা এম্বেড থাকা ডিভাইস সহ চলমান অ্যান্ড্রয়েড সিস্টেমে এটি যে ভূমিকা রাখে (একটি অন্তর-ব্যবহারকারী ডিভাইস, একটি কেন্দ্রীয় সমন্বয়কারী, বহু-স্তরের আর্কিটেকচারের মধ্যবর্তী স্তর ইত্যাদি) এর উপর ভিত্তি করে exec ডিভাইসগুলির প্রত্যেকটি স্থানীয়ভাবে কার্যকর করার জন্য পৃথক নির্দেশাবলীর একটি সেট গ্রহণ করবে। কোন ডিভাইসগুলির উপগ্রহগুলি কোন কোডটি কার্যকর করে এবং ডেটার বিভিন্ন অংশ যেখানে শারীরিকভাবে বাস্তবায়িত হতে পারে সে সম্পর্কে যুক্তিযুক্ত হয়ে উঠতে সক্ষম হওয়া জরুরী।

মোবাইল ডিভাইসে অ্যাপ্লিকেশন ডেটা, যেমন, ডিল করার সময় এটি বিশেষত গুরুত্বপূর্ণ। যেহেতু ডেটা ব্যক্তিগত এবং সংবেদনশীল হতে পারে, তাই আমাদের এই স্ট্যাটিকভাবে যাচাই করার ক্ষমতা প্রয়োজন যে এই ডেটাটি কখনই ডিভাইসটি ছাড়বে না (এবং কীভাবে ডেটা প্রক্রিয়াজাত করা হচ্ছে সে সম্পর্কে তথ্য প্রমাণ করুন)। এটিকে সমর্থন করার জন্য নকশা তৈরির একটি পদ্ধতি হ'ল প্লেসমেন্ট স্পেসিফিকেশন।

টিএফএফ একটি ডেটা কেন্দ্রিক প্রোগ্রামিং পরিবেশ হিসাবে নকশা করা হয়েছে, এবং যেমন, বিদ্যমান কিছু ফ্রেমওয়ার্কগুলির বিপরীতে যেগুলি অপারেশনগুলিতে ফোকাস করে এবং যেখানে সেই অপারেশনগুলি চালিত হতে পারে, সেখানে টিএফএফ ডেটার উপর দৃষ্টি নিবদ্ধ করে, যেখানে ডেটা বাস্তবায়িত হয় এবং কীভাবে এটি রূপান্তরিত হচ্ছে। ফলস্বরূপ, প্লেসমেন্টটি ডেটাতে ক্রিয়াকলাপ হিসাবে সম্পত্তি হিসাবে না, টিএফএফের ডেটা সম্পত্তি হিসাবে মডেল করা হয়। প্রকৃতপক্ষে, আপনি পরবর্তী বিভাগে দেখতে যাচ্ছেন, টিএফএফের কিছু ক্রিয়াকলাপ লোকেশন জুড়ে ছড়িয়ে পড়ে এবং "নেটওয়ার্কে" চালায়, তাই কোনও একক মেশিন বা মেশিনের একটি দল দ্বারা মৃত্যুদন্ড কার্যকর করার পরিবর্তে কথা বলার জন্য।

T@G বা {T}@G T@G হিসাবে নির্দিষ্ট মানের ধরণের প্রতিনিধিত্ব করা (কেবলমাত্র T বিপরীতে) ডেটা স্থাপনের সিদ্ধান্তগুলি সুস্পষ্ট করে তোলে এবং টিএফএফ-এ লিখিত প্রোগ্রামগুলির স্থির বিশ্লেষণের সাথে এটি সরবরাহের ভিত্তি হিসাবে কাজ করতে পারে অনানুষ্ঠানিক অন ডিভাইস ডেটার জন্য প্রথাগত গোপনীয়তা গ্যারান্টি দেয়।

তবে এই মুহুর্তে একটি গুরুত্বপূর্ণ বিষয় লক্ষ্য করার বিষয়টি হ'ল আমরা যখন টিএফএফ ব্যবহারকারীদের অংশীদার ডিভাইসগুলির গোষ্ঠীগুলির সম্পর্কে স্পষ্টভাবে উত্সাহিত করতে উত্সাহিত করি (অবস্থানগুলি), প্রোগ্রামার কখনই ব্যক্তিগত অংশগ্রহণকারীদের কাঁচা ডেটা বা পরিচয় নিয়ে ডিল করবে না ।

(দ্রষ্টব্য: এটি টিউটোরিয়ালটির ক্ষেত্রের বাইরে গেলেও, আমাদের উল্লেখ করা উচিত যে tff.federated_collect একটি উল্লেখযোগ্য ব্যতিক্রম রয়েছে, একটি tff.federated_collect অপারেটর যা কেবলমাত্র বিশেষ পরিস্থিতির জন্য নিম্ন স্তরের আদিম হিসাবে লক্ষ্য করা যায়। এর স্পষ্ট ব্যবহার এমন পরিস্থিতিতে যেখানে এটি এড়ানো যায় তার প্রস্তাব দেওয়া হয় না, কারণ এটি সম্ভাব্য ভবিষ্যতের অ্যাপ্লিকেশনগুলিকে সীমাবদ্ধ করতে পারে উদাহরণস্বরূপ, যদি স্থির বিশ্লেষণ চলাকালীন, আমরা নির্ণয় করি যে কোনও গণনা এই ধরনের নিম্ন-স্তরের প্রক্রিয়া ব্যবহার করে, আমরা নির্দিষ্টভাবে এর অ্যাক্সেসকে অস্বীকার করতে পারি ডেটা ধরণের।)

ডিজাইনের মাধ্যমে টিএফএফ কোডের tff.CLIENTS , tff.CLIENTS দ্বারা প্রতিনিধিত্ব করা গ্রুপটি গঠন করে এমন ডিভাইসগুলি গণনা করার বা গ্রুপে একটি নির্দিষ্ট ডিভাইসের অস্তিত্বের জন্য তদন্ত করার কোনও উপায় নেই। ফেডারেটেড কোর এপিআই, আর্কিটেকচারাল অ্যাবস্ট্রাকশনগুলির অন্তর্নিহিত সেট বা সিমুলেশনগুলিকে সমর্থন করার জন্য আমরা সরবরাহ করি এমন মূল রানটাইম অবকাঠামোতে কোথাও কোনও ডিভাইস বা ক্লায়েন্ট পরিচয়ের ধারণা নেই। আপনার লেখার সমস্ত গণনা যুক্তি সম্পূর্ণ ক্লায়েন্ট গোষ্ঠীর ক্রিয়াকলাপ হিসাবে প্রকাশ করা হবে।

পাইথন dict বিপরীতে ফেডারেশনযুক্ত প্রকারের মানগুলির বিষয়ে আমরা পূর্বে যা উল্লেখ করেছি তা এখানে স্মরণ করুন, এতে কোনও ব্যক্তি কেবল তাদের সদস্য উপাদানগুলি গণনা করতে পারবেন না। আপনার টিএফএফ প্রোগ্রামের যুক্তিগুলি পৃথক অংশগ্রহীতাদের সাথে না গিয়ে স্থান নির্ধারণের (গোষ্ঠী) সাথে যুক্ত হিসাবে ম্যানিপুলেট করে এমন মানগুলির কথা চিন্তা করুন।

অবস্থানগুলি সেইসাথে TFF একটি প্রথম শ্রেণীর নাগরিক হতে করার জন্য পরিকল্পিত, এবং পরামিতি এবং একটি ফলাফল হিসাবে প্রদর্শিত করতে পারেন placement প্রকার (দ্বারা প্রতিনিধিত্ব করা tff.PlacementType API এ)। ভবিষ্যতে, আমরা প্লাসমেন্টগুলি রূপান্তর করতে বা একত্রিত করতে বিভিন্ন অপারেটর সরবরাহ করার পরিকল্পনা করি তবে এটি এই টিউটোরিয়ালটির আওতার বাইরে। এখন জন্য, এটি মনে করার যথেষ্ট placement হিসাবে একটি অস্বচ্ছ আদিম বিল্ট-ইন TFF, অনুরূপ টাইপ কিভাবে int এবং bool অস্বচ্ছ বিল্ট-ইন করা হয় পাইথন ধরনের সঙ্গে tff.CLIENTS , এই ধরনের একটি ধ্রুবক আক্ষরিক হচ্ছে অসদৃশ না 1 টাইপ int এর ধ্রুবক আক্ষরিক হচ্ছে।

স্থান নির্ধারণ

টিএফএফ একাধিক ক্লায়েন্ট ডিভাইস (মোবাইল ফোন, এমবেডেড ডিভাইস, বিতরণকৃত ডাটাবেস) সহ ক্লায়েন্ট-সার্ভার আর্কিটেকচার হিসাবে প্রাকৃতিকভাবে তৈরি করা সমৃদ্ধ বিভিন্ন ব্যবহারিক দৃশ্যের প্রকাশ করতে সহজ করার জন্য দুটি বেসিক প্লেসমেন্ট tff.CLIENTS , tff.CLIENTS এবং tff.SERVER , সেন্সর ইত্যাদি) একক কেন্দ্রীভূত সার্ভার সমন্বয়কারী দ্বারা অর্কেস্টেড। টিএফএফ কাস্টম প্লেসমেন্টস, একাধিক ক্লায়েন্ট গ্রুপ, বহু-স্তরযুক্ত এবং অন্যান্য, আরও সাধারণ বিতরণ করা আর্কিটেকচারকে সমর্থন করার জন্য ডিজাইন করা হয়েছে, তবে সেগুলি নিয়ে আলোচনা করা এই টিউটোরিয়ালটির বাইরে নয়।

টিএফএফ tff.CLIENTS বা tff.SERVER প্রকৃতপক্ষে tff.SERVER উপস্থাপন করে তা নির্ধারণ করে না।

বিশেষত, tff.SERVER একটি একক শারীরিক ডিভাইস (একটি একক গ্রুপের সদস্য) হতে পারে, তবে এটি সম্ভবত ত্রুটি-সহনশীল ক্লাস্টার চলমান রাষ্ট্রীয় মেশিনের প্রতিরূপে প্রতিরূপের একটি tff.SERVER হতে পারে - আমরা কোনও বিশেষ স্থাপত্য তৈরি করি না অনুমান। পরিবর্তে, আমরা পূর্ববর্তী বিভাগে উল্লিখিত all_equal বিটটি এই সত্যটি প্রকাশ করতে ব্যবহার করি যে আমরা সাধারনত সার্ভারে কেবলমাত্র একটি একক আইটেম নিয়ে কাজ করি।

তেমনি, কিছু অ্যাপ্লিকেশনগুলিতে tff.CLIENTS সিস্টেমের সমস্ত ক্লায়েন্টকে প্রতিনিধিত্ব করতে পারে - ফেডারেশন শিক্ষার প্রসঙ্গে আমরা মাঝে মধ্যে জনসংখ্যা হিসাবে উল্লেখ করি তবে উদাহরণস্বরূপ, ফেডারেটেড এভারেজিংয়ের উত্পাদন বাস্তবায়নে এটি কোনও সংঘের প্রতিনিধিত্ব করতে পারে - একটি উপসেট প্রশিক্ষণ একটি নির্দিষ্ট রাউন্ডে প্রত্যাশা জন্য নির্বাচিত ক্লায়েন্ট। বিমূর্তরূপে সংজ্ঞায়িত স্থান নির্ধারণকে কংক্রিট অর্থ প্রদান করা হয় যখন তারা প্রদর্শিত কোনও গণনা সম্পাদনের জন্য স্থাপন করা হয় (বা কেবল এই টিউটোরিয়ালে প্রদর্শিত যেমন একটি সিমুলেটেড পরিবেশে পাইথন ফাংশনের মতো আহ্বান করা হয়)। আমাদের স্থানীয় সিমুলেশনগুলিতে, ক্লায়েন্টদের গ্রুপটি ইনপুট হিসাবে সরবরাহিত ফেডারেশন ডেটা দ্বারা নির্ধারিত হয়।

সংযুক্ত গণনা

ফেডারেশন গণনা ঘোষণা

টিএফএফ একটি জোরালোভাবে টাইপযুক্ত ফাংশনাল প্রোগ্রামিং পরিবেশ হিসাবে ডিজাইন করা হয়েছে যা মডিউলার বিকাশ সমর্থন করে।

টিএফএফ-র রচনার প্রাথমিক এককটি একটি ফেডারেশনযুক্ত গণনা - যুক্তির একটি অংশ যা ফেডারেটেড মানগুলিকে ইনপুট হিসাবে গ্রহণ করতে পারে এবং ফেডারেশন মানগুলিকে আউটপুট হিসাবে ফিরিয়ে দিতে পারে। আপনি আমাদের পূর্ববর্তী উদাহরণ থেকে সেন্সর অ্যারে দ্বারা রিপোর্ট করা তাপমাত্রার গড় গণনা করে এমন একটি গণনা সংজ্ঞায়িত করতে পারেন তা এখানে।

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

, উপরের কোড এ খুঁজছি এই বিন্দু আপনাকে জিজ্ঞাসা করা যেতে পারে এ - ইতিমধ্যেই নির্মান প্রসাধক নেই যেমন composable ইউনিট সংজ্ঞায়িত করতে tf.function TensorFlow, এবং যদি তাই হয়, কেন এখনও অন্য এক পরিচয় করিয়ে দিতে আর কীভাবে ভিন্ন?

সংক্ষিপ্ত উত্তরটি হল যে tff.federated_computation মোড়কের দ্বারা উত্পন্ন tff.federated_computation নয় , এটি tff.federated_computation নয় - এটি কোনও অভ্যন্তরীণ প্ল্যাটফর্ম-স্বতন্ত্র আঠালো ভাষার কোনও বিতরণ ব্যবস্থার স্পেসিফিকেশন। এই মুহুর্তে, এটি নিঃসন্দেহে ক্রিপ্টিক শোনায় তবে অনুগ্রহ করে একটি বিতরণ ব্যবস্থার একটি বিমূর্ত স্পেসিফিকেশন হিসাবে একটি ফেডারেশন গণনার এই স্বজ্ঞাত ব্যাখ্যাটি বহন করুন। আমরা এটি এক মিনিটের মধ্যে ব্যাখ্যা করব।

প্রথমে আসুন সংজ্ঞাটি নিয়ে কিছুটা খেলি। টিএফএফ কম্পিউটেশনগুলি সাধারণত ফাংশন হিসাবে মডেল করা হয় - পরামিতিগুলি সহ বা ছাড়াই, তবে ভাল সংজ্ঞায়িত প্রকারের স্বাক্ষর সহ। আপনি তার অনুসন্ধান করে কম্পিউটেশন ধরণ স্বাক্ষর মুদ্রণ করতে পারেন type_signature নিচের চিত্রের, সম্পত্তি।

str(get_average_temperature.type_signature)
'({float32}@CLIENTS -> float32@SERVER)'

প্রকারের স্বাক্ষরটি আমাদের জানায় যে গণনা ক্লায়েন্ট ডিভাইসে বিভিন্ন সেন্সর পঠনের সংগ্রহ গ্রহণ করে এবং সার্ভারে একক গড় দেয়।

আরও কিছু করার আগে, আসুন আমরা এটি এক মিনিটের জন্য প্রতিফলিত করি - এই গণনার ইনপুট এবং আউটপুট বিভিন্ন জায়গায় রয়েছে ( CLIENTS বনাম SERVER )। টিএফএফ ক্রিয়াকলাপগুলি কীভাবে অবস্থানগুলি জুড়ে বিস্তৃত হতে পারে এবং নেটওয়ার্কে চালিত হতে পারে এবং আমরা কেবল বিতরণ ব্যবস্থাগুলির অ্যাবস্ট্রাক্ট স্পেসিফিকেশন উপস্থাপনার হিসাবে ফেডারেশন গণনা সম্পর্কে যা বলেছিলাম সে সম্পর্কে ਪਲੇ সেটগুলির পূর্ববর্তী বিভাগে আমরা কী বলেছি তা স্মরণ করুন। আমাদের কাছে কেবলমাত্র এইরকম একটি সংজ্ঞা দেওয়া আছে - একটি সাধারণ বিতরণ করা সিস্টেম যাতে ক্লায়েন্ট ডিভাইসে ডেটা গ্রাস করা হয় এবং সার্বিক ফলাফলগুলি সার্ভারে উপস্থিত হয়।

অনেক ব্যবহারিক পরিস্থিতিতে, উচ্চ-স্তরের কাজগুলিকে উপস্থাপন করে এমন গণনাগুলি তাদের ইনপুটগুলি গ্রহণ করে এবং সার্ভারে তাদের ফলাফলগুলি প্রতিবেদন করার ঝোঁক রাখে - এটি এই ধারণাটি প্রতিফলিত করে যে সার্ভারে উত্সাহিত এবং সমাপ্ত হওয়া প্রশ্নগুলি দ্বারা কম্পিউটেশনগুলি ট্রিগার হতে পারে।

তবে, এফসি এপিআই এই অনুমানটি চাপিয়ে দেয় না এবং আমরা অভ্যন্তরীণভাবে ব্যবহার করি এমন অনেক বিল্ডিং ব্লকের (আপনি অনেকগুলি tff.federated_... অপারেটরগুলি যা আপনি tff.federated_... দেখতে পাচ্ছেন) সহ পৃথক স্থানের ইনপুট এবং আউটপুট রাখে, তাই সাধারণভাবে আপনার উচিত কোনও ফেডারেশনযুক্ত গণনা সম্পর্কে এমন কিছু হিসাবে ভাববেন না যা সার্ভারে চলমান বা কোনও সার্ভার দ্বারা চালিত হয়েছে । একটি ফেডারেশন গণনে সার্ভারটি কেবল এক ধরণের অংশগ্রহণকারী। এই জাতীয় গণনার যান্ত্রিকতা সম্পর্কে চিন্তাভাবনা করে, একক কেন্দ্রীভূত সমন্বয়কের দৃষ্টিভঙ্গি না রেখে সর্বদা বিশ্বব্যাপী নেটওয়ার্ক-ব্যাপী দৃষ্টিভঙ্গির কাছে ডিফল্ট হওয়া ভাল।

সাধারণভাবে, কার্যকরী ধরনের স্বাক্ষরগুলি যথাযথভাবে ইনপুট এবং আউটপুটগুলির T এবং U টাইপের জন্য (T -> U) হিসাবে সংক্ষিপ্তভাবে উপস্থাপিত হয়। আনুষ্ঠানিক প্যারামিটারের ধরণ (এই ক্ষেত্রে এই জাতীয় sensor_readings ) সাজসজ্জারকারীর পক্ষে যুক্তি হিসাবে নির্দিষ্ট করা হয়েছে। আপনাকে ফলাফলের ধরণ উল্লেখ করার দরকার নেই - এটি স্বয়ংক্রিয়ভাবে নির্ধারিত হয়।

যদিও টিএফএফ সীমিত আকারের বহুবাদিতা সরবরাহ করে, প্রোগ্রামাররা তাদের যে ধরণের ডেটা নিয়ে কাজ করে সে সম্পর্কে স্পষ্ট হতে উত্সাহিত হয়, কারণ এটি আপনার কোডের বৈশিষ্ট্যগুলি বোঝার, ডিবাগিং এবং আনুষ্ঠানিকভাবে যাচাইকরণকে সহজ করে তোলে। কিছু ক্ষেত্রে, স্পষ্টত ধরণের নির্দিষ্টকরণের প্রয়োজন হয় (যেমন, পলিমারফিক কম্পিউটারগুলি সরাসরি সম্পাদনযোগ্য নয়)।

ফেডারেশনযুক্ত গণনা কার্যকর করা হচ্ছে

বিকাশ এবং ডিবাগিং সমর্থন করার জন্য, টিএফএফ আপনাকে নীচের চিত্রের মতো পাইথন ফাংশন হিসাবে এইভাবে সংজ্ঞায়িত গণনাগুলি সরাসরি আহ্বান করতে দেয়। যেখানে all_equal - all_equal বিটের সাথে False সেট করে একটি ফেডারেশনযুক্ত ধরণের মান আশা করে, আপনি পাইথনে এটি একটি সরল list হিসাবে খাওয়াতে পারেন, এবং all_equal প্রকারের জন্য all_equal বিটটি True সেট করা আছে, আপনি সরাসরি (একক) ফিড করতে পারবেন সদস্য উপাদান। ফলাফলগুলি কীভাবে আপনার কাছে ফিরে আসে তাও এইভাবে।

get_average_temperature([68.5, 70.3, 69.8])
69.53334

সিমুলেশন মোডে এই জাতীয় গণনা চালানোর সময়, আপনি সিস্টেম-ব্যাপী দৃশ্যের সাথে বহিরাগত পর্যবেক্ষক হিসাবে কাজ করেন, যিনি নেটওয়ার্কের যে কোনও স্থানে ইনপুট সরবরাহ এবং আউটপুট গ্রাহ্য করার ক্ষমতা রাখেন, যেমন এখানে সত্যই রয়েছে - আপনি ক্লায়েন্টের মান সরবরাহ করেছেন ইনপুট এবং সার্ভার ফলাফল গ্রাস।

এখন, আমরা একটি আঠালো ভাষায় tff.federated_computation ডেকোরেটর নির্গমন কোড সম্পর্কে আগে তৈরি করা একটি tff.federated_computation ফিরে tff.federated_computation । যদিও টিএফএফ কম্পিউটেশনের যুক্তিটি পাইথনের সাধারণ ফাংশন হিসাবে প্রকাশ করা যেতে পারে (আপনি কেবল তাদের উপরে tff.federated_computation দিয়ে tff.federated_computation যেমন আমরা উপরে করেছি), এবং আপনি সরাসরি পাইথন আর্গুমেন্টের সাহায্যে এটিকে অন্যান্য পাইথন ফাংশনগুলির মতো করতে পারেন directly নোটবুক, পর্দার আড়ালে, যেমনটি আমরা আগে উল্লেখ করেছি, টিএফএফ গণনা আসলে পাইথন নয়

এর দ্বারা আমরা যা বোঝাতে চাইছি তা হল পাইথন দোভাষী যখন tff.federated_computation দিয়ে সজ্জিত কোনও ফাংশনটির tff.federated_computation , তখন এটি এই ফাংশনটির শরীরে একবারের (সংজ্ঞা সময়) বিবৃতিগুলি সন্ধান করে এবং তারপরে ভবিষ্যতের ব্যবহারের জন্য গণনার যুক্তির একটি ক্রমিক উপস্থাপনা তৈরি করে - মৃত্যুদন্ড কার্যকর করার জন্য, বা অন্য সংখ্যায় উপ-উপাদান হিসাবে অন্তর্ভুক্ত করা হবে।

আপনি নিম্নলিখিত হিসাবে একটি মুদ্রণ বিবৃতি যোগ করে এটি যাচাই করতে পারেন:

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

  print ('Getting traced, the argument is "{}".'.format(
      type(sensor_readings).__name__))

  return tff.federated_mean(sensor_readings)
Getting traced, the argument is "ValueImpl".

আপনি পাইথন কোড সম্পর্কে ভাবতে পারেন যা ফেডারেশন গণনাটিকে একইভাবে সংজ্ঞায়িত করে আপনি কীভাবে পাইথন কোড সম্পর্কে ভাবেন যেটি অ-উত্সাহী প্রসঙ্গে টেনসরফ্লো গ্রাফ তৈরি করে (যদি আপনি টেনসরফ্লো-এর উত্সাহী ব্যবহারের সাথে পরিচিত না হন তবে আপনার চিন্তা করুন) পাইথন কোড অপারেশনগুলির গ্রাফটি পরে সম্পাদন করার জন্য সংজ্ঞা দেয় তবে বাস্তবে সেগুলি ফ্লাইতে চালানো হয় না)। টেনসরফ্লোতে অ-উত্সাহী গ্রাফ-বিল্ডিং কোডটি পাইথন, তবে এই কোডটি দ্বারা নির্মিত টেনসরফ্লো গ্রাফটি প্ল্যাটফর্ম-স্বতন্ত্র এবং সিরিয়ালাইজযোগ্য।

তেমনি, টিএফএফ গণনাগুলি পাইথনে সংজ্ঞায়িত করা হয়েছে, তবে তাদের দেহের মধ্যে পাইথন বিবৃতি যেমন tff.federated_mean কেবল প্রদর্শিত উদাহরণে, একটি পোর্টেবল এবং প্ল্যাটফর্ম-স্বতন্ত্র সিরিয়ালাইজেবল উপস্থাপনের মধ্যে সংকলিত হয়েছে।

একজন বিকাশকারী হিসাবে আপনাকে এই উপস্থাপনের বিশদটি নিয়ে নিজেকে উদ্বিগ্ন হওয়ার দরকার নেই, কারণ আপনার কখনই সরাসরি এটির সাথে কাজ করার প্রয়োজন হবে না, তবে আপনাকে এর অস্তিত্ব সম্পর্কে সচেতন হওয়া উচিত, টিএফএফ কম্পিউটিশনগুলি মূলত অ-আগ্রহী, এবং যথেচ্ছ পাইথন রাজ্য ক্যাপচার করতে পারে না। টিএফএফ গণনার শরীরে থাকা পাইথন কোডটি সংজ্ঞায়নের সময় কার্যকর করা হয়, যখন tff.federated_computation দিয়ে সজ্জিত পাইথন ফাংশনের tff.federated_computation সিরিয়ালযুক্ত হওয়ার আগে সনাক্ত করা হয়। অনুরোধের সময় এটি পুনরায় পিছনে আসে না (ফাংশনটি বহুকর্মী ব্যতীত; বিশদের জন্য ডকুমেন্টেশন পৃষ্ঠাগুলি দেখুন) refer

আপনি ভাবতে পারেন যে আমরা কেন একটি উত্সর্গীকৃত অভ্যন্তরীণ অ-পাইথন উপস্থাপনের জন্য বেছে নিয়েছি। একটি কারণ হ'ল চূড়ান্তভাবে, টিএফএফ কম্পিউটেশনগুলি বাস্তব শারীরিক পরিবেশের জন্য ডিপ্লোয়যোগ্য এবং মোবাইল বা এম্বেড থাকা ডিভাইসে হোস্ট করা হয়েছে, যেখানে পাইথন উপলব্ধ নাও হতে পারে।

আর একটি কারণ টিএফএফ গণনাগুলি পাইথন প্রোগ্রামগুলির বিপরীতে বিতরণ ব্যবস্থার বিশ্বব্যাপী আচরণ প্রকাশ করে যা পৃথক অংশগ্রহণকারীদের স্থানীয় আচরণ প্রকাশ করে। আপনি দেখতে পাচ্ছেন যে উপরের সাধারণ উদাহরণে, বিশেষ অপারেটর tff.federated_mean যা ক্লায়েন্ট ডিভাইসে ডেটা গ্রহণ করে, তবে ফলাফলটি সার্ভারে জমা করে।

tff.federated_mean অপারেটর tff.federated_mean সহজেই পাইথনের সাধারণ অপারেটর হিসাবে মডেল করা যায় না, যেহেতু এটি স্থানীয়ভাবে কার্যকর হয় না - যেমনটি আগেই উল্লেখ করা হয়েছে, এটি এমন একটি বিতরণকারী সিস্টেমকে উপস্থাপন করে যা একাধিক সিস্টেমের অংশগ্রহণকারীদের আচরণের সমন্বয় সাধন করে। পাইথনের সাধারণ (স্থানীয়) অপারেটরদের থেকে আলাদা করার জন্য আমরা এ জাতীয় অপারেটরকে ফেডারেটেড অপারেটর হিসাবে উল্লেখ করব।

টিএফএফ টাইপ সিস্টেম, এবং টিএফএফ এর ভাষায় সমর্থিত ক্রিয়াকলাপগুলির সেটগুলি এইভাবে পাইথনের লোকদের থেকে উল্লেখযোগ্যভাবে বিচ্যুত হয়, এটি একটি উত্সর্গীকৃত প্রতিনিধিত্বের ব্যবহার প্রয়োজন।

সংস্থার ফেডারেশন গণনা

উপরে উল্লিখিত হিসাবে, ফেডারেশনযুক্ত গণনা এবং তাদের উপাদানগুলি বিতরণ ব্যবস্থার মডেল হিসাবে ভাল বোঝা যায় এবং আপনি ফেডারেশন গণনাগুলি আরও সহজতর বিতরণকারী সিস্টেমকে আরও জটিল বিতরণকারী সিস্টেমগুলি রচনা হিসাবে রচনা করার কথা ভাবতে পারেন। আপনি tff.federated_mean অপারেটরটিকে এক ধরণের স্বাক্ষরযুক্ত একটি বিল্ট-ইন টেম্পলেট tff.federated_mean হিসাবে মনে করতে পারেন ({T}@CLIENTS -> T@SERVER) (প্রকৃতপক্ষে, আপনার লেখার গণনাগুলির মতোই, এই অপারেটরেরও একটি জটিল রয়েছে) কাঠামো - হুডের নীচে আমরা এটিকে সহজ অপারেটরগুলিতে বিভক্ত করি।

একই অবস্থা ফেডারেশন গণনা রচনা সম্পর্কেও। গণনার get_average_temperature অন্য পাইথন ফাংশন দিয়ে সাজানো একটি শরীরের মধ্যে আহ্বান করা যেতে পারে tff.federated_computation - তাই করছেন, কারণ হবে এটা পিতা বা মাতা লাশ এমবেড করা একই ভাবে tff.federated_mean নিজস্ব শরীর আগের এমবেড করা হয়।

সচেতন হওয়ার জন্য একটি গুরুত্বপূর্ণ বিধিনিষেধটি tff.federated_computation সজ্জিত পাইথন ফাংশনগুলির সংস্থাগুলিতে কেবল ফেডারেটেড অপারেটর থাকতে হবে, যেমন, তারা সরাসরি টেনসরফ্লো অপারেশন ধারণ করতে পারে না। উদাহরণস্বরূপ, আপনি সংযুক্ত মানের একজোড়া যুক্ত করতে সরাসরি tf.nest ইন্টারফেস ব্যবহার করতে পারবেন না। টেনসরফ্লো কোডটি অবশ্যই নিম্নলিখিত বিভাগে আলোচিত tff.tf_computation দিয়ে সজ্জিত কোডের ব্লকের মধ্যে সীমাবদ্ধ থাকতে হবে। কেবল যখন এই পদ্ধতিতে মোড়ানো থাকে তখন কেবল মোড়ানো tff.federated_computation একটি tff.federated_computation

এই বিচ্ছেদের কারণগুলি প্রযুক্তিগত (আর্কিটেকচারাল পাশাপাশি tf.add হিসাবে অপারেটরদের tf.add )। ফেডারেশনযুক্ত গণনার ভাষা (অর্থাত্, tff.federated_computation দিয়ে সজ্জিত পাইথন ফাংশনগুলির সিরিয়ালযুক্ত মৃতদেহগুলি থেকে তৈরি যুক্তি) প্ল্যাটফর্ম-স্বতন্ত্র আঠালো ভাষা হিসাবে পরিবেশন করার জন্য ডিজাইন করা হয়েছে। এই আঠালো ভাষাটি বর্তমানে tff.tf_computation কোডের এমবেডেড বিভাগগুলি ( tff.tf_computation ব্লকে সীমাবদ্ধ) থেকে বিতরণ সিস্টেমগুলি তৈরি করতে ব্যবহৃত হয়। সময়ের পূর্ণতাতে, আমরা অন্যান্য, নন-টেনসরফ্লো যুক্তির বিভাগ যেমন এমনিতে সম্পর্কিত ডাটাবেস কোয়েরিগুলি ইনপুট পাইপলাইনগুলির প্রতিনিধিত্ব করতে পারে, সমস্ত একই আঠালো ভাষা ব্যবহার করে একসাথে সংযুক্ত ( tff.federated_computation ব্লক) tff.federated_computation করার প্রয়োজনীয়তাটি tff.federated_computation

টেনসরফ্লো যুক্তি

টেনসরফ্লো গণনা ঘোষণা করা হচ্ছে

টিএনএফএফ টেনসরফ্লো ব্যবহারের জন্য ডিজাইন করা হয়েছে। এই হিসাবে, আপনি টিএফএফ-তে যে কোডটি লেখবেন সেগুলির বেশিরভাগ অংশই টেনসরফ্লো কোডটি সাধারণ (সম্ভবত স্থানীয়ভাবে কার্যকর করা) হতে পারে। টিএফএফ এর সাথে এই জাতীয় কোড ব্যবহার করার জন্য, যেমন উপরে উল্লিখিত রয়েছে, এটি কেবল tff.tf_computation দিয়ে সজ্জিত করা tff.tf_computation

উদাহরণস্বরূপ, এখানে কীভাবে আমরা একটি ফাংশন বাস্তবায়ন করতে পারি যা একটি সংখ্যা নেয় এবং এর সাথে 0.5 যোগ করে।

@tff.tf_computation(tf.float32)
def add_half(x):
  return tf.add(x, 0.5)

আবার tff.tf_computation দিকে নজর রেখে আপনি ভাবতে পারেন যে আমরা কেন কেবলমাত্র tf.function মতো একটি বিদ্যমান পদ্ধতি ব্যবহারের পরিবর্তে অন্য একটি tff.tf_computation সংজ্ঞায়িত tf.function । পূর্ববর্তী বিভাগের বিপরীতে, আমরা এখানে টেনসরফ্লো কোডের একটি সাধারণ ব্লক নিয়ে কাজ করছি।

এর কয়েকটি কারণ রয়েছে, এর সম্পূর্ণ চিকিত্সা যার এই টিউটোরিয়ালটির পরিধি ছাড়িয়ে গেছে, তবে এটির মূল নামকরণ মূল্যবান:

  • ফেডারেশনযুক্ত গণনার সংস্থাগুলিতে টেনসরফ্লো কোড ব্যবহার করে পুনর্ব্যবহারযোগ্য বিল্ডিং ব্লকগুলি এম্বেড করার জন্য তাদের নির্দিষ্ট বৈশিষ্ট্যগুলি পূরণ করতে হবে - যেমন সংজ্ঞায়িত সময় সনাক্তকরণ এবং সিরিয়ালাইজড হওয়া, টাইপ স্বাক্ষর থাকা ইত্যাদি This এ জন্য সাধারণত কোনও সাজসজ্জার কিছু রূপ প্রয়োজন requires

সাধারণভাবে, আমরা tf.function এর ডেকরেটর উদগ্রীব ক্রিয়াকলাপের সাথে সঠিক পদ্ধতিতে tf.function করতে পারে এমন সঠিক পদ্ধতি হিসাবে যেমন tf.function , রচনা যেমন tf.function জন্য tf.function এর স্থানীয় ব্যবস্থা ব্যবহার করার পরামর্শ tf.function

এখন, উপরের উদাহরণ কোড স্নিপেটে ফিরে এসে, আমরা সুনির্দিষ্টভাবে সংজ্ঞায়িত add_half অন্য কোনও টিএফএফ গণনার মতো টিএফএফ দ্বারা চিকিত্সা করতে পারি। বিশেষত, এটিতে একটি টিএফএফ টাইপের স্বাক্ষর রয়েছে।

str(add_half.type_signature)
'(float32 -> float32)'

নোট করুন যে এই ধরণের স্বাক্ষরের স্থান নেই। টেনসরফ্লো গণনাগুলি সংঘবদ্ধ প্রকারগুলি গ্রাস করতে বা ফিরতে পারে না।

আপনি এখন অন্যান্য গণনাগুলিতে বিল্ডিং ব্লক হিসাবে add_half ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি ক্লায়েন্ট ডিভাইসগুলিতে ফেডারেটেড ফ্লোটের সমস্ত সদস্য উপাদানগুলিতে add_half প্রয়োগ করতে tff.federated_map অপারেটরটি এখানে কীভাবে ব্যবহার করতে পারেন তা এখানে।

@tff.federated_computation(tff.type_at_clients(tf.float32))
def add_half_on_clients(x):
  return tff.federated_map(add_half, x)
str(add_half_on_clients.type_signature)
'({float32}@CLIENTS -> {float32}@CLIENTS)'

টেনসরফ্লো গণনা সম্পাদন করা হচ্ছে

tff.tf_computation সাথে সংজ্ঞায়িত গণনাগুলির tff.tf_computation একইভাবে নিয়ম অনুসরণ করে যা আমরা tff.federated_computation জন্য বর্ণনা tff.federated_computation । নীচে পাইথনে এগুলি সাধারণ কলযোগ্য হিসাবে ডাকা যেতে পারে।

add_half_on_clients([1.0, 3.0, 2.0])
[<tf.Tensor: shape=(), dtype=float32, numpy=1.5>,
 <tf.Tensor: shape=(), dtype=float32, numpy=3.5>,
 <tf.Tensor: shape=(), dtype=float32, numpy=2.5>]

আবার, এটি লক্ষণীয় যে এইভাবে গণনা add_half_on_clients একটি বিতরণ প্রক্রিয়া অনুকরণ করে। ডেটা গ্রাহকদের উপর গ্রাস করা হয় এবং ক্লায়েন্টদের কাছে ফিরে আসে। প্রকৃতপক্ষে, এই গণনায় প্রতিটি ক্লায়েন্ট একটি স্থানীয় ক্রিয়া করে has এই সিস্টেমে কোনও tff.SERVER স্পষ্টরূপে উল্লেখ করা হয়নি (এমনকি tff.SERVER , এই জাতীয় প্রক্রিয়াকরণের অর্কেস্টারে tff.SERVER জড়িত থাকতে পারে)। একটি হিসাব করার ধারণার দিক থেকে অনুরূপ যেমন এই ভাবে সংজ্ঞায়িত চিন্তা Map মঞ্চে MapReduce

এছাড়াও, মনে রাখবেন যে সংজ্ঞা সময়ে আমরা টিএফএফ কম্পিউটেশনগুলি সিরিয়ালিকৃত হওয়ার বিষয়ে পূর্ববর্তী বিভাগে যা বলেছিলাম তা tff.tf_computation কোডের ক্ষেত্রেও সত্য - add_half_on_clients পাইথন বডিটি সংজ্ঞা সময়ে একবার খুঁজে পেয়েছে। পরবর্তী অনুরোধগুলিতে, টিএফএফ এর সিরিয়ালযুক্ত উপস্থাপনা ব্যবহার করে।

tff.federated_computation দিয়ে সজ্জিত পাইথন পদ্ধতির এবং tff.federated_computation দিয়ে সজ্জিত কেবলমাত্র পার্থক্যটি tff.federated_computation tff.tf_computation গ্রাফ হিসাবে সিরিয়ালযুক্ত করা হয় (যেখানে পূর্ববর্তীগুলিতে tff.tf_computation সরাসরি এমবেড করা থাকে না)।

ফণা অধীনে, tff.tf_computation দিয়ে সজ্জিত প্রতিটি পদ্ধতি tff.tf_computation কাঠামোটি ক্যাপচার করার অনুমতি দেওয়ার জন্য অধীর আগ্রহে নিষ্ক্রিয় করে। উত্সাহিত কার্যকরকরণ স্থানীয়ভাবে অক্ষম থাকা অবস্থায়, আপনি যতক্ষণ না আপনার সংখ্যার যুক্তিটি এমনভাবে লেখেন যাতে এটি সঠিকভাবে সিরিয়াল করা যায় ততক্ষণ আপনি আগ্রহী টেনসরফ্লো, অটোগ্রাফ, টেনসরফ্লো ২.০ কনস্ট্রাক্টস ইত্যাদি ব্যবহার করতে স্বাগত।

উদাহরণস্বরূপ, নিম্নলিখিত কোডটি ব্যর্থ হবে:

try:

  # Eager mode
  constant_10 = tf.constant(10.)

  @tff.tf_computation(tf.float32)
  def add_ten(x):
    return x + constant_10

except Exception as err:
  print (err)
Attempting to capture an EagerTensor without building a function.

উপরে ব্যর্থ কারণ constant_10 ইতিমধ্যে গ্রাফ বাইরে যে নির্মাণ করা হয়েছে tff.tf_computation দেহের অভ্যন্তরীণভাবে নির্মান add_ten ধারাবাহিকতাতে প্রক্রিয়ার সময়।

অন্যদিকে, যখন tff.tf_computation ভিতরে ডাকা হয় তখন বর্তমান গ্রাফটি পরিবর্তন করে এমন পাইথন ফাংশনগুলি আহ্বান করা ভাল:

def get_constant_10():
  return tf.constant(10.)

@tff.tf_computation(tf.float32)
def add_ten(x):
  return x + get_constant_10()

add_ten(5.0)
15.0

নোট করুন যে টেনসরফ্লোতে সিরিয়ালাইজেশন প্রক্রিয়াগুলি বিকশিত হচ্ছে এবং আমরা কীভাবে টিএফএফ কম্পিউটেশনগুলিকে আরও বিকশিত করতে সিরিয়ালাইজ করি তার বিবরণ আশা করি।

tf.data.Dataset গুলি এর সাথে কাজ করা

যেমন পূর্বে উল্লিখিত হয়েছে, tff.tf_computation একটি অনন্য বৈশিষ্ট্য tff.tf_computation তারা আপনাকেtf.data.Dataset এর সাথে আপনার কোড অনুসারে বিমূর্তভাবে সংজ্ঞায়িতভাবে কাজ করার অনুমতি দেয়। Parameters to be represented in TensorFlow as data sets need to be declared using the tff.SequenceType constructor.

For example, the type specification tff.SequenceType(tf.float32) defines an abstract sequence of float elements in TFF. Sequences can contain either tensors, or complex nested structures (we'll see examples of those later). The concise representation of a sequence of T -typed items is T* .

float32_sequence = tff.SequenceType(tf.float32)

str(float32_sequence)
'float32*'

Suppose that in our temperature sensor example, each sensor holds not just one temperature reading, but multiple. Here's how you can define a TFF computation in TensorFlow that calculates the average of temperatures in a single local data set using the tf.data.Dataset.reduce operator.

@tff.tf_computation(tff.SequenceType(tf.float32))
def get_local_temperature_average(local_temperatures):
  sum_and_count = (
      local_temperatures.reduce((0.0, 0), lambda x, y: (x[0] + y, x[1] + 1)))
  return sum_and_count[0] / tf.cast(sum_and_count[1], tf.float32)
str(get_local_temperature_average.type_signature)
'(float32* -> float32)'

In the body of a method decorated with tff.tf_computation , formal parameters of a TFF sequence type are represented simply as objects that behave liketf.data.Dataset , ie, support the same properties and methods (they are currently not implemented as subclasses of that type - this may change as the support for data sets in TensorFlow evolves).

You can easily verify this as follows.

@tff.tf_computation(tff.SequenceType(tf.int32))
def foo(x):
  return x.reduce(np.int32(0), lambda x, y: x + y)

foo([1, 2, 3])
6

Keep in mind that unlike ordinarytf.data.Dataset s, these dataset-like objects are placeholders. They don't contain any elements, since they represent abstract sequence-typed parameters, to be bound to concrete data when used in a concrete context. Support for abstractly-defined placeholder data sets is still somewhat limited at this point, and in the early days of TFF, you may encounter certain restrictions, but we won't need to worry about them in this tutorial (please refer to the documentation pages for details).

When locally executing a computation that accepts a sequence in a simulation mode, such as in this tutorial, you can feed the sequence as Python list, as below (as well as in other ways, eg, as atf.data.Dataset in eager mode, but for now, we'll keep it simple).

get_local_temperature_average([68.5, 70.3, 69.8])
69.53333

Like all other TFF types, sequences like those defined above can use the tff.StructType constructor to define nested structures. For example, here's how one could declare a computation that accepts a sequence of pairs A , B , and returns the sum of their products. We include the tracing statements in the body of the computation so that you can see how the TFF type signature translates into the dataset's output_types and output_shapes .

@tff.tf_computation(tff.SequenceType(collections.OrderedDict([('A', tf.int32), ('B', tf.int32)])))
def foo(ds):
  print('element_structure = {}'.format(ds.element_spec))
  return ds.reduce(np.int32(0), lambda total, x: total + x['A'] * x['B'])
element_structure = OrderedDict([('A', TensorSpec(shape=(), dtype=tf.int32, name=None)), ('B', TensorSpec(shape=(), dtype=tf.int32, name=None))])

str(foo.type_signature)
'(<A=int32,B=int32>* -> int32)'
foo([{'A': 2, 'B': 3}, {'A': 4, 'B': 5}])
26

The support for using tf.data.Datasets as formal parameters is still somewhat limited and evolving, although functional in simple scenarios such as those used in this tutorial.

Putting it all together

Now, let's try again to use our TensorFlow computation in a federated setting. Suppose we have a group of sensors that each have a local sequence of temperature readings. We can compute the global temperature average by averaging the sensors' local averages as follows.

@tff.federated_computation(
    tff.type_at_clients(tff.SequenceType(tf.float32)))
def get_global_temperature_average(sensor_readings):
  return tff.federated_mean(
      tff.federated_map(get_local_temperature_average, sensor_readings))

Note that this isn't a simple average across all local temperature readings from all clients, as that would require weighing contributions from different clients by the number of readings they locally maintain. We leave it as an exercise for the reader to update the above code; the tff.federated_mean operator accepts the weight as an optional second argument (expected to be a federated float).

Also note that the input to get_global_temperature_average now becomes a federated float sequence . Federated sequences is how we will typically represent on-device data in federated learning, with sequence elements typically representing data batches (you will see examples of this shortly).

str(get_global_temperature_average.type_signature)
'({float32*}@CLIENTS -> float32@SERVER)'

Here's how we can locally execute the computation on a sample of data in Python. Notice that the way we supply the input is now as a list of list s. The outer list iterates over the devices in the group represented by tff.CLIENTS , and the inner ones iterate over elements in each device's local sequence.

get_global_temperature_average([[68.0, 70.0], [71.0], [68.0, 72.0, 70.0]])
70.0

This concludes the first part of the tutorial... we encourage you to continue on to the second part .