يمكن أن يكون نشر النماذج على نطاق واسع مهمة مرهقة للعديد من علماء البيانات ومهندسي التعلم الآلي. ومع ذلك ، توفر نقاط نهاية Amazon SageMaker حلاً بسيطًا لنشر استنتاجات نموذج التعلم الآلي (ML) وتوسيع نطاقها. لدينا آخر بلوق وظيفة و جيثب ريبو على استضافة أ يولوف 5 TensorFlowModel
on الأمازون SageMaker النهاية أثار الكثير من الاهتمام من قرائنا. كان العديد من القراء مهتمين أيضًا بتعلم كيفية استضافة نموذج YOLOv5 باستخدام PyTorch
. لمعالجة هذه المشكلة ومع الإصدار الأخير من يولوف 8 نموذج من ألتراليتيكش، نقدم هذا المنشور حول كيفية استضافة YOLOv8 PyTorchModel
على نقاط نهاية SageMaker. نموذج YOLOv8 ، الموزع بموجب ترخيص GNU GPL3 ، هو نموذج شائع لاكتشاف الكائنات معروف بكفاءته في وقت التشغيل بالإضافة إلى دقة الكشف. توفر نقاط نهاية Amazon SageMaker حلاً سهل التدرج ومُحسّن التكلفة لنشر النموذج.
حل نظرة عامة
توضح الصورة التالية خدمات AWS المستخدمة لاستضافة نموذج YOLOv8 باستخدام نقطة نهاية SageMaker واستدعاء نقطة النهاية كمستخدم. يستخدم الحل تكوين سحابة AWS لأتمتة إنشاء مثيل SageMaker واستنساخ GitHub جيثب: المستودع للمثيل. يصل الكمبيوتر الدفتري SageMaker إلى نموذج YOLOv8 PyTorch ويقوم بتنزيله ويخزن رمز الاستدلال المخصص جنبًا إلى جنب مع النموذج في خدمة تخزين أمازون البسيطة (Amazon S3) دلو. توضح الخطوات الموجودة في دفتر الملاحظات إنشاء نقطة نهاية SageMaker التي تستضيف نموذج YOLOv8 PyTorch ورمز الاستدلال المخصص. يوضح دفتر الملاحظات أيضًا كيفية اختبار نقطة النهاية ورسم النتائج. يتكون الحل من الخطوات التالية:
- لقد أنشأنا مستودع GitHub مع جهازي كمبيوتر محمول
1_DeployEndpoint.ipynb
و2_TestEndpoint.ipynb
تحتsm-notebook/
الدليل. - يتم تشغيل قالب AWS CloudFormation ، وإنشاء مثيل SageMaker Notebook ، ثم استنساخ مستودع GitHub.
- دفتر مذكرات
1_DeployEndpoint.ipynb
يستخدم لتنزيل نموذج YOLOv8. - يتم تخزين نموذج YOLOv8 ورمز الاستدلال كملف
model.tar.gz
في Amazon S3. - يتم إنشاء نقطة نهاية SageMaker من خلال استضافة ملف
model.tar.gz
. - دفتر مذكرات
2_TestEndpoint.ipynb
يستخدم لاختبار نقطة النهاية وجمع النتائج.
المتطلبات الأساسية المسبقة
AWS Account مع أدوار AWS Identity and Access Management (IAM) التي توفر الوصول إلى:
- تكوين سحابة AWS
- الأمازون SageMaker
- الأمازون S3
1. قم باستضافة YOLOv8 على نقطة نهاية SageMaker
لدى Ultralytics نماذج YOLOv8 متعددة بقدرات مختلفة. تنقسم إلى ما يلي:
- كشف الكائن (
yolov8l.pt, yolov8m.pt, yolov8n.pt, yolov8s.pt, yolov8x.pt, yolov8x6.pt
) - تقسيم (
yolov8l-seg.pt, yolov8m-seg.pt, yolov8n-seg.pt, yolov8s-seg.pt, yolov8x-seg.pt
) - تصنيف (
yolov8l-cls.pt, yolov8m-cls.pt, yolov8n-cls.pt, yolov8s-cls.pt, yolov8x-cls.pt
)
في هذه المدونة ، نركز على اكتشاف الكائنات باستخدام yolov8l.pt
نموذج PyTorch. لاستضافة نموذج YOLOv8 ورمز الاستدلال المخصص على نقطة نهاية SageMaker ، يجب ضغطهما معًا في ملف واحد model.tar.gz
بالهيكل التالي:
model.tar.gz ├─ code/ │ ├── inference.py │ └── requirements.txt └── yolov8l.pt
أوزان النموذج yolov8l.pt
يجب أن يكون الملف خارج code/
الدليل ونص بايثون الرئيسي للاستدلال inference.py
، التي تحتوي على الوظائف اللازمة لتحميل النموذج ، وتحليل المدخلات ، وتشغيل الاستدلال ، والمعالجة اللاحقة للمخرجات ، يجب أن تكون موجودة تحت code/
الدليل. مزيد من التفاصيل حول inference.py
معروضة في القسم التالي.
1.1 كود الاستدلال المخصص
اعتمادًا على خط الأنابيب وسير عمل الكود ، يمكن أن تختلف المدخلات والمخرجات من نقاط نهاية SageMaker. في هذا المنشور ، نقدم سير عمل لتمرير ملف numpy
مجموعة إلى نقطة النهاية والمعالجة. ومع ذلك ، يمكن أن تكون المدخلات إلى نقطة النهاية json
أو نص أيضًا. اعتمادًا على سير العمل الخاص بك ، يجب عليك تعديل الوظائف في inference.py
لاستيعاب المدخلات والمخرجات المختلفة. بالإضافة إلى ذلك ، مع الإصدار الأخير من YOLOv8 ، أصدر فريق Ultralytics واجهة برمجة تطبيقات Python ، والتي تتيح لنا تثبيت مكتبة YOLO مباشرة من خلال requirements.txt
واستيراد النموذج بتنسيق inference.py
.
1.1.1. محتويات ال code/inference.py
:
import numpy as np
import torch, os, json, io, cv2, time
from ultralytics import YOLO def model_fn(model_dir): print("Executing model_fn from inference.py ...") env = os.environ model = YOLO("/opt/ml/model/code/" + env['YOLOV8_MODEL']) return model def input_fn(request_body, request_content_type): print("Executing input_fn from inference.py ...") if request_content_type: jpg_original = np.load(io.BytesIO(request_body), allow_pickle=True) jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8) img = cv2.imdecode(jpg_as_np, flags=-1) else: raise Exception("Unsupported content type: " + request_content_type) return img def predict_fn(input_data, model): print("Executing predict_fn from inference.py ...") device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(device) with torch.no_grad(): result = model(input_data) return result def output_fn(prediction_output, content_type): print("Executing output_fn from inference.py ...") infer = {} for result in prediction_output: if result.boxes: infer['boxes'] = result.boxes.numpy().data.tolist() if result.masks: infer['masks'] = result.masks.numpy().data.tolist() if result.probs: infer['probs'] = result.probs.numpy().data.tolist() return json.dumps(infer)
1.1.2. محتويات ال code/requirements.txt
:
مرة واحدة كل محتويات الملف ل model.tar.gz
تم الانتهاء من تنفيذ الأمر التالي لإنشاء كرة القطران:
$ tar -czvf model.tar.gz code/ yolov8l.pt
1.2. المضيف model.tar.gz
إلى نقطة نهاية SageMaker:
هذا ينطوي على بضع خطوات حيث model.tar.gz
يتم تحميله أولاً إلى حاوية S3. يتم استخدام الأداة التي تم تحميلها لإنشاء نموذج SageMaker PyTorchModel. وأخيرًا ، يتم استخدام نموذج PyTorch هذا لنشر النموذج إلى نقطة نهاية SageMaker.
1.2.1. تحميل النموذج ورمز الاستدلال إلى S3:
from sagemaker import s3 bucket = "s3://NAME_OF_BUCKET"
prefix = "yolov8/demo-custom-endpoint"
model_data = s3.S3Uploader.upload("model.tar.gz", bucket + "/" + prefix)
1.2.2. إنشاء نموذج SageMaker PyTorchModel:
from sagemaker.pytorch import PyTorchModel model_name = 'yolov8l.pt' model = PyTorchModel(entry_point='inference.py', model_data=model_data, framework_version='1.12', py_version='py38', role=role, env={'TS_MAX_RESPONSE_SIZE':'20000000', 'YOLOV8_MODEL': model_name}, sagemaker_session=sess)
1.2.3. تجميع النموذج واستضافته إلى نقطة نهاية:
from sagemaker.deserializers import JSONDeserializer INSTANCE_TYPE = 'ml.m5.4xlarge'
ENDPOINT_NAME = 'yolov8-pytorch-' + str(datetime.utcnow().strftime('%Y-%m-%d-%H-%M-%S-%f')) predictor = model.deploy(initial_instance_count=1, instance_type=INSTANCE_TYPE, deserializer=JSONDeserializer(), endpoint_name=ENDPOINT_NAME)
2. اختبر نقطة نهاية SageMaker
بمجرد استضافة نقطة النهاية بنجاح ، يمكن استخدامها لتشغيل الاستدلال. في هذه الخطوة ، سنقرأ الصورة أولاً ، ونحولها إلى بايت ونجري الاستدلال بتمرير البايتات كمدخلات إلى نقطة النهاية. سيكون للنتائج التي تم إنشاؤها إما مربعات أو أقنعة أو درجات ثقة بناءً على نوع نموذج YOLOv8 المستخدم للاستضافة. يمكن رسم الإخراج وفقًا لذلك.
2.1.1. توليد نتائج الاستدلال وإخراج الرسم:
import cv2, random
import numpy as np
import matplotlib.pyplot as plt orig_image = cv2.imread('bus.jpg') image_height, image_width, _ = orig_image.shape
model_height, model_width = 300, 300
x_ratio = image_width/model_width
y_ratio = image_height/model_height resized_image = cv2.resize(orig_image, (model_height, model_width))
payload = cv2.imencode('.jpg', resized_image)[1].tobytes()
result = predictor.predict(payload) if 'boxes' in result: for idx,(x1,y1,x2,y2,conf,lbl) in enumerate(result['boxes']): # Draw Bounding Boxes x1, x2 = int(x_ratio*x1), int(x_ratio*x2) y1, y2 = int(y_ratio*y1), int(y_ratio*y2) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.rectangle(orig_image, (x1,y1), (x2,y2), color, 4) cv2.putText(orig_image, f"Class: {int(lbl)}", (x1,y1-40), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) cv2.putText(orig_image, f"Conf: {int(conf*100)}", (x1,y1-10), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) if 'masks' in result: # Draw Masks mask = cv2.resize(np.asarray(result['masks'][idx]), dsize=(image_width, image_height), interpolation=cv2.INTER_CUBIC) for c in range(3): orig_image[:,:,c] = np.where(mask>0.5, orig_image[:,:,c]*(0.5)+0.5*color[c], orig_image[:,:,c]) if 'probs' in result: # Find Class lbl = result['probs'].index(max(result['probs'])) color = (random.randint(10,255), random.randint(10,255), random.randint(10,255)) cv2.putText(orig_image, f"Class: {int(lbl)}", (20,20), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2, cv2.LINE_AA) plt.imshow(cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB))
plt.show()
2.1.2. نتائج:
يظهر ناتج اكتشاف الكائنات وتجزئة نماذج YOLOv8 في الصور التالية:
3. نظف
حذف مكدس CloudFormation ستزيل جميع الموارد التي تم إنشاؤها في الأصل. ومع ذلك ، لم يتم تكوين CloudFormation حاليًا لإزالة نقطة النهاية وتكوين نقطة النهاية والنموذج تلقائيًا. إذا لم يتم استخدام نقطة النهاية المستضافة ، فمن الجيد إزالتها لتوفير التكاليف. يمكن القيام بذلك على النحو التالي:
import boto3 sm_client = boto3.client(service_name="sagemaker") response = sm_client.describe_endpoint_config(EndpointConfigName=endpoint_name)
print(response)
endpoint_config_name = response['EndpointConfigName'] # Delete Endpoint
sm_client.delete_endpoint(EndpointName=endpoint_name) # Delete Endpoint Configuration
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name) # Delete Model
for prod_var in response['ProductionVariants']: model_name = prod_var['ModelName'] sm_client.delete_model(ModelName=model_name)
وفي الختام
في هذا المنشور ، أوضحنا كيفية استضافة YOLOv8 المدربين مسبقًا PyTorchModel
على نقطة نهاية SageMaker واختبر نتائج الاستدلال عن طريق استدعاء نقطة النهاية. الكود المفصل متاح في GitHub جيثب:، ومكدس القالب CloudFormation متاح على GitHub أيضًا.
لمعرفة المزيد حول نقاط نهاية SageMaker ، يرجى التحقق من ذلك قم بإنشاء نقطة النهاية الخاصة بك ونشر النموذج الخاص بك و استخدم PyTorch مع Amazon SageMaker، والذي يبرز استخدام ملفات PyTorchModel
على SageMaker. يمكن أتمتة العملية باستخدام دعم CloudFormation لبرنامج SageMaker.
عن المؤلفين
كيفن سونغ هو عالم بيانات في خدمات AWS الاحترافية. وهو حاصل على درجة الدكتوراه في الفيزياء الحيوية ولديه أكثر من خمس سنوات من الخبرة الصناعية في بناء رؤية الكمبيوتر وحلول التعلم الآلي.
روميل شاه هو عالم بيانات IoT Edge في خدمات AWS الاحترافية. يتمتع Romil بأكثر من ست سنوات من الخبرة الصناعية في مجال رؤية الكمبيوتر والتعلم الآلي وأجهزة إنترنت الأشياء المتطورة. يشارك في مساعدة العملاء على تحسين ونشر نماذج التعلم الآلي الخاصة بهم للأجهزة المتطورة في الإعداد الصناعي.
- محتوى مدعوم من تحسين محركات البحث وتوزيع العلاقات العامة. تضخيم اليوم.
- بلاتوبلوكشين. Web3 Metaverse Intelligence. تضخيم المعرفة. الوصول هنا.
- المصدر https://aws.amazon.com/blogs/machine-learning/hosting-yolov8-pytorch-model-on-amazon-sagemaker-endpoints/
- :يكون
- 1
- 10
- 100
- 7
- a
- من نحن
- الوصول
- استيعاب
- وفقا لذلك
- حسابي
- دقة
- إضافة
- العنوان
- الكل
- يسمح
- أمازون
- الأمازون SageMaker
- و
- API
- هي
- مجموعة
- AS
- At
- أتمتة
- الآلي
- تلقائيا
- متاح
- AWS
- الخدمات المهنية AWS
- كرة
- على أساس
- BE
- يجري
- فيزياء حيوية
- المدونة
- مربعات
- ابني
- حافلة
- by
- CAN
- قدرات
- التحقق
- فئة
- الكود
- اللون
- COM
- الكمبيوتر
- رؤية الكمبيوتر
- الثقة
- الاعداد
- يحتوي
- محتوى
- محتويات
- تحول
- التكاليف
- خلق
- خلق
- يخلق
- خلق
- حاليا
- على
- العملاء
- البيانات
- عالم البيانات
- التاريخ والوقت
- تظاهر
- يوضح
- اعتمادا
- نشر
- نشر
- نشر
- مفصلة
- تفاصيل
- كشف
- جهاز
- الأجهزة
- مختلف
- مباشرة
- وزعت
- بإمكانك تحميله
- التنزيلات
- رسم
- بسهولة
- حافة
- كفاءة
- إما
- نقطة النهاية
- المهندسين
- تنفيذ
- الخبره في مجال الغطس
- قليل
- قم بتقديم
- الانتهاء
- أخيرا
- الاسم الأول
- تركز
- متابعيك
- متابعات
- في حالة
- تبدأ من
- وظائف
- إضافي
- توليد
- ولدت
- GitHub جيثب:
- خير
- يملك
- مساعدة
- تسليط الضوء
- ويبرز
- يحمل
- مضيف
- استضافت
- استضافة
- المضيفين
- كيفية
- كيفية
- لكن
- HTML
- HTTPS
- هوية
- IDX
- صورة
- صور
- استيراد
- in
- صناعي
- العالمية
- إدخال
- تثبيت
- مثل
- مصلحة
- يستفد
- المشاركة
- قام المحفل
- قضية
- IT
- انها
- JPG
- جسون
- معروف
- اسم العائلة
- تعلم
- تعلم
- المكتبة
- حقوق الملكية الفكرية
- جار التحميل
- الكثير
- آلة
- آلة التعلم
- الرئيسية
- إدارة
- كثير
- قناع
- ماسكات
- matplotlib
- ML
- نموذج
- عارضات ازياء
- تعديل
- الأكثر من ذلك
- متعدد
- حاجة
- مفكرة
- نمباي
- موضوع
- كشف الكائن
- of
- on
- الأمثل
- طلب
- في الأصل
- OS
- حدود
- الناتج
- في الخارج
- مرور
- خط أنابيب
- أفلاطون
- الذكاء افلاطون البيانات
- أفلاطون داتا
- من فضلك
- الرائج
- منشور
- ممارسة
- متنبئ
- يقدم
- قدم
- عملية المعالجة
- معالجة
- محترف
- تزود
- ويوفر
- بايثون
- pytorch
- رفع
- عشوائية
- عرض
- القراء
- الأخيرة
- الافراج عن
- صدر
- إزالة
- مستودع
- المتطلبات الأساسية
- الموارد
- استجابة
- نتيجة
- النتائج
- عائد أعلى
- يجري
- تشغيل
- sagemaker
- حفظ
- تحجيم
- حجم
- التحجيم
- عالم
- العلماء
- سيبورن
- القسم
- تقسيم
- خدماتنا
- الإعداد
- الشكل
- ينبغي
- أظهرت
- الاشارات
- عزباء
- SIX
- حل
- الحلول
- كومة
- خطوة
- خطوات
- تخزين
- تخزين
- فروعنا
- بناء
- بنجاح
- الدعم
- مهمة
- فريق
- قالب
- تجربه بالعربي
- أن
- •
- من مشاركة
- الوقت
- إلى
- سويا
- شعلة
- تورشفيجن
- مع
- تم التحميل
- us
- مستخدم
- رؤيتنا
- حسن
- التي
- سوف
- مع
- في غضون
- سوف
- سنوات
- يولو
- أنت
- حل متجر العقارات الشامل الخاص بك في جورجيا
- زفيرنت