معماری

TensorFlow Serving یک سیستم خدمت رسانی انعطاف پذیر و با کارایی بالا برای مدل های یادگیری ماشین است که برای محیط های تولید طراحی شده است. TensorFlow Serving اجرای الگوریتم‌ها و آزمایش‌های جدید را آسان می‌کند، در حالی که همان معماری سرور و APIها را حفظ می‌کند. سرویس TensorFlow یکپارچه سازی خارج از جعبه را با مدل های TensorFlow فراهم می کند، اما می تواند به راحتی برای ارائه انواع مدل های دیگر گسترش یابد.

مفاهیم کلیدی

برای درک معماری TensorFlow Serving، باید مفاهیم کلیدی زیر را درک کنید:

قابل خدمت

Servable ها انتزاع مرکزی در سرویس TensorFlow هستند. Servable ها اشیاء اساسی هستند که مشتریان برای انجام محاسبات از آنها استفاده می کنند (به عنوان مثال، جستجو یا استنتاج).

اندازه و دانه بندی یک Servable انعطاف پذیر است. یک Servable منفرد ممکن است شامل هر چیزی باشد، از یک تکه جدول جستجو گرفته تا یک مدل واحد تا چندین مدل استنتاج. Servable ها می توانند از هر نوع و رابطی باشند که انعطاف پذیری و پیشرفت های آینده را ممکن می سازد مانند:

  • نتایج جریان
  • APIهای آزمایشی
  • حالت های ناهمزمان عملکرد

Servable ها چرخه زندگی خود را مدیریت نمی کنند.

سرویس پذیرهای معمولی شامل موارد زیر است:

  • یک TensorFlow SavedModelBundle ( tensorflow::Session )
  • یک جدول جستجو برای جاسازی یا جستجوی واژگان

نسخه های قابل سرویس دهی

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

جریان های قابل سرویس دهی

یک جریان قابل ارائه ، دنباله ای از نسخه های یک سرویس پذیر است که با افزایش تعداد نسخه ها مرتب شده اند.

مدل ها

TensorFlow Serving یک مدل را به عنوان یک یا چند سرویس پذیر نشان می دهد. یک مدل یادگیری ماشینی ممکن است شامل یک یا چند الگوریتم (از جمله وزن های آموخته شده) و جداول جستجو یا جاسازی باشد.

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

  • چندین سرویس مستقل
  • تک کامپوزیت قابل خدمت رسانی

یک سرویس پذیر نیز ممکن است با کسری از یک مدل مطابقت داشته باشد. برای مثال، یک جدول جستجوی بزرگ می‌تواند در بسیاری از نمونه‌های سرویس TensorFlow تقسیم شود.

لودرها

لودرها چرخه عمر قابل سرویس دهی را مدیریت می کنند. Loader API زیرساخت مشترک را مستقل از الگوریتم‌های یادگیری خاص، داده‌ها یا موارد استفاده محصول فعال می‌کند. به طور خاص، Loader ها API ها را برای بارگیری و تخلیه یک سرویس پذیر استاندارد می کنند.

منابع

منابع ماژول های افزونه ای هستند که سرویس پذیرها را پیدا کرده و ارائه می کنند. هر منبع صفر یا بیشتر جریان قابل سرویس دهی را ارائه می دهد. برای هر جریان قابل سرویس دهی، یک منبع یک نمونه لودر را برای هر نسخه ای که برای بارگذاری در دسترس قرار می دهد، ارائه می کند. (یک منبع در واقع با صفر یا چند منبع آداپتور به هم متصل می شود و آخرین مورد در زنجیره بارگذارها را منتشر می کند.)

رابط TensorFlow Serving برای Sources می تواند سرویس پذیرها را از سیستم های ذخیره سازی دلخواه کشف کند. سرویس TensorFlow شامل پیاده سازی های مرجع مرجع مشترک است. به عنوان مثال، Sources ممکن است به مکانیسم هایی مانند RPC دسترسی داشته باشد و بتواند یک سیستم فایل را نظرسنجی کند.

منابع می توانند حالتی را حفظ کنند که در چندین سرویس یا نسخه به اشتراک گذاشته شده است. این برای سرویس‌هایی که از به‌روزرسانی دلتا (تفاوت) بین نسخه‌ها استفاده می‌کنند مفید است.

نسخه های آرزو شده

نسخه‌های Aspired مجموعه‌ای از نسخه‌های قابل استفاده را نشان می‌دهند که باید بارگذاری و آماده باشند. منابع این مجموعه از نسخه‌های قابل سرویس‌دهی را برای یک جریان قابل سرویس در یک زمان ارتباط برقرار می‌کنند. هنگامی که یک منبع لیست جدیدی از نسخه‌های مورد نظر را به مدیر می‌دهد، از فهرست قبلی برای آن جریان قابل ارائه جایگزین می‌شود. مدیر نسخه های بارگیری شده قبلی را که دیگر در لیست ظاهر نمی شوند، بارگیری می کند.

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

مدیران

مدیران چرخه کامل عمر Servables را مدیریت می کنند، از جمله:

  • بارگیری Servables
  • سرویس دهی
  • تخلیه Servables

مدیران به منابع گوش می دهند و همه نسخه ها را دنبال می کنند. مدیر تلاش می‌کند تا درخواست‌های Sources را برآورده کند، اما اگر مثلاً منابع مورد نیاز در دسترس نباشد، ممکن است از بارگیری نسخه مورد نظر خودداری کند. مدیران همچنین ممکن است "تخلیه بار" را به تعویق بیندازند. به عنوان مثال، مدیر ممکن است صبر کند تا بارگیری نسخه جدیدتر به پایان برسد، بر اساس سیاستی که تضمین می کند حداقل یک نسخه همیشه بارگیری می شود.

مدیران سرویس TensorFlow یک رابط ساده و باریک - GetServableHandle() - برای دسترسی مشتریان به نمونه های قابل سرویس دهی بارگذاری شده ارائه می کنند.

هسته

با استفاده از استاندارد TensorFlow Serving APis، TensorFlow Serving Core جنبه‌های زیر از سرویس‌پذیرها را مدیریت می‌کند:

  • چرخه زندگی
  • معیارهای

TensorFlow Serving Core با سرویس‌دهنده‌ها و لودرها به‌عنوان اجسام مات رفتار می‌کند.

زندگی یک خدمتگزار

نمودار معماری سرویس tf

به طور کلی:

  1. منابع برای نسخه های قابل سرویس دهی Loader ایجاد می کنند.
  2. لودرها به عنوان نسخه های آرزو شده برای مدیر ارسال می شوند که آنها را بارگیری می کند و به درخواست های مشتری ارائه می کند.

با جزئیات بیشتر:

  1. یک افزونه Source یک Loader برای یک نسخه خاص ایجاد می کند. Loader حاوی هر ابرداده ای است که برای بارگذاری Servable نیاز دارد.
  2. منبع از یک تماس برگشتی برای اطلاع دادن به مدیر نسخه Aspired استفاده می کند.
  3. مدیر خط‌مشی نسخه پیکربندی‌شده را برای تعیین اقدام بعدی اعمال می‌کند، که می‌تواند بارگیری نسخه بارگیری‌شده قبلی یا بارگیری نسخه جدید باشد.
  4. اگر مدیر تشخیص دهد که ایمن است، منابع مورد نیاز را به Loader می دهد و به Loader می گوید که نسخه جدید را بارگذاری کند.
  5. کلاینت‌ها از مدیر درخواست سرویس‌دهی می‌کنند، یا به طور صریح یک نسخه را مشخص می‌کنند یا فقط آخرین نسخه را درخواست می‌کنند. Manager یک دسته برای Servable برمی گرداند.

برای مثال، فرض کنید یک Source یک نمودار TensorFlow را با وزن‌های مدل اغلب به‌روزرسانی می‌کند. وزن ها در یک فایل روی دیسک ذخیره می شوند.

  1. منبع نسخه جدیدی از وزن مدل را شناسایی می کند. یک Loader ایجاد می کند که حاوی یک اشاره گر به داده های مدل روی دیسک است.
  2. منبع به مدیر پویا نسخه Aspired اطلاع می دهد.
  3. مدیر پویا سیاست نسخه را اعمال می کند و تصمیم می گیرد نسخه جدید را بارگیری کند.
  4. مدیر پویا به لودر می گوید که حافظه کافی وجود دارد. Loader نمودار TensorFlow را با وزن های جدید نمونه سازی می کند.
  5. یک کلاینت یک دسته را برای آخرین نسخه مدل درخواست می کند و مدیر پویا یک دسته را به نسخه جدید Servable برمی گرداند.

توسعه پذیری

سرویس TensorFlow چندین نقطه افزونه را فراهم می کند که می توانید عملکردهای جدیدی را اضافه کنید.

سیاست نسخه

خط‌مشی‌های نسخه توالی بارگیری و تخلیه نسخه را در یک جریان قابل ارائه مشخص می‌کند.

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

منبع

منابع جدید می توانند از سیستم های فایل جدید، پیشنهادات ابری و پشتیبان های الگوریتم پشتیبانی کنند. سرویس TensorFlow برخی از بلوک‌های ساختمانی رایج را برای ایجاد آسان و سریع منابع جدید فراهم می‌کند. به عنوان مثال، سرویس TensorFlow شامل ابزاری برای قرار دادن رفتار نظرسنجی در اطراف یک منبع ساده است. منابع ارتباط نزدیکی با Loader برای الگوریتم های خاص و سرویس های میزبان داده دارند.

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

لودرها

لودرها نقطه توسعه برای اضافه کردن الگوریتم و داده های پشتیبان هستند. TensorFlow یکی از این الگوریتم های پشتیبان است. به عنوان مثال، شما می‌توانید یک Loader جدید را برای بارگیری، دسترسی به و تخلیه نمونه‌ای از نوع جدیدی از مدل یادگیری ماشینی قابل سرویس‌دهی پیاده‌سازی کنید. ما پیش‌بینی می‌کنیم که Loader برای جداول جستجو و الگوریتم‌های اضافی ایجاد کنیم.

برای یادگیری نحوه ایجاد یک سرویس دهی سفارشی، به سند Custom Servable مراجعه کنید.

بچر

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