در این پست نحوه کار را به شما نشان می دهیم Kubeflow در AWS (توزیع خاص AWS از Kubeflow) که با ظروف یادگیری عمیق AWS و سیستم فایل الاستیک آمازون (Amazon EFS) همکاری را ساده می کند و انعطاف پذیری را در آموزش مدل های یادگیری عمیق در مقیاس در هر دو فراهم می کند. سرویس الاستیک کوبرنتز آمازون (Amazon EKS) و آمازون SageMaker استفاده از رویکرد معماری ترکیبی
توسعه یادگیری ماشینی (ML) بر چارچوبها و جعبهابزارهای متنباز پیچیده و دائماً در حال تکامل و همچنین اکوسیستمهای سختافزاری پیچیده و پیوسته متکی است. وقتی توسعه ML را به یک خوشه بزرگ کنیم، این یک چالش است. کانتینرها راه حلی را ارائه می دهند، زیرا می توانند نه تنها کد آموزشی، بلکه کل وابستگی را در کتابخانه های سخت افزاری به طور کامل محصور کنند. این یک محیط ML را تضمین می کند که سازگار و قابل حمل است و تکرارپذیری محیط آموزشی را در هر گره جداگانه از کلاستر آموزشی تسهیل می کند.
Kubernetes یک سیستم به طور گسترده پذیرفته شده برای خودکارسازی استقرار زیرساخت، مقیاسبندی منابع و مدیریت این برنامههای کاربردی کانتینری است. با این حال، Kubernetes با در نظر گرفتن ML ساخته نشده است، بنابراین به دلیل اتکای زیاد به فایلهای مشخصات YAML، میتواند برای دانشمندان داده غیرمعمول باشد. تجربه Jupyter وجود ندارد، و بسیاری از قابلیت های خاص ML، مانند مدیریت گردش کار و خطوط لوله، و سایر قابلیت هایی که کارشناسان ML انتظار دارند، مانند تنظیم هایپرپارامتر، میزبانی مدل و موارد دیگر وجود ندارد. چنین قابلیت هایی را می توان ایجاد کرد، اما Kubernetes برای انجام این کار به عنوان هدف اصلی خود طراحی نشده است.
جامعه منبع باز توجه کرد و یک لایه در بالای Kubernetes به نام Kubeflow ایجاد کرد. هدف Kubeflow این است که استقرار گردشهای کاری ML را در Kubernetes ساده، قابل حمل و مقیاسپذیر کند. می توانید از Kubeflow برای استقرار بهترین سیستم های منبع باز برای ML در زیرساخت های مختلف استفاده کنید.
Kubeflow و Kubernetes انعطاف پذیری و کنترل را برای تیم های دانشمند داده فراهم می کنند. با این حال، اطمینان از استفاده زیاد از خوشههای آموزشی که در مقیاس اجرا میشوند با کاهش هزینههای عملیاتی همچنان چالش برانگیز است.
این پست نشان میدهد که چگونه مشتریانی که محدودیتهای داخلی یا سرمایهگذاریهای Kubernetes موجود دارند، میتوانند با استفاده از Amazon EKS و Kubeflow در AWS برای پیادهسازی خط لوله ML برای آموزش توزیعشده بر اساس یک رویکرد خود مدیریت، و استفاده از SageMaker کاملاً مدیریتشده به این چالش رسیدگی کنند. زیرساخت آموزشی با هزینه بهینه، کاملاً مدیریت شده و در مقیاس تولید. این شامل اجرای گام به گام یک معماری آموزشی توزیعشده ترکیبی است که به شما امکان میدهد بین این دو رویکرد در زمان اجرا انتخاب کنید و حداکثر کنترل و انعطافپذیری را با نیازهای سخت برای استقرار شما به ارمغان میآورد. خواهید دید که چگونه می توانید به استفاده از کتابخانه های منبع باز در اسکریپت آموزشی یادگیری عمیق خود ادامه دهید و همچنان آن را برای اجرا در Kubernetes و SageMaker به روشی آگنوستیک پلت فرم سازگار کنید.
Kubeflow در AWS و SageMaker چگونه کمک می کند؟
مدلهای شبکه عصبی ساختهشده با چارچوبهای یادگیری عمیق مانند TensorFlow، PyTorch، MXNet و سایرین، دقت بسیار بالاتری را با استفاده از مجموعه دادههای آموزشی بزرگتر، بهویژه در موارد استفاده از بینایی کامپیوتر و پردازش زبان طبیعی ارائه میکنند. با این حال، با مجموعه داده های آموزشی بزرگ، آموزش مدل های یادگیری عمیق بیشتر طول می کشد، که در نهایت زمان عرضه به بازار را کند می کند. اگر بتوانیم یک خوشه را مقیاس بندی کنیم و زمان آموزش مدل را از هفته ها به روزها یا ساعت ها کاهش دهیم، می تواند تأثیر زیادی بر بهره وری و سرعت کسب و کار داشته باشد.
آمازون EKS به تهیه هواپیمای کنترلی مدیریت شده Kubernetes کمک می کند. میتوانید از Amazon EKS برای ایجاد کلاسترهای آموزشی در مقیاس بزرگ با نمونههای CPU و GPU استفاده کنید و از جعبه ابزار Kubeflow برای ارائه ابزارهای متنباز سازگار با ML و عملیاتیسازی جریانهای کاری ML که قابل حمل و مقیاسپذیر هستند با استفاده از Kubeflow Pipelines برای بهبود بهرهوری تیم خود استفاده کنید. زمان ورود به بازار را کاهش دهید
با این حال، ممکن است چند چالش با این رویکرد وجود داشته باشد:
- اطمینان از حداکثر استفاده از یک خوشه در تیم های علم داده. به عنوان مثال، شما باید نمونههای GPU را در صورت تقاضا تهیه کنید و از استفاده بالای آن برای کارهای سختگیرانه در مقیاس تولید مانند آموزش یادگیری عمیق اطمینان حاصل کنید، و از نمونههای CPU برای کارهای کممشکل مانند پیشپردازش دادهها استفاده کنید.
- اطمینان از در دسترس بودن بالای اجزای زیرساخت Kubeflow سنگین وزن، از جمله پایگاه داده، ذخیره سازی، و احراز هویت، که در گره کارگر خوشه Kubernetes مستقر شده اند. به عنوان مثال، صفحه کنترل Kubeflow مصنوعاتی را تولید می کند (مانند نمونه های MySQL، گزارش های pod یا ذخیره سازی MinIO) که در طول زمان رشد می کنند و به حجم های ذخیره سازی قابل تغییر اندازه با قابلیت های نظارت مداوم نیاز دارند.
- به اشتراک گذاری مجموعه داده آموزشی، کد و محیط های محاسباتی بین توسعه دهندگان، خوشه های آموزشی و پروژه ها چالش برانگیز است. برای مثال، اگر روی مجموعه کتابخانههای خودتان کار میکنید و آن کتابخانهها وابستگیهای متقابل قوی دارند، اشتراکگذاری و اجرای یک کد یکسان بین دانشمندان داده در یک تیم واقعاً سخت میشود. همچنین برای هر اجرا آموزشی باید مجموعه داده آموزشی را دانلود کنید و تصویر آموزشی را با تغییرات کد جدید بسازید.
Kubeflow در AWS به رفع این چالش ها کمک می کند و یک محصول نیمه مدیریتی Kubeflow در سطح سازمانی ارائه می دهد. با Kubeflow در AWS، می توانید برخی از خدمات هواپیمای کنترل Kubeflow مانند پایگاه داده، ذخیره سازی، نظارت و مدیریت کاربر را با سرویس های مدیریت شده AWS جایگزین کنید. سرویس پایگاه داده رابطه آمازون (آمازون RDS)، سرویس ذخیره سازی ساده آمازون (Amazon S3) سیستم فایل الاستیک آمازون (Amazon EFS) آمازون FSx, CloudWatch آمازونو Cognito آمازون.
جایگزینی این اجزای Kubeflow بخشهای حیاتی هواپیمای کنترل Kubeflow را از Kubernetes جدا میکند و طراحی ایمن، مقیاسپذیر، انعطافپذیر و بهینهسازی هزینه را ارائه میدهد. این رویکرد همچنین منابع ذخیره سازی و محاسباتی را از صفحه داده EKS آزاد می کند، که ممکن است برای برنامه هایی مانند آموزش مدل توزیع شده یا سرورهای نوت بوک کاربر مورد نیاز باشد. Kubeflow در AWS همچنین ادغام بومی نوتبوکهای Jupyter را با تصاویر Deep Learning Container (DLC) فراهم میکند، که از پیش بستهبندی شده و با چارچوبهای یادگیری عمیق بهینهسازیشده AWS مانند PyTorch و TensorFlow تنظیم شدهاند که به شما امکان میدهد بلافاصله بدون نیاز به انجام کار نوشتن کد آموزشی خود را شروع کنید. با رزولوشن های وابستگی و بهینه سازی چارچوب. همچنین، ادغام آمازون EFS با خوشه های آموزشی و محیط توسعه به شما امکان می دهد کد و مجموعه داده های آموزشی پردازش شده خود را به اشتراک بگذارید، که از ساخت تصویر ظرف و بارگذاری مجموعه داده های عظیم پس از هر تغییر کد جلوگیری می کند. این ادغامها با Kubeflow در AWS به شما کمک میکند سرعت ساخت مدل و زمان آموزش را افزایش دهید و امکان همکاری بهتر با دادهها و اشتراکگذاری کد آسانتر را فراهم کنید.
Kubeflow در AWS به ساخت یک پلت فرم ML بسیار در دسترس و قوی کمک می کند. این پلتفرم انعطافپذیری را برای ساخت و آموزش مدلهای یادگیری عمیق فراهم میکند و دسترسی به بسیاری از جعبهابزارهای منبع باز، بینشهایی در مورد گزارشها و اشکالزدایی تعاملی برای آزمایش را فراهم میکند. با این حال، دستیابی به حداکثر استفاده از منابع زیرساخت در حالی که آموزش مدل های یادگیری عمیق بر روی صدها پردازنده گرافیکی انجام می شود، همچنان شامل هزینه های عملیاتی زیادی است. این را می توان با استفاده از SageMaker، که یک سرویس کاملاً مدیریت شده طراحی و بهینه سازی شده برای مدیریت کلاسترهای آموزشی کارآمد و بهینه سازی شده است که فقط در صورت درخواست ارائه می شوند، در صورت نیاز مقیاس بندی می شوند، و به طور خودکار پس از اتمام کار خاموش می شوند، در نتیجه نزدیک به 100 را ارائه می دهند. ٪ بهره برداری از منابع. با استفاده از اجزای مدیریت شده SageMaker می توانید SageMaker را با خط لوله Kubeflow ادغام کنید. این به شما امکان می دهد تا گردش های کاری ML را به عنوان بخشی از خطوط لوله Kubeflow عملیاتی کنید، جایی که می توانید از Kubernetes برای آموزش محلی و SageMaker برای آموزش در مقیاس محصول در یک معماری ترکیبی استفاده کنید.
بررسی اجمالی راه حل
معماری زیر نحوه استفاده از Kubeflow Pipelines را برای ساخت و استقرار گردشهای کاری ML سرتاسر قابل حمل و مقیاسپذیر برای اجرای مشروط آموزش توزیعشده در Kubernetes با استفاده از آموزش Kubeflow یا SageMaker بر اساس پارامتر زمان اجرا توضیح میدهد.
آموزش Kubeflow گروهی از اپراتورهای Kubernetes است که پشتیبانی از آموزش توزیع شده مدل های ML را با استفاده از چارچوب های مختلف مانند TensorFlow، PyTorch و غیره به Kubeflow اضافه می کنند. pytorch-operator
اجرای Kubeflow از Kubernetes است منبع سفارشی (PyTorchJob) برای اجرای مشاغل آموزشی PyTorch توزیع شده در Kubernetes.
ما از مولفه PyTorchJob Launcher به عنوان بخشی از خط لوله Kubeflow برای اجرای آموزش های توزیع شده PyTorch در طول مرحله آزمایش استفاده می کنیم، زمانی که به انعطاف پذیری و دسترسی به تمام منابع اساسی برای اشکال زدایی و تجزیه و تحلیل تعاملی نیاز داریم.
ما همچنین از اجزای SageMaker برای Kubeflow Pipelines استفاده می کنیم تا آموزش مدل خود را در مقیاس تولید اجرا کنیم. این به ما امکان می دهد از ویژگی های قدرتمند SageMaker مانند خدمات کاملاً مدیریت شده، مشاغل آموزشی توزیع شده با حداکثر استفاده از GPU و آموزش مقرون به صرفه استفاده کنیم. ابر محاسبه الاستیک آمازون (Amazon EC2) موارد نقطه ای.
به عنوان بخشی از فرآیند ایجاد گردش کار، مراحل زیر (همانطور که در نمودار قبل نشان داده شده است) را برای ایجاد این خط لوله تکمیل میکنید:
- از فایل مانیفست Kubeflow برای ایجاد داشبورد Kubeflow و دسترسی به نوت بوک های Jupyter از داشبورد مرکزی Kubeflow استفاده کنید.
- از Kubeflow Pipeline SDK برای ایجاد و کامپایل خطوط لوله Kubeflow با استفاده از کد پایتون استفاده کنید. کامپایل خط لوله تابع پایتون را به یک منبع گردش کار تبدیل می کند که یک فرمت YAML سازگار با Argo است.
- از مشتری Kubeflow Pipelines SDK برای فراخوانی نقطه پایانی سرویس خط لوله برای اجرای خط لوله استفاده کنید.
- خط لوله متغیرهای زمان اجرا شرطی را ارزیابی می کند و بین SageMaker یا Kubernetes به عنوان محیط اجرای هدف تصمیم می گیرد.
- از مولفه Kubeflow PyTorch Launcher برای اجرای آموزش توزیع شده در محیط بومی Kubernetes استفاده کنید یا از مؤلفه SageMaker برای ارسال آموزش در پلت فرم مدیریت شده SageMaker استفاده کنید.
شکل زیر مؤلفههای Kubeflow Pipelines را نشان میدهد که در معماری نقش دارند که به ما انعطافپذیری میدهد تا بین محیطهای توزیعشده Kubernetes یا SageMaker انتخاب کنیم.
از Case Workflow استفاده کنید
ما از رویکرد گام به گام زیر برای نصب و اجرای Use case برای آموزش توزیع شده با استفاده از Amazon EKS و SageMaker با استفاده از Kubeflow در AWS استفاده می کنیم.
پیش نیازها
برای این راهنما، شما باید پیش نیازهای زیر را داشته باشید:
- An حساب AWS.
- ماشینی با داکر و رابط خط فرمان AWS (AWS CLI) نصب شده است.
- در صورت تمایل می توانید استفاده کنید AWS Cloud9یک محیط توسعه یکپارچه مبتنی بر ابر (IDE) که امکان تکمیل تمام کارها را از مرورگر وب شما فراهم می کند. برای دستورالعمل های راه اندازی، مراجعه کنید راه اندازی Cloud9 IDE. از محیط Cloud9 خود، علامت مثبت را انتخاب کنید و ترمینال جدید را باز کنید.
- نقش ایجاد کنید با نام
sagemakerrole
. سیاست های مدیریت شده را اضافه کنیدAmazonSageMakerFullAccess
وAmazonS3FullAccess
برای دسترسی SageMaker به سطل های S3. این نقش توسط کار SageMaker ارسال شده به عنوان بخشی از مرحله Kubeflow Pipelines استفاده می شود. - مطمئن شوید که حساب شما دارای محدودیت نوع منبع آموزشی SageMaker است
ml.p3.2xlarge
با استفاده به 2 افزایش یافت کنسول سهمیه خدمات
1. Amazon EKS و Kubeflow را روی AWS نصب کنید
شما می توانید از چندین روش مختلف برای ساخت یک خوشه Kubernetes و استقرار Kubeflow استفاده کنید. در این پست، ما بر روی رویکردی تمرکز میکنیم که معتقدیم فرآیند را ساده میکند. ابتدا یک خوشه EKS ایجاد می کنیم، سپس Kubeflow را روی AWS v1.5 روی آن مستقر می کنیم. برای هر یک از این وظایف، ما از یک پروژه متن باز متناظر استفاده می کنیم که از اصول آن پیروی می کند چارچوب را انجام دهید. به جای نصب مجموعه ای از پیش نیازها برای هر کار، کانتینرهای Docker را می سازیم که همه ابزارهای لازم را دارند و وظایف را از داخل کانتینرها انجام می دهند.
ما در این پست از Do Framework استفاده می کنیم که استقرار Kubeflow را با Amazon EFS به عنوان یک افزونه خودکار می کند. برای اطلاع از گزینههای رسمی Kubeflow در مورد استقرار AWS برای استقرار تولید، مراجعه کنید گسترش.
دایرکتوری فعلی و AWS CLI را پیکربندی کنید
ما یک دایرکتوری کاری را پیکربندی می کنیم تا بتوانیم به آن به عنوان نقطه شروع مراحل زیر اشاره کنیم:
ما همچنین یک نمایه AWS CLI را پیکربندی می کنیم. برای انجام این کار، به شناسه کلید دسترسی و کلید دسترسی مخفی an نیاز دارید هویت AWS و مدیریت دسترسی (من هستم) کاربر حساب با امتیازات اداری (ضمیمه خط مشی مدیریت شده موجود) و دسترسی برنامه ای. کد زیر را ببینید:
1.1 یک خوشه EKS ایجاد کنید
اگر از قبل یک خوشه EKS در دسترس دارید، می توانید به بخش بعدی بروید. برای این پست از پروژه aws-do-eks برای ایجاد خوشه ما
- ابتدا پروژه را در پوشه کاری خود کلون کنید
- سپس بسازید و اجرا کنید
aws-do-eks
ظرف:La
build.sh
اسکریپت یک تصویر ظرف Docker ایجاد می کند که دارای تمام ابزارها و اسکریپت های لازم برای تهیه و عملکرد خوشه های EKS است. اینrun.sh
اسکریپت یک ظرف را با استفاده از تصویر Docker ایجاد شده راه اندازی می کند و آن را حفظ می کند، بنابراین ما می توانیم از آن به عنوان محیط مدیریت EKS خود استفاده کنیم. برای دیدن وضعیت خودaws-do-eks
ظرف، شما می توانید اجرا کنید./status.sh
. اگر کانتینر در وضعیت Exited است، می توانید از آن استفاده کنید./start.sh
اسکریپت برای بالا آوردن کانتینر یا راه اندازی مجدد کانتینر، می توانید اجرا کنید./stop.sh
و پس از آن./run.sh
. - یک پوسته در حال اجرا باز کنید
aws-do-eks
ظرف: - برای بررسی پیکربندی کلاستر EKS برای استقرار KubeFlow، دستور زیر را اجرا کنید:
به طور پیش فرض، این پیکربندی یک خوشه به نام ایجاد می کند
eks-kubeflow
درus-west-2
منطقه با شش گره m5.xlarge. همچنین، رمزگذاری حجم های EBS به طور پیش فرض فعال نیست. می توانید با اضافه کردن آن را فعال کنید"volumeEncrypted: true"
به گروه گره و با استفاده از کلید پیش فرض رمزگذاری می شود. در صورت نیاز تنظیمات تنظیمات دیگر را تغییر دهید. - برای ایجاد کلاستر، دستور زیر را اجرا کنید:
فرآیند تهیه خوشه ممکن است تا 30 دقیقه طول بکشد.
- برای اطمینان از اینکه خوشه با موفقیت ایجاد شده است، دستور زیر را اجرا کنید:
خروجی دستور قبلی برای خوشه ای که با موفقیت ایجاد شد شبیه کد زیر است:
یک جلد EFS برای کار آموزشی SageMaker ایجاد کنید
در این مورد، با آموزش مدلهای یادگیری عمیق از دادههایی که قبلاً در Amazon EFS ذخیره شدهاند، به کار آموزش SageMaker سرعت میبخشید. این انتخاب این مزیت را دارد که مشاغل آموزشی شما را مستقیماً از دادههای Amazon EFS بدون نیاز به جابجایی داده راهاندازی میکند و در نتیجه زمان شروع آموزش سریعتر میشود.
ما یک حجم EFS ایجاد می کنیم و درایور EFS Container Storage Interface (CSI) را اجرا می کنیم. این کار توسط یک اسکریپت استقرار واقع در آن انجام می شود /eks/deployment/csi/efs
در داخل aws-do-eks
مخزن
این اسکریپت فرض می کند که شما یک کلاستر EKS در حساب خود دارید. تنظیم CLUSTER_NAME=
در صورتی که بیش از یک خوشه EKS دارید.
این اسکریپت یک حجم EFS را فراهم می کند و اهداف mount را برای زیرشبکه های VPC کلاستر ایجاد می کند. سپس درایور EFS CSI را مستقر کرده و آن را ایجاد می کند efs-sc
کلاس ذخیره سازی و efs-pv
حجم پایدار در خوشه EKS.
پس از اتمام موفقیت آمیز اسکریپت، باید خروجی زیر را مشاهده کنید:
یک نقطه پایانی Amazon S3 VPC ایجاد کنید
شما از یک VPC خصوصی استفاده می کنید که شغل آموزشی SageMaker و سیستم فایل EFS شما به آن دسترسی دارند. برای دسترسی خوشه آموزشی SageMaker به سطل های S3 از VPC خصوصی خود، یک نقطه پایانی VPC ایجاد می کنید:
اکنون می توانید از آن خارج شوید aws-do-eks
پوسته ظرف و به بخش بعدی بروید:
1.2 استقرار Kubeflow در AWS در Amazon EKS
برای استقرار Kubeflow در Amazon EKS، از پروژه aws-do-kubeflow.
- با استفاده از دستورات زیر مخزن را کلون کنید:
- سپس پروژه را پیکربندی کنید:
این اسکریپت فایل پیکربندی پروژه را در یک ویرایشگر متن باز می کند. برای آن مهم است AWS_REGION برای تنظیم به منطقه ای که خوشه شما در آن است، و همچنین AWS_CLUSTER_NAME برای مطابقت با نام خوشه ای که قبلا ایجاد کرده اید. بهطور پیشفرض، پیکربندی شما از قبل به درستی تنظیم شده است، بنابراین اگر نیازی به ایجاد هیچ تغییری ندارید، فقط ویرایشگر را ببندید.
La
build.sh
اسکریپت یک تصویر کانتینر Docker ایجاد میکند که دارای تمام ابزارهای لازم برای استقرار و مدیریت Kubeflow در یک خوشه Kubernetes موجود است. اینrun.sh
اسکریپت یک کانتینر را با استفاده از تصویر Docker شروع میکند و اسکریپت exec.sh یک پوسته فرمان را در ظرف باز میکند که میتوانیم از آن به عنوان محیط مدیریت Kubeflow استفاده کنیم. می توانید استفاده کنید./status.sh
اسکریپت برای دیدن اینکه آیاaws-do-kubeflow
کانتینر آماده و راه اندازی است و./stop.sh
و./run.sh
اسکریپت برای راه اندازی مجدد آن در صورت نیاز. - بعد از اینکه یک پوسته در آن باز شد
aws-do-eks
ظرف، می توانید بررسی کنید که زمینه خوشه پیکربندی شده مطابق انتظار است: - برای استقرار Kubeflow در خوشه EKS، اجرا کنید
deploy.sh
متن:زمانی که همه پادها در فضای نام kubeflow وارد حالت Running شوند، استقرار موفقیت آمیز است. یک خروجی معمولی شبیه کد زیر است:
- برای نظارت بر وضعیت پادهای KubeFlow، در یک پنجره جداگانه، می توانید از دستور زیر استفاده کنید:
- رسانه ها و مطبوعات Ctrl + C وقتی همه پادها در حال اجرا هستند، داشبورد Kubeflow را در خارج از کلاستر با اجرای دستور زیر در معرض دید قرار دهید:
شما باید خروجی شبیه کد زیر را ببینید:
این پورت فرمان، سرویس دروازه ورودی Istio را از خوشه به پورت محلی 8080 شما منتقل می کند. برای دسترسی به داشبورد Kubeflow، به سایت مراجعه کنید. http://localhost:8080 و با استفاده از اعتبار کاربری پیش فرض وارد شوید (user@example.com/12341234). اگر در حال اجرا هستید aws-do-kubeflow
ظرف در AWS Cloud9، سپس می توانید انتخاب کنید پیش نمایش، پس از آن را انتخاب کنید پیش نمایش برنامه در حال اجرا. اگر روی Docker Desktop اجرا میکنید، ممکن است لازم باشد آن را اجرا کنید ./kubeflow-expose.sh
اسکریپت خارج از aws-do-kubeflow
مخزن
2. Kubeflow را در محیط AWS راه اندازی کنید
برای راه اندازی Kubeflow خود در محیط AWS، یک حجم EFS و یک نوت بوک Jupyter ایجاد می کنیم.
2.1 یک حجم EFS ایجاد کنید
برای ایجاد یک حجم EFS، مراحل زیر را انجام دهید:
- در داشبورد Kubeflow، را انتخاب کنید جلد در صفحه ناوبری
- انتخاب کرد حجم جدید.
- برای نام، وارد
efs-sc-claim
. - برای اندازه حجم، وارد
10
. - برای کلاس ذخیره سازی، انتخاب کنید efs-sc.
- برای حالت دسترسی، انتخاب کنید ReadWriteOnce.
- را انتخاب کنید ساختن.
2.2 یک نوت بوک Jupyter ایجاد کنید
برای ایجاد یک نوت بوک جدید، مراحل زیر را انجام دهید:
- در داشبورد Kubeflow، را انتخاب کنید نوت بوک در صفحه ناوبری
- را انتخاب کنید نوت بوک جدید.
- برای نام، وارد
aws-hybrid-nb
. - برای تصویر Jupyter Docket، تصویر را انتخاب کنید
c9e4w0g3/notebook-servers/jupyter-pytorch:1.11.0-cpu-py38-ubuntu20.04-e3-v1.1
(جدیدترین تصویر DLC jupyter-pytorch). - برای پردازنده، وارد
1
. - برای حافظه، وارد
5
. - برای GPU ها، ترک به عنوان هیچ.
- هیچ تغییری در آن ایجاد نکنید حجم فضای کاری بخش.
- در حجم داده ها بخش، را انتخاب کنید حجم موجود را ضمیمه کنید و بخش حجم موجود را گسترش دهید
- برای نام، انتخاب کنید
efs-sc-claim
. - برای مسیر کوه، وارد
/home/jovyan/efs-sc-claim
.
این ولوم EFS را روی غلاف نوت بوک Jupyter شما نصب می کند و می توانید پوشه را ببینیدefs-sc-claim
در رابط آزمایشگاه ژوپیتر شما. شما مجموعه داده آموزشی و کد آموزشی را در این پوشه ذخیره می کنید تا کلاسترهای آموزشی بتوانند بدون نیاز به بازسازی تصاویر ظرف برای آزمایش به آن دسترسی داشته باشند. - انتخاب کنید اجازه دسترسی به خطوط لوله Kubeflow را بدهید در بخش پیکربندی
- را انتخاب کنید راه اندازی.
بررسی کنید که نوت بوک شما با موفقیت ایجاد شده است (ممکن است چند دقیقه طول بکشد). - بر نوت بوک صفحه ، انتخاب کنید اتصال برای ورود به محیط JupyterLab.
- بر رفتن منو ، انتخاب کنید یک مخزن را شبیه سازی کنید.
- برای یک مخزن را شبیه سازی کنید، وارد
https://github.com/aws-samples/aws-do-kubeflow
.
3. آموزش توزیع شده را اجرا کنید
پس از راه اندازی نوت بوک Jupyter، می توانید کل نسخه نمایشی را با استفاده از مراحل سطح بالای زیر از پوشه اجرا کنید. aws-do-kubeflow/workshop
در مخزن کلون شده:
- اسکریپت آموزشی PyTorch Distributed Data Parallel (DDP): به اسکریپت آموزشی PyTorch DDP cifar10-distributed-gpu-final.py مراجعه کنید، که شامل یک نمونه شبکه عصبی کانولوشنال و منطق برای توزیع آموزش بر روی یک CPU چند گره و کلاستر GPU است. (برای جزئیات به 3.1 مراجعه کنید)
- نصب کتابخانه ها: نوت بوک را اجرا کنید
0_initialize_dependencies.ipynb
برای مقداردهی اولیه همه وابستگی ها (برای جزئیات به 3.2 مراجعه کنید) - آموزش کار توزیع شده PyTorch را در Kubernetes اجرا کنید: نوت بوک را اجرا کنید
1_submit_pytorchdist_k8s.ipynb
برای ایجاد و ارسال آموزش توزیع شده بر روی یک کانتینر اصلی و دو کانتینر کارگر با استفاده از منبع سفارشی Kubernetes فایل PyTorchJob YAML با استفاده از کد پایتون. (برای جزئیات به 3.3 مراجعه کنید) - یک خط لوله ترکیبی Kubeflow ایجاد کنید: نوت بوک را اجرا کنید
2_create_pipeline_k8s_sagemaker.ipynb
برای ایجاد خط لوله ترکیبی Kubeflow که آموزش های توزیع شده را در SageMaker یا Amazon EKS با استفاده از متغیر زمان اجرا اجرا می کند.training_runtime
. (برای جزئیات به 3.4 مراجعه کنید)
مطمئن شوید که نوت بوک را اجرا کرده اید 1_submit_pytorchdist_k8s.ipynb
قبل از شروع نوت بوک 2_create_pipeline_k8s_sagemaker.ipynb
.
در بخش های بعدی به تفصیل هر یک از این مراحل را مورد بحث قرار می دهیم.
3.1 اسکریپت آموزشی PyTorch Distributed Data Parallel (DDP).
به عنوان بخشی از آموزش توزیع شده، ما یک مدل طبقه بندی ایجاد شده توسط یک شبکه عصبی کانولوشنال ساده را آموزش می دهیم که بر روی مجموعه داده CIFAR10 عمل می کند. فیلمنامه آموزشی cifar10-distributed-gpu-final.py
فقط شامل کتابخانه های منبع باز است و برای اجرا در کلاسترهای آموزشی Kubernetes و SageMaker در دستگاه های GPU یا نمونه های CPU سازگار است. قبل از اجرای نمونه های نوت بوک خود، به چند جنبه مهم اسکریپت آموزشی نگاه می کنیم.
ما با استفاده از torch.distributed
ماژول، که شامل پشتیبانی PyTorch و اصول ارتباطی اولیه برای موازی سازی چند فرآیندی در سراسر گره ها در خوشه است:
ما یک مدل طبقه بندی تصویر ساده را با استفاده از ترکیبی از لایه های کانولوشن، حداکثر ادغام و لایه های خطی ایجاد می کنیم که یک تابع فعال سازی relu در گذر جلوی آموزش مدل به آن اعمال می شود:
ما از مشعل DataLoader استفاده می کنیم که مجموعه داده و را ترکیب می کند DistributedSampler
(زیر مجموعه ای از داده ها را به صورت توزیع شده با استفاده از بارگیری می کند torch.nn.parallel.DistributedDataParallel
) و یک تکرار کننده تک فرآیندی یا چند فرآیندی روی داده ها ارائه می دهد:
اگر کلاستر آموزشی دارای پردازنده گرافیکی باشد، اسکریپت آموزش را روی دستگاه های CUDA اجرا می کند و متغیر دستگاه دستگاه CUDA پیش فرض را نگه می دارد:
قبل از اجرای آموزش توزیع شده با استفاده از PyTorch DistributedDataParallel
برای اجرای پردازش توزیع شده روی چندین گره، باید محیط توزیع شده را با فراخوانی مقداردهی اولیه کنید init_process_group
. این در هر ماشین از کلاستر آموزشی مقدار دهی اولیه می شود.
مدل طبقهبندیکننده را نمونهسازی میکنیم و مدل را روی دستگاه مورد نظر کپی میکنیم. اگر آموزش توزیع شده برای اجرا در چندین گره فعال باشد، DistributedDataParallel
کلاس به عنوان یک شی بسته بندی در اطراف شی مدل استفاده می شود، که امکان آموزش توزیع همزمان در چندین ماشین را فراهم می کند. داده های ورودی بر روی ابعاد دسته ای تقسیم می شوند و یک کپی از مدل بر روی هر دستگاه و هر دستگاه قرار می گیرد.
3.2 کتابخانه ها را نصب کنید
شما تمام کتابخانه های لازم را برای اجرای مثال آموزشی توزیع شده PyTorch نصب خواهید کرد. این شامل Kubeflow Pipelines SDK، Training Operator Python SDK، کلاینت پایتون برای Kubernetes و Amazon SageMaker Python SDK است.
3.3 آموزش کار توزیع شده PyTorch را در Kubernetes اجرا کنید
دفترچه یادداشت 1_submit_pytorchdist_k8s.ipynb
فایل YAML PyTorchJob منبع سفارشی Kubernetes را با استفاده از آموزش Kubeflow و کلاینت Kubernetes Python SDK ایجاد می کند. در ادامه چند قطعه مهم از این دفترچه آورده شده است.
ما PyTorchJob YAML را با کانتینرهای اولیه و worker همانطور که در کد زیر نشان داده شده است ایجاد می کنیم:
این با استفاده از هواپیمای کنترل Kubernetes ارسال می شود PyTorchJobClient
:
گزارش های آموزشی Kubernetes را مشاهده کنید
شما می توانید گزارش های آموزشی را از همان نوت بوک Jupyter با استفاده از کد پایتون یا از پوسته مشتری Kubernetes مشاهده کنید.
3.4 یک خط لوله ترکیبی Kubeflow ایجاد کنید
دفترچه یادداشت 2_create_pipeline_k8s_sagemaker.ipynb
یک خط لوله ترکیبی Kubeflow بر اساس متغیر زمان اجرا شرطی ایجاد می کند training_runtime
، همانطور که در کد زیر نشان داده شده است. نوت بوک از Kubeflow Pipelines SDK و مجموعه ای از بسته های پایتون را برای تعیین و اجرای خطوط لوله گردش کار ML ارائه می کند. به عنوان بخشی از این SDK، ما از بسته های زیر استفاده می کنیم:
- دکوراتور بسته زبان مخصوص دامنه (DSL).
dsl.pipeline
، که توابع پایتون را برای بازگشت خط لوله تزئین می کند - La
dsl.Condition
بسته، که نشاندهنده گروهی از عملیات است که فقط زمانی اجرا میشوند که یک شرط خاص مانند بررسی کردن انجام شودtraining_runtime
ارزش به عنوانsagemaker
orkubernetes
کد زیر را ببینید:
ما آموزش توزیع شده SageMaker را با استفاده از دو نمونه ml.p3.2xlarge پیکربندی می کنیم.
پس از تعریف خط لوله، می توانید خط لوله را با مشخصات Argo YAML با استفاده از Kubeflow Pipelines SDK کامپایل کنید. kfp.compiler
بسته بندی شما می توانید این خط لوله را با استفاده از سرویس گیرنده Kubeflow Pipeline SDK اجرا کنید، که نقطه پایانی سرویس Pipelines را فراخوانی می کند و در هدرهای احراز هویت مناسب درست از نوت بوک عبور می کند. کد زیر را ببینید:
اگر شما یک sagemaker import
خطا، !pip install sagemaker را اجرا کنید و هسته را مجددا راه اندازی کنید (در هسته منو ، انتخاب کنید کرنل را مجددا راه اندازی کنید).
انتخاب جزئیات را اجرا کنید پیوند زیر آخرین سلول برای مشاهده خط لوله Kubeflow.
مرحله ایجاد خط لوله را با training_runtime='kubernetes'
برای آزمایش خط لوله اجرا شده در محیط Kubernetes. این training_runtime
متغیر همچنین می تواند در یک سناریوی تولید در خط لوله CI/CD شما ارسال شود.
گزارشهای اجرای خط لوله Kubeflow را برای مؤلفه SageMaker مشاهده کنید
تصویر زیر جزئیات خط لوله ما را برای جزء SageMaker نشان می دهد.
مرحله شغلی آموزشی را انتخاب کنید و بر روی سیاههها برگه، پیوند گزارشهای CloudWatch را برای دسترسی به گزارشهای SageMaker انتخاب کنید.
تصویر زیر گزارشهای CloudWatch را برای هر یک از دو نمونه ml.p3.2xlarge نشان میدهد.
هر یک از گروه ها را برای دیدن گزارش ها انتخاب کنید.
گزارشهای اجرای خط لوله Kubeflow را برای مؤلفه Kubeflow PyTorchJob Launcher مشاهده کنید
تصویر زیر جزئیات خط لوله را برای جزء Kubeflow ما نشان می دهد.
با استفاده از دستورات زیر را اجرا کنید Kubectl
در پوسته مشتری Kubernetes خود که به خوشه Kubernetes متصل است تا گزارشها را مشاهده کند (جایگزین فضای نام و نامهای غلاف خود شوید):
4.1 پاکسازی
برای پاکسازی تمام منابعی که در حساب ایجاد کرده ایم، باید آنها را به ترتیب معکوس حذف کنیم.
- نصب Kubeflow را با اجرا حذف کنید
./kubeflow-remove.sh
درaws-do-kubeflow
ظرف اولین مجموعه از دستورات اختیاری هستند و می توانند در صورتی که قبلاً پوسته دستوری در خود ندارید از آنها استفاده کنیدaws-do-kubeflow
ظرف باز است - از
aws-do-eks
پوشه ظرف، حجم EFS را حذف کنید. اولین مجموعه از دستورات اختیاری است و می تواند در صورتی که قبلاً پوسته دستوری در خود ندارید استفاده شودaws-do-eks
ظرف باز استحذف Amazon EFS برای آزاد کردن رابط شبکه مرتبط با VPC که برای خوشه خود ایجاد کردهایم ضروری است. توجه داشته باشید که حذف حجم EFS هر داده ای را که روی آن ذخیره می شود از بین می برد.
- از
aws-do-eks
ظرف، اجرا کنیدeks-delete.sh
اسکریپت برای حذف خوشه و سایر منابع مرتبط با آن، از جمله VPC:
خلاصه
در این پست، برخی از چالشهای معمول آموزش مدل توزیعشده و گردشهای کاری ML را مورد بحث قرار دادیم. ما یک نمای کلی از Kubeflow در توزیع AWS ارائه کردیم و دو پروژه منبع باز را به اشتراک گذاشتیم (aws-do-eks و aws-do-kubeflow) که تهیه زیرساخت و استقرار Kubeflow را بر روی آن ساده می کند. در نهایت، ما یک معماری ترکیبی را توصیف و نشان دادیم که بارهای کاری را قادر میسازد به طور یکپارچه بین اجرا در یک Kubernetes خود مدیریت شده و زیرساخت SageMaker کاملاً مدیریت شده منتقل شوند. ما شما را تشویق می کنیم که از این معماری ترکیبی برای موارد استفاده خود استفاده کنید.
شما می توانید از مخزن AWS Labs برای ردیابی تمام مشارکت های AWS به Kubeflow. شما همچنین می توانید ما را در Kubeflow #AWS Slack Channel; بازخورد شما در آنجا به ما کمک می کند تا ویژگی های بعدی را برای مشارکت در پروژه Kubeflow اولویت بندی کنیم.
با تشکر ویژه از Sree Arasanagatta (مدیر توسعه نرم افزار AWS ML) و Suraj Kota (مهندس توسعه نرم افزار) برای حمایتشان از راه اندازی این پست.
درباره نویسندگان
کانوالجیت خرمی یک معمار راه حل های تخصصی AI/ML در خدمات وب آمازون است. او با محصول، مهندسی و مشتریان AWS کار میکند تا راهنماییها و کمکهای فنی ارائه دهد و به آنها کمک کند ارزش راهحلهای ترکیبی ML خود را هنگام استفاده از AWS بهبود بخشند. Kanwaljit در کمک به مشتریان با برنامه های کاربردی کانتینری و یادگیری ماشین تخصص دارد.
گوتام کومار یک مهندس نرم افزار با AWS AI Deep Learning است. او AWS Deep Learning Containers و AWS Deep Learning AMI را توسعه داده است. او علاقه زیادی به ساخت ابزار و سیستم برای هوش مصنوعی دارد. در اوقات فراغت از دوچرخه سواری و کتاب خواندن لذت می برد.
الکس ایانکولسکی یک معمار نرم افزار و زیرساخت کامل است که دوست دارد کارهای عمیق و عملی انجام دهد. او در حال حاضر یک معمار راه حل اصلی برای یادگیری ماشین خود مدیریت در AWS است. او در نقش خود بر کمک به مشتریان با کانتینریسازی و هماهنگسازی بارهای کاری ML و AI در سرویسهای AWS با کانتینر تمرکز میکند. او همچنین نویسنده منبع باز است چارچوب را انجام دهید و یک کاپیتان Docker که عاشق استفاده از فناوریهای کانتینر برای تسریع سرعت نوآوری و در عین حال حل بزرگترین چالشهای جهان است. در طول 10 سال گذشته، الکس روی مبارزه با تغییرات آب و هوایی، دموکراتیزه کردن هوش مصنوعی و ML، ایمنتر کردن سفر، مراقبتهای بهداشتی بهتر و هوشمندتر کردن انرژی کار کرده است.
- پیشرفته (300)
- AI
- آی هنر
- مولد هنر ai
- ربات ai
- سیستم فایل الاستیک آمازون (EFS)
- سرویس الاستیک کوبرنتز آمازون
- آمازون SageMaker
- هوش مصنوعی
- گواهی هوش مصنوعی
- هوش مصنوعی در بانکداری
- ربات هوش مصنوعی
- ربات های هوش مصنوعی
- نرم افزار هوش مصنوعی
- AWS Cloud9
- آموزش ماشین AWS
- بلاکچین
- کنفرانس بلاک چین ai
- coingenius
- هوش مصنوعی محاوره ای
- کنفرانس کریپتو ai
- راه حل های مشتری
- دل-ه
- یادگیری عمیق
- گوگل ai
- فراگیری ماشین
- افلاطون
- افلاطون آی
- هوش داده افلاطون
- بازی افلاطون
- PlatoData
- بازی پلاتو
- PyTorch در AWS
- مقیاس Ai
- نحو
- زفیرنت