آموزش توزیع شده با Amazon EKS و Torch Distributed Elastic PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

آموزش توزیع شده با Amazon EKS و Torch Distributed Elastic

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

توسعه دهندگان می توانند از چارچوب های منبع باز مانند PyTorch برای طراحی آسان معماری های مدل بصری استفاده کنند. با این حال، مقیاس بندی آموزش این مدل ها در چندین گره می تواند به دلیل افزایش پیچیدگی ارکستراسیون چالش برانگیز باشد.

آموزش مدل توزیع شده عمدتاً از دو پارادایم تشکیل شده است:

  • مدل موازی – در آموزش موازی مدل، خود مدل به قدری بزرگ است که در حافظه یک پردازنده گرافیکی جا نمی شود و برای آموزش مدل به چندین پردازنده گرافیکی نیاز است. مدل Open AI's GPT-3 با 175 میلیارد پارامتر قابل آموزش (تقریباً 350 گیگابایت حجم) نمونه خوبی برای این موضوع است.
  • داده های موازی – در آموزش موازی داده، مدل می‌تواند در یک GPU قرار گیرد، اما از آنجایی که داده‌ها بسیار بزرگ هستند، ممکن است روزها یا هفته‌ها طول بکشد تا یک مدل آموزش داده شود. توزیع داده ها در چندین گره GPU می تواند زمان آموزش را به میزان قابل توجهی کاهش دهد.

در این پست، ما یک نمونه معماری برای آموزش مدل های PyTorch با استفاده از مشعل الاستیک توزیع شده چارچوب به روش موازی داده های توزیع شده با استفاده از سرویس الاستیک کوبرنتز آمازون (Amazon EKS).

پیش نیازها

برای تکرار نتایج گزارش شده در این پست، تنها پیش نیاز یک حساب AWS است. در این حساب ما یک خوشه EKS و یک را ایجاد می کنیم آمازون FSx برای Luster سیستم فایل ما همچنین تصاویر ظرف را به یک فشار می دهیم رجیستری ظروف الاستیک آمازون مخزن (Amazon ECR) در حساب کاربری. دستورالعمل های تنظیم این اجزا در صورت نیاز در سراسر پست ارائه شده است.

خوشه های EKS

Amazon EKS یک سرویس کانتینر مدیریت شده برای اجرا و مقیاس‌بندی برنامه‌های Kubernetes در AWS است. با آمازون EKS، می توانید مشاغل آموزشی توزیع شده را با استفاده از جدیدترین ها به طور موثر اجرا کنید ابر محاسبه الاستیک آمازون نمونه های (Amazon EC2) بدون نیاز به نصب، راه اندازی و نگهداری هواپیما یا گره های کنترلی خود. محبوب است ارکستر برای یادگیری ماشین (ML) و گردش کار هوش مصنوعی. یک خوشه معمولی EKS در AWS شبیه شکل زیر است.

ما یک پروژه متن باز منتشر کرده ایم، AWS DevOps برای EKS (aws-do-eks)، که مجموعه بزرگی از اسکریپت ها و ابزارهای با استفاده آسان و قابل تنظیم را برای ارائه خوشه های EKS و اجرای کارهای آموزشی توزیع شده فراهم می کند. این پروژه بر اساس اصول ساخته شده است چارچوب را انجام دهید: سادگی، انعطاف پذیری و جهانی بودن. شما می توانید خوشه مورد نظر خود را با استفاده از eks.conf فایل را اجرا کنید و سپس با اجرای آن اجرا کنید eks-create.sh اسکریپت دستورالعمل های دقیق در ارائه شده است GitHub repo.

آموزش مدل های PyTorch با استفاده از Torch Distributed Elastic

Torch Distributed Elastic (TDE) یک کتابخانه بومی PyTorch برای آموزش مدل های یادگیری عمیق در مقیاس بزرگ است که در آن مقیاس کردن منابع محاسباتی به صورت پویا بر اساس در دسترس بودن بسیار مهم است. این کنترلر TorchElastic برای Kubernetes یک پیاده سازی بومی Kubernetes برای TDE است که به طور خودکار چرخه حیات پادها و خدمات مورد نیاز برای آموزش TDE را مدیریت می کند. این اجازه می دهد تا به صورت پویا منابع محاسباتی را در حین آموزش در صورت نیاز مقیاس بندی کنید. همچنین با بازیابی مشاغل از خرابی گره، آموزش تحمل خطا را ارائه می دهد.

در این پست به مراحل آموزش PyTorch می پردازیم EfficientNet-B7 و ResNet50 مدل هایی با استفاده از IMAGEnet داده ها به صورت توزیع شده با TDE. ما از PyTorch استفاده می کنیم DistributedData Parallel API و کنترل‌کننده Kubernetes TorchElastic، و کارهای آموزشی ما را روی یک خوشه EKS حاوی چندین گره GPU اجرا کنید. نمودار زیر نمودار معماری آموزش این مدل را نشان می دهد.

آموزش توزیع شده با Amazon EKS و Torch Distributed Elastic PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

TorchElastic برای Kubernetes عمدتا از دو جزء تشکیل شده است: TorchElastic Kubernetes Controller (TEC) و سرور پارامتر (etcd). کنترل کننده مسئول نظارت و مدیریت کارهای آموزشی است و سرور پارامتر گره های کارگر را برای همگام سازی توزیع شده و کشف همتاها ردیابی می کند.

برای اینکه غلاف‌های آموزشی به داده‌ها دسترسی داشته باشند، به یک حجم داده مشترک نیاز داریم که بتوان آن را توسط هر پاد نصب کرد. برخی از گزینه ها برای حجم های مشترک از طریق رابط ذخیره سازی کانتینر درایورهای (CSI) موجود در AWS DevOps برای EKS هستند سیستم فایل الاستیک آمازون (Amazon EFS) و FSx برای Luster.

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

در پیکربندی کلاستر خود، از یک نمونه c5.2xlarge برای پادهای سیستم استفاده می کنیم. ما از سه نمونه p4d.24xlarge به عنوان غلاف کارگر برای آموزش یک مدل EfficientNet استفاده می کنیم. برای آموزش ResNet50، ما از نمونه های p3.8xlarge به عنوان Worker pods استفاده می کنیم. علاوه بر این، ما از یک سیستم فایل مشترک FSx برای ذخیره داده های آموزشی و مدل سازی مصنوعات خود استفاده می کنیم.

نمونه های AWS p4d.24xlarge مجهز به آداپتور پارچه ای الاستیک (EFA) برای ایجاد شبکه بین گره ها. در ادامه در پست بیشتر درباره EFA بحث خواهیم کرد. برای فعال کردن ارتباط از طریق EFA، باید تنظیمات کلاستر را از طریق یک فایل .yaml پیکربندی کنیم. یک فایل نمونه در مخزن GitHub ارائه شده است.

پس از اینکه این فایل .yaml به درستی پیکربندی شد، می‌توانیم کلاستر را با استفاده از اسکریپت ارائه شده در مخزن GitHub راه‌اندازی کنیم:

./eks-create.sh

به GitHub repo برای دستورالعمل های دقیق

عملاً هیچ تفاوتی بین اجرای مشاغل در p4d.24xlarge و p3.8xlarge وجود ندارد. مراحل توضیح داده شده در این پست برای هر دو کار می کند. تنها تفاوت در دسترس بودن EFA در نمونه های p4d.24xlarge است. برای مدل های کوچکتر مانند ResNet50، شبکه استاندارد در مقایسه با شبکه EFA کمترین تأثیر را بر سرعت آموزش دارد.

FSx برای سیستم فایل Luster

FSx برای بارهای کاری محاسباتی با کارایی بالا طراحی شده است و با استفاده از حجم های ذخیره سازی درایو حالت جامد، تأخیر زیر میلی ثانیه ای را ارائه می دهد. ما FSx را انتخاب کردیم زیرا عملکرد بهتری را ارائه می‌کرد که به تعداد زیادی گره مقیاس می‌شد. نکته مهمی که باید به آن توجه داشت این است که FSx فقط می تواند در یک منطقه دسترسی وجود داشته باشد. بنابراین، تمام گره‌هایی که به سیستم فایل FSx دسترسی دارند باید در همان منطقه در دسترس بودن سیستم فایل FSx وجود داشته باشند. یکی از راه‌های رسیدن به این هدف این است که قبل از ایجاد خوشه، منطقه دسترسی مربوطه را در فایل cluster .yaml برای گروه‌های گره خاص مشخص کنید. از طرف دیگر، می‌توانیم بخش شبکه گروه مقیاس خودکار را برای این گره‌ها پس از راه‌اندازی خوشه تغییر دهیم و آن را به استفاده از یک زیرشبکه محدود کنیم. این کار را می توان به راحتی در کنسول آمازون EC2 انجام داد.

با فرض اینکه خوشه EKS راه اندازی و اجرا می شود و شناسه زیرشبکه برای منطقه دسترسی مشخص است، می توانیم با ارائه اطلاعات لازم در فایل سیستم FSx راه اندازی کنیم. fsx.conf فایل همانطور که در صفحهی راهنمای ترجمهها و در حال اجرا deploy.sh اسکریپت در fsx پوشه این گروه خط مشی و امنیتی صحیح را برای دسترسی به سیستم فایل تنظیم می کند. اسکریپت نیز نصب می کند درایور CSI برای FSx به عنوان یک دیمون ست. در نهایت، می‌توانیم با اعمال یک فایل .yaml، ادعای حجم پایدار FSx را در Kubernetes ایجاد کنیم:

kubectl apply -f fsx-pvc-dynamic.yaml

این یک فایل سیستم FSx را در منطقه دسترسی مشخص شده در ایجاد می کند fsx.conf فایل، و همچنین یک ادعای حجم دائمی ایجاد می کند fsx-pvc، که می تواند توسط هر یک از غلاف ها در خوشه به روش خواندن-نوشتن-بسیاری (RWX) نصب شود.

در آزمایش خود، از داده های ImageNet کامل استفاده کردیم که حاوی بیش از 12 میلیون تصویر آموزشی است که به 1,000 کلاس تقسیم شده اند. داده ها را می توان از وب سایت ImageNet. توپ TAR اصلی چندین دایرکتوری دارد، اما برای آموزش مدل ما فقط به آن علاقه داریم ILSVRC/Data/CLS-LOC/، که شامل train و val دایرکتوری های فرعی قبل از آموزش، باید تصاویر را دوباره مرتب کنیم val زیر شاخه برای مطابقت با ساختار دایرکتوری مورد نیاز PyTorch ImageFolder کلاس این را می توان با استفاده از یک ساده انجام داد اسکریپت پایتون پس از کپی شدن داده ها به حجم ثابت در مرحله بعد.

برای کپی کردن داده ها از یک سرویس ذخیره سازی ساده آمازون (Amazon S3) به سیستم فایل FSx، یک تصویر Docker ایجاد می کنیم که شامل اسکریپت هایی برای این کار است. یک نمونه Dockerfile و یک اسکریپت پوسته در آن گنجانده شده است csi پوشه در مخزن GitHub. ما می توانیم تصویر را با استفاده از build.sh اسکریپت و سپس آن را به آمازون ECR با استفاده از push.sh اسکریپت قبل از استفاده از این اسکریپت ها، باید URI صحیح را برای مخزن ECR در آن ارائه کنیم .env فایل در پوشه ریشه مخزن GitHub. پس از اینکه تصویر Docker را به Amazon ECR فشار دادیم، می‌توانیم یک پاد را برای کپی کردن داده‌ها با اعمال فایل .yaml مربوطه راه‌اندازی کنیم:

kubectl apply -f fsx-data-prep-pod.yaml

پاد به طور خودکار اسکریپت را اجرا می کند data-prep.sh برای کپی کردن داده ها از Amazon S3 در حجم مشترک. از آنجایی که داده های ImageNet بیش از 12 میلیون فایل دارد، فرآیند کپی چند ساعت طول می کشد. اسکریپت پایتون imagenet_data_prep.py نیز برای تنظیم مجدد اجرا می شود val مجموعه داده همانطور که توسط PyTorch انتظار می رود.

شتاب شبکه

ما می توانیم از آداپتور پارچه ای الاستیک (EFA) در ترکیب با پشتیبانی از انواع نمونه EC2 برای تسریع ترافیک شبکه بین گره های GPU در خوشه شما. این می تواند هنگام اجرای مشاغل آموزشی توزیع شده بزرگ که ارتباطات شبکه استاندارد ممکن است یک گلوگاه باشد مفید باشد. اسکریپت هایی برای استقرار و آزمایش پلاگین دستگاه EFA در خوشه EKS که در اینجا استفاده می کنیم در پلاگین efa-device پوشه در مخزن GitHub. برای فعال کردن یک کار با EFA در خوشه EKS، علاوه بر اینکه گره‌های خوشه سخت‌افزار و نرم‌افزار لازم را دارند، افزونه دستگاه EFA باید در خوشه مستقر شود و ظرف شغل شما باید دارای CUDA و NCCL سازگار باشد. نسخه نصب شده است.

برای نشان دادن اجرای آزمایش‌های NCCL و ارزیابی عملکرد EFA در نمونه‌های p4d.24xlarge، ابتدا باید عملگر Kubeflow MPI را با اجرای عملیات مربوطه اجرا کنیم. deploy.sh اسکریپت در اپراتور mpi پوشه سپس ما را اجرا می کنیم deploy.sh اسکریپت و به روز رسانی test-efa-nccl.yaml بنابراین محدودیت ها و درخواست های منابع را آشکار می کند vpc.amazonaws.com چهار آداپتور EFA موجود در گره‌های p4d.4xlarge با هم ترکیب می‌شوند تا حداکثر توان را ارائه دهند.

دویدن kubectl apply -f ./test-efa-nccl.yaml برای اعمال تست و سپس نمایش گزارش های غلاف تست. خط زیر در خروجی گزارش تأیید می کند که EFA در حال استفاده است:

NCCL INFO NET/OFI Selected Provider is efa

نتایج آزمون باید مشابه خروجی زیر باشد:

[1,0]<stdout>:#                                                       out-of-place                       in-place
[1,0]<stdout>:#       size         count      type   redop     time   algbw   busbw  error     time   algbw   busbw  error
[1,0]<stdout>:#        (B)    (elements)                       (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
[1,0]<stdout>:           8             2     float     sum    629.7    0.00    0.00  2e-07    631.4    0.00    0.00  1e-07
[1,0]<stdout>:          16             4     float     sum    630.5    0.00    0.00  1e-07    628.1    0.00    0.00  1e-07
[1,0]<stdout>:          32             8     float     sum    627.6    0.00    0.00  1e-07    628.2    0.00    0.00  1e-07
[1,0]<stdout>:          64            16     float     sum    633.6    0.00    0.00  1e-07    628.4    0.00    0.00  6e-08
[1,0]<stdout>:         128            32     float     sum    627.5    0.00    0.00  6e-08    632.0    0.00    0.00  6e-08
[1,0]<stdout>:         256            64     float     sum    634.5    0.00    0.00  6e-08    636.5    0.00    0.00  6e-08
[1,0]<stdout>:         512           128     float     sum    634.8    0.00    0.00  6e-08    635.2    0.00    0.00  6e-08
[1,0]<stdout>:        1024           256     float     sum    646.6    0.00    0.00  2e-07    643.6    0.00    0.00  2e-07
[1,0]<stdout>:        2048           512     float     sum    745.0    0.00    0.01  5e-07    746.0    0.00    0.01  5e-07
[1,0]<stdout>:        4096          1024     float     sum    958.2    0.00    0.01  5e-07    955.8    0.00    0.01  5e-07
[1,0]<stdout>:        8192          2048     float     sum    963.0    0.01    0.02  5e-07    954.5    0.01    0.02  5e-07
[1,0]<stdout>:       16384          4096     float     sum    955.0    0.02    0.03  5e-07    955.5    0.02    0.03  5e-07
[1,0]<stdout>:       32768          8192     float     sum    975.5    0.03    0.06  5e-07   1009.0    0.03    0.06  5e-07
[1,0]<stdout>:       65536         16384     float     sum   1353.4    0.05    0.09  5e-07   1343.5    0.05    0.09  5e-07
[1,0]<stdout>:      131072         32768     float     sum   1395.9    0.09    0.18  5e-07   1392.6    0.09    0.18  5e-07
[1,0]<stdout>:      262144         65536     float     sum   1476.7    0.18    0.33  5e-07   1536.3    0.17    0.32  5e-07
[1,0]<stdout>:      524288        131072     float     sum   1560.3    0.34    0.63  5e-07   1568.3    0.33    0.63  5e-07
[1,0]<stdout>:     1048576        262144     float     sum   1599.2    0.66    1.23  5e-07   1595.3    0.66    1.23  5e-07
[1,0]<stdout>:     2097152        524288     float     sum   1671.1    1.25    2.35  5e-07   1672.5    1.25    2.35  5e-07
[1,0]<stdout>:     4194304       1048576     float     sum   1785.1    2.35    4.41  5e-07   1780.3    2.36    4.42  5e-07
[1,0]<stdout>:     8388608       2097152     float     sum   2133.6    3.93    7.37  5e-07   2135.0    3.93    7.37  5e-07
[1,0]<stdout>:    16777216       4194304     float     sum   2650.9    6.33   11.87  5e-07   2649.9    6.33   11.87  5e-07
[1,0]<stdout>:    33554432       8388608     float     sum   3422.0    9.81   18.39  5e-07   3478.7    9.65   18.09  5e-07
[1,0]<stdout>:    67108864      16777216     float     sum   4783.2   14.03   26.31  5e-07   4782.6   14.03   26.31  5e-07
[1,0]<stdout>:   134217728      33554432     float     sum   7216.9   18.60   34.87  5e-07   7240.9   18.54   34.75  5e-07
[1,0]<stdout>:   268435456      67108864     float     sum    12738   21.07   39.51  5e-07    12802   20.97   39.31  5e-07
[1,0]<stdout>:   536870912     134217728     float     sum    24375   22.03   41.30  5e-07    24403   22.00   41.25  5e-07
[1,0]<stdout>:  1073741824     268435456     float     sum    47904   22.41   42.03  5e-07    47893   22.42   42.04  5e-07
[1,4]<stdout>:test-efa-nccl-worker-0:33:33 [4] NCCL INFO comm 0x7fd4a0000f60 rank 4 nranks 16 cudaDev 4 busId 901c0 - Destroy COMPLETE
[1,0]<stdout>:# Out of bounds values : 0 OK
[1,0]<stdout>:# Avg bus bandwidth    : 8.23785

در نتایج آزمایش می‌توان مشاهده کرد که حداکثر توان خروجی حدود 42 گیگابایت بر ثانیه و متوسط ​​پهنای باند باس تقریباً 8 گیگابایت است.

ما همچنین آزمایش‌هایی را با یک آداپتور EFA فعال و بدون آداپتور EFA انجام دادیم. تمامی نتایج در جدول زیر خلاصه شده است.

تعداد آداپتورهای EFA ارائه دهنده منتخب Net/OFI میانگین پهنای باند (GB/s) حداکثر پهنای باند (GB/s)
4 EFA 8.24 42.04
1 EFA 3.02 5.89
0 پریز 0.97 2.38

ما همچنین دریافتیم که برای مدل‌های نسبتاً کوچک مانند ImageNet، استفاده از شبکه‌های تسریع شده زمان آموزش در هر دوره را تنها با 5 تا 8 درصد در اندازه دسته‌ای 64 کاهش می‌دهد. ، استفاده از شبکه های تسریع شده تأثیر بیشتری دارد. ما کاهش زمان آموزش دوره ای را با 15 تا 18 درصد برای آموزش EfficientNet-B7 با اندازه دسته 1 مشاهده کردیم. تأثیر واقعی EFA بر تمرین شما به اندازه مدل شما بستگی دارد.

نظارت بر پردازنده گرافیکی

قبل از اجرای کار آموزشی نیز می توانیم راه اندازی کنیم CloudWatch آمازون معیارهایی برای تجسم استفاده از GPU در طول آموزش. دانستن اینکه آیا از منابع به طور بهینه استفاده می شود یا به طور بالقوه گرسنگی منابع و تنگناها را در فرآیند آموزش شناسایی می کند، می تواند مفید باشد.

اسکریپت های مربوطه برای راه اندازی CloudWatch در قسمت قرار دارند gpu-metrics پوشه ابتدا یک تصویر داکر با آن ایجاد می کنیم amazon-cloudwatch-agent و nvidia-smi. ما می توانیم از Dockerfile در gpu-metrics پوشه برای ایجاد این تصویر. با فرض اینکه رجیستری ECR قبلاً در .env فایل از مرحله قبل، می توانیم با استفاده از تصویر را بسازیم و فشار دهیم build.sh و push.sh. پس از این، اجرای deploy.sh اسکریپت به طور خودکار تنظیمات را تکمیل می کند. این دیمون ست را با amazon-cloudwatch-agent و معیارهای مختلف را به CloudWatch فشار می دهد. معیارهای GPU در زیر ظاهر می شوند CWAgent فضای نام در کنسول CloudWatch. بقیه معیارهای خوشه در زیر نشان داده می شود ContainerInsights فضای نام

آموزش مدل

تمام اسکریپت های مورد نیاز برای آموزش PyTorch در قسمت قرار دارند کار الاستیک پوشه در مخزن GitHub. قبل از راه اندازی کار آموزشی، باید آن را اجرا کنیم etcd سرور، که توسط TEC برای کشف کارگر و تبادل پارامتر استفاده می شود. این deploy.sh اسکریپت در elasticjob پوشه دقیقاً این کار را انجام می دهد.

برای استفاده از EFA در نمونه‌های p4d.24xlarge، باید از یک تصویر Docker خاص موجود در گالری عمومی آمازون ECR که از ارتباط NCCL از طریق EFA پشتیبانی می کند. ما فقط باید کد آموزشی خود را در این تصویر داکر کپی کنیم. این dockerfile تحت نمونه ها پوشه تصویری را ایجاد می کند تا هنگام اجرای کار آموزشی در نمونه های p4d از آن استفاده شود. مثل همیشه می توانیم از build.sh و فشار.ش اسکریپت های موجود در پوشه برای ساخت و فشار دادن تصویر.

La imagenet-efa.yaml فایل کار آموزشی را شرح می دهد. این فایل .yaml منابع مورد نیاز برای اجرای کار آموزشی را تنظیم می کند و همچنین حجم دائمی را با داده های آموزشی تنظیم شده در بخش قبل نصب می کند.

چند نکته در اینجا قابل ذکر است. تعداد Replica ها باید روی تعداد گره های موجود در خوشه تنظیم شود. در مورد ما، این را روی 3 قرار دادیم زیرا سه گره p4d.24xlarge داشتیم. در imagenet-efa.yaml فایل، nvidia.com/gpu پارامتر تحت منابع و nproc_per_node زیر args باید روی تعداد GPU در هر گره تنظیم شود که در مورد p4d.24xlarge 8 است. همچنین آرگومان کارگر برای اسکریپت پایتون تعداد CPU ها را در هر پردازش تنظیم می کند. ما این را 4 انتخاب کردیم زیرا، در آزمایش‌های ما، این عملکرد بهینه را هنگام اجرا بر روی نمونه‌های p4d.24xlarge ارائه می‌دهد. این تنظیمات برای به حداکثر رساندن استفاده از تمام منابع سخت افزاری موجود در خوشه ضروری هستند.

هنگامی که کار در حال اجرا است، می‌توانیم استفاده از GPU را در CloudWatch برای همه پردازنده‌های گرافیکی در کلاستر مشاهده کنیم. در زیر نمونه ای از یکی از کارهای آموزشی ما با سه گره p4d.24xlarge در خوشه آورده شده است. در اینجا ما از هر گره یک GPU را انتخاب کرده ایم. با تنظیماتی که قبلا ذکر شد، استفاده از GPU در طول مرحله آموزش دوره برای همه گره‌های خوشه نزدیک به 100٪ است.

آموزش توزیع شده با Amazon EKS و Torch Distributed Elastic PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

برای آموزش یک مدل ResNet50 با استفاده از نمونه های p3.8xlarge، دقیقاً به همان مراحلی نیاز داریم که برای آموزش EfficientNet با استفاده از p4d.24xlarge توضیح داده شد. ما همچنین می توانیم از همان تصویر Docker استفاده کنیم. همانطور که قبلا ذکر شد، نمونه های p3.8xlarge به EFA مجهز نیستند. با این حال، برای مدل ResNet50، این یک نقص قابل توجه نیست. این imagenet-fsx.yaml اسکریپت ارائه شده در مخزن GitHub کار آموزشی را با منابع مناسب برای نوع گره p3.8xlarge تنظیم می کند. این کار از همان مجموعه داده از سیستم فایل FSx استفاده می کند.

مقیاس بندی GPU

ما آزمایش هایی را برای مشاهده چگونگی مقیاس زمان آموزش برای مدل EfficientNet-B7 با افزایش تعداد GPU ها انجام دادیم. برای این کار در فایل .yaml آموزشی ما برای هر اجرای آموزشی تعداد ماکت ها را از 1 به 3 تغییر دادیم. ما فقط زمان را برای یک دوره زمانی مشاهده کردیم که از مجموعه داده کامل ImageNet استفاده می‌کردیم. شکل زیر نتایج آزمایش مقیاس‌بندی GPU ما را نشان می‌دهد. خط قرمز نقطه چین نشان می دهد که چگونه باید زمان آموزش از یک اجرا با استفاده از 8 GPU با افزایش تعداد GPU کاهش یابد. همانطور که می بینیم، مقیاس بندی کاملاً به آنچه انتظار می رود نزدیک است.

آموزش توزیع شده با Amazon EKS و Torch Distributed Elastic PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

به طور مشابه، نمودار مقیاس بندی GPU را برای آموزش ResNet50 در نمونه های p3.8xlarge به دست آوردیم. برای این مورد، ماکت های موجود در فایل .yaml خود را از 1 به 4 تغییر دادیم. نتایج این آزمایش در شکل زیر نشان داده شده است.

آموزش توزیع شده با Amazon EKS و Torch Distributed Elastic PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

پاک کردن

برای جلوگیری از هزینه های مرتبط با اجرای نمونه های بیکار، مهم است که منابع را پس از آموزش مدل کاهش دهید. با هر اسکریپتی که منابع ایجاد می کند، GitHub repo یک اسکریپت منطبق برای حذف آنها ارائه می دهد. برای تمیز کردن تنظیمات خود، باید فایل سیستم FSx را قبل از حذف خوشه حذف کنیم زیرا با یک زیرشبکه در VPC خوشه مرتبط است. برای حذف فایل سیستم FSx، فقط باید دستور زیر را اجرا کنیم (از داخل fsx پوشه):

kubectl delete -f fsx-pvc-dynamic.yaml
./delete.sh

توجه داشته باشید که این کار نه تنها حجم ثابت را حذف می کند، بلکه سیستم فایل FSx را نیز حذف می کند و تمام داده های موجود در سیستم فایل از بین می رود. وقتی این مرحله کامل شد، می‌توانیم خوشه را با استفاده از اسکریپت زیر حذف کنیم سابق پوشه:

./eks-delete.sh

با این کار تمام پادهای موجود حذف می شود، کلاستر حذف می شود و VPC ایجاد شده در ابتدا حذف می شود.

نتیجه

در این پست، مراحل مورد نیاز برای اجرای آموزش مدل موازی داده‌های توزیع شده PyTorch در خوشه‌های EKS را شرح دادیم. این کار ممکن است دلهره آور به نظر برسد، اما AWS DevOps برای EKS پروژه ایجاد شده توسط تیم ML Frameworks در AWS تمام اسکریپت ها و ابزارهای لازم را برای ساده کردن فرآیند و دسترسی آسان به آموزش مدل های توزیع شده فراهم می کند.

برای اطلاعات بیشتر در مورد فناوری های استفاده شده در این پست، به سایت مراجعه کنید آمازون EKS و مشعل الاستیک توزیع شده. ما شما را تشویق می کنیم که رویکردی را که در اینجا توضیح داده شده است را در موارد استفاده از آموزش توزیع شده خود اعمال کنید.

منابع


درباره نویسندگان

آموزش توزیع شده با Amazon EKS و Torch Distributed Elastic PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.عمران یونس یک معمار اصلی راه حل برای تیم ML Frameworks در AWS است. او بر روی یادگیری ماشینی در مقیاس بزرگ و بارهای کاری یادگیری عمیق در سراسر سرویس های AWS مانند Amazon EKS و AWS ParallelCluster تمرکز می کند. او تجربه گسترده ای در کاربردهای Deep Leaning در بینایی کامپیوتر و اینترنت اشیاء صنعتی دارد. عمران دکترای خود را در فیزیک ذرات با انرژی بالا گرفت و در آنجا در تجزیه و تحلیل داده های تجربی در مقیاس پتا بایت شرکت داشت.

آموزش توزیع شده با Amazon EKS و Torch Distributed Elastic PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.الکس ایانکولسکی یک معمار نرم افزار و زیرساخت کامل است که دوست دارد کارهای عمیق و عملی انجام دهد. او در حال حاضر یک معمار راه حل اصلی برای یادگیری ماشین خود مدیریت در AWS است. او در نقش خود بر کمک به مشتریان با کانتینری‌سازی و هماهنگ‌سازی بارهای کاری ML و AI در سرویس‌های AWS با کانتینر تمرکز می‌کند. او همچنین نویسنده منبع باز است چارچوب را انجام دهید و یک کاپیتان Docker که عاشق استفاده از فناوری‌های کانتینر برای تسریع سرعت نوآوری و در عین حال حل بزرگترین چالش‌های جهان است. در طول 10 سال گذشته، الکس روی مبارزه با تغییرات آب و هوایی، دموکراتیزه کردن هوش مصنوعی و ML، ایمن‌تر کردن سفر، مراقبت‌های بهداشتی بهتر و هوشمندتر کردن انرژی کار کرده است.

تمبر زمان:

بیشتر از آموزش ماشین AWS