تاریخ را ذخیره کنید! Google I / O 18-20 مه بازمی گردد اکنون ثبت نام کنید
این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

آموزش فدراسیون

بررسی اجمالی

این سند رابط هایی را ارائه می دهد که وظایف یادگیری فدرال را تسهیل می کند ، مانند آموزش فدراسیون یا ارزیابی با مدل های یادگیری ماشین موجود که در TensorFlow اجرا شده است. در طراحی این رابط ها ، هدف اصلی ما این بود که بتوانیم بدون نیاز به دانش نحوه کار در زیر هود ، تجربه یادگیری فدراسیون را آزمایش کنیم و الگوریتم های یادگیری فدراسیون را در انواع مدل ها و داده های موجود ارزیابی کنیم. ما شما را تشویق می کنیم که به سیستم عامل کمک کنید. TFF با توجه به قابلیت توسعه پذیری و ترکیب پذیری طراحی شده است ، و ما از مشارکت ها استقبال می کنیم. ما هیجان زده هستیم که ببینیم با چه چیزی مواجه می شوید!

رابط های ارائه شده توسط این لایه از سه قسمت اصلی زیر تشکیل شده است:

  • مدل ها کلاسها و توابع کمکی که به شما امکان می دهد مدلهای موجود خود را برای استفاده با TFF بپیچید. بسته بندی یک مدل می تواند به سادگی فراخوانی یک تابع بسته بندی منفرد (به عنوان مثال ، tff.learning.from_keras_model ) یا تعریف یک زیر کلاس از tff.learning.Model برای قابلیت تنظیم کامل باشد.

  • سازندگان فدراسیون محاسبات . توابع کمکی که با استفاده از مدل های موجود شما ، محاسبات فدراسیون را برای آموزش یا ارزیابی ایجاد می کنند.

  • مجموعه داده ها مجموعه داده های کنسرو شده ای که می توانید در پایتون بارگیری کرده و به آنها دسترسی داشته باشید تا در شبیه سازی سناریوهای یادگیری فدرال استفاده شود. اگرچه یادگیری فدراسیون برای استفاده با داده های غیرمتمرکز طراحی شده است که نمی توان آنها را به سادگی در یک مکان متمرکز بارگیری کرد ، اما در مراحل تحقیق و توسعه اغلب انجام آزمایشات اولیه با استفاده از داده هایی که می توانند به صورت محلی بارگیری و دستکاری شوند ، به خصوص برای توسعه دهندگانی که ممکن است جدید رویکرد.

این رابط ها در درجه اول در فضای نامی tff.learning تعریف می tff.learning ، به جز مجموعه داده های تحقیق و سایر قابلیت های مربوط به شبیه سازی که در tff.simulation گروه بندی شده اند. این لایه با استفاده از رابط های سطح پایین ارائه شده توسط Federated Core (FC) پیاده سازی می شود ، که همچنین یک محیط زمان اجرا را نیز فراهم می کند.

قبل از ادامه ، توصیه می کنیم ابتدا آموزش های مربوط به طبقه بندی تصویر و تولید متن را مرور کنید ، زیرا در آنها بیشتر مفاهیم توصیف شده در اینجا با استفاده از مثالهای مشخص آورده شده است. اگر شما علاقه مند به کسب اطلاعات بیشتر در مورد نحوه کار TFF هستید ، ممکن است بخواهید از آموزش الگوریتم های سفارشی به عنوان مقدمه ای برای رابط های سطح پایین تری که برای بیان منطق محاسبات فدراسیون استفاده می کنیم ، و مطالعه عملکرد موجود tff.learning . رابط های tff.learning

مدل ها

مفروضات معماری

سریال سازی

هدف TFF پشتیبانی از انواع سناریوهای یادگیری توزیع شده است که در آن کد مدل یادگیری ماشین که می نویسید ممکن است روی تعداد زیادی مشتری ناهمگن با قابلیت های متنوع اجرا شود. در حالی که در یک انتهای طیف قرار دارند ، در برخی از برنامه ها ، این مشتری ها ممکن است سرورهای پایگاه داده قدرتمندی باشند ، اما بسیاری از کاربردهای مهم پلتفرم ما برای پشتیبانی از دستگاه های همراه و جاسازی شده با منابع محدود است. ما نمی توانیم فرض کنیم که این دستگاه ها توانایی میزبانی از زمان پایتون را دارند. تنها چیزی که ما می توانیم در این مرحله فرض کنیم این است که آنها توانایی میزبانی محلی از زمان اجرا TensorFlow را دارند. بنابراین ، یک فرضیه معماری اساسی که ما در TFF ارائه می دهیم این است که کد مدل شما باید به صورت نمودار TensorFlow قابل سریال سازی باشد.

شما می توانید (و باید) کد TF خود را به دنبال آخرین بهترین روش ها مانند استفاده از حالت مشتاق توسعه دهید. با این حال ، کد نهایی باید قابل سریال سازی باشد (به عنوان مثال می تواند به عنوان یک tf.function برای کد حالت مشتاق بسته بندی شود). این اطمینان می دهد که هر حالت پایتون یا جریان کنترل لازم در زمان اجرا می تواند سریال سازی شود (احتمالاً با کمک Autograph ).

در حال حاضر ، TensorFlow به طور کامل از سریال سازی و دلخواه کردن TensorFlow در حالت اشتیاق پشتیبانی نمی کند. بنابراین ، سریال سازی در TFF در حال حاضر از الگوی TF 1.0 پیروی می کند ، جایی که همه کد باید در داخل tf.Graph که TFF کنترل می کند. این بدان معنی است که در حال حاضر TFF نمی تواند یک مدل از قبل ساخته شده را مصرف کند. در عوض ، منطق تعریف مدل در یک تابع بدون arg بسته بندی می شود که یک tff.learning.Model برمی گرداند. سپس این تابع توسط TFF فراخوانی می شود تا اطمینان حاصل شود که همه اجزای مدل به صورت سریال ساخته شده اند. علاوه بر این ، TFF به عنوان یک محیط کاملاً تایپ شده به کمی فراداده اضافی مانند مشخصات نوع ورودی مدل شما نیز احتیاج دارد.

تجمع

ما اکیداً به کاربران توصیه می کنیم که مدلهای خود را با استفاده از Keras بسازند ، به قسمت مبدلها برای Keras در زیر مراجعه کنید. این بسته بندی ها تجمع به روزرسانی های مدل و همچنین معیارهای تعریف شده برای مدل را به طور خودکار کنترل می کنند. با این حال ، ممکن است هنوز هم مفید باشد که چگونگی جمع بندی برای یک مدل کلی tff.learning.Model .

در یادگیری فدراسیون همیشه حداقل دو لایه تجمع وجود دارد: تجمع محلی روی دستگاه و تجمع بین دستگاهی (یا فدراسیون):

  • جمع محلی این سطح از تجمع به تجمع در چندین نمونه از نمونه های متعلق به مشتری خاص اشاره دارد. این مورد هم برای پارامترهای مدل (متغیرها) اعمال می شود ، که همزمان با آموزش مدل به صورت تکامل یافته ادامه می یابند و هم برای آماری که محاسبه می کنید (مانند از دست دادن متوسط ​​، دقت و سایر معیارها) ، که مدل شما دوباره به صورت محلی به روز می کند همانطور که در جریان داده های محلی هر مشتری تکرار می شود.

    انجام تجمع در این سطح به عهده کد مدل شماست و با استفاده از سازه های استاندارد TensorFlow انجام می شود.

    ساختار کلی پردازش به شرح زیر است:

    • این مدل ابتدا tf.Variable ها را برای نگهداری مصالح مانند تعداد دسته یا تعداد نمونه های پردازش شده ، مجموع تلفات هر دسته ای یا هر نمونه و غیره ایجاد می کند.

    • TFF چندین بار روش forward_pass روی Model شما فراخوانی می کند ، به ترتیب در مورد داده های بعدی مشتری ، که به شما امکان می دهد متغیرهای جمع شده مختلف را به عنوان یک اثر جانبی به روز کنید.

    • سرانجام ، TFF روش report_local_outputs در مدل شما فراخوانی می کند تا به مدل شما اجازه دهد تمام آمار خلاصه ای را که جمع آوری کرده در یک مجموعه فشرده از معیارها برای صادرات توسط مشتری جمع آوری کند. این جایی است که کد مدل شما ممکن است ، به عنوان مثال ، مجموع ضرر و زیان را بر تعداد نمونه های پردازش شده برای صادرات متوسط ​​ضرر و غیره تقسیم کند.

  • جمع فدراسیون این سطح از تجمع به تجمع در چندین مشتری (دستگاه) در سیستم اشاره دارد. باز هم ، این مورد هم به پارامترهای مدل (متغیرها) ، که به طور متوسط ​​در کل مشتری ها اعمال می شوند ، و هم به معیارهایی که مدل شما در نتیجه تجمع محلی صادر کرده است ، اعمال می شود.

    انجام تجمع در این سطح به عهده TFF است. به عنوان یک خالق مدل ، می توانید این روند را کنترل کنید (در این مورد بیشتر در زیر بخوانید).

    ساختار کلی پردازش به شرح زیر است:

    • مدل اولیه و هر پارامتر مورد نیاز برای آموزش توسط سرور به زیر مجموعه مشتری هایی که در دور آموزش یا ارزیابی شرکت می کنند توزیع می شود.

    • برای هر مشتری ، به طور مستقل و موازی ، کد مدل شما بارها و بارها روی جریانی از داده های محلی فراخوانی می شود تا مجموعه ای جدید از پارامترهای مدل (هنگام آموزش) و مجموعه جدیدی از معیارهای محلی ، همانطور که در بالا توضیح داده شده است ( تجمع).

    • TFF یک پروتکل تجمع توزیع شده را برای جمع آوری و جمع آوری پارامترهای مدل و معیارهای محلی صادر شده در سراسر سیستم اجرا می کند. این منطق با استفاده از زبان محاسبات فدراسیون شده TFF (نه در TensorFlow) ، در federated_output_computation. مدل ، به روشی اعلانی بیان می شود federated_output_computation. برای کسب اطلاعات بیشتر در مورد API تجمع ، به آموزش الگوریتم های سفارشی مراجعه کنید.

رابط های انتزاعی

این رابط سازنده + متاداده اصلی با رابط tff.learning.Model نشان داده شده است. tff.learning.Model ، به شرح زیر است:

  • روش سازنده ، forward_pass و گزارش report_local_outputs باید متغیرهای مدل ، انتقال به جلو و آماری را که می خواهید گزارش دهید ، به ترتیب report_local_outputs . همانطور که در بالا بحث شد ، TensorFlow ساخته شده توسط آن روش ها باید سریال سازی شود.

  • ویژگی input_spec و همچنین 3 ویژگی که زیر مجموعه متغیرهای قابل آموزش ، غیرقابل آموزش و محلی شما را برمی گردانند ، فراداده را نشان می دهند. TFF از این اطلاعات برای تعیین چگونگی اتصال قسمتهایی از مدل شما به الگوریتمهای بهینه سازی فدرال و تعریف امضاهای نوع داخلی برای کمک به تأیید صحت سیستم ساخته شده استفاده می کند (به طوری که نمی توان مدل شما را روی داده هایی که با آنچه مطابقت ندارد ، مثال زد) مدل برای مصرف طراحی شده است).

علاوه بر این ، رابط انتزاعی tff.learning.Model یک ویژگی federated_output_computation را افشا می کند که همراه با ویژگی report_local_outputs که قبلاً ذکر شد ، به شما امکان می دهد روند تجمیع آمار خلاصه را کنترل کنید.

شما می توانید نمونه هایی از نحوه تعریف tff.learning.Model سفارشی خود را در قسمت دوم آموزش طبقه بندی تصویر و همچنین در نمونه های نمونه ای که برای آزمایش در model_examples.py استفاده می کنیم ، model_examples.py .

مبدل های Keras

تقریبا تمام اطلاعاتی که توسط TFF مورد نیاز می تواند با تماس مشتق شده tf.keras رابط، بنابراین اگر شما یک مدل Keras، شما می توانید بر روی تکیه tff.learning.from_keras_model برای ساخت یک tff.learning.Model .

توجه داشته باشید که TFF همچنان از شما می خواهد یک سازنده ارائه دهید - یک تابع مدل بدون استدلال مانند موارد زیر:

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

علاوه بر خود مدل ، شما یک نمونه داده را تهیه می کنید که TFF برای تعیین نوع و شکل ورودی مدل شما استفاده می کند. این اطمینان می دهد که TFF می تواند به درستی مدل داده هایی را که واقعاً در دستگاههای مشتری وجود دارد ، نمونه سازی کند (از آنجا که ما تصور می کنیم این داده ها در زمان ساخت TensorFlow برای سریال سازی به طور کلی در دسترس نیستند).

استفاده از کاغذهای Keras در آموزش طبقه بندی تصویر و تولید متن نشان داده شده است.

سازندگان فدراسیون محاسبات

بسته tff.learning چندین سازنده برای tff.Computation ها ارائه می دهد که کارهای مربوط به یادگیری را انجام می دهند. ما انتظار داریم مجموعه این محاسبات در آینده گسترش یابد.

مفروضات معماری

اجرا

در اجرای محاسبات فدراسیون دو مرحله مشخص وجود دارد.

  • کامپایل: TFF اول کامپایل الگوریتم های یادگیری فدرال را به یک نمایندگی سریال انتزاعی از کل توزیع محاسبات. این زمانی است که سریال سازی TensorFlow اتفاق می افتد ، اما تغییرات دیگری نیز برای پشتیبانی از اجرای کارآمدتر ممکن است رخ دهد. ما به نمایش سریال ارائه شده توسط کامپایلر به عنوان یک محاسبه فدراسیون اشاره می کنیم .

  • اجرای TFF روشهای اجرای این محاسبات را فراهم می کند. در حال حاضر ، اجرا فقط از طریق یک شبیه سازی محلی (به عنوان مثال ، در یک دفترچه یادداشت با استفاده از داده های غیرمتمرکز شبیه سازی شده) پشتیبانی می شود.

یک محاسبه فدراسیون تولید شده توسط APF یادگیری فدرال TFF ، مانند الگوریتم آموزشی که از میانگین مدل فدرال یا ارزیابی فدراسیون استفاده می کند ، شامل تعدادی عنصر است ، به طور عمده:

  • فرم سریال کد مدل شما و همچنین کد اضافی TensorFlow ساخته شده توسط چارچوب آموزش فدراسیون برای هدایت حلقه آموزش / ارزیابی مدل شما (مانند ساخت بهینه سازها ، استفاده از به روزرسانی های مدل ، تکرار ازtf.data.Dataset s و معیارهای محاسبات ، و استفاده از به روزرسانی جمع شده بر روی سرور ، نام چند مورد).

  • مشخصات اعلامی ارتباط بین مشتری و سرور (به طور معمول انواع مختلف تجمیع در دستگاه های مشتری ، و پخش از سرور به همه کلاینت ها) ، و نحوه ارتباط این ارتباط توزیع شده با اجرای محلی-مشتری یا محلی-سرور از کد TensorFlow.

محاسبات فدرال ارائه شده در این فرم سریال با یک زبان داخلی مستقل از پلت فرم متمایز از پایتون بیان می شود ، اما برای استفاده از API یادگیری فدراسیون ، نیازی نیست که خود را با جزئیات این نمایش نگران کنید. محاسبات در کد پایتون شما به عنوان اشیا of از نوع tff.Computation . tff.Computation ، که در اکثر موارد شما می توانید به عنوان tff.Computation Python callable tff.Computation رفتار کنید.

در این آموزش ها ، شما محاسبات فدراسیون شده را به عنوان عملکردهای منظم پایتون فراخوانی می کنید تا به صورت محلی اجرا شوند. با این حال ، TFF برای بیان محاسبات فدرال به گونه ای تجزیه و تحلیل شده است که برای اکثر جنبه های محیط اجرا ، به طوری که به طور بالقوه می توانند در گروه های دستگاهی که از Android یا در خوشه های یک مرکز داده ، قابل استفاده باشند. باز هم ، نتیجه اصلی این فرضیه های قوی در مورد سریال سازی است . به طور خاص ، وقتی یکی از روش های build_... که در زیر شرح داده شده استناد می کنید ، کاملاً سریال سازی شده است.

حالت مدل سازی

TFF یک محیط برنامه نویسی کاربردی است ، با این حال بسیاری از فرآیندهای مورد علاقه در یادگیری فدراسیون دارای برنامه ریزی هستند. به عنوان مثال ، یک حلقه آموزشی که شامل چندین دور به طور متوسط ​​مدل فدرال است ، نمونه ای از مواردی است که می توانیم آن را به عنوان یک فرایند مناسب طبقه بندی کنیم. در این فرآیند ، حالتی که از دور به دور دیگر تکامل می یابد شامل مجموعه ای از پارامترهای مدل مورد آموزش است و احتمالاً حالت اضافی مرتبط با بهینه ساز (به عنوان مثال ، بردار حرکت).

از آنجا که TFF عملکردی است ، فرایندهای حالتدار در TFF به عنوان محاسباتی مدل می شوند که وضعیت فعلی را به عنوان ورودی پذیرفته و سپس حالت به روز شده را به عنوان یک خروجی ارائه می دهند. برای تعریف کامل فرآیند حالت ، باید مشخص شود که حالت اولیه از کجا ناشی می شود (در غیر این صورت نمی توانیم فرآیند را بوت استرپ کنیم). این است که در تعریف کلاس کمکی دستگیر tff.templates.IterativeProcess ، با 2 خواص initialize و next مربوط به مقدار دهی اولیه و تکرار بود.

سازندگان موجود

در حال حاضر ، TFF دو عملکرد سازنده فراهم می کند که محاسبات فدراسیون را برای آموزش فدراسیون و ارزیابی تولید می کند:

مجموعه داده ها

مفروضات معماری

انتخاب مشتری

در سناریوی یادگیری فدراسیون معمولی ، ما جمعیت بالایی از صدها میلیون دستگاه مشتری داریم که فقط بخش کوچکی از آنها ممکن است فعال و در هر لحظه برای آموزش در دسترس باشند (به عنوان مثال ، این ممکن است به مشتریانی که محدود هستند) به منبع تغذیه وصل شوید ، نه در یک شبکه اندازه گیری شده ، و در غیر این صورت بیکار است). به طور کلی ، مجموعه مشتریان موجود برای شرکت در آموزش یا ارزیابی از کنترل توسعه دهنده خارج است. بعلاوه ، چون هماهنگی با میلیون ها مشتری غیرمعمول است ، یک دوره معمول آموزش یا ارزیابی فقط بخشی از مشتریان موجود را شامل می شود که ممکن است به صورت تصادفی نمونه گیری شود .

نتیجه کلیدی این امر این است که محاسبات فدرال ، با طراحی ، به روشی بیان می شود که از مجموعه دقیق شرکت کنندگان غافل باشد. تمام پردازش ها به صورت عملیات کل در یک گروه انتزاعی از مشتری های گمنام بیان می شود و این گروه ممکن است از یک دوره آموزش به دوره دیگر متفاوت باشد. اتصال واقعی محاسبات به شرکت کنندگان بتن و در نتیجه داده های بتنی که آنها در محاسبه تغذیه می کنند ، بنابراین خارج از محاسبات خود مدل سازی می شود.

به منظور شبیه سازی استقرار واقع گرایانه کد یادگیری فدرال خود ، به طور کلی یک حلقه آموزشی را به صورت زیر می نویسید:

trainer = tff.learning.build_federated_averaging_process(...)
state = trainer.initialize()
federated_training_data = ...

def sample(federate_data):
  return ...

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

به منظور تسهیل این امر ، هنگام استفاده از TFF در شبیه سازی ، داده های فدرال به عنوان list پایتون پذیرفته می شوند ، با یک عنصر در هر دستگاه مشتری شرکت کننده ،tf.data.Dataset محلی آن دستگاه را نشان می دهد.

رابط های انتزاعی

به منظور استاندارد كردن معاملات با مجموعه داده های فدرال شبیه سازی شده ، TFF رابط انتزاعی tff.simulation.datasets.ClientData فراهم می tff.simulation.datasets.ClientData ، كه به شما اجازه می دهد مجموعه مشتری ها را برشمرده وtf.data.Dataset كه حاوی داده های خاص است مشتری. اینtf.data.Dataset می توان مستقیماً به عنوان ورودی به محاسبات فدرال تولید شده در حالت اشتیاق تغذیه کرد.

لازم به ذکر است که توانایی دسترسی به هویت های مشتری ویژگی است که فقط توسط مجموعه داده ها برای استفاده در شبیه سازی فراهم می شود ، جایی که ممکن است به توانایی آموزش داده ها از زیر مجموعه های خاص مشتری نیاز باشد (به عنوان مثال برای شبیه سازی موجودیت روزانه مختلف انواع مشتری ها). محاسبات وارد شده و زمان اجرای اساسی هیچ مفهومی از هویت مشتری را شامل نمی شود. هنگامی که داده ها از زیر مجموعه خاصی از کلاینت ها به عنوان ورودی انتخاب شد ، به عنوان مثال ، در تماس با tff.templates.IterativeProcess.next ، هویت های مشتری دیگر در آن ظاهر نمی شوند.

مجموعه داده های موجود

ما برای مجموعه های داده ای که رابط tff.simulation.datasets.ClientData را پیاده سازی می کند ، فضای نام tff.simulation.datasets برای استفاده در شبیه سازی ها اختصاص داده ایم و برای پشتیبانی از طبقه بندی تصویر و آموزش تولید متن ، آن را با 2 مجموعه داده قرار داده ایم. ما می خواهیم شما را تشویق کنیم که مجموعه داده های خود را به سیستم عامل کمک کنید.