شعار زيفيرنت

تمكين تدفقات عمل ML المختلطة على Amazon EKS و Amazon SageMaker بنقرة واحدة Kubeflow على نشر AWS

التاريخ:

اليوم ، يقوم العديد من عملاء AWS ببناء منصات التعلم الآلي الجاهزة للمؤسسات (ML) على خدمة أمازون مطاطا Kubernetes (Amazon EKS) باستخدام Kubeflow على AWS (توزيع Kubeflow الخاص بـ AWS) عبر العديد من حالات الاستخدام ، بما في ذلك رؤية الكمبيوتر وفهم اللغة الطبيعية وترجمة الكلام والنمذجة المالية.

مع أحدث إصدار من Kubeflow v1.6.1 مفتوح المصدر، يواصل مجتمع Kubeflow دعم هذا التبني الواسع النطاق لـ Kubeflow لحالات استخدام المؤسسات. يتضمن الإصدار الأخير العديد من الميزات المثيرة الجديدة مثل دعم Kubernetes v1.22 ، و Python SDK المدمجة لـ PyTorch ، و MXNet ، و MPI ، و XGBoost في مشغل التدريب الموزع في Kubeflow ، و ClusterServingRuntime و ServingRuntime CRDs لخدمة النموذج ، وغير ذلك الكثير.

تدعم مساهمات AWS في Kubeflow مع الإطلاق الأخير لـ Kubeflow على AWS 1.6.1 جميع ميزات Kubeflow مفتوحة المصدر وتتضمن العديد من عمليات التكامل الجديدة مع خدمات AWS المحسّنة للغاية والجاهزة للمؤسسات والتي ستساعدك على بناء موثوق به للغاية ، أنظمة ML آمنة ومحمولة وقابلة للتطوير.

في هذا المنشور ، نناقش Kubeflow الجديد على ميزات AWS v1.6.1 ونسلط الضوء على ثلاث عمليات تكامل مهمة تم تجميعها في نظام أساسي واحد لنقدم لك:

  • البنية التحتية ككود (IaaC) حل بنقرة واحدة يعمل على أتمتة التثبيت الشامل لـ Kubeflow ، بما في ذلك إنشاء مجموعة EKS
  • دعم لتوزيع التدريب على الأمازون SageMaker استخدام عوامل تشغيل Amazon SageMaker لـ Kubernetes (ACK) و مكونات SageMaker لأنابيب Kubeflow ومحليا على Kubernetes باستخدام مشغلي تدريب Kubeflow. يستخدم العديد من العملاء هذه الإمكانية لبناء هياكل التعلم الآلي الهجينة حيث يستفيدون من كلاً من حوسبة Kubernetes لمرحلة التجريب و SageMaker لتشغيل أعباء العمل على نطاق الإنتاج.
  • تحسين المراقبة والمراقبة لأحمال عمل ML بما في ذلك Amazon EKS ومقاييس Kubeflow وسجلات التطبيق باستخدام Prometheus و Grafana و الأمازون CloudWatch التكاملات

ستركز حالة الاستخدام في هذه المدونة بشكل خاص على تكامل SageMaker مع Kubeflow على AWS والذي يمكن إضافته إلى تدفقات عمل Kubernetes الحالية لديك مما يتيح لك إنشاء بنيات التعلم الآلي الهجينة.

Kubeflow على AWS

يوفر Kubeflow على AWS 1.6.1 مسارًا واضحًا لاستخدام Kubeflow ، مع إضافة خدمات AWS التالية بالإضافة إلى الإمكانات الحالية:

  • تكامل SageMaker مع Kubeflow لتشغيل تدفقات عمل ML المختلطة باستخدام SageMaker Operators لـ Kubernetes (ACK) ومكونات SageMaker لخطوط أنابيب Kubeflow.
  • تم تحسين خيارات النشر الآلي وتبسيطها باستخدام البرامج النصية Kustomize ومخططات Helm.
  • دعم إضافي للبنية التحتية كـ Code (IaC) للنشر بنقرة واحدة لـ Kubeflow على AWS باستخدام Terraform لكل ما هو متاح خيارات النشر. يعمل هذا البرنامج النصي على أتمتة إنشاء موارد AWS التالية:
  • دعم لل AWS الرابط الخاص بالنسبة إلى Amazon S3 لتمكين مستخدمي المنطقة غير التجارية من الاتصال بنقاط نهاية S3 الخاصة بهم.
  • التكامل المضاف مع خدمة Amazon المُدارة لشركة Prometheus (AMP) و أمازون تديرها جرافانا لمراقبة المقاييس باستخدام Kubeflow على AWS.
  • حاويات خادم الكمبيوتر المحمول Kubeflow المحدثة مع أحدث صور حاوية التعلم العميق استنادًا إلى TensorFlow 2.10.0 و PyTorch 1.12.1.
  • التكامل مع AWS DLCs للتشغيل الموزع السلامه اولا و الإستنباط أعباء العمل.

يعد الرسم التخطيطي للهندسة المعمارية التالي لقطة سريعة لجميع عمليات تكامل الخدمات (بما في ذلك ما سبق ذكره) المتوفرة للتحكم في Kubeflow ومكونات مستوى البيانات في Kubeflow على AWS. يتم تثبيت مستوى التحكم Kubeflow أعلى Amazon EKS ، وهي خدمة حاوية مُدارة تُستخدم لتشغيل تطبيقات Kubernetes وتوسيع نطاقها في السحابة. تسمح لك عمليات تكامل خدمات AWS بفصل الأجزاء المهمة من مستوى التحكم Kubeflow عن Kubernetes ، مما يوفر تصميمًا آمنًا وقابلًا للتطوير ومرنًا ومنخفض التكلفة. لمزيد من التفاصيل حول القيمة التي تضيفها عمليات تكامل الخدمة هذه على Kubeflow مفتوح المصدر ، ارجع إلى قم ببناء ونشر نظام تعلم آلي قابل للتطوير على Kubernetes باستخدام Kubeflow على AWS.

دعونا نناقش بمزيد من التفصيل كيف يمكن أن تكون الميزات الرئيسية Kubeflow على AWS 1.6.1 مفيدة لمؤسستك.

Kubeflow على تفاصيل ميزات AWS

مع إصدار Kubeflow 1.6.1 ، حاولنا توفير أدوات أفضل لأنواع مختلفة من العملاء تسهل بدء استخدام Kubeflow بغض النظر عن الخيارات التي تختارها. توفر هذه الأدوات نقطة انطلاق جيدة ويمكن تعديلها لتناسب احتياجاتك بالضبط.

خيارات النشر

نحن نقدم خيارات نشر مختلفة لحالات استخدام العملاء المختلفة. هنا يمكنك اختيار خدمات AWS التي تريد دمج نشر Kubeflow معها. إذا قررت تغيير خيارات النشر لاحقًا ، نوصيك بإجراء تثبيت جديد للنشر الجديد. تتوفر خيارات النشر التالية:

إذا كنت ترغب في نشر Kubeflow مع الحد الأدنى من التغييرات ، ففكر في الفانيليا خيار النشر. يمكن تثبيت جميع خيارات النشر المتاحة باستخدام Kustomize أو Helm أو Terraform.

لدينا أيضًا عمليات توزيع إضافية مختلفة يمكن تثبيتها فوق أي من خيارات النشر التالية:

خيارات التثبيت

بعد أن تحدد خيار النشر الذي يناسب احتياجاتك ، يمكنك اختيار الطريقة التي تريد بها تثبيت عمليات النشر هذه. في محاولة لخدمة الخبراء والقادمين الجدد على حد سواء ، لدينا مستويات مختلفة من الأتمتة والتكوين.

الخيار 1: Terraform (IaC)

يؤدي هذا إلى إنشاء مجموعة EKS وجميع موارد البنية التحتية لـ AWS ذات الصلة ، ثم نشر Kubeflow في أمر واحد باستخدام Terraform. داخليًا ، يستخدم هذا مخططات EKS ومخططات Helm.

هذا الخيار له المزايا التالية:

  • يوفر المرونة للمؤسسات لنشر Amazon EKS و Kubeflow بأمر واحد دون الحاجة إلى القلق بشأن تكوينات مكونات Kubeflow المحددة. سيساعد هذا بشكل كبير في تسريع تقييم التكنولوجيا والنماذج الأولية ودورة حياة تطوير المنتج مما يوفر المرونة في استخدام وحدات terraform وتعديلها لتلبية أي احتياجات خاصة بالمشروع.
  • يمكن للعديد من المؤسسات اليوم التي لديها Terraform كمركز لإستراتيجيتها السحابية استخدام Kubeflow على حل AWS Terraform لتحقيق أهدافها السحابية.

الخيار 2: تخصيص أو مخططات خوذة:

يتيح لك هذا الخيار نشر Kubeflow في عملية من خطوتين:

  1. أنشئ موارد AWS مثل Amazon EKS و Amazon RDS و Amazon S3 و Amazon Cognito ، إما من خلال البرامج النصية الآلية المضمنة في توزيع AWS أو اتباع دليل خطوة بخطوة.
  2. قم بتثبيت عمليات نشر Kubeflow إما باستخدام مخططات Helm أو Kustomize.

هذا الخيار له المزايا التالية:

  • الهدف الرئيسي لخيار التثبيت هذا هو توفير تكوينات Kubernetes المتعلقة بـ Kubeflow. لذلك ، يمكنك اختيار إنشاء أو جلب مجموعات EKS الحالية أو أي من موارد AWS ذات الصلة مثل Amazon RDS و Amazon S3 و Amazon Cognito ، وتهيئتها وإدارتها للعمل مع Kubeflow على AWS.
  • من الأسهل الانتقال من بيان Kustomize Kubeflow مفتوح المصدر إلى توزيع AWS Kubeflow.

يوضح الرسم البياني التالي بنيات كلا الخيارين.

التكامل مع SageMaker

SageMaker هي خدمة مُدارة بالكامل تم تصميمها وتحسينها خصيصًا لإدارة تدفقات عمل ML. إنه يزيل الرفع الثقيل غير المتمايز لإدارة البنية التحتية ويلغي الحاجة إلى الاستثمار في تكنولوجيا المعلومات و DevOps لإدارة المجموعات لبناء نموذج التعلم الآلي والتدريب والاستدلال.

يستخدم العديد من عملاء AWS الذين لديهم متطلبات قابلية النقل أو قيود قياسية محلية Amazon EKS لإعداد خطوط أنابيب ML قابلة للتكرار لتشغيل التدريب واستنتاج أعباء العمل. ومع ذلك ، يتطلب هذا من المطورين كتابة تعليمات برمجية مخصصة لتحسين البنية التحتية الأساسية للتعلم الآلي ، وتوفير إمكانية عالية وموثوقية عالية ، والامتثال للمتطلبات الأمنية والتنظيمية المناسبة. لذلك يرغب هؤلاء العملاء في استخدام SageMaker للبنية التحتية المُدارة والمُحسّنة من حيث التكلفة لتدريب النماذج وعمليات النشر والاستمرار في استخدام Kubernetes للتنسيق وخطوط أنابيب ML للاحتفاظ بالتوحيد القياسي وإمكانية النقل.

لتلبية هذه الحاجة ، تتيح لك AWS تدريب النماذج وضبطها ونشرها في SageMaker من Amazon EKS باستخدام الخيارين التاليين:

  • عوامل تشغيل Amazon SageMaker ACK لـ Kubernetes ، والتي تستند إلى أدوات تحكم AWS لـ Kubernetes (ACK). ACK هي إستراتيجية AWS التي تجلب التوحيد القياسي لبناء وحدات تحكم Kubernetes المخصصة التي تسمح لمستخدمي Kubernetes بتوفير موارد AWS مثل قواعد البيانات أو قوائم انتظار الرسائل ببساطة عن طريق استخدام Kubernetes API. يسهّل SageMaker ACK Operators الأمر على مطوري ML وعلماء البيانات الذين يستخدمون Kubernetes كطائرة تحكم لتدريب نماذج ML وضبطها ونشرها في SageMaker دون تسجيل الدخول إلى وحدة تحكم SageMaker.
  • مكونات SageMaker لخطوط أنابيب Kubeflow، والتي تسمح لك بدمج SageMaker مع قابلية النقل والتنسيق لخطوط أنابيب Kubeflow. باستخدام مكونات SageMaker ، يتم تشغيل كل مهمة في سير عمل خط الأنابيب على SageMaker بدلاً من مجموعة Kubernetes المحلية. يتيح لك ذلك إنشاء ومراقبة تدريب SageMaker الأصلي ، والضبط ، ونشر نقطة النهاية ، ومهام التحويل المجمعة من خطوط أنابيب Kubeflow الخاصة بك ، وبالتالي يسمح لك بنقل الحوسبة الكاملة بما في ذلك مهام معالجة البيانات والتدريب من مجموعة Kubernetes إلى الخدمة المُدارة المُحسّنة للتعلم الآلي من SageMaker.

بدءًا من Kubeflow على AWS v1.6.1 ، تجمع جميع خيارات نشر Kubeflow المتاحة بين خيارات تكامل Amazon SageMaker افتراضيًا على نظام أساسي واحد. هذا يعني أنه يمكنك الآن إرسال وظائف SageMaker باستخدام مشغلي SageMaker ACK من خادم Kubeflow Notebook نفسه عن طريق إرسال مورد SageMaker المخصص أو من خطوة خط أنابيب Kubeflow باستخدام مكونات SageMaker.

يوجد إصداران من مكونات SageMaker - بوتو 3 (AWS SDK for AWS SDK for Python) استنادًا إلى مكونات الإصدار 1 و SageMaker Operator لمكونات الإصدار 8 المستندة إلى K2s (ACK). يدعم الإصدار 2 من مكونات SageMaker الجديد أحدث واجهات برمجة تطبيقات تدريب SageMaker وسنستمر في إضافة المزيد من ميزات SageMaker إلى هذا الإصدار من المكون. ومع ذلك ، لديك المرونة في الجمع بين الإصدار 2 من مكونات Sagemaker للتدريب والإصدار 1 لميزات SageMaker الأخرى مثل ضبط المعلمات الفائقة ومعالجة المهام والاستضافة وغير ذلك الكثير.

التكامل مع بروميثيوس وغرافانا

بروميثيوس عبارة عن أداة تجميع مقاييس مفتوحة المصدر يمكنك تهيئتها للتشغيل على مجموعات Kubernetes. عند التشغيل على مجموعات Kubernetes ، يقوم خادم Prometheus الرئيسي بكشط نقاط نهاية pod بشكل دوري.

تنبعث مكونات Kubeflow ، مثل Kubeflow Pipelines (KFP) و Notebook ، مقاييس بروميثيوس للسماح بمراقبة موارد المكونات مثل عدد التجارب الجارية أو عدد أجهزة الكمبيوتر المحمول.

يمكن تجميع هذه المقاييس بواسطة خادم Prometheus يعمل في مجموعة Kubernetes والاستعلام عنها باستخدام لغة Prometheus Query (PromQL). لمزيد من التفاصيل حول الميزات التي يدعمها Prometheus ، تحقق من وثائق بروميثيوس.

يوفر توزيع Kubeflow على AWS الدعم للتكامل مع خدمات AWS التالية المدارة:

  1. أمازون بروميثيوس المدار (AMP) وهو ملف محب العمل- خدمة مراقبة متوافقة للبنية التحتية للحاويات ومقاييس التطبيق للحاويات التي تسهل على العملاء مراقبة بيئات الحاويات بأمان على نطاق واسع. باستخدام AMP ، يمكنك تصور وتحليل وإنذار المقاييس والسجلات والتتبعات التي تم جمعها من مصادر بيانات متعددة في نظام الملاحظة الخاص بك ، بما في ذلك AWS وموردي البرامج المستقلين التابعين لجهات خارجية والموارد الأخرى عبر محفظة تكنولوجيا المعلومات الخاصة بك.
  2. Amazon Managed Grafana ، خدمة تصوير بيانات مُدارة وآمنة بالكامل تستند إلى المصدر المفتوح جرافانا المشروع ، الذي يمكّن العملاء من الاستعلام عن المقاييس التشغيلية والسجلات والتتبعات لتطبيقاتهم من مصادر بيانات متعددة وربطها وتصورها على الفور. تقوم Amazon Managed Grafana بإلغاء تحميل الإدارة التشغيلية لـ Grafana عن طريق توسيع البنية التحتية للحوسبة وقاعدة البيانات تلقائيًا مع زيادة متطلبات الاستخدام ، مع تحديثات الإصدار الآلية وتصحيح الأمان.

يوفر توزيع Kubeflow على AWS الدعم لتكامل Amazon Managed Service for Prometheus و Amazon Managed Grafana لتسهيل استيعاب مقاييس Prometheus وتصورها بأمان على نطاق واسع.

يتم استيعاب المقاييس التالية ويمكن تصورها:

لتكوين Amazon Managed Service for Prometheus و Amazon Managed Grafana لمجموعة Kubeflow ، يرجى الرجوع إلى استخدم Prometheus و Amazon Managed Service for Prometheus و Amazon Managed Grafana لمراقبة المقاييس باستخدام Kubeflow على AWS.

حل نظرة عامة

في حالة الاستخدام هذه ، نستخدم نشر Kubeflow vanilla باستخدام خيار تثبيت Terraform. عند اكتمال التثبيت ، نقوم بتسجيل الدخول إلى لوحة معلومات Kubeflow. من لوحة القيادة ، نقوم بتدوير خادم دفتر ملاحظات Kubeflow Jupyter لبناء خط أنابيب Kubeflow يستخدم SageMaker لتشغيل التدريب الموزع لنموذج تصنيف الصور ونقطة نهاية SageMaker لنشر النموذج.

المتطلبات الأساسية المسبقة

تأكد من تلبية المتطلبات الأساسية التالية:

  • انت تملك حساب AWS.
  • تأكد من أنك في us-west-2 منطقة لتشغيل هذا المثال.
  • استخدم Google Chrome للتفاعل مع وحدة تحكم إدارة AWS وكوبفلو.
  • تأكد من أن حسابك يحتوي على حد نوع مورد تدريب SageMaker لـ ml.p3.2xlarge إلى 2 باستخدام وحدة التحكم في حصص الخدمة.
  • اختياريا ، يمكنك استخدام سحابة AWS 9، بيئة تطوير متكاملة قائمة على السحابة (IDE) تتيح إكمال جميع الأعمال من متصفح الويب الخاص بك. للحصول على تعليمات الإعداد ، ارجع إلى إعداد Cloud9 IDE. حدد Ubuntu Server 18.04 كمنصة في إعدادات AWS Cloud9.ثم من بيئة AWS Cloud9 الخاصة بك ، اختر علامة الجمع وافتح محطة جديدة.

يمكنك أيضًا تكوين ملف واجهة سطر الأوامر AWS (AWS CLI) الملف الشخصي. للقيام بذلك ، تحتاج إلى معرف مفتاح الوصول ومفتاح الوصول السري لملف إدارة الهوية والوصول AWS (انا) المستخدم حساب بامتيازات إدارية (أرفق السياسة المدارة الحالية) والوصول الآلي. انظر الكود التالي:

aws configure --profile=kubeflow

AWS Access Key ID [None]: <enter access key id>
AWS Secret Access Key [None]: <enter secret access key>
Default region name [None]: us-west-2
Default output format [None]: json # (In Cloud9, select “Cancel” and “Permanently disable” when the AWS managed temporary credentials dialog pops up)

export AWS_PROFILE=kubeflow

تحقق من الأذونات التي ستستخدمها cloud9 للاتصال بموارد AWS.

aws sts get-caller-identity

تحقق من الإخراج أدناه أنك ترى مستخدم المسؤول الذي قمت بتكوينه في ملف تعريف AWS CLI. في هذا المثال هو "kubeflow-user"

{ "UserId": "*******", "Account": "********", "Arn": "arn:aws:iam::*******:user/kubeflow-user"
}

قم بتثبيت Amazon EKS و Kubeflow على AWS

لتثبيت Amazon EKS و Kubeflow على AWS ، أكمل الخطوات التالية:

  1. قم بإعداد بيئتك لنشر Kubeflow على AWS:
    #Clone the awslabs/kubeflow-manifests and the kubeflow/manifests repositories and check out the release branches of your choosing
    export KUBEFLOW_RELEASE_VERSION=v1.6.1
    export AWS_RELEASE_VERSION=v1.6.1-aws-b1.0.0
    git clone https://github.com/awslabs/kubeflow-manifests.git && cd kubeflow-manifests
    git checkout ${AWS_RELEASE_VERSION}
    git clone --branch ${KUBEFLOW_RELEASE_VERSION} https://github.com/kubeflow/manifests.git upstream export MANIFEST_DIR=$PWD

    #Install the necessary tools with the following command:
    make install-tools
    source ~/.bash_profile

  2. انشر إصدار Vanilla من Kubeflow على AWS وموارد AWS ذات الصلة مثل EKS باستخدام Terraform. يرجى ملاحظة أن وحدات تخزين EBS المستخدمة في مجموعة عقد EKS غير مشفرة افتراضيًا:
    #Define the following environment variables #Region to create the cluster in
    export CLUSTER_REGION=us-west-2
    #Name of the cluster to create
    export CLUSTER_NAME=<enter-cluster-name>

    cd deployments/vanilla/terraform #Save the variables to a .tfvars file
    cat <<EOF > sample.auto.tfvars
    cluster_name="${CLUSTER_NAME}"
    cluster_region="${CLUSTER_REGION}"
    EOF #Run the following one-click command to deploy terraform to install EKS infrastructure and Kubeflow
    make deploy

قم بإعداد أذونات Kubeflow

  1. إضافة أذونات إلى جراب Notebook وجراب مكون Pipeline لإجراء مكالمات SageMaker و S3 و IAM api باستخدام kubeflow_iam_permissions.sh النصي.
    export NAMESPACE=kubeflow-user-example-com wget https://raw.githubusercontent.com/aws-samples/eks-kubeflow-cloudformation-quick-start/9e46662d97e1be7edb0be7fc31166e545655636a/utils/kubeflow_iam_permissions.sh
    chmod +x kubeflow_iam_permissions.sh
    ./kubeflow_iam_permissions.sh $NAMESPACE $CLUSTER_NAME $CLUSTER_REGION

  2. قم بإنشاء دور تنفيذ SageMaker لتمكين وظيفة تدريب SageMaker من الوصول إلى مجموعة بيانات التدريب من خدمة S3 باستخدام sagemaker_role.sh النصي.
    wget https://raw.githubusercontent.com/aws-samples/eks-kubeflow-cloudformation-quick-start/9e46662d97e1be7edb0be7fc31166e545655636a/utils/sagemaker_role.sh
    chmod +x sagemaker_role.sh
    ./sagemaker_role.sh

الوصول إلى لوحة القيادة Kubeflow

للوصول إلى لوحة معلومات Kubeflow ، أكمل الخطوات التالية:

  1. يمكنك تشغيل لوحة معلومات Kubeflow محليًا في بيئة Cloud9 دون تعريض عناوين URL الخاصة بك إلى الإنترنت العام عن طريق تشغيل الأوامر أدناه.
    # Configure Kubecontext
    $(terraform output -raw configure_kubectl) cd ${MANIFEST_DIR}
    make port-forward

  2. اختار معاينة التطبيق قيد التشغيل.
  3. اختر الرمز الموجود في زاوية لوحة معلومات Kubeflow لفتحه كعلامة تبويب منفصلة في Chrome.
  4. أدخل بيانات الاعتماد الافتراضية (user@example.com/12341234) لتسجيل الدخول إلى لوحة القيادة Kubeflow.

قم بإعداد Kubeflow على بيئة AWS

بمجرد تسجيل الدخول إلى لوحة معلومات Kubeflow ، تأكد من أن لديك مساحة الاسم الصحيحة (kubeflow-user-example-com) المختار. أكمل الخطوات التالية لإعداد Kubeflow على بيئة AWS:

  1. في لوحة معلومات Kubeflow ، اختر دفاتر في جزء التنقل.
  2. اختار مفكرة جديدة.
  3. في حالة الاسم، أدخل aws-nb.
  4. في حالة صورة Jupyter Docketاختر الصورة jupyter-pytorch:1.12.0-cpu-py38-ubuntu20.04-ec2-2022-09-20 (الأحدث المتاح jupyter-pytorch صورة DLC).
  5. في حالة وحدة المعالجة المركزية‏:، أدخل 1.
  6. في حالة مكبر الصوت : يدعم، مع دعم ميكروفون مدمج لمنع الضوضاء ، أدخل 5.
  7. في حالة وحدات معالجة الرسومات، اترك بصيغة بدون اضاءة.
  8. لا تقم بإجراء أي تغييرات على مساحة العمل و أحجام البيانات أقسام.
  9. أختار السماح بالوصول إلى خطوط أنابيب Kubeflow في ال تكوينات قسم واختر تشغيل.
  10. تحقق من أن دفتر الملاحظات الخاص بك قد تم إنشاؤه بنجاح (قد يستغرق دقيقتين).
  11. اختار التواصل لتسجيل الدخول إلى JupyterLab.
  12. استنساخ الريبو عن طريق الدخول https://github.com/aws-samples/eks-kubeflow-cloudformation-quick-start.git في ال استنساخ الريبو الميدان.
  13. اختار استنساخ.

قم بتشغيل مثال تدريب موزع

بعد إعداد دفتر Jupyter ، يمكنك تشغيل العرض التوضيحي بأكمله باستخدام الخطوات عالية المستوى التالية من المجلد eks-kubeflow-cloudformation-quick-start/workshop/pytorch-distributed-training في المستودع المستنسخ:

  1. قم بتشغيل البرنامج النصي التدريبي PyTorch Distributed Data Parallel Data Parallel (DDP) - الرجوع إلى البرنامج النصي للتدريب PyTorch DDP cifar10-distributed-gpu-final.py، والذي يتضمن عينة من الشبكة العصبية التلافيفية والمنطق لتوزيع التدريب على مجموعة وحدة المعالجة المركزية ووحدة معالجة الرسومات متعددة العقد.
  2. قم بإنشاء خط أنابيب Kubeflow - قم بتشغيل دفتر الملاحظات STEP1.0_create_pipeline_k8s_sagemaker.ipynb لإنشاء خط أنابيب يعمل على تشغيل النماذج ونشرها على SageMaker. تأكد من تثبيت مكتبة SageMaker كجزء من خلية دفتر الملاحظات الأولى وأعد تشغيل kernel قبل تشغيل باقي خلايا دفتر الملاحظات.
  3. قم باستدعاء نقطة نهاية SageMaker - قم بتشغيل دفتر الملاحظات STEP1.1_invoke_sagemaker_endpoint.ipynb لاستدعاء واختبار نقطة نهاية استدلال نموذج SageMaker التي تم إنشاؤها في دفتر الملاحظات السابق.

في الأقسام التالية ، نناقش كل خطوة من هذه الخطوات بالتفصيل.

قم بتشغيل البرنامج النصي للتدريب PyTorch DDP

كجزء من التدريب الموزع ، نقوم بتدريب نموذج تصنيف تم إنشاؤه بواسطة شبكة عصبية تلافيفية بسيطة تعمل على مجموعة بيانات CIFAR10. نص التدريب cifar10-distributed-gpu-final.py يحتوي فقط على مكتبات مفتوحة المصدر ومتوافق للتشغيل على مجموعات تدريب Kubernetes و SageMaker على أجهزة GPU أو مثيلات وحدة المعالجة المركزية. دعونا نلقي نظرة على بعض الجوانب المهمة في البرنامج النصي للتدريب قبل تشغيل أمثلة دفاتر الملاحظات الخاصة بنا.

نستخدم torch.distributed الوحدة النمطية ، التي تحتوي على دعم PyTorch وأساسيات الاتصال للتوازي متعدد العمليات عبر العقد في الكتلة:

...
import torch
import torch.distributed as dist
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.utils.data
import torch.utils.data.distributed
import torchvision
from torchvision import datasets, transforms
...

نقوم بإنشاء نموذج تصنيف بسيط للصور باستخدام مجموعة من الطبقات الالتفافية والتجميعية القصوى والطبقات الخطية التي يتم إنشاء ملف relu يتم تطبيق وظيفة التنشيط في التمرير الأمامي لتدريب النموذج:

# Define models
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10) def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 5 * 5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x

إذا كانت مجموعة التدريب تحتوي على وحدات معالجة رسومات (GPU) ، يقوم البرنامج النصي بتشغيل التدريب على أجهزة CUDA ويحمل متغير الجهاز جهاز CUDA الافتراضي:

device = "cuda" if torch.cuda.is_available() else "cpu"
...

قبل تشغيل التدريب الموزع باستخدام PyTorch DistributedDataParallel لتشغيل المعالجة الموزعة على عقد متعددة ، تحتاج إلى تهيئة البيئة الموزعة عن طريق الاتصال init_process_group. تتم تهيئة هذا على كل جهاز من مجموعة التدريب.

dist.init_process_group(backend=args.backend, rank=host_rank, world_size=world_size)
...

نقوم بإنشاء مثيل لنموذج المصنف ونسخ النموذج إلى الجهاز المستهدف. إذا تم تمكين التدريب الموزع للتشغيل على عقد متعددة ، فإن ملف DistributedDataParallel يتم استخدام class ككائن التفاف حول كائن النموذج ، مما يسمح بالتدريب الموزع المتزامن عبر أجهزة متعددة. يتم تقسيم بيانات الإدخال على بُعد الدُفعة ويتم وضع نسخة طبق الأصل من النموذج على كل جهاز وكل جهاز. انظر الكود التالي:

model = Net().to(device) if is_distributed:
model = torch.nn.parallel.DistributedDataParallel(model) ...

قم بإنشاء خط أنابيب Kubeflow

دفتر الملاحظات يستخدم SDK Kubeflow خطوط الأنابيب ومجموعة حزم Python المقدمة لتحديد وتشغيل خطوط تدفق عمل ML. كجزء من حزمة SDK هذه ، نستخدم مصمم حزمة اللغة الخاصة بالمجال (DSL) dsl.pipeline، الذي يزين دوال بايثون لإرجاع خط أنابيب.

يستخدم خط أنابيب Kubeflow مكون SageMaker V2 لتقديم التدريب إلى SageMaker باستخدام SageMaker ACK Operators. يستخدم إنشاء نموذج SageMaker ونشره مكون SageMaker V1 ، وهي مكونات SageMaker قائمة على Boto3. نستخدم مزيجًا من كلا المكونين في هذا المثال لإظهار المرونة التي لديك في الاختيار.

  1. قم بتحميل مكونات SageMaker باستخدام الكود التالي:
    # Loads SageMaker training components v2 for Kubeflow pipeline from the URL
    sagemaker_train_ack_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/d4aaa03035f221351ebe72fbd74fcfccaf25bb66/components/aws/sagemaker/TrainingJob/component.yaml') # Loads SageMaker components v1 for Kubeflow pipeline from the URL
    sagemaker_model_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/cb36f87b727df0578f4c1e3fe9c24a30bb59e5a2/components/aws/sagemaker/model/component.yaml')
    sagemaker_deploy_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/cb36f87b727df0578f4c1e3fe9c24a30bb59e5a2/components/aws/sagemaker/deploy/component.yaml')

    في الكود التالي ، نقوم بإنشاء خط أنابيب Kubeflow حيث نقوم بتشغيل تدريب SageMaker الموزع باستخدام اثنين ml.p3.2xlarge الأمثلة:

    # Create Kubeflow Pipeline using Amazon SageMaker Service
    @dsl.pipeline(name="PyTorch Training pipeline", description="Sample training job test")
    def pytorch_cnn_pipeline(region=target_region,
    train_image=aws_dlc_sagemaker_train_image,
    serving_image=aws_dlc_sagemaker_serving_image,
    learning_rate='0.01',
    pytorch_backend='gloo',
    training_job_name=pytorch_distributed_jobname,
    instance_type='ml.p3.2xlarge',
    instance_count='2',
    network_isolation='False',
    traffic_encryption='False',
    ): # Step to run training on SageMaker using SageMaker Components V2 for Pipeline.
    training = sagemaker_train_ack_op(
    region=region,
    algorithm_specification=(f'{{ '
    f'"trainingImage": "{train_image}",' '"trainingInputMode": "File"'
    f'}}'),
    training_job_name=training_job_name,
    hyper_parameters=(f'{{ '
    f'"backend": "{pytorch_backend}",' '"batch-size": "64",' '"epochs": "10",'
    f'"lr": "{learning_rate}",' '"model-type": "custom",' '"sagemaker_container_log_level": "20",' '"sagemaker_program": "cifar10-distributed-gpu-final.py",'
    f'"sagemaker_region": "{region}",'
    f'"sagemaker_submit_directory": "{source_s3}"'
    f'}}'),
    resource_config=(f'{{ '
    f'"instanceType": "{instance_type}",'
    f'"instanceCount": {instance_count},' '"volumeSizeInGB": 50'
    f'}}'),
    input_data_config=training_input(datasets),
    output_data_config=training_output(bucket_name),
    enable_network_isolation=network_isolation,
    enable_inter_container_traffic_encryption=traffic_encryption,
    role_arn=role,
    stopping_condition={"maxRuntimeInSeconds": 3600}
    ) model_artifact_url = get_s3_model_artifact_op(
    training.outputs["model_artifacts"]
    ).output # This step creates SageMaker Model which refers to model artifacts and inference script to deserialize the input image
    create_model = sagemaker_model_op(
    region=region,
    model_name=training_job_name,
    image=serving_image,
    model_artifact_url=model_artifact_url,
    network_isolation=network_isolation,
    environment=(f'{{ ' '"SAGEMAKER_CONTAINER_LOG_LEVEL": "20",' '"SAGEMAKER_PROGRAM": "inference.py",'
    f'"SAGEMAKER_REGION": "{region}",'
    f'"SAGEMAKER_SUBMIT_DIRECTORY": "{model_artifact_url}"'
    f'}}'),
    role=role
    ) # This step creates SageMaker Endpoint which will be called to run inference
    prediction = sagemaker_deploy_op(
    region=region,
    model_name_1=create_model.output,
    instance_type_1='ml.c5.xlarge'
    ) #Disable pipeline cache
    training.execution_options.caching_strategy.max_cache_staleness = "P0D"

    بعد تحديد خط الأنابيب ، يمكنك تجميع خط الأنابيب لمواصفات Argo YAML باستخدام Kubeflow Pipelines SDK's kfp.compiler حزمة. يمكنك تشغيل خط الأنابيب هذا باستخدام عميل Kubeflow Pipelines SDK ، الذي يستدعي نقطة نهاية خدمة خطوط الأنابيب ويمرر رؤوس المصادقة المناسبة مباشرة من دفتر الملاحظات. انظر الكود التالي:

    # DSL Compiler that compiles pipeline functions into workflow yaml.
    kfp.compiler.Compiler().compile(pytorch_cnn_pipeline, "pytorch_cnn_pipeline.yaml") # Connect to Kubeflow Pipelines using the Kubeflow Pipelines SDK client
    client = kfp.Client() experiment = client.create_experiment(name="ml_workflow") # Run a specified pipeline
    my_run = client.run_pipeline(experiment.id, "pytorch_cnn_pipeline", "pytorch_cnn_pipeline.yaml") # Please click “Run details” link generated below this cell to view your pipeline. You can click every pipeline step to see logs.

  2. اختيار تشغيل التفاصيل الارتباط الموجود أسفل الخلية الأخيرة لعرض خط أنابيب Kubeflow. تُظهر لقطة الشاشة التالية تفاصيل خط الأنابيب الخاصة بنا لمكون التدريب والنشر SageMaker.
  3. اختر خطوة وظيفة التدريب وعلى سجلات علامة التبويب ، اختر ارتباط سجلات CloudWatch للوصول إلى سجلات SageMaker.
    تُظهر لقطة الشاشة التالية سجلات CloudWatch لكل من مثيلات ml.p3.2xlarge.
  4. اختر أيًا من المجموعات لمشاهدة السجلات.
  5. التقط نقطة نهاية SageMaker باختيار ملف Sagemaker - نشر النموذج الخطوة ونسخ ملف endpoint_name قيمة الأداة الناتجة.

قم باستدعاء نقطة نهاية SageMaker

دفتر مذكرات STEP1.1_invoke_sagemaker_endpoint.ipynb استدعاء نقطة نهاية استنتاج SageMaker التي تم إنشاؤها في الخطوة السابقة. تأكد من تحديث اسم نقطة النهاية:

# Invoke SageMaker Endpoint. * Ensure you update the endpoint
# You can grab the SageMaker Endpoint name by either 1) going to the pipeline visualization of Kubeflow console and click the component for deployment, or 2) Go to SageMaker console and go to the list of endpoints, and then substitute the name to the EndpointName='...' in this cell. endpointName='<update-endpoint-here>' response = client.invoke_endpoint(EndpointName=endpointName,
ContentType='application/x-image',
Body=payload) pred = json.loads(response['Body'].read().decode()) output_vector_list=pred['score'] # Get outout vector of 10 classes
output_vector = output_vector_list[0] # Find the class with highest probability
max=output_vector[0]
index = 0
for i in range(1,len(output_vector)):
if output_vector[i] > max:
max = output_vector[i]
index = i print(f'Index of the maximum value is : {index}') labels = ['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck'] print(labels[index])

تنظيف

لتنظيف مواردك ، أكمل الخطوات التالية:

  1. قم بتشغيل الأوامر التالية في AWS Cloud9 لحذف موارد AWS:
    cd ${MANIFEST_DIR}/deployments/vanilla/terraform
    make delete

  2. حذف دور IAM "sagemakerrole"باستخدام أمر AWS CLI التالي:
    aws iam detach-role-policy --role-name sagemakerrole --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
    aws iam detach-role-policy --role-name sagemakerrole --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
    aws iam delete-role --role-name sagemakerrole

  3. احذف نقطة نهاية SageMaker باستخدام أمر AWS CLI التالي:
    aws sagemaker delete-endpoint --endpoint-name <endpoint-name> --region us-west-2

نبذة عامة

في هذا المنشور ، سلطنا الضوء على القيمة التي يوفرها Kubeflow على AWS 1.6.1 من خلال تكامل الخدمة الأصلية التي تديرها AWS لتلبية الحاجة إلى حالات استخدام الذكاء الاصطناعي والتعلم الآلي على مستوى المؤسسة. يمكنك الاختيار من بين العديد من خيارات النشر لتثبيت Kubeflow على AWS مع تكامل خدمات متنوعة باستخدام Terraform أو Kustomize أو Helm. أظهرت حالة الاستخدام في هذا المنشور تكامل Kubeflow مع SageMaker الذي يستخدم مجموعة تدريب مُدارة من SageMaker لتشغيل تدريب موزع لنموذج تصنيف الصور ونقطة نهاية SageMaker لنشر النموذج.

لقد وفرنا أيضًا ملف مثال على خط الأنابيب يستخدم أحدث مكونات SageMaker ؛ يمكنك تشغيل هذا مباشرة من لوحة القيادة Kubeflow. يتطلب خط الأنابيب هذا بيانات Amazon S3 و دور IAM لتنفيذ SageMaker كمدخلات مطلوبة.

لبدء استخدام Kubeflow على AWS ، ارجع إلى خيارات النشر المتكاملة المتاحة في AWS في Kubeflow على AWS. يمكنك متابعة مستودع AWS Labs لتتبع جميع مساهمات AWS في Kubeflow. يمكنك أيضًا أن تجدنا على قناة Kubeflow #AWS Slack؛ ستساعدنا ملاحظاتك هناك في تحديد أولويات الميزات التالية للمساهمة في مشروع Kubeflow.


عن المؤلفين

كانوالجيت خورمي هو مهندس حلول أول في Amazon Web Services. إنه يعمل مع عملاء AWS لتقديم التوجيه والمساعدة الفنية لمساعدتهم على تحسين قيمة حلولهم عند استخدام AWS. Kanwaljit متخصص في مساعدة العملاء في استخدام الحاويات وتطبيقات التعلم الآلي.

كارتيك كالامادي هو مهندس تطوير برمجيات في Amazon AI. يركز حاليًا على مشاريع Kubernetes مفتوحة المصدر للتعلم الآلي مثل Kubeflow و AWS SageMaker Controller لـ k8s. في أوقات فراغي ، أحب لعب ألعاب الكمبيوتر والعبث بالواقع الافتراضي باستخدام محرك الوحدة.

راهول خارس هو مهندس تطوير برمجيات في Amazon Web Services. يركز عمله على دمج خدمات AWS مع منصات ML Ops المعبأة في حاويات مفتوحة المصدر لتحسين قابليتها للتوسع والموثوقية والأمان. بالإضافة إلى التركيز على طلبات العملاء للحصول على الميزات ، يستمتع راهول أيضًا بتجربة أحدث التطورات التكنولوجية في هذا المجال.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة