في هذا المنشور ، نوضح كيف Kubeflow على AWS (توزيع Kubeflow الخاص بـ AWS) يُستخدم مع حاويات AWS Deep Learning و نظام ملفات أمازون المرن (Amazon EFS) يبسط التعاون ويوفر المرونة في تدريب نماذج التعلم العميق على نطاق واسع على كليهما خدمة أمازون مطاطا Kubernetes (Amazon EKS) و الأمازون SageMaker باستخدام نهج العمارة الهجين.
يعتمد تطوير التعلم الآلي (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 وغيرها دقة أعلى بكثير باستخدام مجموعات بيانات تدريب أكبر بشكل ملحوظ ، خاصة في حالات استخدام رؤية الكمبيوتر ومعالجة اللغة الطبيعية. ومع ذلك ، مع مجموعات البيانات التدريبية الكبيرة ، يستغرق الأمر وقتًا أطول لتدريب نماذج التعلم العميق ، مما يؤدي في النهاية إلى إبطاء وقت التسويق. إذا تمكنا من توسيع نطاق مجموعة وخفض وقت تدريب النموذج من أسابيع إلى أيام أو ساعات ، فقد يكون لذلك تأثير كبير على الإنتاجية وسرعة العمل.
تساعد Amazon EKS في توفير مستوى التحكم Kubernetes المُدار. يمكنك استخدام Amazon EKS لإنشاء مجموعات تدريب واسعة النطاق مع مثيلات وحدة المعالجة المركزية ووحدة معالجة الرسومات واستخدام مجموعة أدوات Kubeflow لتوفير أدوات مفتوحة المصدر ومتوافقة مع ML وتفعيل تدفقات عمل ML التي تكون محمولة وقابلة للتطوير باستخدام Kubeflow Pipelines لتحسين إنتاجية فريقك و تقليل الوقت اللازم للتسويق.
ومع ذلك ، يمكن أن يكون هناك نوعان من التحديات مع هذا النهج:
- ضمان الاستفادة القصوى من الكتلة عبر فرق علوم البيانات. على سبيل المثال ، يجب عليك توفير مثيلات GPU عند الطلب والتأكد من استخدامها العالي للمهام التي تتطلب نطاقًا إنتاجيًا مثل التدريب على التعلم العميق ، واستخدام مثيلات وحدة المعالجة المركزية للمهام الأقل تطلبًا مثل المعالجة المسبقة للبيانات
- ضمان التوفر العالي لمكونات البنية التحتية الثقيلة Kubeflow ، بما في ذلك قاعدة البيانات والتخزين والمصادقة ، التي يتم نشرها في عقدة عامل مجموعة Kubernetes. على سبيل المثال ، يقوم مستوى التحكم Kubeflow بإنشاء عناصر أثرية (مثل مثيلات MySQL أو سجلات pod أو تخزين MinIO) التي تنمو بمرور الوقت وتحتاج إلى أحجام تخزين قابلة لتغيير الحجم مع إمكانات المراقبة المستمرة.
- تعد مشاركة مجموعة بيانات التدريب ، والتعليمات البرمجية ، وبيئات الحساب بين المطورين ومجموعات التدريب والمشاريع أمرًا صعبًا. على سبيل المثال ، إذا كنت تعمل على مجموعتك الخاصة من المكتبات وكانت تلك المكتبات ذات ترابط قوي ، فسيكون من الصعب حقًا مشاركة وتشغيل نفس الجزء من الكود بين علماء البيانات في نفس الفريق. أيضًا ، يتطلب منك كل تشغيل تدريب تنزيل مجموعة بيانات التدريب وإنشاء صورة التدريب بتغييرات التعليمات البرمجية الجديدة.
تساعد Kubeflow على AWS في مواجهة هذه التحديات وتوفر منتج Kubeflow شبه مُدار على مستوى المؤسسة. باستخدام Kubeflow على AWS ، يمكنك استبدال بعض خدمات مستوى التحكم Kubeflow مثل قاعدة البيانات والتخزين والمراقبة وإدارة المستخدم بخدمات مُدارة من AWS مثل خدمة قاعدة بيانات الأمازون (Amazon RDS) ، خدمة تخزين أمازون البسيطة (Amazon S3) ، نظام ملفات أمازون المرن (Amazon EFS) ، أمازون FSx, الأمازون CloudWatchو أمازون كوجنيتو.
يؤدي استبدال مكونات Kubeflow هذه إلى فصل الأجزاء المهمة من مستوى التحكم Kubeflow عن Kubernetes ، مما يوفر تصميمًا آمنًا وقابلًا للتطوير ومرنًا ومنخفض التكلفة. يعمل هذا النهج أيضًا على تحرير موارد التخزين وحساب الموارد من مستوى بيانات EKS ، والتي قد تحتاجها التطبيقات مثل التدريب على النموذج الموزع أو خوادم الكمبيوتر المحمول للمستخدم. يوفر Kubeflow على AWS أيضًا تكاملًا أصليًا لدفاتر Jupyter مع صور Deep Learning Container (DLC) ، والتي تم تعبئتها مسبقًا وتكوينها مسبقًا باستخدام أطر التعلم العميق المحسّنة من AWS مثل PyTorch و TensorFlow التي تسمح لك بالبدء في كتابة رمز التدريب الخاص بك على الفور دون التعامل مع قرارات التبعية وتحسينات إطار العمل. أيضًا ، يتيح لك تكامل Amazon EFS مع مجموعات التدريب وبيئة التطوير مشاركة التعليمات البرمجية الخاصة بك ومجموعة بيانات التدريب التي تمت معالجتها ، والتي تتجنب إنشاء صورة الحاوية وتحميل مجموعات بيانات ضخمة بعد كل تغيير في التعليمات البرمجية. تساعدك عمليات التكامل هذه مع Kubeflow على AWS على تسريع بناء النموذج ووقت التدريب والسماح بتعاون أفضل مع مشاركة أسهل للبيانات والتعليمات البرمجية.
تساعد Kubeflow على AWS في بناء نظام أساسي قوي ومتاح للغاية للتعلم الآلي. توفر هذه المنصة المرونة لبناء نماذج التعلم العميق وتدريبها وتوفر الوصول إلى العديد من مجموعات الأدوات مفتوحة المصدر ، والرؤى حول السجلات ، والتصحيح التفاعلي للتجربة. ومع ذلك ، فإن تحقيق أقصى استفادة من موارد البنية التحتية أثناء تدريب نماذج التعلم العميق على مئات من وحدات معالجة الرسومات لا يزال ينطوي على الكثير من النفقات العامة التشغيلية. يمكن معالجة ذلك باستخدام SageMaker ، وهي خدمة مُدارة بالكامل تم تصميمها وتحسينها للتعامل مع مجموعات التدريب عالية الأداء والمُحسّنة من حيث التكلفة والتي يتم توفيرها فقط عند الطلب ، وتوسيع نطاقها حسب الحاجة ، وإغلاقها تلقائيًا عند اكتمال الوظائف ، وبالتالي توفير ما يقرب من 100 ٪ استخدام الموارد. يمكنك دمج SageMaker مع Kubeflow Pipelines باستخدام مكونات SageMaker المُدارة. يتيح لك ذلك تشغيل تدفقات عمل ML كجزء من خطوط أنابيب Kubeflow ، حيث يمكنك استخدام Kubernetes للتدريب المحلي و SageMaker للتدريب على مستوى المنتج في بنية مختلطة.
حل نظرة عامة
تصف البنية التالية كيفية استخدامنا لخطوط أنابيب Kubeflow لبناء ونشر تدفقات عمل ML المحمولة والقابلة للتطوير من طرف إلى طرف لتشغيل التدريب الموزع بشكل مشروط على Kubernetes باستخدام تدريب Kubeflow أو SageMaker استنادًا إلى معلمة وقت التشغيل.
تدريب Kubeflow عبارة عن مجموعة من مشغلي Kubernetes الذين يضيفون إلى Kubeflow دعمًا للتدريب الموزع لنماذج ML باستخدام أطر عمل مختلفة مثل TensorFlow و PyTorch وغيرها. pytorch-operator
هو تطبيق Kubeflow لـ Kubernetes مورد مخصص (PyTorchJob) لتشغيل وظائف تدريب PyTorch الموزعة على Kubernetes.
نستخدم مكون PyTorchJob Launcher كجزء من خط أنابيب Kubeflow لتشغيل تدريب PyTorch الموزع أثناء مرحلة التجريب عندما نحتاج إلى المرونة والوصول إلى جميع الموارد الأساسية للتصحيح التفاعلي والتحليل.
نستخدم أيضًا مكونات SageMaker لخطوط أنابيب Kubeflow لتشغيل تدريب النموذج الخاص بنا على نطاق الإنتاج. يتيح لنا ذلك الاستفادة من ميزات SageMaker القوية مثل الخدمات المُدارة بالكامل ، ووظائف التدريب الموزعة مع أقصى استخدام لوحدة معالجة الرسومات ، والتدريب الفعال من حيث التكلفة من خلال الأمازون الحوسبة المرنة السحابية (Amazon EC2) مثيلات بقعة.
كجزء من عملية إنشاء سير العمل ، يمكنك إكمال الخطوات التالية (كما هو موضح في الرسم التخطيطي السابق) لإنشاء خط الأنابيب هذا:
- استخدم ملف بيان Kubeflow لإنشاء لوحة معلومات Kubeflow والوصول إلى دفاتر Jupyter من لوحة معلومات Kubeflow المركزية.
- استخدم SDK لخط أنابيب Kubeflow لإنشاء خطوط أنابيب Kubeflow وتجميعها باستخدام كود Python. يحول تجميع خطوط الأنابيب وظيفة Python إلى مورد سير عمل ، وهو تنسيق YAML متوافق مع Argo.
- استخدم عميل Kubeflow Pipelines SDK لاستدعاء نقطة نهاية خدمة خط الأنابيب لتشغيل خط الأنابيب.
- يقوم خط الأنابيب بتقييم متغيرات وقت التشغيل الشرطي ويقرر بين SageMaker أو Kubernetes كبيئة تشغيل الهدف.
- استخدم مكون Kubeflow PyTorch Launcher لتشغيل التدريب الموزع على بيئة Kubernetes الأصلية ، أو استخدم مكون SageMaker لإرسال التدريب على النظام الأساسي المُدار من SageMaker.
يوضح الشكل التالي مكونات خطوط أنابيب Kubeflow المتضمنة في البنية التي تمنحنا المرونة للاختيار بين بيئات Kubernetes أو SageMaker الموزعة.
استخدام حالة سير العمل
نستخدم النهج التالي خطوة بخطوة لتثبيت حالة الاستخدام وتشغيلها للتدريب الموزع باستخدام Amazon EKS و SageMaker باستخدام Kubeflow على AWS.
المتطلبات الأساسية المسبقة
في هذا الدليل ، يجب أن يكون لديك المتطلبات الأساسية التالية:
- An حساب AWS.
- آلة مع Docker و واجهة سطر الأوامر AWS (AWS CLI) مثبت.
- اختياريا ، يمكنك استخدام سحابة AWS 9، بيئة تطوير متكاملة قائمة على السحابة (IDE) تتيح إكمال جميع الأعمال من متصفح الويب الخاص بك. للحصول على تعليمات الإعداد ، ارجع إلى إعداد Cloud9 IDE. من بيئة Cloud9 الخاصة بك ، اختر علامة الجمع وافتح محطة جديدة.
- قم بإنشاء دور مع اسم
sagemakerrole
. أضف السياسات المُدارةAmazonSageMakerFullAccess
وAmazonS3FullAccess
لمنح SageMaker إمكانية الوصول إلى حاويات S3. يتم استخدام هذا الدور بواسطة وظيفة SageMaker المقدمة كجزء من خطوة خطوط أنابيب Kubeflow. - تأكد من أن حسابك يحتوي على حد نوع مورد تدريب 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. للقيام بذلك ، تحتاج إلى معرف مفتاح الوصول ومفتاح الوصول السري لملف إدارة الهوية والوصول AWS (انا) المستخدم حساب بامتيازات إدارية (أرفق السياسة المدارة الحالية) والوصول الآلي. انظر الكود التالي:
1.1 إنشاء مجموعة EKS
إذا كان لديك بالفعل مجموعة EKS متاحة ، فيمكنك التخطي إلى القسم التالي. في هذا المنشور ، نستخدم ملف مشروع aws-do-eks لإنشاء مجموعتنا.
- أولا استنساخ المشروع في دليل العمل الخاص بك
- ثم قم ببناء وتشغيل ملف
aws-do-eks
حاوية:•
build.sh
يقوم البرنامج النصي بإنشاء صورة حاوية Docker تحتوي على جميع الأدوات والبرامج النصية اللازمة لتوفير وتشغيل مجموعات EKS. الrun.sh
يبدأ البرنامج النصي الحاوية باستخدام صورة Docker التي تم إنشاؤها ويحافظ عليها ، حتى نتمكن من استخدامها كبيئة إدارة EKS الخاصة بنا. لمعرفة حالة ملفaws-do-eks
حاوية ، يمكنك تشغيلها./status.sh
. إذا كانت الحاوية في حالة "خروج" ، يمكنك استخدام./start.sh
البرنامج النصي لإحضار الحاوية ، أو لإعادة تشغيل الحاوية ، يمكنك تشغيل./stop.sh
تليها./run.sh
. - فتح قذيفة في الجري
aws-do-eks
حاوية: - لمراجعة تكوين مجموعة EKS لنشر KubeFlow ، قم بتشغيل الأمر التالي:
بشكل افتراضي ، يُنشئ هذا التكوين كتلة باسم
eks-kubeflow
في الus-west-2
منطقة بها ستة عقد m5.xlarge. أيضًا ، لا يتم تمكين تشفير وحدات تخزين EBS افتراضيًا. يمكنك تمكينه عن طريق إضافة"volumeEncrypted: true"
إلى nodegroup وسيتم تشفيرها باستخدام المفتاح الافتراضي. قم بتعديل إعدادات التكوينات الأخرى إذا لزم الأمر. - لإنشاء الكتلة ، قم بتشغيل الأمر التالي:
قد تستغرق عملية توفير الكتلة ما يصل إلى 30 دقيقة.
- للتحقق من إنشاء الكتلة بنجاح ، قم بتشغيل الأمر التالي:
الإخراج من الأمر السابق للكتلة التي تم إنشاؤها بنجاح يشبه الكود التالي:
قم بإنشاء وحدة تخزين EFS لوظيفة تدريب SageMaker
في حالة الاستخدام هذه ، يمكنك تسريع مهمة تدريب SageMaker من خلال تدريب نماذج التعلم العميق من البيانات المخزنة بالفعل في Amazon EFS. يتمتع هذا الاختيار بميزة الإطلاق المباشر لوظائف التدريب الخاصة بك من البيانات في Amazon EFS دون الحاجة إلى نقل البيانات ، مما يؤدي إلى أوقات بدء التدريب بشكل أسرع.
نقوم بإنشاء وحدة تخزين EFS ونشر برنامج تشغيل واجهة تخزين حاوية EFS (CSI). يتم تحقيق ذلك من خلال برنامج نصي للنشر موجود في /eks/deployment/csi/efs
في حدود aws-do-eks
حاوية.
يفترض هذا البرنامج النصي أن لديك مجموعة EKS واحدة في حسابك. تعيين CLUSTER_NAME=
في حال كان لديك أكثر من مجموعة EKS.
يوفر هذا البرنامج النصي وحدة تخزين EFS ويقوم بإنشاء أهداف تحميل للشبكات الفرعية للكتلة 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 لمطابقة اسم الكتلة التي أنشأتها سابقًا. بشكل افتراضي ، تم تعيين التكوين الخاص بك بشكل صحيح بالفعل ، لذلك إذا لم تكن بحاجة إلى إجراء أي تغييرات ، فما عليك سوى إغلاق المحرر.
•
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 في حالة التشغيل. الإخراج النموذجي يشبه الكود التالي:
- لمراقبة حالة حاضنات 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.
- في حالة وضع الوصول، اختر اقرأ واكتب مرة واحدة.
- اختار إنشاء.
2.2 إنشاء دفتر Jupyter
لإنشاء دفتر ملاحظات جديد ، أكمل الخطوات التالية:
- في لوحة معلومات Kubeflow ، اختر دفاتر في جزء التنقل.
- اختار دفتر جديد.
- في حالة الاسم، أدخل
aws-hybrid-nb
. - في حالة صورة Jupyter Docketاختر الصورة
c9e4w0g3/notebook-servers/jupyter-pytorch:1.11.0-cpu-py38-ubuntu20.04-e3-v1.1
(أحدث صورة متوفرة من Jupyter-pytorch DLC). - في حالة وحدة المعالجة المركزية:، أدخل
1
. - في حالة مكبر الصوت : يدعم، مع دعم ميكروفون مدمج لمنع الضوضاء
، أدخل
5
. - في حالة وحدات معالجة الرسومات، اترك بصيغة بدون اضاءة.
- لا تقم بإجراء أي تغييرات على حجم مساحة العمل والقسم الخاص به.
- في مجلة أحجام البيانات القسم، اختر إرفاق وحدة التخزين الموجودة وتوسيع قسم الحجم الحالي
- في حالة الاسم، اختر
efs-sc-claim
. - في حالة مسار الجبل، أدخل
/home/jovyan/efs-sc-claim
.
يؤدي ذلك إلى تحميل وحدة تخزين EFS على جراب دفتر ملاحظات Jupyter ، ويمكنك رؤية المجلدefs-sc-claim
في واجهة مختبر Jupyter. يمكنك حفظ مجموعة بيانات التدريب ورمز التدريب في هذا المجلد حتى تتمكن مجموعات التدريب من الوصول إليها دون الحاجة إلى إعادة إنشاء صور الحاوية للاختبار. - أختار السماح بالوصول إلى خطوط أنابيب Kubeflow في قسم التكوين.
- اختار إطلاق.
تحقق من أن دفتر الملاحظات الخاص بك قد تم إنشاؤه بنجاح (قد يستغرق دقيقتين). - على دفاتر الصفحة ، اختر التواصل لتسجيل الدخول إلى بيئة JupyterLab.
- على بوابة القائمة، اختر استنساخ مستودع.
- في حالة استنساخ الريبو، أدخل
https://github.com/aws-samples/aws-do-kubeflow
.
3. قم بتشغيل التدريب الموزع
بعد إعداد دفتر Jupyter ، يمكنك تشغيل العرض التوضيحي بأكمله باستخدام الخطوات عالية المستوى التالية من المجلد aws-do-kubeflow/workshop
في المستودع المستنسخ:
- البرنامج النصي للتدريب على موازٍ للبيانات الموزعة (DDP) من PyTorch: قم بإحالة برنامج تدريب PyTorch DDP cifar10-distributed-gpu-final.py ، والذي يتضمن عينة من الشبكة العصبية التلافيفية والمنطق لتوزيع التدريب على مجموعة وحدة المعالجة المركزية ووحدة معالجة الرسومات متعددة العقد. (راجع 3.1 للحصول على التفاصيل)
- تثبيت المكتبات: قم بتشغيل الكمبيوتر الدفتري
0_initialize_dependencies.ipynb
لتهيئة جميع التبعيات. (راجع 3.2 للحصول على التفاصيل) - قم بتشغيل تدريب وظيفي موزع في PyTorch على Kubernetes: قم بتشغيل الكمبيوتر الدفتري
1_submit_pytorchdist_k8s.ipynb
لإنشاء وتقديم تدريب موزع على حاوية أساسية واحدة واثنين من حاويات العمال باستخدام ملف PyTorchJob YAML لمورد Kubernetes المخصص باستخدام كود Python. (راجع 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 البرنامج النصي التدريبي موازٍ للبيانات الموزعة (DDP) من PyTorch
كجزء من التدريب الموزع ، نقوم بتدريب نموذج تصنيف تم إنشاؤه بواسطة شبكة عصبية تلافيفية بسيطة تعمل على مجموعة بيانات CIFAR10. نص التدريب cifar10-distributed-gpu-final.py
يحتوي فقط على مكتبات مفتوحة المصدر ومتوافق للتشغيل على مجموعات تدريب Kubernetes و SageMaker على أجهزة GPU أو مثيلات وحدة المعالجة المركزية. دعونا نلقي نظرة على بعض الجوانب المهمة في البرنامج النصي للتدريب قبل تشغيل أمثلة دفاتر الملاحظات الخاصة بنا.
نستخدم torch.distributed
الوحدة النمطية ، التي تحتوي على دعم PyTorch وأساسيات الاتصال للتوازي متعدد العمليات عبر العقد في الكتلة:
نقوم بإنشاء نموذج بسيط لتصنيف الصور باستخدام مجموعة من الطبقات الالتفافية ، والتجميع الأقصى ، والطبقات الخطية التي يتم فيها تطبيق وظيفة تنشيط إعادة التشغيل في التمرير الأمامي لتدريب النموذج:
نحن نستخدم torch DataLoader الذي يجمع بين مجموعة البيانات و DistributedSampler
(يقوم بتحميل مجموعة فرعية من البيانات بطريقة موزعة باستخدام torch.nn.parallel.DistributedDataParallel
) ويوفر عملية واحدة أو مكرر متعدد العمليات عبر البيانات:
إذا كانت مجموعة التدريب تحتوي على وحدات معالجة رسومات (GPU) ، يقوم البرنامج النصي بتشغيل التدريب على أجهزة CUDA ويحمل متغير الجهاز جهاز CUDA الافتراضي:
قبل تشغيل التدريب الموزع باستخدام PyTorch DistributedDataParallel
لتشغيل المعالجة الموزعة على عقد متعددة ، تحتاج إلى تهيئة البيئة الموزعة عن طريق الاتصال init_process_group
. تتم تهيئة هذا على كل جهاز من مجموعة التدريب.
نقوم بإنشاء مثيل لنموذج المصنف ونسخ النموذج إلى الجهاز المستهدف. إذا تم تمكين التدريب الموزع للتشغيل على عقد متعددة ، فإن ملف DistributedDataParallel
يتم استخدام class ككائن التفاف حول كائن النموذج ، مما يسمح بالتدريب الموزع المتزامن عبر أجهزة متعددة. يتم تقسيم بيانات الإدخال على أبعاد الدُفعة ويتم وضع نسخة طبق الأصل من النموذج على كل جهاز وكل جهاز.
3.2 تثبيت المكتبات
ستقوم بتثبيت جميع المكتبات اللازمة لتشغيل مثال التدريب الموزع PyTorch. يتضمن ذلك Kubeflow Pipelines SDK و Training Operator Python SDK وعميل Python لـ Kubernetes و Amazon SageMaker Python SDK.
3.3 قم بتشغيل تدريب وظيفي موزع على PyTorch على Kubernetes
دفتر مذكرات 1_submit_pytorchdist_k8s.ipynb
ينشئ ملف PyTorchJob YAML لمورد Kubernetes المخصص باستخدام تدريب Kubeflow وعميل Kubernetes Python SDK. فيما يلي بعض المقتطفات المهمة من دفتر الملاحظات هذا.
نقوم بإنشاء PyTorchJob YAML مع الحاويات الأولية والعاملة كما هو موضح في الكود التالي:
يتم إرسال هذا إلى مستوى التحكم Kubernetes باستخدام PyTorchJobClient
:
اعرض سجلات تدريب Kubernetes
يمكنك عرض سجلات التدريب إما من نفس دفتر Jupyter باستخدام كود Python أو من غلاف عميل Kubernetes.
3.4 إنشاء خط أنابيب Kubeflow مختلط
دفتر مذكرات 2_create_pipeline_k8s_sagemaker.ipynb
يقوم بإنشاء خط أنابيب Kubeflow مختلط استنادًا إلى متغير وقت التشغيل الشرطي training_runtime
، كما هو موضح في الكود التالي. دفتر الملاحظات يستخدم SDK Kubeflow خطوط الأنابيب وقد تم توفير مجموعة من حزم Python لتحديد خطوط سير عمل ML وتشغيلها. كجزء من SDK هذا ، نستخدم الحزم التالية:
- مصمم حزمة اللغة الخاصة بالمجال (DSL)
dsl.pipeline
، الذي يزين دوال بايثون لإرجاع خط أنابيب - •
dsl.Condition
الحزمة ، والتي تمثل مجموعة من العمليات التي يتم تشغيلها فقط عند استيفاء شرط معين ، مثل التحقق منtraining_runtime
قيمةsagemaker
orkubernetes
انظر الكود التالي:
نقوم بتكوين تدريب SageMaker الموزع باستخدام مثيلين ml.p3.2xlarge.
بعد تحديد خط الأنابيب ، يمكنك تجميع خط الأنابيب لمواصفات Argo YAML باستخدام Kubeflow Pipelines SDK's kfp.compiler
حزمة. يمكنك تشغيل خط الأنابيب هذا باستخدام عميل Kubeflow Pipeline SDK ، الذي يستدعي نقطة نهاية خدمة خطوط الأنابيب ويمرر رؤوس المصادقة المناسبة مباشرةً من دفتر الملاحظات. انظر الكود التالي:
إذا حصلت على ملف sagemaker import
خطأ ، قم بتشغيل! pip قم بتثبيت sagemaker وأعد تشغيل kernel (على ملف نواة القائمة، اختر أعد تشغيل Kernel).
اختيار تشغيل التفاصيل الارتباط الموجود أسفل الخلية الأخيرة لعرض خط أنابيب 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
الحاوية مفتوحة. - XNUMX. من قائمة
aws-do-eks
مجلد الحاوية ، قم بإزالة وحدة تخزين EFS. المجموعة الأولى من الأوامر اختيارية ويمكن استخدامها في حال لم يكن لديك بالفعل غلاف أوامر في ملفaws-do-eks
الحاوية مفتوحة.يعد حذف Amazon EFS ضروريًا لتحرير واجهة الشبكة المرتبطة بـ VPC الذي أنشأناه لمجموعتنا. لاحظ أن حذف وحدة تخزين EFS يدمر أي بيانات مخزنة عليه.
- XNUMX. من قائمة
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؛ ستساعدنا ملاحظاتك هناك في تحديد أولويات الميزات التالية للمساهمة في مشروع Kubeflow.
شكر خاص لـ Sree Arasanagatta (مدير تطوير البرمجيات AWS ML) و Suraj Kota (مهندس تطوير البرمجيات) على دعمهما لإطلاق هذا المنشور.
عن المؤلفين
كانوالجيت خورمي هو مهندس حلول متخصص في AI / ML في Amazon Web Services. إنه يعمل مع منتج AWS والهندسة والعملاء لتقديم التوجيه والمساعدة الفنية لمساعدتهم على تحسين قيمة حلول ML المختلطة الخاصة بهم عند استخدام AWS. Kanwaljit متخصص في مساعدة العملاء في استخدام الحاويات وتطبيقات التعلم الآلي.
جوتام كومار هو مهندس برمجيات مع AWS AI Deep Learning. لقد طور حاويات AWS Deep Learning و AWS Deep Learning AMI. إنه متحمس لبناء أدوات وأنظمة للذكاء الاصطناعي. في أوقات فراغه ، يستمتع بركوب الدراجات وقراءة الكتب.
أليكس يانكولسكي هو مهندس برامج وبنية تحتية متكامل يحب القيام بعمل عميق وعملي. وهو حاليًا مهندس حلول رئيسي للتعلم الآلي المُدار ذاتيًا في AWS. ويركز من خلال دوره على مساعدة العملاء في النقل بالحاويات وتنسيق أعباء عمل ML و AI على خدمات AWS التي تعمل بالحاويات. وهو أيضًا مؤلف المصدر المفتوح هل الإطار وقبطان Docker الذي يحب تطبيق تقنيات الحاويات لتسريع وتيرة الابتكار مع حل أكبر التحديات في العالم. خلال السنوات العشر الماضية ، عمل أليكس على مكافحة تغير المناخ ، وإضفاء الطابع الديمقراطي على الذكاء الاصطناعي والتعلم الآلي ، وجعل السفر أكثر أمانًا ، والرعاية الصحية أفضل ، وجعل الطاقة أكثر ذكاءً.