استضف العديد من نماذج رؤية الكمبيوتر TensorFlow باستخدام نقاط النهاية متعددة النماذج من Amazon SageMaker

عقدة المصدر: 1853804

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

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

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

في هذا المنشور ، نوضح كيفية استخدام نقاط النهاية متعددة النماذج من SageMaker لاستضافة نموذجين لرؤية الكمبيوتر بهياكل نموذجية ومجموعات بيانات مختلفة لتصنيف الصور. في الممارسة العملية ، يمكنك نشر عشرات الآلاف من النماذج على نقاط النهاية متعددة النماذج.

نظرة عامة على الحل

تعمل نقاط النهاية متعددة النماذج من SageMaker مع العديد من الأطر ، مثل TensorFlow و PyTorch و MXNet و sklearn ، ويمكنك بناء الحاوية الخاصة بك مع خادم متعدد النماذج. يتم أيضًا دعم نقاط النهاية متعددة النماذج محليًا في خوارزميات SageMaker المضمنة الشائعة التالية: XGBoost, المتعلم الخطي, قطع الغابة العشوائية (RCF) و K- أقرب الجيران (KNN). يمكنك استخدام الحاويات التي يوفرها SageMaker مباشرةً أثناء استخدام هذه الخوارزميات دون الحاجة إلى إنشاء حاويتك المخصصة.

الرسم البياني التالي هو توضيح مبسط لكيفية استضافة نماذج متعددة (لهذا المنشور ، ستة) باستخدام نقاط النهاية متعددة النماذج SageMaker. من الناحية العملية ، يمكن لنقاط النهاية متعددة النماذج استيعاب مئات إلى عشرات الآلاف من نماذج ML خلف نقطة نهاية. في هندستنا المعمارية ، إذا استضفنا المزيد من النماذج باستخدام النماذج الأثرية المخزنة في خدمة تخزين أمازون البسيطة (Amazon S3) ، تعمل نقاط النهاية متعددة النماذج على تفريغ بعض النماذج الأقل استخدامًا بشكل ديناميكي لاستيعاب الطرز الأحدث.

في هذا المنشور ، نوضح كيفية استضافة نموذجين للرؤية الحاسوبية تم تدريبهما باستخدام إطار عمل TensorFlow خلف نقطة نهاية واحدة متعددة النماذج من SageMaker. نحن نستخدم ال خدمة TensorFlow تم تمكين الحاوية لنقاط النهاية متعددة النماذج لاستضافة هذه النماذج. بالنسبة إلى نموذجنا الأول ، نقوم بتدريب نسخة أصغر من AlexNet سي ان ان لتصنيف الصور من سيفار 10 مجموعة البيانات. بالنسبة للنموذج الثاني ، نستخدم ملف VGG16 تم اختبار نموذج CNN مسبقًا على IMAGEnet مجموعة البيانات وصقلها على مجموعة بيانات أرقام لغة الإشارة لتصنيف صور رمز اليد. نحن نقدم أيضا وظيفية بالكامل مفكرة لشرح كل الخطوات.

الطراز 1: تصنيف صور CIFAR-10

CIFAR-10 هي مجموعة بيانات معيارية لتصنيف الصور في رؤية الكمبيوتر و ML. صور CIFAR ملونة (ثلاث قنوات) مع تباين كبير في كيفية ظهور الكائنات. يتكون من 32 × 32 صورة ملونة في 10 فئات ، مع 6,000 صورة لكل فصل. يحتوي على 50,000 صورة تدريبية و 10,000 صورة اختبار. توضح الصورة التالية عينة من الصور مجمعة حسب الملصقات.

لبناء مصنف الصور ، نستخدم نسخة مبسطة من AlexNet CNN الكلاسيكي. تتكون الشبكة من خمس طبقات تلافيفية وتجميعية وثلاث طبقات متصلة بالكامل. تتراكم بنيتنا المبسطة ثلاث طبقات تلافيفية وطبقتين متصلتين بالكامل (كثيفان).

تتمثل الخطوة الأولى في تحميل مجموعة البيانات في كائنات القطار والاختبار. يوفر إطار عمل TensorFlow مجموعة بيانات CIFAR لنا للتحميل باستخدام طريقة load_data (). بعد ذلك ، نقوم بإعادة قياس الصور المدخلة بقسمة قيم البكسل على 255: [0,255،0,1] ⇒ [XNUMX،XNUMX]. نحتاج أيضًا إلى تحضير الملصقات باستخدام ترميز واحد ساخن. أحد الترميز الساخن هو عملية يتم من خلالها تحويل المتغيرات الفئوية إلى شكل رقمي. يوضح مقتطف الشفرة التالي هذه الخطوات عمليًا:

from tensorflow.keras.datasets import cifar10 # load dataset
(X_train, y_train), (X_test, y_test) = cifar10.load_data() # rescale input images
X_train = X_train.astype('float32')/255
X_test = X_test.astype('float32')/255 # one hot encode target labels
num_classes = len(np.unique(y_train))
y_train = utils.to_categorical(y_train, num_classes)
y_test = utils.to_categorical(y_test, num_classes)

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

في الخطوة التالية ، نستخدم البرنامج النصي للتدريب لإنشاء مقدر TensorFlow باستخدام SageMaker SDK (انظر التعليمات البرمجية التالية). نستخدم المقدّر لملاءمة نموذج CNN على مدخلات CIFAR-10. عند اكتمال التدريب ، يتم حفظ النموذج في Amazon S3.

from sagemaker.tensorflow import TensorFlow model_name = 'cifar-10' hyperparameters = {'epochs': 50} estimator_parameters = {'entry_point':'cifar_train.py', 'instance_type': 'ml.m5.2xlarge', 'instance_count': 2, 'model_dir': f'/opt/ml/model', 'role': role, 'hyperparameters': hyperparameters, 'output_path': f's3://{BUCKET}/{PREFIX}/cifar_10/out', 'base_job_name': f'mme-cv-{model_name}', 'framework_version': TF_FRAMEWORK_VERSION, 'py_version': 'py37', 'script_mode': True} estimator_1 = TensorFlow(**estimator_parameters) estimator_1.fit(inputs)

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

النموذج 2: تصنيف أرقام لغة الإشارة

بالنسبة لنموذجنا الثاني ، نستخدم مجموعة بيانات أرقام لغة الإشارة. تميز مجموعة البيانات هذه أرقام لغة الإشارة من 0 إلى 9. تُظهر الصورة التالية عينة من مجموعة البيانات.

تحتوي مجموعة البيانات على 100 × 100 صورة بألوان RGB وتحتوي على 10 فئات (الأرقام من 0 إلى 9). تحتوي مجموعة التدريب على 1,712 صورة ومجموعة التحقق 300 ومجموعة الاختبار 50.

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

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

نص التدريب (Sign_language_train.py) يشمل بنية النموذج ومنطق التدريب لمصنف أرقام لغة الإشارة. أولاً ، نقوم بتحميل الأوزان المعدة مسبقًا من شبكة VGG16 المدربة على مجموعة بيانات ImageNet. بعد ذلك ، نقوم بتجميد جزء من جزء مستخرج الميزة ، متبوعًا بإضافة طبقات المصنف الجديدة. أخيرًا ، نقوم بتجميع الشبكة وتشغيل عملية التدريب لتحسين النموذج لمجموعة البيانات الأصغر.

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

model_name = 'sign-language' hyperparameters = {'epochs': 50} estimator_parameters = {'entry_point':'sign_language_train.py', 'instance_type': 'ml.m5.2xlarge', 'instance_count': 2, 'hyperparameters': hyperparameters, 'model_dir': f'/opt/ml/model', 'role': role, 'output_path': f's3://{BUCKET}/{PREFIX}/sign_language/out', 'base_job_name': f'cv-{model_name}', 'framework_version': TF_FRAMEWORK_VERSION, 'py_version': 'py37', 'script_mode': True} estimator_2 = TensorFlow(**estimator_parameters) estimator_2.fit({'train': train_input, 'val': val_input})

انشر نقطة نهاية متعددة النماذج

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

لإنشاء نقطة نهاية متعددة النماذج ، نحتاج أولاً إلى نسخ النماذج المدربة للمقدر الفردي (1 و 2) من مواقع S3 المحفوظة إلى بادئة S3 مشتركة يمكن استخدامها بواسطة نقطة النهاية متعددة النماذج:

tf_model_1 = estimator_1.model_data
output_1 = f's3://{BUCKET}/{PREFIX}/mme/cifar.tar.gz' tf_model_2 = estimator_2.model_data
output_2 = f's3://{BUCKET}/{PREFIX}/mme/sign-language.tar.gz' !aws s3 cp {tf_model_1} {output_1}
!aws s3 cp {tf_model_2} {output_2}

بعد نسخ النماذج إلى الموقع المشترك المحدد بواسطة بادئة S3 ، نقوم بإنشاء نموذج تقديم باستخدام فئة TensorFlowModel من SageMaker SDK. يتم إنشاء نموذج التقديم لأحد النماذج التي سيتم استضافتها ضمن نقطة النهاية متعددة النماذج. في هذه الحالة ، نستخدم النموذج الأول (مصنف الصور CIFAR-10). بعد ذلك ، نستخدم فئة MultiDataModel من SageMaker SDK لإنشاء نموذج بيانات متعدد النماذج باستخدام نموذج الخدمة للنموذج 1 ، والذي أنشأناه في الخطوة السابقة:

from sagemaker.tensorflow.serving import TensorFlowModel
from sagemaker.multidatamodel import MultiDataModel model_1 = TensorFlowModel(model_data=output_1, role=role, image_uri=IMAGE_URI) mme = MultiDataModel(name=f'mme-tensorflow-{current_time}', model_data_prefix=model_data_prefix, model=model_1, sagemaker_session=sagemaker_session)

أخيرًا ، نقوم بنشر MultiDataModel عن طريق استدعاء طريقة النشر () ، وتوفير السمات اللازمة لإنشاء البنية التحتية للاستضافة المطلوبة لدعم نقطة النهاية متعددة النماذج:

predictor = mme.deploy(initial_instance_count=2, instance_type='ml.m5.2xlarge', endpoint_name=f'mme-tensorflow-{current_time}')

يُرجع استدعاء النشر مثيل توقع ، والذي يمكننا استخدامه لإجراء استدعاءات الاستدلال. نرى هذا في القسم التالي.

اختبر نقطة النهاية متعددة النماذج للاستدلال في الوقت الفعلي

تعمل نقاط النهاية متعددة النماذج على تمكين مشاركة موارد الذاكرة عبر النماذج الخاصة بك. إذا كان النموذج المراد الرجوع إليه مخزَّنًا مؤقتًا بالفعل ، فستقوم نقاط النهاية متعددة النماذج بتشغيل الاستدلال على الفور. من ناحية أخرى ، إذا لم يتم تخزين النموذج المطلوب بشكل مؤقت ، فيجب على SageMaker تنزيل النموذج ، مما يزيد من زمن الوصول لهذا الطلب الأولي. ومع ذلك ، فإن هذا لا يستغرق سوى جزء بسيط من الوقت الذي يستغرقه إطلاق بنية تحتية جديدة تمامًا (مثيلات) لاستضافة النموذج بشكل فردي على SageMaker. بعد تخزين النموذج مؤقتًا في نقطة النهاية متعددة النماذج ، يتم بدء الطلبات اللاحقة في الوقت الفعلي (ما لم تتم إزالة النموذج). نتيجةً لذلك ، يمكنك تشغيل العديد من النماذج من مثيل واحد ، وفصل كمية النماذج بشكل فعال عن تكلفة النشر الخاصة بنا. هذا يجعل من السهل إدارة عمليات نشر ML على نطاق واسع ويقلل من تكاليف نشر النموذج الخاص بك من خلال زيادة استخدام نقطة النهاية ومثيلاتها الحسابية الأساسية. لمزيد من المعلومات وعرض التوفير في التكاليف لأكثر من 90٪ لنموذج 1,000 ، انظر وفر تكاليف الاستدلال باستخدام نقاط النهاية متعددة النماذج من Amazon SageMaker.

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

دعونا نرى كيفية عمل استنتاج من مصنف الصور CIFAR-10 (الطراز 1) المستضاف ضمن نقطة النهاية متعددة النماذج. أولاً ، نقوم بتحميل عينة صورة من إحدى الفئات - الطائرة - ونجهزها لإرسالها إلى نقطة النهاية متعددة النماذج باستخدام المتنبئ الذي أنشأناه في الخطوة السابقة.

باستخدام هذا المتنبئ ، يمكننا استدعاء طريقة التنبؤ () جنبًا إلى جنب مع المعلمة initial_args ، التي تحدد اسم النموذج المستهدف المطلوب استدعاؤه. في هذه الحالة ، يكون النموذج المستهدف هو cifar.tar.gz. يوضح المقتطف التالي هذه العملية بالتفصيل:

img = load_img('./data/cifar_10/raw_images/airplane.png', target_size=(32, 32))
data = img_to_array(img)
data = data.astype('float32')
data = data / 255.0
data = data.reshape(1, 32, 32, 3)
payload = {'instances': data}
y_pred = predictor.predict(data=payload, initial_args={'TargetModel': 'cifar.tar.gz'})
predicted_label = CIFAR10_LABELS[np.argmax(y_pred)]
print(f'Predicted Label: [{predicted_label}]')

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

Predicted Label: [airplane]

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

نستخدم الصورة النموذجية التالية لرقم علامة اليد 0.

يوضح المقتطف التالي كيفية استدعاء نقطة النهاية متعددة النماذج مع نموذج الصورة لاستعادة الاستجابة الصحيحة:

test_path = './data/sign_language/test'
img = mpimg.imread(f'{test_path}/0/IMG_4159.JPG') def path_to_tensor(img_path): # loads RGB image as PIL.Image.Image type img = image.load_img(img_path, target_size=(224, 224)) # convert PIL.Image.Image type to 3D tensor with shape (224, 224, 3) x = image.img_to_array(img) # convert 3D tensor to 4D tensor with shape (1, 224, 224, 3) and return 4D tensor return np.expand_dims(x, axis=0) data = path_to_tensor(f'{test_path}/0/IMG_4159.JPG')
payload = {'instances': data}
y_pred = predictor.predict(data=payload, initial_args={'TargetModel': 'sign-language.tar.gz'})predicted_label = np.argmax(y_pred)
print(f'Predicted Label: [{predicted_label}]')

الكود التالي هو استجابتنا ، مع التسمية 0:

Predicted Label: [0]

وفي الختام

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

ناقش هذا المنشور كيفية استضافة نماذج رؤية كمبيوتر متعددة تم تدريبها باستخدام إطار عمل TensorFlow ضمن نقطة نهاية متعددة النماذج من SageMaker. كانت نماذج تصنيف الصور من بنى نماذج مختلفة وتم تدريبها على مجموعات بيانات مختلفة. ال مفكرة المضمن في المنشور يوفر إرشادات مفصلة حول التدريب واستضافة النماذج.

جرب نقاط النهاية متعددة النماذج من SageMaker لحالة الاستخدام الخاصة بك واترك ملاحظاتك في التعليقات.


حول المؤلف

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

مارك روي هو مهندس رئيسي لتعلم الآلة في AWS ، يساعد عملاء AWS على تصميم وبناء حلول AI / ML. يغطي عمل Mark مجموعة واسعة من حالات استخدام ML ، مع اهتمام أساسي برؤية الكمبيوتر والتعلم العميق وتوسيع ML عبر المؤسسة. لقد ساعد الشركات في العديد من الصناعات ، بما في ذلك التأمين والخدمات المالية والإعلام والترفيه والرعاية الصحية والمرافق والتصنيع. يحمل مارك ست شهادات AWS ، بما في ذلك شهادة التخصص في ML. قبل انضمامه إلى AWS ، كان مارك مهندسًا معماريًا ومطورًا وقائدًا تقنيًا لأكثر من 25 عامًا ، بما في ذلك 19 عامًا في الخدمات المالية.

المصدر: https://aws.amazon.com/blogs/machine-learning/host-multiple-tensorflow-computer-vision-models-using-amazon-sagemaker-multi-model-endpoints/

الطابع الزمني:

اكثر من AWS مدونة التعلم الآلي