ساخت یک سیستم عامل برای AI سیستم عامل در لپ تاپ شماReviewed by mjs on Nov 13Rating: 4.5ساخت یک سیستم عامل برای AI سیستم عامل در لپ تاپ شماساخت یک سیستم عامل برای AI سیستم عامل در لپ تاپ شماساخت یک سیستم عامل برای AI سیستم عامل در لپ تاپ شما
ساخت یک سیستم عامل برای AI سیستم عامل در لپ تاپ شما

ساخت یک سیستم عامل برای AI سیستم عامل در لپ تاپ شما

ساخت یک سیستم عامل برای AI
سیستم عامل در لپ تاپ شما، ده ها یا صدها فرآیند همزمان اجرا می شود. هر پردازش فقط مقدار مناسبی از منابع مورد نیاز را (RAM، CPU، IO) می دهد. آنها آنها را در فضای آدرس مجازی خود جدا می کنند، آنها را به مجموعه ای از مجوز های از پیش تعیین شده جدا می کند، به آنها اجازه می دهد تا ارتباط برقرار کنند و به شما اجازه می دهند تا کاربر را به راحتی آنها را نظارت و کنترل کنید. سیستم عامل خلاصه کردن لایه سخت افزاری (نوشتن به درایو فلش همانند نوشتن روی هارد دیسک است) و لازم نیست که چه زبان برنامه نویسی یا فناوری پشته شما مورد استفاده قرار گیرد برای نوشتن آن برنامه ها – فقط آنها را اجرا می کند، هموار و همواره.
همانطور که یادگیری ماشین در داخل این شرکت نفوذ می کند، شرکت ها به زودی خود را تولید مدل های بیشتر و بیشتر و در یک کلیپ سریع. بازدهی بازاریابی، مقیاس منابع، نظارت و حسابرسی شروع خواهد شد سخت تر و گران تر برای حفظ در طول زمان. دانشمندان داده از گوشه های مختلف شرکت هر کدام دارای مجموعه ای از پشته های مورد نظر خود هستند (R، Python، Julia، Tensorflow، Caffe، deeplearning4j، H2O، و غیره) و استراتژی های مرکز داده از یک ابر به هیبرید تغییر خواهد کرد. در حال اجرا، مقیاس بندی و نظارت بر مدل های ناهمگن در یک روش ابرآگنوستیک، مسئولیت مشابهی با سیستم عامل است – این چیزی است که ما می خواهیم در مورد آن صحبت کنیم.
در Algorithmia.com، ما 3500+ الگوریتم را اجرا می کنیم (هر کدام دارای نسخه های چندگانه هستند، رقم را تا 40K + نقطه های REST API منحصر به فرد). هر نقطه پایانی API می تواند از یک بار در روز به یک حادثه ای 1000+ بار در ثانیه، با یک تجربه کاملا بدون مربی، نامگذاری شود. این الگوریتم ها در هر یک از هشت زبان برنامه نویسی که امروزه پشتیبانی می شود، می توانند بر اساس پردازنده یا GPU باشند، بر روی هر ابر اجرا می شوند، می توانند به هر منبع داده (S3، Dropbox، و غیره) خواندن و نوشتن را انجام دهند و با تأخیر ~ 15ms بر روی سخت افزار استاندارد.
Algorithmia.com را به عنوان نسخه ما از یک سیستم عامل برای AI می بینیم و این پست برخی از اندیشه های ما را به اشتراک می گذارد.
محتوا
آموزش در مقابل استنتاج
Serverless FTW
هسته ها و پوسته ها
هسته شماره 1 مقیاس الاستیک
هسته # 2 انتزاع زمان اجرا
هسته # 3 انتزاع ابر
خلاصه
آموزش در مقابل استنتاج
ماشین و یادگیری عمیق از دو مرحله متمایز تشکیل شده است: آموزش و استنتاج. سابق در مورد ساخت مدل است، و دوم آن است که در حال اجرا در تولید است.
آموزش یک مدل یک فرآیند تکراری است که بسیار وابسته به چارچوب است. بعضی از مهندسان دروس ماشین از Tensorflow در GPU ها استفاده می کنند، دیگران از scikit-learn بر روی CPU ها استفاده می کنند و هر محیط آموزشی یک برف ریزه است. این مشابه ساخت یک برنامه است، در حالیکه یک توسعه دهنده برنامه یک ابزار و کتابخانه های توسعه یافته را با دقت جمع می کند و دائما کامپایل و تست کردن کد خود را می کند. آموزش نیاز به یک چرخه محاسبه طولانی (ساعت ها تا روز) است، معمولا ورودی بار ثابت است (بدین معنی است که شما نیازی به مقیاس را از یک ماشین به دستگاه های X در پاسخ به یک ماشه)، و ایده آل یک فرآیند متناوب است که دانشمند داده نیازمند بارگیری در پیشرفت آموزش های خود مانند بازرسی های شبکه عصبی هستند.
از سوی دیگر، استنتاج این است که این مدل را در مقیاس به چند کاربر اجرا کند. هنگام اجرای چندین مدل همزمان، هر کدام در چارچوب ها و زبان های مختلف نوشته می شوند، زمانی که آن را به یک سیستم عامل تقسیم می شود. سیستم عامل مسئول برنامه ریزی شغل، به اشتراک گذاری منابع و نظارت بر آن مشاغل خواهد بود. “شغل” یک معامله استنباط است و بر خلاف در مورد آموزش، نیاز به یک سیکل طولانی از چرخه محاسبات (مشابه با پرس و جو SQL)، بار الاستیک (ماشین آلات نیاز به افزایش / کاهش نسبت به تقاضای استنتاج)، و بی خانمان، که در آن نتیجه یک معامله قبلی بر نتیجه معامله بعدی تاثیر نمی گذارد.
ما با توجه به معادله استنتاج تمرکز خواهیم کرد.
Serverless FTW
ما برای سیستم عامل ما از محاسبات serverless استفاده خواهیم کرد، بنابراین بگذارید یک لحظه توضیح دهیم که چرا معماری serverless برای نتیجه گیری AI منطقی است.
همانطور که در بخش قبلی توضیح داده شد، استنتاج یادگیری ماشین نیاز به یک انفجار محاسبه کوتاه دارد. این به این معنی سرور است که در خدمت یک مدل به عنوان یک API REST بیکار خواهد بود. وقتی یک درخواست دریافت می کنید، می گویند، برای طبقه بندی یک تصویر، آن را برای مدت زمان کوتاهی از CPU / GPU پشت سر می گذارد، نتیجه را برمی گرداند، و سپس به حالت خاموش شدن ادامه می دهد. این فرایند مشابه یک سرور پایگاه داده است که بیکار است تا یک درخواست SQL دریافت کند.
از آنجا که این نیاز، استنتاج AI مناسب مناسب برای محاسبات سرور است. معماری Serverless دارای مزیت قابل توجهی در مقیاس و مزیت اقتصادی است. به عنوان مثال، بگذارید بگوییم شما برنامه ای با نام SeeFood ایجاد کرده اید که تصاویر را به عنوان Hotdog و Not Hotdog طبقه بندی می کند. برنامه شما می رود ویروسی و در حال حاضر در نمودار بالا است. در اینجا نحوه استفاده از برنامه روزانه شما به نظر می رسد.
“SeeFood” استفاده روزانه برنامه. این بسیار محبوب است در طول زمان ناهار.
محور Y است “تماس در ثانیه”. محور X “ساعت روز است”.
در این سناریوی تخیلی، اگر ما از معماری سنتی (مقیاس ثابت) استفاده می کردیم، ما می توانستیم 40 دستگاه در روز پرداخت کنیم. این منطقه در زیر سبز رنگ است. با قیمت گذاری استاندارد ابر، این ممکن است ما حدود $ 648 * 40 = $ 25،920 در هر ماه هزینه.
معماری سنتی – طراحی برای حداکثر
40 دستگاه 24 ساعته. $ 648 * 40 = $ 25920 در هر ماه
اگر در عوض از یک معماری خودکار پوسته پوسته استفاده کردیم (جایی که ما هر ساعت یک بار ماشین ها را اضافه یا حذف می کنیم)، ما به طور متوسط ​​19 ماشین در روز پرداخت می کنیم. این منطقه در زیر سبز رنگ است. این در مجموع $ 648 * 19 = $ 12،312 در هر ماه است.
و در نهایت، اگر ما از یک معماری serverless استفاده کنیم، ما (به لحاظ نظری) دقیقا مبلغی را که استفاده می کنیم، پرداخت می کنیم و نه برای زمان بیکاری. این همه منطقه آبی در نمودار زیر است. هزینه در این سناریوی تخیلی محاسبه پیچیده است – آن به طور متوسط ​​از 21 تماس / ثانیه یا معادل 6 ماشین پایین می آید. این 648 دلار * 6 = 8888 دلار در ماه است.
معماری Serverless – طراحی برای حداقل
میانگین از 21 تماس / ثانیه یا معادل 6 ماشین. $ 648 * 6 = $ 8888 در هر ماه
در این سناریو (داستانی)، هزینه پردازش ابری ما از $ 26k به $ 4k رسید. این دلیل خوبی برای استفاده از Computing Serverless است، علاوه بر مزایای دیگر مانند توسعه ساده (توابع به عنوان سرویس های اتمی)، زمان تاخیر پایین (زمانی که با محاسبات لبه استفاده می شود) و قابلیت چرخش نوردی استفاده می شود.
ساختن یک معماری سرور بدون نیاز به ابتکار، به ویژه با پیشرفت های Devops اخیر، کار بسیار دشوار نیست. پروژه هایی مانند Kubernetes و Docker به میزان قابل توجهی توزیع، مقیاس بندی و الزامات بهبودی را برای یک معماری تابع به عنوان یک سرویس ساده می کند.
مثال معماری FaaS
یک تماس API به یک سرور API هدایت می شود و سپس به یک ظرف Docker گرم می شود.
کانتینرها را بارگیری و اجرا می کند.
در این مرحله، ما برای یک معماری serverless، مشارکت می کنیم. ساخت این و توقف این معادل استفاده از AWS لامبدا است. با این حال برای اینکه سیستم ما برای گردش کارهای AI بیشتر ارزشمند باشد، ما نیاز به شرایط اضافی مانند مدیریت حافظه GPU، قابلیت ترکیب، ابطال ابری، ابزار دقیق و نسخه سازی را داریم تا چند نام را نام ببریم.
هر چیزی که ما در بالا از پلت فرم عملکرد ما به عنوان یک سرویس می سازیم چیزی است که واقعا سیستم عامل ما را تعریف می کند، و این چیزی است که ما در مورد آینده صحبت خواهیم کرد.
هسته ها و پوسته ها
همانطور که سیستم عامل از Kernel، Shell و Services تشکیل شده است، سیستم عامل ما نیز از این اجزا تشکیل شده است.
Shell بخشی است که کاربر با آن تعامل دارد، مانند وب سایت یا نقطه پایان API. خدمات اجزای قابل برنامه ریزی سیستم عامل ما، مانند احراز هویت و گزارش دهی هستند. آخرین لایه، هسته، چیزی است که واقعا سیستم عامل ما را تعریف می کند. این لایه ای است که ما برای بقیه پست ها تمرکز می کنیم.
هسته ما از سه جزء اصلی تشکیل شده است: مقیاس پذیری الاستیک، انتزاع زمان اجرا و انتزاع ابر. بیایید هر کدام از این اجزای را به طور کامل بررسی کنیم.
هسته # 1 هوشمند، مقیاس الاستیک
اگر ما می دانیم که الگوریتم #A همیشه الگوریتم #B را فراخوانی می کند، چگونه می توانیم از آن دانش به نفع ما استفاده کنیم؟ این بخشی هوشمندانه از تقاضا است.
Composability یک الگوی رایج در جهان از یادگیری ماشین و علوم داده است. خط لوله داده معمولا شامل مراحل قبل پردازش، پردازش و پس پردازش می باشد. در این مورد، خط لوله ترکیب توابع مختلفی است که خط لوله را تشکیل می دهند. ترکیب بندی نیز در مجموعه ها یافت می شود، جایی که دانشمند داده مدل را از طریق مدل های مختلف اجرا می کند و سپس نمره نهایی را به دست می آورد.
در اینجا یک مثال است: بگذارید بگوییم “SeeFood ما” یک عکس از میوه ها یا سبزیجات را می گیرد و سپس نام میوه یا سبزیجات را باز می گرداند. به جای ایجاد یک طبقهبندی تنها برای تمام غذاها و سبزیجات، شایع است که آن را به سه طبقه بندی تقسیم کنیم.
در این مورد، ما می دانیم که مدل در بالای صفحه (“طبقه بندی گیاهان یا گیاه”) همیشه “طبقه بندی میوه” یا “طبقه بندی گیاهی” را می نامد. چطور می توانیم از این به نفع ما استفاده کنیم؟ یکی از راه های این است که همه منابع را مورد استفاده قرار دهیم، پیگیری های مربوط به سطح پردازنده، سطح حافظه، و سطح IO هر مدل مصرف می شود. ارکستر ما میتواند برای استفاده از این اطلاعات هنگام جمع کردن این مشاغل، به نحوی که شبکه را کاهش دهد یا استفاده از سرور را افزایش دهد (مطابق مدلهای بیشتر در یک سرور تک).
هسته # 2 انتزاع زمان اجرا
مولفه دوم در هسته ما زمان انتزاع است. در جریان عملیات یادگیری ماشین و داده ها، شایع است که ما یک طبقه بندی با یک پشته خاص ایجاد می کنیم (مثلا R، Tensorflow over GPUs) و مدل پیش پردازش یا مجاور آن در یک پشته متفاوت اجرا می شود (شاید Python، scikit-learn over CPUs) .
سیستم عامل ما باید این جزئیات را دور انداخته و قابلیت همکاری بدون درز بین عملکردها و مدل ها را فعال کند. برای این منظور، از API های REST استفاده می کنیم و داده ها را با استفاده از JSON یا نمایندگی داده های جهانی برابر می کنیم. اگر داده ها بیش از حد بزرگ بودند، ما در اطراف URI به منبع داده ها به جای حقیقت JSON واقعی منتقل می کنیم.
هسته # 3 انتزاع ابر
این روزها ما انتظار نداریم که برنامه نویسان بتوانند به طور جدی به کار خود ادامه دهند. به همین ترتیب، ما دانشمندان داده ای را انتظار نداریم تا همه جزئیات پیچیده فروشندگان ابری را درک کنیم. برخورد با منابع داده های مختلف یک نمونه عالی از چنین انتزاعی است.
تصور کنید یک سناریو که دانشمند داده یک مدل را ایجاد می کند که تصاویر را طبقه بندی می کند. مصرف کنندگان این مدل ممکن است سه شخص مختلف باشند: الف) مهندسین تولید بطری ممکن است از S3 استفاده کنند؛ ب) دانشمندان داده های دیگر ممکن است از Hadoop استفاده کنند و (3) کاربران BI در یک org org ممکن است از Dropbox استفاده کنند. درخواست نویسنده آن مدل برای ساختن یک اتصال داده برای هر یک از این منابع (و حفظ آن برای منابع داده جدید در آینده)، منحرف کردن از کار آنها است. در عوض، سیستم عامل ما می تواند API آداپتور داده ای را ارائه دهد که از منابع داده های مختلف خواندن و نوشتن می کند.
در کد بالا دو مثال را نشان می دهد: خواندن اطلاعات بدون
انتزاع و خواندن داده ها با انتزاع.
در اولین بلوک، بدون انتزاع ذخیره سازی، ما نیاز به نوشتن یک اتصال برای هر منبع داده (در این مورد S3) و کد سخت آن را در مدل ما. در بلوک دوم، ما از API Adapter Data استفاده می کنیم که URI را به یک منبع داده منتقل می کند و به طور خودکار اتصال داده درست را تزریق می کند. این URI ها می توانند به S3، Azure Blob، HDFS، Dropbox یا هر چیز دیگری اشاره کنند.
خلاصه – و تفکر در مورد Discoverability
سیستم عامل ما تا کنون خودکار پوسته پوسته شدن، سازگاری، خود بهینه سازی، و ابر-آگنوستیک است. نظارت بر صدها یا هزاران مدل نیز یک نیاز حیاتی است. با این حال اتاق برای یک چیز دیگر وجود دارد: Discoverability.
کشف توانایی یافتن مدل ها و توابع ایجاد شده توسط:
کاربران اول شخص سیستم عامل (همکاران شما)
تامین کنندگان ثالث (دانشگاهی، منبع باز، توسعه دهندگان مستقل)
سیستم عامل محصول محصول نیست، بلکه پلت فرم است. اگر شما بررسی کنید که چگونه سیستم های عامل در طول زمان تکامل یافته، ما از کارت های پانچ، زبان ماشین، اسمبلرها و غیره، به آرامی از نردبان انتزاع صعود کردیم. انتزاع در مورد چیزها به عنوان اجزای مدولار، تشویق استفاده مجدد و ایجاد گردش کار پیشرفته در دسترس است. به همین دلیل آخرین موج سیستم عامل (مانند iOS و Android) با ساخته شده است در فروشگاه App، برای تشویق این دیدگاه از یک سیستم عامل.
به همین دلایل، سیستم عامل ما باید تاکید زیادی بر Discoverability و Reusability داشته باشد. به همین دلیل در الگوریتمی ما CODEX، سیستم عامل پیشرو برای AI و Algorithmia.com، فروشگاه برنامه ما برای الگوریتم ها، توابع و مدل ها ایجاد کردیم. ما به شرکت ها کمک می کنیم که الگوریتم های خود را به هر گوشه ای از سازمانشان کشف کنند و در عین حال، از طریق Algorithmia.com، این شرکت ها (و توسعه دهندگان انی) به بهترین الگوریتم های شخص ثالث دسترسی پیدا می کنند.