شعار زيفيرنت

أدخل كود التعلم الآلي القديم في Amazon SageMaker باستخدام AWS Step Functions

التاريخ:

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

على المدى رمز الإرث يشير إلى الكود الذي تم تطويره ليتم تشغيله يدويًا على سطح مكتب محلي ، ولم يتم إنشاؤه باستخدام حزم SDK جاهزة للسحابة مثل AWS SDK لـ Python (Boto3) or الأمازون SageMaker Python SDK. بعبارة أخرى ، لم يتم تحسين هذه الرموز القديمة لنشر السحابة. أفضل ممارسة للترحيل هي إعادة تشكيل هذه الرموز القديمة باستخدام واجهة برمجة تطبيقات Amazon SageMaker أو SageMaker Python SDK. ومع ذلك ، في بعض الحالات ، قد لا يكون لدى المؤسسات التي لديها عدد كبير من النماذج القديمة الوقت أو الموارد لإعادة كتابة كل هذه النماذج.

في هذا المنشور ، نشارك أسلوبًا قابلاً للتطوير وسهل التنفيذ لترحيل رمز ML القديم إلى سحابة AWS للاستدلال باستخدام الأمازون SageMaker و وظائف خطوة AWS، مع الحد الأدنى من إعادة بناء الكود المطلوب. يمكنك بسهولة توسيع هذا الحل لإضافة المزيد من الوظائف. نوضح كيف يمكن لشخصين مختلفين ، عالم بيانات ومهندس MLOps ، التعاون لرفع وتحويل مئات النماذج القديمة.

حل نظرة عامة

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

نفترض مشاركة شخصين: عالم بيانات ومهندس MLOps. عالم البيانات مسؤول عن نقل الكود إلى SageMaker ، إما يدويًا أو عن طريق استنساخه من مستودع كود مثل كود AWS. أمازون ساجميكر ستوديو يوفر بيئة تطوير متكاملة (IDE) لتنفيذ خطوات متنوعة في دورة حياة ML ، ويستخدمها عالم البيانات لإنشاء حاوية مخصصة يدويًا تحتوي على عناصر التعليمات البرمجية الضرورية للنشر. سيتم تسجيل الحاوية في سجل حاوية مثل سجل الأمازون المرنة للحاويات (Amazon ECR) لأغراض النشر.

يأخذ مهندس MLOps ملكية بناء سير عمل Step Functions الذي يمكننا إعادة استخدامه لنشر الحاوية المخصصة التي طورها عالم البيانات مع المعلمات المناسبة. يمكن أن يكون سير عمل وظائف الخطوة معياريًا حسب الحاجة لملاءمة حالة الاستخدام ، أو يمكن أن يتكون من خطوة واحدة فقط لبدء عملية واحدة. لتقليل الجهد المطلوب لترحيل الكود ، حددنا ثلاثة مكونات معيارية لبناء عملية نشر تعمل بكامل طاقتها:

  • تجهيزها
  • الإستنباط
  • المعالجة البعدية

يوضح الرسم البياني التالي بنية الحلول وسير العمل لدينا.

يتم تضمين الخطوات التالية في هذا الحل:

  1. تستخدم شخصية عالم البيانات Studio لاستيراد التعليمات البرمجية القديمة من خلال الاستنساخ من مستودع التعليمات البرمجية ، ثم تقسيم الكود إلى مكونات منفصلة تتبع خطوات دورة حياة ML (المعالجة المسبقة والاستدلال والمعالجة اللاحقة).
  2. يستخدم عالم البيانات Studio ، وعلى وجه التحديد ملف استوديو صورة بناء CLI أداة مقدمة من SageMaker ، لبناء صورة Docker. تتيح أداة CLI هذه لعالم البيانات إنشاء الصورة مباشرةً داخل Studio وتسجيل الصورة تلقائيًا في Amazon ECR.
  3. يستخدم مهندس MLOps صورة الحاوية المسجلة وينشئ عملية نشر لحالة استخدام معينة باستخدام وظائف الخطوة. Step Functions هي خدمة سير عمل بدون خادم يمكنها التحكم في واجهات برمجة تطبيقات SageMaker مباشرة من خلال استخدام لغة Amazon States.

وظيفة معالجة SageMaker

دعونا نفهم كيف أ وظيفة معالجة SageMaker أشواط. يوضح الرسم التخطيطي التالي كيف يدير SageMaker مهمة معالجة.

يأخذ SageMaker البرنامج النصي الخاص بك ، وينسخ بياناتك من خدمة تخزين أمازون البسيطة (Amazon S3) ، ثم يسحب حاوية معالجة. يمكن أن تكون صورة حاوية المعالجة إما صورة مضمنة لـ SageMaker أو صورة مخصصة توفرها. تتم إدارة البنية التحتية الأساسية لوظيفة المعالجة بالكامل بواسطة SageMaker. يتم توفير موارد المجموعة طوال مدة عملك ، ويتم تنظيمها عند اكتمال المهمة. يتم تخزين مخرجات مهمة المعالجة في حاوية S3 التي حددتها. لمعرفة المزيد حول بناء الحاوية الخاصة بك ، ارجع إلى قم ببناء حاوية المعالجة الخاصة بك (سيناريو متقدم).

تقوم مهمة معالجة SageMaker بإعداد صورة المعالجة الخاصة بك باستخدام برنامج نصي لنقطة إدخال حاوية Docker. يمكنك أيضًا توفير نقطة الإدخال المخصصة الخاصة بك باستخدام معلمات ContainerEntrypoint و ContainerArguments لملف مواصفات التطبيق API. إذا كنت تستخدم نقطة الإدخال المخصصة الخاصة بك ، فلديك مرونة إضافية لتشغيلها كبرنامج نصي مستقل دون إعادة بناء صورك.

في هذا المثال ، نبني حاوية مخصصة ونستخدم وظيفة معالجة SageMaker للاستدلال. تستخدم مهام ما قبل المعالجة والمعالجة اللاحقة وضع البرنامج النصي مع حاوية scikit-Learn مسبقة الصنع.

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

لمتابعة هذا المنشور ، أكمل الخطوات الأساسية التالية:

  1. قم بإنشاء مجال Studio. للحصول على تعليمات ، راجع على متن الطائرة إلى مجال Amazon SageMaker باستخدام الإعداد السريع.
  2. قم بإنشاء حاوية S3.
  3. استنساخ جيثب ريبو في الاستوديو.

يتم تنظيم GitHub repo في مجلدات مختلفة تتوافق مع مراحل مختلفة في دورة حياة ML ، مما يسهل التنقل والإدارة:

ترحيل الكود القديم

في هذه الخطوة ، نعمل كعالم بيانات مسؤول عن ترحيل الكود القديم.

نبدأ بفتح ملف build_and_push.ipynb دفتر.

ترشدك الخلية الأولية في دفتر الملاحظات إلى تثبيت ملف استوديو صورة بناء CLI. يبسط CLI عملية الإعداد من خلال إنشاء بيئة بناء قابلة لإعادة الاستخدام تلقائيًا يمكنك التفاعل معها من خلال أوامر عالية المستوى. باستخدام CLI ، يكون إنشاء صورة أمرًا سهلاً مثل إخبارها بالبناء ، وستكون النتيجة رابطًا لموقع صورتك في Amazon ECR. يلغي هذا النهج الحاجة إلى إدارة سير العمل الأساسي المعقد الذي ينظمه CLI ، مما يبسط عملية بناء الصورة.

قبل أن نقوم بتشغيل الأمر build ، من المهم التأكد من أن الدور الذي يقوم بتشغيل الأمر لديه الأذونات اللازمة ، كما هو محدد في CLI GitHub جيثب: readme أو منشور له صلة. قد يؤدي عدم منح الأذونات المطلوبة إلى حدوث أخطاء أثناء عملية الإنشاء.

انظر الكود التالي:

#Install sagemaker_studio_image_build utility
import sys
!{sys.executable} -m pip install sagemaker_studio_image_build

لتبسيط شفرتك القديمة ، قسّمها إلى ثلاثة نصوص برمجية Python مميزة تسمى preprocessing.py و Forecast.py و postprocessing.py. التزم بأفضل ممارسات البرمجة عن طريق تحويل الكود إلى وظائف يتم استدعاؤها من وظيفة رئيسية. تأكد من استيراد جميع المكتبات الضرورية وتحديث ملف requirements.txt ليشمل أي مكتبات مخصصة.

بعد تنظيم الكود ، قم بتعبئته مع ملف المتطلبات في حاوية Docker. يمكنك بسهولة إنشاء الحاوية من داخل Studio باستخدام الأمر التالي:

sm-docker build .

بشكل افتراضي ، سيتم دفع الصورة إلى مستودع ECR يسمى sagemakerstudio مع العلامة الأحدث. بالإضافة إلى ذلك ، سيتم استخدام دور التنفيذ لتطبيق Studio ، جنبًا إلى جنب مع دلو SageMaker Python SDK S3 الافتراضي. ومع ذلك ، يمكن تغيير هذه الإعدادات بسهولة باستخدام خيارات CLI المناسبة. انظر الكود التالي:

sm-docker build . --repository mynewrepo:1.0 --role SampleDockerBuildRole --bucket sagemaker-us-east-1-0123456789999 --vpc-id vpc-0c70e76ef1c603b94 --subnet-ids subnet-0d984f080338960bb,subnet-0ac3e96808c8092f2 --security-group-ids sg-0d31b4042f2902cd0

الآن وقد تم بناء الحاوية وتسجيلها في مستودع ECR ، فقد حان الوقت للتعمق أكثر في كيفية استخدامها لتشغيل التنبؤ. نعرض لك أيضًا عملية استخدام ملف تعلم الحروف حاوية لتشغيل preprocessing.py و postprocessing.py.

إنتاج الحاوية

في هذه الخطوة ، نعمل كمهندس MLOps الذي ينتج الحاوية التي تم إنشاؤها في الخطوة السابقة.

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

يمكن أن تتحكم وظائف الخطوة في خدمات AWS معينة مباشرة من Amazon States Language. لمعرفة المزيد حول العمل مع وظائف الخطوة وتكاملها مع SageMaker ، يرجى الرجوع إلى إدارة SageMaker مع وظائف الخطوة. باستخدام إمكانية تكامل وظائف الخطوة مع SageMaker ، نقوم بتشغيل البرامج النصية للمعالجة المسبقة والمعالجة اللاحقة باستخدام مهمة معالجة SageMaker في وضع البرنامج النصي وتشغيل الاستدلال كمهمة معالجة SageMaker باستخدام حاوية مخصصة. نقوم بذلك باستخدام AWS SDK لـ Python (Boto3) إنشاء مهمة المعالجة مكالمات API.

تجهيزها

يقدم SageMaker العديد من الخيارات لتشغيل التعليمات البرمجية المخصصة. إذا كان لديك برنامج نصي فقط بدون أي تبعيات مخصصة ، فيمكنك تشغيل البرنامج النصي باعتباره برنامج Bring Your Own Script (BYOS). للقيام بذلك ، ما عليك سوى تمرير البرنامج النصي الخاص بك إلى حاوية إطار عمل scikit-Learn سابقة الإنشاء وتشغيل مهمة معالجة SageMaker في وضع البرنامج النصي باستخدام معلمات ContainerArguments و ContainerEntrypoint في مواصفات التطبيق API. هذه طريقة مباشرة ومريحة لتشغيل البرامج النصية البسيطة.

تحقق من تكوين الحالة "Preprocessing Script Mode" في ملف عينة سير عمل وظائف الخطوة لفهم كيفية تكوين استدعاء CreateProcessingJob API لتشغيل برنامج نصي مخصص.

الإستنباط

يمكنك تشغيل حاوية مخصصة باستخدام ملف بناء حاوية المعالجة الخاصة بك يقترب. تعمل وظيفة معالجة SageMaker مع ملف /opt/ml المسار المحلي ، ويمكنك تحديد ProcessingInputs ومسارها المحلي في التكوين. تقوم مهمة المعالجة بعد ذلك بنسخ القطع الأثرية إلى الحاوية المحلية وتبدأ المهمة. بعد اكتمال المهمة ، تقوم بنسخ القطع الأثرية المحددة في المسار المحلي لمخرجات المعالجة إلى موقعها الخارجي المحدد.

تحقق من تكوين حالة "حاوية الاستدلال المخصصة" في ملف عينة سير عمل وظائف الخطوة لفهم كيفية تكوين استدعاء CreateProcessingJob API لتشغيل حاوية مخصصة.

المعالجة البعدية

يمكنك تشغيل برنامج نصي للمعالجة اللاحقة تمامًا مثل البرنامج النصي للمعالجة المسبقة باستخدام الخطوة وظائف الخطوة CreateProcessingJob. يتيح لك تشغيل برنامج نصي للمعالجة اللاحقة أداء مهام معالجة مخصصة بعد اكتمال مهمة الاستدلال.

قم بإنشاء سير عمل وظائف الخطوة

للنماذج الأولية السريعة ، نستخدم وظائف الخطوة لغة الأمازون. يمكنك تحرير تعريف Step Functions مباشرة باستخدام لغة الولايات. الرجوع إلى عينة سير عمل وظائف الخطوة.

يمكنك إنشاء جهاز حالة وظائف الخطوة جديد على وحدة التحكم في وظائف الخطوة عن طريق تحديد اكتب سير العمل الخاص بك في التعليمات البرمجية.

يمكن أن تنظر وظائف الخطوة في الموارد التي تستخدمها وإنشاء دور. ومع ذلك ، قد ترى الرسالة التالية:

“لا يمكن لوظائف الخطوة إنشاء نهج IAM إذا كان RoleArn لـ SageMaker من مسار. قم بتشفير SageMaker RoleArn في تعريف آلة الحالة الخاصة بك ، أو اختر دورًا موجودًا مع الأذونات المناسبة لـ Step Functions لاستدعاء SageMaker. "

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:createProcessingJob", "sagemaker:ListTags", "sagemaker:AddTags" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } } ]
}

يوضح الشكل التالي تدفق البيانات وصور الحاوية في كل خطوة من خطوات سير عمل Step Functions.

فيما يلي قائمة بالحد الأدنى من المعلمات المطلوبة للتهيئة في وظائف الخطوة ؛ يمكنك أيضًا الرجوع إلى نموذج معلمات الإدخال JSON:

  • input_uri - S3 URI لملفات الإدخال
  • الإخراج_وري - S3 URI لملفات الإخراج
  • code_uri - S3 URI لملفات البرامج النصية
  • custom_image_uri - عنوان URI للحاوية المخصصة التي قمت بإنشائها
  • scikit_image_uri - URI الحاوية لإطار عمل scikit-Learn المصمم مسبقًا
  • دور - دور التنفيذ لتشغيل الوظيفة
  • نوع الطلب - نوع المثيل الذي تحتاج إلى استخدامه لتشغيل الحاوية
  • الحجم_الحجم - حجم التخزين الذي تحتاجه للحاوية
  • max_runtime - الحد الأقصى لوقت التشغيل للحاوية ، بقيمة افتراضية ساعة واحدة

قم بتشغيل سير العمل

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

يوضح الشكل التالي تشغيل سير عمل Step Functions.

نبذة عامة

في هذا المنشور ، ناقشنا عملية ترحيل كود ML Python القديم من بيئات التطوير المحلية وتنفيذ إجراء MLOps الموحد. باستخدام هذا النهج ، يمكنك نقل مئات النماذج دون عناء ودمج ممارسات نشر المؤسسة التي تريدها. قدمنا ​​طريقتين مختلفتين لتشغيل كود مخصص على SageMaker ، ويمكنك اختيار الطريقة التي تناسب احتياجاتك.

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


حول المؤلف

بهافانا تشيروماميلا هو مهندس مقيم أول في AWS ولديه شغف قوي بالبيانات وعمليات التعلم الآلي. إنها تجلب ثروة من الخبرة والحماس لمساعدة المؤسسات على بناء استراتيجيات فعالة للبيانات وتعلم الآلة. في أوقات فراغها ، تستمتع بهافانا بقضاء الوقت مع عائلتها والانخراط في أنشطة مختلفة مثل السفر والمشي لمسافات طويلة والبستنة ومشاهدة الأفلام الوثائقية.

شيام نامافارام هو مهندس حلول متخصص في الذكاء الاصطناعي (AI) وتعلم الآلة (ML) في Amazon Web Services (AWS). إنه يعمل بشغف مع العملاء لتسريع تبني الذكاء الاصطناعي والتعلم الآلي من خلال توفير التوجيه الفني ومساعدتهم على ابتكار وبناء حلول سحابية آمنة على AWS. وهو متخصص في تقنيات الذكاء الاصطناعي والتعلم الآلي والحاويات والتحليلات. خارج العمل ، يحب ممارسة الرياضة وتجربة الطبيعة بالرحلات.

تشينغوي لي هو متخصص في التعلم الآلي في Amazon Web Services. حصل على درجة الدكتوراه في بحوث العمليات بعد أن كسر حساب منحة مستشاره البحثي وفشل في تسليم جائزة نوبل التي وعد بها. حاليًا ، يساعد العملاء في الخدمات المالية وصناعة التأمين على بناء حلول التعلم الآلي على AWS. في أوقات فراغه يحب القراءة والتعليم.

سرينيفاسا شيخ هو مهندس حلول في AWS ومقره بوسطن. إنه يساعد عملاء المؤسسات على تسريع رحلتهم إلى السحابة. إنه شغوف بالحاويات وتقنيات التعلم الآلي. في أوقات فراغه ، يستمتع بقضاء الوقت مع أسرته والطهي والسفر.

بقعة_صورة

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

بقعة_صورة