هنگام استقرار مدل های یادگیری عمیق در مقیاس، بسیار مهم است که به طور موثر از سخت افزار زیربنایی برای به حداکثر رساندن عملکرد و مزایای هزینه استفاده شود. برای بارهای کاری تولیدی که نیاز به توان عملیاتی بالا و تاخیر کم دارند، انتخاب ابر محاسبه الاستیک آمازون نمونه (EC2)، پشته سرویس دهی مدل و معماری استقرار بسیار مهم است. معماری ناکارآمد میتواند منجر به استفاده غیربهینه از شتابدهندهها و هزینه تولید بیرویه شود.
در این پست شما را از طریق فرآیند استقرار سرورهای مدل FastAPI در دستگاههای AWS Inferentia (که در Amazon EC2 یافت میشود) راهنمایی میکنیم. Inf1 و آمازون EC Inf2 موارد). ما همچنین میزبانی یک مدل نمونه را نشان میدهیم که به طور موازی در تمام NeuronCores برای حداکثر استفاده از سختافزار مستقر شده است.
بررسی اجمالی راه حل
FastAPI یک چارچوب وب منبع باز برای ارائه برنامه های کاربردی پایتون است که بسیار سریعتر از چارچوب های سنتی مانند Flask و Django است. از یک استفاده می کند رابط دروازه سرور ناهمزمان (ASGI) به جای پرکاربرد رابط دروازه وب سرور (WSGI). ASGI درخواست های دریافتی را به صورت ناهمزمان پردازش می کند برخلاف WSGI که درخواست ها را به صورت متوالی پردازش می کند. این امر FastAPI را به گزینه ای ایده آل برای رسیدگی به درخواست های حساس به تأخیر تبدیل می کند. میتوانید از FastAPI برای استقرار سروری استفاده کنید که یک نقطه پایانی را روی نمونههای Inferentia (Inf1/Inf2) میزبانی میکند که از طریق یک پورت تعیینشده به درخواستهای مشتری گوش میدهد.
هدف ما دستیابی به بالاترین عملکرد با کمترین هزینه از طریق حداکثر استفاده از سخت افزار است. این به ما این امکان را می دهد که درخواست های استنتاج بیشتری را با شتاب دهنده های کمتر انجام دهیم. هر دستگاه AWS Inferentia1 شامل چهار NeuronCores-v1 و هر دستگاه AWS Inferentia2 شامل دو NeuronCores-v2 است. این نورون AWS SDK به ما اجازه می دهد تا از هر یک از هسته های عصبی به صورت موازی استفاده کنیم، که به ما کنترل بیشتری در بارگذاری و استنتاج چهار یا چند مدل به صورت موازی بدون کاهش توان عملیاتی می دهد.
با FastAPI، شما می توانید وب سرور پایتون را انتخاب کنید (گل شاخدار, Uvicorn, هایپر کورن, حوری دریایی). این وب سرورها لایه انتزاعی را در بالای مدل یادگیری ماشینی (ML) فراهم می کنند. مشتری درخواست کننده این مزیت را دارد که نسبت به مدل میزبانی شده بی توجه است. یک کلاینت نیازی به دانستن نام مدل یا نسخه ای که در زیر سرور مستقر شده است ندارد. نام نقطه پایانی اکنون فقط یک پروکسی برای تابعی است که مدل را بارگیری و اجرا می کند. در مقابل، در یک ابزار سرویس دهی خاص چارچوب، مانند سرویس TensorFlow، نام مدل و نسخه بخشی از نام نقطه پایانی است. اگر مدل در سمت سرور تغییر کند، کلاینت باید بداند و بر این اساس فراخوانی API خود را به نقطه پایانی جدید تغییر دهد. بنابراین، اگر به طور مداوم مدلهای نسخه را تغییر میدهید، مثلاً در مورد آزمایش A/B، استفاده از یک وب سرور عمومی پایتون با FastAPI یک راه راحت برای ارائه مدلها است، زیرا نام نقطه پایانی ثابت است.
نقش سرور ASGI ایجاد تعداد مشخصی از کارگران است که به درخواست های مشتری گوش می دهند و کد استنتاج را اجرا می کنند. یکی از قابلیت های مهم سرور اطمینان از در دسترس بودن و فعال بودن تعداد کارگران درخواستی است. در صورت کشته شدن کارگر، سرور باید یک کارگر جدید راه اندازی کند. در این زمینه، سرور و کارگران ممکن است با شناسه فرآیند یونیکس (PID) آنها شناسایی شوند. برای این پست از a استفاده می کنیم هایپر کورن سرور، که یک انتخاب محبوب برای وب سرورهای پایتون است.
در این پست، بهترین روشها برای استقرار مدلهای یادگیری عمیق با FastAPI در AWS Inferentia NeuronCores را به اشتراک میگذاریم. ما نشان میدهیم که میتوانید چندین مدل را بر روی NeuronCores جداگانه که میتوانند همزمان فراخوانی شوند، مستقر کنید. این راهاندازی توان عملیاتی را افزایش میدهد زیرا میتوان چندین مدل را به طور همزمان استنباط کرد و استفاده از NeuronCore کاملاً بهینه شده است. کد را می توان در پیدا کرد GitHub repo. شکل زیر معماری نحوه تنظیم راه حل را در نمونه EC2 Inf2 نشان می دهد.
همین معماری برای نوع نمونه EC2 Inf1 اعمال میشود، با این تفاوت که چهار هسته دارد. به طوری که نمودار معماری را کمی تغییر می دهد.
هسته های عصبی AWS Inferentia
بیایید کمی عمیق تر به ابزارهای ارائه شده توسط AWS Neuron برای تعامل با NeuronCores بپردازیم. جداول زیر تعداد هسته های عصبی را در هر نوع نمونه Inf1 و Inf2 نشان می دهد. vCPU های میزبان و حافظه سیستم در تمام NeuronCore های موجود مشترک است.
اندازه نمونه | # شتاب دهنده های استنتاج | # NeuronCores-v1 | vCPU ها | حافظه (GiB) |
Inf1.xlarge | 1 | 4 | 4 | 8 |
Inf1.2xlarge | 1 | 4 | 8 | 16 |
Inf1.6xlarge | 4 | 16 | 24 | 48 |
Inf1.24xlarge | 16 | 64 | 96 | 192 |
اندازه نمونه | # شتاب دهنده های استنتاج | # NeuronCores-v2 | vCPU ها | حافظه (GiB) |
Inf2.xlarge | 1 | 2 | 4 | 32 |
Inf2.8xlarge | 1 | 2 | 32 | 32 |
Inf2.24xlarge | 6 | 12 | 96 | 192 |
Inf2.48xlarge | 12 | 24 | 192 | 384 |
نمونههای Inf2 حاوی NeuronCore-v2 جدید در مقایسه با NeuronCore-v1 در نمونههای Inf1 هستند. علیرغم هسته های کمتر، آنها می توانند 4 برابر توان عملیاتی بالاتر و 10 برابر تاخیر کمتری نسبت به نمونه های Inf1 ارائه دهند. نمونههای Inf2 برای بارهای یادگیری عمیق مانند هوش مصنوعی تولیدی، مدلهای زبان بزرگ (LLM) در خانواده OPT/GPT و ترانسفورماتورهای بینایی مانند Stable Diffusion ایدهآل هستند.
Neuron Runtime مسئول اجرای مدل ها در دستگاه های Neuron است. Neuron Runtime تعیین می کند که کدام NeuronCore کدام مدل را اجرا کند و چگونه آن را اجرا کند. پیکربندی Neuron Runtime با استفاده از کنترل می شود متغیرهای محیطی در سطح فرآیند بهطور پیشفرض، افزونههای فریمورک Neuron از پیکربندی Neuron Runtime از طرف کاربر مراقبت میکنند. با این حال، پیکربندی های صریح نیز برای دستیابی به رفتار بهینه تر امکان پذیر است.
دو متغیر محیطی محبوب هستند NEURON_RT_NUM_CORES
و NEURON_RT_VISIBLE_CORES
. با این متغیرهای محیطی، فرآیندهای پایتون را می توان به یک NeuronCore گره زد. با NEURON_RT_NUM_CORES
، تعداد مشخصی از هسته ها را می توان برای یک فرآیند رزرو کرد و با NEURON_RT_VISIBLE_CORES
، طیف وسیعی از NeuronCores را می توان رزرو کرد. مثلا، NEURON_RT_NUM_CORES=2 myapp.py
دو هسته رزرو خواهد کرد و NEURON_RT_VISIBLE_CORES=’0-2’ myapp.py
صفر، یک و دو هسته را برای myapp.py
. همچنین میتوانید NeuronCores را در سراسر دستگاهها (تراشههای AWS Inferentia) رزرو کنید. بنابراین، NEURON_RT_VISIBLE_CORES=’0-5’ myapp.py
چهار هسته اول را رزرو خواهد کرد device1
و یک هسته در device2
در یک نوع نمونه Ec2 Inf1. به طور مشابه، در یک نوع نمونه EC2 Inf2، این پیکربندی دو هسته را در سراسر آن ذخیره می کند. device1
و device2
و یک هسته در device3
. جدول زیر به طور خلاصه پیکربندی این متغیرها را نشان می دهد.
نام | توضیحات: | نوع | ارزش های مورد انتظار | مقدار پیش فرض | نسخه RT |
NEURON_RT_VISIBLE_CORES |
طیف وسیعی از هسته های عصبی خاص مورد نیاز فرآیند | محدوده عدد صحیح (مانند 1-3) | هر مقدار یا محدوده ای بین 0 تا Max NeuronCore در سیستم | هیچ | 2.0 + |
NEURON_RT_NUM_CORES |
تعداد هستههای عصبی مورد نیاز فرآیند | عدد صحیح | مقداری از 1 تا Max NeuronCore در سیستم | 0 که به عنوان "همه" تفسیر می شود | 2.0 + |
برای لیستی از همه متغیرهای محیطی، به پیکربندی زمان اجرا نورون.
بهطور پیشفرض، هنگام بارگیری مدلها، مدلها روی NeuronCore 0 و سپس NeuronCore 1 بارگذاری میشوند، مگر اینکه به صراحت توسط متغیرهای محیطی قبلی بیان شده باشد. همانطور که قبلا مشخص شد، NeuronCores هاست vCPU های موجود و حافظه سیستم را به اشتراک می گذارند. بنابراین، مدلهای مستقر در هر NeuronCore برای منابع موجود رقابت خواهند کرد. اگر مدل تا حد زیادی از NeuronCores استفاده کند، این مشکلی ایجاد نخواهد کرد. اما اگر یک مدل فقط تا حدی بر روی NeuronCore ها و بقیه در vCPU های میزبان اجرا می شود، در نظر گرفتن در دسترس بودن CPU برای هر NeuronCore مهم می شود. این بر انتخاب نمونه نیز تأثیر می گذارد.
جدول زیر تعداد vCPU های میزبان و حافظه سیستم موجود در هر مدل را در صورتی که یک مدل برای هر NeuronCore مستقر شده باشد نشان می دهد. بسته به استفاده از NeuronCore، vCPU و استفاده از حافظه برنامه شما، توصیه میشود آزمایشهایی را برای یافتن اینکه کدام پیکربندی برای برنامه شما کارآمدتر است، اجرا کنید. این ابزار Neuron Top می تواند به تجسم استفاده از هسته و استفاده از حافظه دستگاه و میزبان کمک کند. بر اساس این معیارها می توان یک تصمیم آگاهانه گرفت. ما استفاده از Neuron Top را در پایان این وبلاگ نشان می دهیم.
اندازه نمونه | # شتاب دهنده های استنتاج | # مدل ها | vCPUs/Model | حافظه/مدل (GiB) |
Inf1.xlarge | 1 | 4 | 1 | 2 |
Inf1.2xlarge | 1 | 4 | 2 | 4 |
Inf1.6xlarge | 4 | 16 | 1.5 | 3 |
Inf1.24xlarge | 16 | 64 | 1.5 | 3 |
اندازه نمونه | # شتاب دهنده های استنتاج | # مدل ها | vCPUs/Model | حافظه/مدل (GiB) |
Inf2.xlarge | 1 | 2 | 2 | 8 |
Inf2.8xlarge | 1 | 2 | 16 | 64 |
Inf2.24xlarge | 6 | 12 | 8 | 32 |
Inf2.48xlarge | 12 | 24 | 8 | 32 |
برای آزمایش ویژگیهای Neuron SDK، جدیدترینها را بررسی کنید قابلیت های نورون برای PyTorch.
راه اندازی سیستم
راهاندازی سیستم مورد استفاده برای این راه حل به شرح زیر است:
راه حل را تنظیم کنید
برای تنظیم راه حل باید چند کار انجام دهیم. با ایجاد یک نقش IAM شروع کنید که نمونه EC2 شما فرض میکند که به آن اجازه میدهد از آن فشار بیاورد و بکشد. رجیستری ظروف الاستیک آمازون.
مرحله 1: نقش IAM را تنظیم کنید
- با ورود به کنسول و دسترسی به IAM > Roles > Create Role شروع کنید
- نوع مورد اعتماد را انتخاب کنید
AWS Service
- EC2 را به عنوان سرویس مورد استفاده انتخاب کنید
- کلیک کنید بعدی و میتوانید همه خطمشیهای موجود را ببینید
- برای هدف این راه حل، ما به نمونه EC2 خود دسترسی کامل به ECR می دهیم. فیلتر برای AmazonEC2ContainerRegistryFullAccess و آن را انتخاب کنید.
- Next را فشار داده و نقش را نامگذاری کنید
inf-ecr-access
توجه: سیاستی که ما پیوست کردیم به نمونه EC2 دسترسی کامل به Amazon ECR می دهد. ما به شدت توصیه می کنیم که دنبال کنید اصل کمترین امتیاز برای حجم کار تولید
مرحله 2: راه اندازی AWS CLI
اگر از Deep Learning AMI ذکر شده در بالا استفاده می کنید، AWS CLI نصب شده است. اگر از AMI دیگری (Amazon Linux 2023، Base Ubuntu و غیره) استفاده می کنید، ابزارهای CLI را با دنبال کردن آن نصب کنید. این راهنما.
هنگامی که ابزارهای CLI را نصب کردید، CLI را با استفاده از دستور پیکربندی کنید aws configure
. اگر کلیدهای دسترسی دارید، میتوانید آنها را اینجا اضافه کنید، اما لزوماً برای تعامل با سرویسهای AWS به آنها نیاز ندارید. ما برای انجام این کار به نقش های IAM تکیه می کنیم.
توجه داشته باشید: برای ایجاد نمایه پیش فرض باید حداقل یک مقدار (منطقه پیش فرض یا فرمت پیش فرض) وارد کنیم. برای این مثال، ما با us-east-2
به عنوان منطقه و json
به عنوان خروجی پیش فرض
مخزن Github را شبیه سازی کنید
La GitHub repo تمام اسکریپت های لازم برای استقرار مدل ها با استفاده از FastAPI در NeuronCores در نمونه های AWS Inferentia را فراهم می کند. این مثال از ظروف Docker استفاده می کند تا اطمینان حاصل شود که می توانیم راه حل های قابل استفاده مجدد ایجاد کنیم. در این مثال موارد زیر گنجانده شده است config.properties فایل برای کاربران برای ارائه ورودی.
فایل پیکربندی نیاز به پیشوندهای نام تعریف شده توسط کاربر برای تصویر داکر و ظروف داکر دارد. این build.sh
اسکریپت در fastapi
و trace-model
پوشه ها از این برای ایجاد تصاویر Docker استفاده می کنند.
کامپایل یک مدل در AWS Inferentia
ما با ردیابی مدل و تولید یک فایل PyTorch Torchscript .pt شروع خواهیم کرد. با دسترسی شروع کنید trace-model
دایرکتوری و تغییر فایل env. بسته به نوع نمونه ای که انتخاب کرده اید، آن را تغییر دهید CHIP_TYPE
در داخل .env
فایل. به عنوان مثال، ما Inf2 را به عنوان راهنما انتخاب می کنیم. مراحل مشابهی برای فرآیند استقرار برای Inf1 اعمال می شود.
سپس منطقه پیش فرض را در همان فایل تنظیم کنید. این منطقه برای ایجاد یک مخزن ECR استفاده می شود و تصاویر Docker به این مخزن منتقل می شوند. همچنین در این پوشه، ما تمام اسکریپت های لازم برای ردیابی a را ارائه می دهیم bert-base-uncased
مدل در AWS Inferentia. این اسکریپت می تواند برای اکثر مدل های موجود در آن استفاده شود در آغوش کشیدن صورت. dockerfile تمام وابستگی ها برای اجرای مدل ها با Neuron را دارد و اجرا می کند trace-model.py کد به عنوان نقطه ورود
تلفیقی نورون توضیح داد
API Neuron SDK بسیار شبیه PyTorch Python API است. این torch.jit.trace()
از PyTorch مدل و نمونه تانسور ورودی را به عنوان آرگومان می گیرد. ورودیهای نمونه به مدل داده میشوند و عملیاتی که فراخوانی میشوند، زمانی که ورودی از لایههای مدل فراخوانی میشوند، به صورت ثبت میشوند. TorchScript. برای کسب اطلاعات بیشتر در مورد JIT Tracing در PyTorch به ادامه مطلب مراجعه کنید مستندات.
درست مثل torch.jit.trace()
، می توانید بررسی کنید که آیا مدل شما می تواند در AWS Inferentia با کد زیر برای نمونه های inf1 کامپایل شود یا خیر.
برای inf2، کتابخانه نامیده می شود torch_neuronx
. در اینجا نحوه آزمایش کامپایل مدل خود در برابر نمونه های inf2 آورده شده است.
پس از ایجاد نمونه ردیابی، میتوانیم ورودی تانسور مثال را به صورت زیر ارسال کنیم:
و در نهایت خروجی TorchScript حاصل را روی دیسک محلی ذخیره کنید
همانطور که در کد قبل نشان داده شده است، می توانید استفاده کنید compiler_args
و optimizations
برای بهینه سازی استقرار برای یک لیست دقیق از استدلال برای torch.neuron.trace
API رجوع شود PyTorch-Neuron trace python API.
نکات مهم زیر را در نظر داشته باشید:
- Neuron SDK تا زمان نگارش این مقاله از اشکال تانسور پویا پشتیبانی نمی کند. بنابراین، یک مدل باید به طور جداگانه برای اشکال ورودی مختلف کامپایل شود. برای اطلاعات بیشتر در مورد اجرای استنتاج بر روی اشکال ورودی متغیر با سطل، مراجعه کنید اجرای استنتاج بر روی اشکال ورودی متغیر با سطل.
- اگر هنگام کامپایل کردن یک مدل با مشکل حافظه مواجه شدید، سعی کنید مدل را روی یک نمونه AWS Inferentia با vCPU یا حافظه بیشتر کامپایل کنید، یا حتی یک نمونه بزرگ c6i یا r6i زیرا کامپایل فقط از CPU استفاده می کند. پس از کامپایل، مدل ردیابی شده احتمالاً می تواند در اندازه های نمونه کوچکتر AWS Inferentia اجرا شود.
توضیح فرآیند ساخت
حالا این ظرف را با اجرا می سازیم build.sh. فایل اسکریپت ساخت به سادگی با کشیدن یک تصویر پایه Deep Learning Container و نصب HuggingFace، تصویر Docker را ایجاد می کند. transformers
بسته بندی بر اساس CHIP_TYPE
مشخص شده در .env
فایل، docker.properties
فایل مناسب تصمیم می گیرد BASE_IMAGE
. این BASE_IMAGE
به یک تصویر کانتینر یادگیری عمیق برای Neuron Runtime ارائه شده توسط AWS اشاره می کند.
از طریق یک مخزن خصوصی ECR در دسترس است. قبل از اینکه بتوانیم تصویر را بکشیم، باید وارد شوید و اعتبارنامه موقت AWS را دریافت کنیم.
توجه داشته باشید: باید منطقه ای را که در دستور مشخص شده توسط پرچم منطقه و داخل URI مخزن ذکر شده است با منطقه ای که در آن قرار داده ایم جایگزین کنیم. .NS فایل.
برای سهولت در این فرآیند می توانیم از fetch-credentials.sh
فایل. منطقه به طور خودکار از فایل .env گرفته می شود.
در مرحله بعد، تصویر را با استفاده از اسکریپت فشار می دهیم فشار.ش. اسکریپت push یک مخزن در آمازون ECR برای شما ایجاد می کند و تصویر ظرف را فشار می دهد.
در نهایت، زمانی که تصویر ساخته شد و فشار داده شد، میتوانیم آن را به صورت یک ظرف با اجرا اجرا کنیم run.sh و دم در حال اجرا سیاهههای مربوط با logs.sh. در لاگ های کامپایلر (به تصویر زیر مراجعه کنید)، درصد عملگرهای حسابی کامپایل شده بر روی Neuron و درصد زیرگراف های مدل را که با موفقیت در Neuron کامپایل شده اند را مشاهده خواهید کرد. اسکرین شات لاگ های کامپایلر را نشان می دهد bert-base-uncased-squad2
مدل. گزارشها نشان میدهند که 95.64 درصد از عملگرهای محاسباتی کامپایل شدهاند، و همچنین فهرستی از عملگرهایی که روی Neuron کامپایل شدهاند و آنهایی که پشتیبانی نمیشوند را ارائه میدهد.
در اینجا یک لیست است از تمام اپراتورهای پشتیبانی شده در آخرین بسته PyTorch Neuron. به همین ترتیب، این لیست است از همه اپراتورهای پشتیبانی شده در آخرین بسته PyTorch Neuronx.
استقرار مدل ها با FastAPI
پس از کامپایل شدن مدل ها، مدل ردیابی شده در آن وجود خواهد داشت trace-model
پوشه در این مثال، مدل ترسیمشده را برای اندازه دسته 1 قرار دادهایم. ما در اینجا اندازه دستهای 1 را در نظر میگیریم تا موارد استفاده را در نظر بگیریم که اندازه دستهای بالاتر امکانپذیر یا مورد نیاز نیست. برای موارد استفاده که در آن به اندازه دسته های بالاتر نیاز است، مشعل. نورون.داده موازی (برای Inf1) یا torch.neuronx.DataParallel (برای Inf2) API نیز ممکن است مفید باشد.
La fast-api پوشه تمام اسکریپت های لازم برای استقرار مدل ها با FastAPI را فراهم می کند. برای استقرار مدل ها بدون هیچ تغییری، به سادگی آن را اجرا کنید deploy.sh اسکریپت و یک تصویر کانتینر FastAPI می سازد، کانتینرها را روی تعداد مشخص شده هسته اجرا می کند و تعداد مدل های مشخص شده در هر سرور را در هر سرور مدل FastAPI مستقر می کند. این پوشه همچنین حاوی یک .env
فایل، آن را تغییر دهید تا درست منعکس شود CHIP_TYPE
و AWS_DEFAULT_REGION
.
توجه داشته باشید: اسکریپت های FastAPI به همان متغیرهای محیطی متکی هستند که برای ساخت، فشار دادن و اجرای تصاویر به عنوان کانتینر استفاده می شوند. اسکریپت های استقرار FastAPI از آخرین مقادیر شناخته شده از این متغیرها استفاده می کنند. بنابراین، اگر آخرین مدل را برای نوع نمونه Inf1 دنبال کنید، آن مدل از طریق این اسکریپت ها مستقر می شود.
La fastapi-server.py فایلی که وظیفه میزبانی سرور و ارسال درخواست ها به مدل را بر عهده دارد موارد زیر را انجام می دهد:
- تعداد مدل ها در هر سرور و مکان مدل کامپایل شده را از فایل خواص می خواند
- NeuronCores های قابل مشاهده را به عنوان متغیرهای محیطی در ظرف Docker تنظیم می کند و متغیرهای محیطی را می خواند تا مشخص کند از کدام هسته های عصبی استفاده شود.
- یک API استنتاج برای
bert-base-uncased-squad2
مدل - با
jit.load()
، تعداد مدلهای هر سرور را همانطور که در پیکربندی مشخص شده بارگیری میکند و مدلها و نشانهسازهای مورد نیاز را در دیکشنریهای جهانی ذخیره میکند.
با این راهاندازی، تنظیم APIهایی که لیست مدلها و تعداد مدلهایی که در هر NeuronCore ذخیره میشوند، نسبتاً آسان است. به طور مشابه، API ها می توانند برای حذف مدل ها از هسته های عصبی خاص نوشته شوند.
La dockerfile برای ساخت کانتینرهای FastAPI بر روی تصویر Docker ساخته شده است که ما برای ردیابی مدل ها ساخته ایم. به همین دلیل است که docker.properties فایل مسیر ECR به تصویر داکر را برای ردیابی مدل ها مشخص می کند. در تنظیمات ما، کانتینرهای Docker در تمام NeuronCore ها مشابه هستند، بنابراین می توانیم یک تصویر بسازیم و چندین کانتینر را از یک تصویر اجرا کنیم. برای جلوگیری از هر گونه خطای نقطه ورود، ما مشخص می کنیم ENTRYPOINT ["/usr/bin/env"]
در Dockerfile قبل از اجرای startup.sh
اسکریپت، که به نظر می رسد hypercorn fastapi-server:app -b 0.0.0.0:8080
. این اسکریپت راه اندازی برای همه کانتینرها یکسان است. اگر از همان تصویر پایه برای ردیابی مدل ها استفاده می کنید، می توانید این کانتینر را به سادگی با اجرای اسکریپت build.sh بسازید. این push.sh
اسکریپت مانند قبل برای ردیابی مدل ها باقی می ماند. تصویر Docker اصلاح شده و نام کانتینر توسط docker.properties
فایل.
La run.sh file
موارد زیر را انجام می دهد:
- تصویر داکر و نام کانتینر را از روی می خواند املاک فایل، که به نوبه خود فایل را می خواند
config.properties
فایل، که دارای یکnum_cores
تنظیمات کاربر - یک حلقه را از 0 تا شروع می کند
num_cores
و برای هر هسته:- شماره پورت و شماره دستگاه را تنظیم می کند
- تنظیم می کند
NEURON_RT_VISIBLE_CORES
متغیر محیطی - تنظیم صدا را مشخص می کند
- یک کانتینر Docker را اجرا می کند
برای وضوح، دستور اجرای Docker برای استقرار در NeuronCore 0 برای Inf1 مانند کد زیر است:
دستور run برای استقرار در NeuronCore 5 شبیه کد زیر است:
پس از استقرار کانتینرها، از آن استفاده می کنیم run_apis.py اسکریپت که API ها را به صورت رشته های موازی فراخوانی می کند. این کد برای فراخوانی شش مدل مستقر، یکی در هر NeuronCore تنظیم شده است، اما به راحتی می توان آن را به تنظیمات متفاوت تغییر داد. ما APIها را از سمت کلاینت به صورت زیر فراخوانی می کنیم:
NeuronCore را مانیتور کنید
پس از استقرار سرورهای مدل، برای نظارت بر استفاده از NeuronCore، ممکن است از آن استفاده کنیم neuron-top
برای مشاهده در زمان واقعی درصد استفاده از هر NeuronCore. نورون بالا یک ابزار CLI در Neuron SDK برای ارائه اطلاعاتی مانند NeuronCore، vCPU و استفاده از حافظه است. در یک ترمینال جداگانه، دستور زیر را وارد کنید:
خروجی شما باید مشابه شکل زیر باشد. در این سناریو، ما تعیین کرده ایم که از دو NeuronCores و دو مدل در هر سرور در یک نمونه Inf2.xlarge استفاده کنیم. تصویر زیر نشان می دهد که دو مدل با اندازه 287.8 مگابایت هر کدام بر روی دو NeuronCores بارگذاری شده اند. با در مجموع 4 مدل بارگذاری شده، می توانید ببینید که حافظه دستگاه مورد استفاده 1.3 گیگابایت است. از کلیدهای جهت دار برای حرکت بین NeuronCores در دستگاه های مختلف استفاده کنید
به طور مشابه، در یک نوع نمونه Inf1.16xlarge مجموعاً 12 مدل (2 مدل در هر هسته بیش از 6 هسته) بارگذاری شده است. مجموعاً 2.1 گیگابایت حافظه مصرف می شود و هر مدل 177.2 مگابایت حجم دارد.
بعد از اجرای run_apis.py اسکریپت، میتوانید درصد استفاده از هر یک از شش هستههای عصبی را ببینید (عکس زیر را ببینید). همچنین می توانید میزان استفاده از vCPU سیستم و زمان اجرا استفاده از vCPU را مشاهده کنید.
تصویر زیر درصد استفاده از هسته Inf2 را نشان می دهد.
به طور مشابه، این اسکرین شات استفاده از هسته را در نوع inf1.6xlarge نشان می دهد.
پاک کردن
برای تمیز کردن تمام ظروف Docker که ایجاد کردهاید، یک مورد را ارائه میکنیم پاکسازی.ش اسکریپتی که همه کانتینرهای در حال اجرا و متوقف شده را حذف می کند. این اسکریپت همه کانتینرها را حذف میکند، بنابراین اگر میخواهید برخی از کانتینرها را در حال اجرا نگه دارید، از آن استفاده نکنید.
نتیجه
بارهای کاری تولید اغلب دارای توان عملیاتی بالا، تاخیر کم و الزامات هزینه هستند. معماریهای ناکارآمدی که از شتابدهندهها بهطور غیربهینه استفاده میکنند، میتوانند منجر به هزینههای غیرضروری بالای تولید شوند. در این پست، نحوه استفاده بهینه از NeuronCores با FastAPI را برای به حداکثر رساندن توان در حداقل تأخیر نشان دادیم. ما دستورالعمل ها را در سایت خود منتشر کرده ایم GitHub repo. با این معماری راه حل، می توانید چندین مدل را در هر NeuronCore مستقر کنید و چندین مدل را به صورت موازی بر روی NeuronCore های مختلف بدون از دست دادن کارایی اجرا کنید. برای اطلاعات بیشتر در مورد نحوه استقرار مدلها در مقیاس با خدماتی مانند سرویس الاستیک کوبرنتز آمازون (Amazon EKS) رجوع شود ارائه 3,000 مدل یادگیری عمیق در Amazon EKS با AWS Inferentia با کمتر از 50 دلار در ساعت.
درباره نویسندگان
آنکور سریواستاوا یک معمار Sr. Solutions در تیم ML Frameworks است. او بر کمک به مشتریان با آموزش توزیع شده خود مدیریت و استنتاج در مقیاس AWS تمرکز دارد. تجربه او شامل تعمیر و نگهداری پیش بینی صنعتی، دوقلوهای دیجیتال، بهینه سازی طراحی احتمالی است و تحصیلات دکترای خود را از مهندسی مکانیک در دانشگاه رایس و تحقیقات پسا دکتری از موسسه فناوری ماساچوست به پایان رسانده است.
کی سی تونگ یک معمار ارشد راه حل در آزمایشگاه AWS Annapurna است. او در آموزش مدل های یادگیری عمیق بزرگ و استقرار در مقیاس در فضای ابری تخصص دارد. او دکتری دارد. در بیوفیزیک مولکولی از مرکز پزشکی جنوب غربی دانشگاه تگزاس در دالاس. او در AWS Summits و AWS Reinvent سخنرانی کرده است. امروز او به مشتریان کمک می کند تا مدل های بزرگ PyTorch و TensorFlow را در ابر AWS آموزش و استقرار دهند. وی نویسنده دو کتاب است: TensorFlow Enterprise را یاد بگیرید و مرجع جیبی تنسورفلو 2.
پرونوی چوپرا یک معمار ارشد راه حل با تیم هوش مصنوعی استارتاپ ها در AWS است. او در معماری و توسعه راه حل های IoT و Machine Learning تخصص دارد. او در گذشته دو استارتآپ را تأسیس کرده است و از همکاری با پروژههایی در حوزه اینترنت اشیا، هوش مصنوعی/ML و دامنه بدون سرور لذت میبرد.
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- PlatoData.Network Vertical Generative Ai. به خودت قدرت بده دسترسی به اینجا.
- PlatoAiStream. هوش وب 3 دانش تقویت شده دسترسی به اینجا.
- PlatoESG. خودرو / خودروهای الکتریکی، کربن ، CleanTech، انرژی، محیط، خورشیدی، مدیریت پسماند دسترسی به اینجا.
- BlockOffsets. نوسازی مالکیت افست زیست محیطی. دسترسی به اینجا.
- منبع: https://aws.amazon.com/blogs/machine-learning/optimize-aws-inferentia-utilization-with-fastapi-and-pytorch-models-on-amazon-ec2-inf1-inf2-instances/
- : دارد
- :است
- :نه
- :جایی که
- $UP
- 000
- 1
- 1.3
- 10
- 100
- 12
- 13
- ٪۱۰۰
- 2023
- 7
- 8
- 91
- a
- قادر
- درباره ما
- بالاتر
- انتزاع - مفهوم - برداشت
- شتاب دهنده ها
- دسترسی
- دسترسی
- بر این اساس
- حساب
- رسیدن
- در میان
- فعال
- اضافه کردن
- در برابر
- AI
- AI / ML
- معرفی
- اجازه دادن
- اجازه می دهد تا
- همچنین
- آمازون
- آمازون EC2
- آمازون خدمات وب
- an
- و
- هر
- API
- رابط های برنامه کاربردی
- نرم افزار
- کاربرد
- برنامه های کاربردی
- درخواست
- مناسب
- معماری
- هستند
- استدلال
- AS
- فرض
- At
- نویسنده
- بطور خودکار
- دسترس پذیری
- در دسترس
- اجتناب از
- AWS
- استنتاج AWS
- پایه
- مستقر
- BE
- زیرا
- شدن
- بوده
- قبل از
- از طرف
- رفتار
- بودن
- سود
- مزایای
- بهترین
- بهترین شیوه
- میان
- بیوفیزیک
- بیت
- بلاگ
- کتاب
- ساختن
- بنا
- ساخته
- اما
- by
- صدا
- نام
- تماس ها
- CAN
- قابلیت های
- قابلیت
- اهميت دادن
- مورد
- موارد
- مرکز
- تغییر دادن
- تغییر
- تبادل
- بررسی
- چیپس
- انتخاب
- را انتخاب کنید
- را انتخاب
- وضوح
- مشتری
- نزدیک
- ابر
- رمز
- می آید
- مقایسه
- رقابت
- تکمیل شده
- محاسبه
- پیکر بندی
- در نظر بگیرید
- با توجه به
- کنسول
- مصرف
- شامل
- ظرف
- ظروف
- شامل
- زمینه
- به طور مداوم
- کنتراست
- کنترل
- کنترل
- مناسب
- هسته
- اصلاح
- هزینه
- هزینه
- میتوانست
- زن و شوهر
- ایجاد
- ایجاد شده
- ایجاد
- ایجاد
- مجوزها و اعتبارات
- بسیار سخت
- مشتریان
- دالاس
- تصمیم
- عمیق
- یادگیری عمیق
- عمیق تر
- به طور پیش فرض
- نشان دادن
- بستگی دارد
- گسترش
- مستقر
- استقرار
- گسترش
- طرح
- تعیین شده
- با وجود
- دقیق
- تعیین می کند
- در حال توسعه
- دستگاه
- دستگاه ها
- مختلف
- انتشار
- DIG
- دیجیتال
- دوقلوهای دیجیتال
- توزیع شده
- آموزش توزیع شده
- جنگو
- do
- کارگر بارانداز
- میکند
- نمی کند
- دامنه
- آیا
- پویا
- هر
- پیش از آن
- آسان تر
- به آسانی
- ساده
- EC
- به طور موثر
- پایان
- نقطه پایانی
- تعامل
- مهندسی
- اطمینان حاصل شود
- وارد
- موجودیت
- ورود
- محیط
- خطاهای
- و غیره
- حتی
- هر
- در حال تحول
- مثال
- جز
- تجربه
- ضمیمهها
- چهره
- خانواده
- سریعتر
- امکان پذیر است
- امکانات
- تغذیه
- کمتر
- شکل
- پرونده
- فیلتر
- سرانجام
- پیدا کردن
- نام خانوادگی
- تمرکز
- پیروی
- به دنبال آن است
- برای
- قالب
- یافت
- چهار
- چارچوب
- چارچوب
- از جانب
- کامل
- کاملا
- تابع
- دروازه
- مولد
- هوش مصنوعی مولد
- دریافت کنید
- GitHub
- دادن
- می دهد
- جهانی
- رفتن
- راهنمایی
- دسته
- دست
- سخت افزار
- آیا
- he
- کمک
- کمک
- کمک می کند
- اینجا کلیک نمایید
- زیاد
- بالاتر
- بالاترین
- خود را
- میزبان
- میزبانی
- میزبانی وب
- میزبان
- چگونه
- چگونه
- اما
- HTML
- HTTP
- HTTPS
- صورت در آغوش گرفته
- ID
- دلخواه
- شناسایی
- if
- تصویر
- تصاویر
- واردات
- مهم
- in
- مشمول
- شامل
- وارد شونده
- افزایش
- صنعتی
- ناکارآمد
- اطلاعات
- اطلاع
- ورودی
- ورودی
- نصب
- نصب شده
- نصب کردن
- نمونه
- در عوض
- موسسه
- دستورالعمل
- تعامل
- به
- استناد کرد
- اینترنت اشیا
- موضوع
- مسائل
- IT
- ITS
- JIT
- JPG
- تنها
- نگاه داشتن
- کلید
- دانستن
- شناخته شده
- آزمایشگاه
- زبان
- بزرگ
- نام
- تاخیر
- آخرین
- راه اندازی
- لایه
- لایه
- رهبری
- یاد گرفتن
- یادگیری
- سطح
- کتابخانه
- پسندیدن
- لینوکس
- فهرست
- ذکر شده
- کوچک
- کمی عمیق تر
- LLM
- بارگیری
- بارهای
- محلی
- محل
- ورود به سیستم
- ورود
- نگاه کنيد
- شبیه
- مطالب
- شکست
- کم
- کاهش
- پایین ترین
- دستگاه
- فراگیری ماشین
- ساخته
- نگهداری
- ساخت
- باعث می شود
- ساخت
- بسیاری
- ماساچوست
- موسسه تکنولوژی ماساچوست
- حداکثر
- بیشینه ساختن
- بیشترین
- ممکن است..
- مکانیکی
- پزشکی
- حافظه
- متریک
- ذهن
- حد اقل
- ML
- مدل
- مدل
- اصلاح شده
- تغییر
- مولکولی
- مانیتور
- بیش
- اکثر
- حرکت
- بسیار
- چندگانه
- باید
- نام
- لزوما
- لازم
- نیاز
- ضروری
- نیازهای
- جدید
- بعد
- اکنون
- عدد
- هدف
- مشاهده کردن
- of
- ارائه
- غالبا
- on
- یک بار
- ONE
- فقط
- به سوی
- منبع باز
- کار
- عملیات
- اپراتور
- مخالف
- بهینه سازی
- بهینه سازی
- بهینه
- or
- ما
- خارج
- تولید
- روی
- بسته
- موازی
- بخش
- عبور
- گذشته
- مسیر
- برای
- درصد
- کارایی
- افلاطون
- هوش داده افلاطون
- PlatoData
- نقطه
- نقطه
- سیاست
- سیاست
- محبوب
- ممکن
- پست
- شیوه های
- در حال حاضر
- خصوصی
- شاید
- روند
- فرآیندهای
- تولید
- تولید
- مشخصات
- پروژه ها
- املاک
- ارائه
- ارائه
- فراهم می کند
- پروکسی
- منتشر شده
- کشیدن
- هدف
- فشار
- تحت فشار قرار دادند
- هل می دهد
- قرار دادن
- پــایتــون
- مارماهی
- محدوده
- واقعی
- زمان واقعی
- توصیه
- توصیه می شود
- ثبت
- بازتاب
- منطقه
- نسبتا
- تکیه
- تکیه بر
- بقایای
- برداشتن
- جایگزین کردن
- مخزن
- درخواست
- ضروری
- مورد نیاز
- تحقیق
- شباهت دارد
- ذخیره
- محفوظ می باشد
- منابع
- پاسخ
- مسئوليت
- REST
- نتیجه
- قابل استفاده مجدد
- برنج
- نقش
- نقش
- دویدن
- در حال اجرا
- اجرا می شود
- قربانی کردن
- همان
- ذخیره
- مقیاس
- سناریو
- اسکریپت
- sdk
- دیدن
- انتخاب
- در حال ارسال
- ارشد
- حساس
- جداگانه
- بدون سرور
- سرور
- سرویس
- خدمات
- خدمت
- تنظیم
- محیط
- برپایی
- اشکال
- اشتراک گذاری
- به اشتراک گذاشته شده
- باید
- نشان
- نشان داد
- نشان داده شده
- نشان می دهد
- طرف
- مشابه
- به طور مشابه
- به سادگی
- شش
- اندازه
- اندازه
- کوچکتر
- So
- راه حل
- مزایا
- برخی از
- تخصص دارد
- خاص
- مشخص شده
- گفته شده
- پایدار
- پشته
- شروع
- شروع
- نوپا
- اظهار داشت:
- مراحل
- متوقف شد
- ذخیره شده
- پرده
- به شدت
- مطالعات
- موفقیت
- چنین
- اجلاس
- پشتیبانی
- پشتیبانی
- مطمئن
- سیستم
- جدول
- گرفتن
- صورت گرفته
- طول می کشد
- تیم
- پیشرفته
- موقت
- جریان تنسور
- پایانه
- آزمون
- تست
- تست
- وابسته به تکزاس
- نسبت به
- که
- La
- شان
- آنها
- سپس
- از این رو
- اینها
- آنها
- اشیاء
- این
- کسانی که
- از طریق
- توان
- گره خورده است
- زمان
- به
- امروز
- ابزار
- ابزار
- بالا
- مشعل
- جمع
- پی گیری
- ردیابی
- سنتی
- قطار
- آموزش
- ترانسفورماتور
- مورد اعتماد
- امتحان
- دور زدن
- دوقلوها
- دو
- نوع
- اوبونتو
- زیر
- اساسی
- دانشگاه
- یونیکس
- بدون نیاز
- بر
- us
- استفاده
- استفاده کنید
- استفاده
- کاربر
- کاربران
- استفاده
- با استفاده از
- استفاده کنید
- استفاده می کند
- با استفاده از
- ارزش
- ارزشها
- نسخه
- بسیار
- قابل رویت
- دید
- حجم
- می خواهم
- بود
- مسیر..
- we
- وب
- وب سرور
- خدمات وب
- خوب
- بود
- چه زمانی
- که
- چرا
- به طور گسترده ای
- اراده
- با
- در داخل
- بدون
- کارگر
- کارگران
- خواهد بود
- نوشته
- کتبی
- شما
- شما
- خودت
- زفیرنت
- صفر