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 با سرویسدهندهها و لودرها بهعنوان اجسام غیر شفاف رفتار میکند.
زندگی یک خدمتگزار
به طور کلی:
- منابع برای نسخه های قابل سرویس دهی Loader ایجاد می کنند.
- لودرها به عنوان نسخه های آرزو شده برای مدیر ارسال می شوند، که آنها را بارگیری می کند و به درخواست های مشتری ارائه می کند.
با جزئیات بیشتر:
- یک افزونه Source یک Loader برای یک نسخه خاص ایجاد می کند. Loader حاوی هر ابرداده ای است که برای بارگذاری Servable نیاز دارد.
- منبع از یک تماس برگشتی برای اطلاع دادن به مدیر نسخه Aspired استفاده می کند.
- مدیر خطمشی نسخه پیکربندیشده را برای تعیین اقدام بعدی اعمال میکند، که میتواند بارگیری نسخه بارگیریشده قبلی یا بارگیری نسخه جدید باشد.
- اگر مدیر تشخیص دهد که ایمن است، منابع مورد نیاز را به Loader می دهد و به Loader می گوید که نسخه جدید را بارگذاری کند.
- کلاینتها از مدیر درخواست سرویسدهی میکنند، یا به طور صریح یک نسخه را مشخص میکنند یا فقط آخرین نسخه را درخواست میکنند. Manager یک دسته برای Servable برمی گرداند.
به عنوان مثال، فرض کنید منبع یک نمودار TensorFlow را با وزن های مدل اغلب به روز می کند. وزن ها در یک فایل روی دیسک ذخیره می شوند.
- منبع نسخه جدیدی از وزن مدل را شناسایی می کند. یک Loader ایجاد می کند که حاوی یک اشاره گر به داده های مدل روی دیسک است.
- منبع به مدیر پویا نسخه Aspired اطلاع می دهد.
- مدیر پویا سیاست نسخه را اعمال می کند و تصمیم می گیرد نسخه جدید را بارگیری کند.
- مدیر پویا به لودر می گوید که حافظه کافی وجود دارد. Loader نمودار TensorFlow را با وزن های جدید نمونه سازی می کند.
- یک کلاینت یک دسته را برای آخرین نسخه مدل درخواست می کند، و Dynamic Manager یک دسته را به نسخه جدید Servable برمی گرداند.
توسعه پذیری
سرویس TensorFlow چندین نقطه توسعه را فراهم می کند که می توانید عملکردهای جدیدی را اضافه کنید.
سیاست نسخه
خطمشیهای نسخه توالی بارگیری و تخلیه نسخه را در یک جریان قابل ارائه مشخص میکند.
سرویس TensorFlow شامل دو خط مشی است که اکثر موارد استفاده شناخته شده را در بر می گیرد. اینها عبارتند از خطمشی حفظ در دسترس بودن (از بارگذاری نسخههای صفر خودداری کنید؛ معمولاً یک نسخه جدید را قبل از بارگیری نسخه قدیمی بارگیری کنید) و خطمشی حفظ منابع (از بارگیری همزمان دو نسخه اجتناب کنید، بنابراین نیاز به منابع دو برابری دارید؛ یک نسخه قدیمی را قبل از بارگیری بارگیری کنید. یک دانه جدید). برای استفاده ساده از سرویس TensorFlow در جایی که در دسترس بودن سرویس یک مدل مهم است و هزینه منابع کم است، خط مشی حفظ در دسترس بودن اطمینان حاصل می کند که نسخه جدید قبل از بارگیری نسخه قدیمی بارگیری و آماده است. برای استفاده پیچیده از سرویس TensorFlow، برای مثال مدیریت نسخهها در چندین نمونه سرور، سیاست حفظ منابع به کمترین منابع نیاز دارد (بدون بافر اضافی برای بارگیری نسخههای جدید).
منبع
منابع جدید می توانند از سیستم های فایل جدید، پیشنهادات ابری و پشتیبان های الگوریتم پشتیبانی کنند. سرویس TensorFlow برخی از بلوکهای ساختمانی رایج را برای ایجاد آسان و سریع منابع جدید فراهم میکند. به عنوان مثال، سرویس TensorFlow شامل ابزاری برای قرار دادن رفتار نظرسنجی در اطراف یک منبع ساده است. منابع ارتباط نزدیکی با Loader برای الگوریتمهای خاص و سرویسهای میزبان داده دارند.
برای اطلاعات بیشتر در مورد نحوه ایجاد یک منبع سفارشی، به سند منبع سفارشی مراجعه کنید.
لودرها
لودرها نقطه توسعه برای اضافه کردن الگوریتم ها و باطن داده ها هستند. TensorFlow یکی از این الگوریتم های پشتیبان است. برای مثال، شما میتوانید یک Loader جدید را برای بارگیری، دسترسی به و تخلیه نمونهای از نوع جدیدی از مدل یادگیری ماشینی قابل سرویسدهی پیادهسازی کنید. ما پیشبینی میکنیم که Loader برای جداول جستجو و الگوریتمهای اضافی ایجاد کنیم.
برای یادگیری نحوه ایجاد یک سرویس دهی سفارشی، به سند Custom Servable مراجعه کنید.
بچر
دستهبندی چندین درخواست در یک درخواست میتواند هزینه انجام استنتاج را بهویژه در حضور شتابدهندههای سختافزاری مانند پردازندههای گرافیکی به میزان قابل توجهی کاهش دهد. TensorFlow Serving شامل یک ویجت دستهبندی درخواست است که به مشتریان اجازه میدهد به راحتی استنتاجهای نوع خاص خود را در بین درخواستها به درخواستهای دستهای دستهبندی کنند که سیستمهای الگوریتمی میتوانند به طور مؤثرتری آنها را پردازش کنند. برای اطلاعات بیشتر به راهنمای بچینگ مراجعه کنید.