ফেডারেটেড লার্নিং

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

ওভারভিউ

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

এই স্তর দ্বারা অফার করা ইন্টারফেসগুলি নিম্নলিখিত তিনটি মূল অংশ নিয়ে গঠিত:

  • মডেল ক্লাস এবং সহায়ক ফাংশন যা আপনাকে আপনার বিদ্যমান মডেলগুলিকে TFF-এর সাথে ব্যবহারের জন্য মোড়ানোর অনুমতি দেয়। একটি মডেল মোড়ানো একটি একক মোড়ানো ফাংশন (যেমন, tff.learning.from_keras_model ), বা সম্পূর্ণ কাস্টমাইজযোগ্যতার জন্য tff.learning.Model ইন্টারফেসের একটি সাবক্লাস সংজ্ঞায়িত করার মতো সহজ হতে পারে।

  • ফেডারেটেড কম্পিউটেশন বিল্ডার্স সাহায্যকারী ফাংশন যা আপনার বিদ্যমান মডেলগুলি ব্যবহার করে প্রশিক্ষণ বা মূল্যায়নের জন্য ফেডারেটেড গণনা তৈরি করে।

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

এই ইন্টারফেসগুলি প্রাথমিকভাবে tff.learning নামস্থানে সংজ্ঞায়িত করা হয়েছে, গবেষণা ডেটা সেট এবং অন্যান্য সিমুলেশন-সম্পর্কিত ক্ষমতাগুলি ছাড়া যা tff.simulation এ গোষ্ঠীভুক্ত করা হয়েছে। এই স্তরটি ফেডারেটেড কোর (FC) দ্বারা অফার করা নিম্ন-স্তরের ইন্টারফেস ব্যবহার করে প্রয়োগ করা হয়, যা একটি রানটাইম পরিবেশও প্রদান করে।

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

মডেল

স্থাপত্য অনুমান

সিরিয়ালাইজেশন

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

আপনি ইজার মোড ব্যবহার করার মতো সর্বশেষ সেরা অনুশীলনগুলি অনুসরণ করে এখনও আপনার TF কোড বিকাশ করতে পারেন (এবং করা উচিত)। যাইহোক, চূড়ান্ত কোডটি অবশ্যই সিরিয়ালাইজেবল হতে হবে (যেমন, eager-মোড কোডের জন্য tf.function হিসাবে মোড়ানো যেতে পারে)। এটি নিশ্চিত করে যে নির্বাহের সময় প্রয়োজনীয় যেকোন পাইথন স্টেট বা নিয়ন্ত্রণ প্রবাহ সিরিয়াল করা যেতে পারে (সম্ভবত Autograph এর সাহায্যে)।

বর্তমানে, TensorFlow সম্পূর্ণরূপে সিরিয়ালাইজিং এবং ডিসিরিয়ালাইজিং এজার-মোড TensorFlow সমর্থন করে না। এইভাবে, TFF-এ সিরিয়ালাইজেশন বর্তমানে TF 1.0 প্যাটার্ন অনুসরণ করে, যেখানে সমস্ত কোড টিএফএফ নিয়ন্ত্রণ করে এমন একটি tf.Graph . গ্রাফের ভিতরে তৈরি করা আবশ্যক। এর মানে হল বর্তমানে TFF একটি ইতিমধ্যে-নির্মিত মডেল ব্যবহার করতে পারে না; পরিবর্তে, মডেল সংজ্ঞা লজিক একটি no-arg ফাংশনে প্যাকেজ করা হয় যা একটি tff.learning.Model । মডেলের সমস্ত উপাদান সিরিয়ালাইজ করা হয়েছে তা নিশ্চিত করতে এই ফাংশনটিকে TFF দ্বারা ডাকা হয়। উপরন্তু, একটি দৃঢ়ভাবে-টাইপ করা পরিবেশ হওয়ায়, TFF-এর জন্য একটু অতিরিক্ত মেটাডেটা প্রয়োজন হবে, যেমন আপনার মডেলের ইনপুট প্রকারের স্পেসিফিকেশন।

সমষ্টি

আমরা দৃঢ়ভাবে সুপারিশ করি যে বেশিরভাগ ব্যবহারকারী কেরাস ব্যবহার করে মডেল তৈরি করুন, নীচের কেরাসের জন্য রূপান্তরকারী বিভাগ দেখুন। এই মোড়কগুলি মডেল আপডেটের সমষ্টির পাশাপাশি মডেলের জন্য স্বয়ংক্রিয়ভাবে সংজ্ঞায়িত যেকোনো মেট্রিক্স পরিচালনা করে। যাইহোক, একটি সাধারণ tff.learning.Model এর জন্য একত্রিতকরণ কীভাবে পরিচালনা করা হয় তা বোঝার জন্য এটি এখনও কার্যকর হতে পারে।

ফেডারেটেড লার্নিংয়ে সর্বদা কমপক্ষে দুটি স্তরের সমষ্টি থাকে: স্থানীয় অন-ডিভাইস একত্রীকরণ এবং ক্রস-ডিভাইস (বা ফেডারেটেড) একত্রীকরণ:

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

    এই লেভেলে অ্যাগ্রিগেশন করা আপনার মডেল কোডের দায়িত্ব, এবং স্ট্যান্ডার্ড টেনসরফ্লো কনস্ট্রাক্ট ব্যবহার করে সম্পন্ন করা হয়।

    প্রক্রিয়াকরণের সাধারণ কাঠামো নিম্নরূপ:

    • মডেলটি প্রথমে tf.Variable s তৈরি করে সমষ্টি ধরে রাখতে, যেমন ব্যাচের সংখ্যা বা প্রক্রিয়াকৃত উদাহরণের সংখ্যা, প্রতি-ব্যাচ বা প্রতি-উদাহরণ ক্ষতির যোগফল ইত্যাদি।

    • TFF আপনার Model ফরওয়ার্ড_পাস পদ্ধতিটি একাধিকবার আহ্বান করে, ক্রমানুসারে ক্লায়েন্ট ডেটার পরবর্তী ব্যাচগুলির উপর, যা আপনাকে পার্শ্ব প্রতিক্রিয়া হিসাবে বিভিন্ন forward_pass ভেরিয়েবল আপডেট করতে দেয়।

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

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

    এই স্তরে একত্রীকরণ সম্পাদন করা TFF এর দায়িত্ব। একজন মডেল স্রষ্টা হিসাবে, তবে, আপনি এই প্রক্রিয়াটি নিয়ন্ত্রণ করতে পারেন (নীচে এই বিষয়ে আরও)।

    প্রক্রিয়াকরণের সাধারণ কাঠামো নিম্নরূপ:

    • প্রাথমিক মডেল, এবং প্রশিক্ষণের জন্য প্রয়োজনীয় যে কোনো পরামিতি, একটি সার্ভার দ্বারা ক্লায়েন্টদের একটি উপসেটে বিতরণ করা হয় যারা প্রশিক্ষণ বা মূল্যায়নের একটি রাউন্ডে অংশগ্রহণ করবে।

    • প্রতিটি ক্লায়েন্টের উপর, স্বাধীনভাবে এবং সমান্তরালভাবে, আপনার মডেল কোডটি স্থানীয় ডেটা ব্যাচগুলির একটি স্ট্রীমে বারবার আহ্বান করা হয় যাতে মডেল প্যারামিটারগুলির একটি নতুন সেট (প্রশিক্ষণের সময়) এবং উপরে বর্ণিত স্থানীয় মেট্রিক্সের একটি নতুন সেট তৈরি করা হয় (এটি স্থানীয় একত্রিতকরণ)।

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

বিমূর্ত ইন্টারফেস

এই মৌলিক কনস্ট্রাক্টর + মেটাডেটা ইন্টারফেসটি ইন্টারফেস tff.learning.Model দ্বারা প্রতিনিধিত্ব করা হয়, নিম্নরূপ:

  • কনস্ট্রাক্টর, ফরোয়ার্ড_পাস , এবং forward_pass পদ্ধতিগুলি মডেল ভেরিয়েবল, ফরোয়ার্ড পাস এবং পরিসংখ্যান report_local_unfinalized_metrics করা উচিত যা আপনি রিপোর্ট করতে চান। এই পদ্ধতিগুলি দ্বারা নির্মিত TensorFlow অবশ্যই ক্রমিক হতে হবে, যেমন উপরে আলোচনা করা হয়েছে।

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

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

আপনি কীভাবে আপনার নিজস্ব কাস্টম tff.learning.Model সংজ্ঞায়িত করবেন তার উদাহরণগুলি আমাদের চিত্র শ্রেণিবিন্যাসের টিউটোরিয়ালের দ্বিতীয় অংশে, সেইসাথে model_examples.py এ পরীক্ষার জন্য আমরা যে মডেলগুলি ব্যবহার করি সেগুলির উদাহরণগুলি খুঁজে পেতে পারেন।

কেরাসের জন্য রূপান্তরকারী

TFF-এর জন্য প্রয়োজনীয় প্রায় সমস্ত তথ্য tf.keras ইন্টারফেসে কল করে প্রাপ্ত করা যেতে পারে, তাই আপনার যদি কেরাস মডেল থাকে, তাহলে আপনি tff.learning.Model তৈরি করতে tff.learning.from_keras_model উপর নির্ভর করতে পারেন।

মনে রাখবেন যে TFF এখনও আপনাকে একটি কনস্ট্রাক্টর প্রদান করতে চায় - একটি নো-আর্গুমেন্ট মডেল ফাংশন যেমন নিম্নলিখিত:

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

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

কেরাস র‍্যাপারের ব্যবহার আমাদের ইমেজ ক্লাসিফিকেশন এবং টেক্সট জেনারেশন টিউটোরিয়ালে দেখানো হয়েছে।

ফেডারেটেড কম্পিউটেশন বিল্ডার্স

tff.learning প্যাকেজ tff.Computation এর জন্য বেশ কিছু নির্মাতাকে প্রদান করে যারা শেখার সাথে সম্পর্কিত কাজগুলি সম্পাদন করে; আমরা আশা করি যে এই ধরনের গণনার সেট ভবিষ্যতে প্রসারিত হবে।

স্থাপত্য অনুমান

মৃত্যুদন্ড

একটি ফেডারেটেড গণনা চালানোর দুটি স্বতন্ত্র পর্যায় রয়েছে।

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

  • এক্সিকিউট TFF এই গণনাগুলি চালানোর উপায় প্রদান করে। আপাতত, এক্সিকিউশন শুধুমাত্র স্থানীয় সিমুলেশনের মাধ্যমে সমর্থিত (যেমন, সিমুলেটেড বিকেন্দ্রীভূত ডেটা ব্যবহার করে একটি নোটবুকে)।

TFF-এর ফেডারেটেড লার্নিং এপিআই দ্বারা উত্পন্ন একটি ফেডারেটেড গণনা, যেমন একটি প্রশিক্ষণ অ্যালগরিদম যা ফেডারেটেড মডেল গড় ব্যবহার করে, বা একটি ফেডারেটেড মূল্যায়ন, অনেকগুলি উপাদান অন্তর্ভুক্ত করে, সবচেয়ে উল্লেখযোগ্যভাবে:

  • আপনার মডেলের প্রশিক্ষণ/মূল্যায়ন লুপ (যেমন অপ্টিমাইজার তৈরি করা, মডেল আপডেট প্রয়োগ করা, tf.data.Dataset s এর উপর পুনরাবৃত্তি করা, এবং কম্পিউটিং মেট্রিক্স, এবং সার্ভারে সমষ্টিগত আপডেট প্রয়োগ করা, কয়েকটি নাম দেওয়ার জন্য)।

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

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

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

মডেলিং রাষ্ট্র

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

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

উপলব্ধ বিল্ডার

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

  • tff.learning.algorithms.build_weighted_fed_avg , যা একটি মডেল ফাংশন এবং একটি ক্লায়েন্ট অপ্টিমাইজার ইনপুট হিসাবে নেয় এবং একটি স্টেটফুল tff.learning.templates.LearningProcess (যা tff.templates.IterativeProcess সাবক্লাস)।

  • tff.learning.build_federated_evaluation একটি মডেল ফাংশন নেয় এবং মডেলের ফেডারেটেড মূল্যায়নের জন্য একটি একক ফেডারেটেড গণনা প্রদান করে, যেহেতু মূল্যায়ন রাষ্ট্রীয় নয়।

ডেটাসেট

স্থাপত্য অনুমান

ক্লায়েন্ট নির্বাচন

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

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

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

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

def sample(federate_data):
  return ...

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

এই সুবিধার জন্য, সিমুলেশনে TFF ব্যবহার করার সময়, ফেডারেটেড ডেটা পাইথন list হিসাবে গৃহীত হয়, প্রতি অংশগ্রহণকারী ক্লায়েন্ট ডিভাইসে একটি উপাদান সহ সেই ডিভাইসের স্থানীয় tf.data.Dataset প্রতিনিধিত্ব করে।

বিমূর্ত ইন্টারফেস

সিমুলেটেড ফেডারেটেড ডেটা সেটগুলির সাথে কাজ করার মানসম্মত করার জন্য, TFF একটি বিমূর্ত ইন্টারফেস tff.simulation.datasets.ClientData প্রদান করে, যা একজনকে ক্লায়েন্টের সেট গণনা করতে এবং একটি tf.data.Dataset করতে দেয় যাতে একটি নির্দিষ্ট ডেটা থাকে ক্লায়েন্ট এই tf.data.Dataset গুলিকে উৎসুক মোডে জেনারেট করা ফেডারেটেড কম্পিউটেশনে সরাসরি ইনপুট হিসাবে খাওয়ানো যেতে পারে।

এটি লক্ষ করা উচিত যে ক্লায়েন্টের পরিচয় অ্যাক্সেস করার ক্ষমতা হল এমন একটি বৈশিষ্ট্য যা শুধুমাত্র ডেটাসেট দ্বারা সিমুলেশনে ব্যবহারের জন্য প্রদান করা হয়, যেখানে ক্লায়েন্টদের নির্দিষ্ট উপসেট থেকে ডেটার উপর প্রশিক্ষণের ক্ষমতা প্রয়োজন হতে পারে (যেমন, বিভিন্ন দৈনিকের প্রাপ্যতা অনুকরণ করা ক্লায়েন্টের প্রকার)। কম্পাইল করা গণনা এবং অন্তর্নিহিত রানটাইম ক্লায়েন্ট পরিচয়ের কোনো ধারণার সাথে জড়িত নয় । একবার ক্লায়েন্টদের একটি নির্দিষ্ট উপসেট থেকে ডেটা একটি ইনপুট হিসাবে নির্বাচন করা হলে, যেমন, tff.templates.IterativeProcess.next এ একটি কলে, ক্লায়েন্টের পরিচয় আর এতে প্রদর্শিত হবে না।

উপলব্ধ ডেটা সেট

আমরা ডেটাসেটের জন্য নামস্থান tff.simulation.datasets উৎসর্গ করেছি যা সিমুলেশনে ব্যবহারের জন্য tff.simulation.datasets.ClientData ইন্টারফেস বাস্তবায়ন করে এবং চিত্র শ্রেণীবিভাগ এবং পাঠ্য প্রজন্মের টিউটোরিয়াল সমর্থন করার জন্য ডেটাসেটের সাথে এটিকে সীড করে। আমরা আপনাকে প্ল্যাটফর্মে আপনার নিজস্ব ডেটাসেটগুলি অবদান রাখতে উত্সাহিত করতে চাই৷