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

ওভারভিউ

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

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

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

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

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

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

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

মডেল

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

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

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

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

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

সমষ্টি

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

def model_fn():
  keras_model = ...
  return tff.learning.models.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 ইন্টারফেস বাস্তবায়ন করে এবং চিত্র শ্রেণীবিভাগ এবং পাঠ্য প্রজন্মের টিউটোরিয়াল সমর্থন করার জন্য ডেটাসেটের সাথে এটিকে সীড করে। আমরা আপনাকে প্ল্যাটফর্মে আপনার নিজস্ব ডেটাসেটগুলি অবদান রাখতে উত্সাহিত করতে চাই৷