#تجربه
ی trick بگم، شاید به کار شما هم بیاد.
معمولاً واسه این مشاورهها پول خوبی میگیرم
توی همه پروژههای متنی دیگه شاهد استفاده از
Embedding
ها هستیم و خیلی وقتا توی بیزینس خاص خودمون ممکنه از یک
Embedding
برای چندین مدل و تسک استفاده بشه.
اما ۳ تا مشکل اصلی داریم (همه بچههایی که deploy زدند میدونند) :
1- Embedding Size
هرچی بزرگتر باشه Ram بیشتری لازم داره به
2- Warmup time
امبدینگ هرچی بزرگتر، لود شدنش توی ram کندتر و بدتر از همه زمان پاسخ طولانی تر
3- Embedding sharing
اگر یک embedding خاص برای بیزینس استفاده میشه چرا باید روی هر docker - instance یا server بصورت جدا قرار بگیره ؟
فرض کنید ی embedding داریم که 10GB ram لازم داره و 10 تا مدل مختلف که docker میشه روی سرور های پردازشی متفاوت
مجموعا شما فقط 100GB رم لازم دارید و پول دارید میدید برای Ram تا یک دیتای تکراری رو نگهداری کنید، روی سرویس cloud وقتی رو سرور پردازی Ram بالا میره باقی سختافزار هم باید گزینه بهتری انتخاب بشه و همین یعنی هزینه سرسامآور
شرکتی این ۳ روز داشتم بهش کمک میکردم مشکلی با پرداخت پول برای سرور نداشت (حداقل اینطوری فکر میکرد که این یک هزینه اجتناب ناپذیر هست) بیش از 120 تا سرویس خاص داره طبق چیزی که متوجه شدم و ...
اما اصلی ترین مشکلشون با warmup time بود، اکثر سرویسها سبک هستند و api دارند که دائمی استفاده میشه برای همین سرور پردازشی دائم روشن هست اما چندتا سرویس جدید دارند که هزینه روشن نگه داشتن سرور خیلی زیاده مخصوصاً اینکه نهایتاً روزی ۱ بار برای چند مشتری خاص روشن میشه و اونا درخواستها رو بصورت batch میفرستند و خروجی میگیرند. باقی روز سرور میتونه خاموش باشه.
warmup time
بخاطر embedding های چندزبانه یا ... چیزی که بمن گفته شد warmup time روی 40 دقیقه بوده میانگین و دنبال optimization تا حدود 15 دقیقه بودند.
بنظرتون راهکار چیه !؟
System Design
و سواد طراحی سیستم واقعاً اینجا بکار میاد.
بجای load کردن embedding روی هر سرور بصورت جدا یک سرور سبک گرفتیم با رم کافی، همهی سرورها رو در خواست دادیم توی یک location و حتیالامکان توی یک rack سرور باشند
روی سرور جدید فقط Redis نصب کردم و word - embedding شدند key-value های سرور مشکلات حل شد منم دستمزد + ی درصد اضافی برای راه حل ارزون و سریع گرفتم
حالا warmup time یا load time به حدود 5 دقیقه رسیده برای مدلهای کوچکتر و سرویسهای قدیمی هم همین کار رو کردند و اونا رو هم دارند به سرویسهایی با قابلیت shutdown شدن در صورت عدم استفاده تبدیل میکنند که فکر میکنم برای اونها زیر 1 دقیقه باشه
این زمان قابل قبول هست چون Batch process داده ارسال میشه و نیازی به realtime بودن نیست همین که کاربر حوصلهاش سر نره - یا روز کاری تموم نشه کفایت میکنه.
>>Click here to continue<<