استقرار مدلها در مقیاس میتواند برای بسیاری از دانشمندان داده و مهندسان یادگیری ماشین کاری دشوار باشد. با این حال، نقاط پایانی Amazon SageMaker راهحل سادهای برای استقرار و مقیاسبندی استنتاجهای مدل یادگیری ماشین (ML) ارائه میدهد. آخرین ما پست های وبلاگ و GitHub repo در میزبانی a YOLOv5 TensorFlowModel
on آمازون SageMaker نقاط پایان باعث جلب توجه خوانندگان ما شد. بسیاری از خوانندگان نیز علاقه مند به یادگیری نحوه میزبانی مدل YOLOv5 با استفاده از آن بودند PyTorch
. برای رسیدگی به این موضوع و با انتشار اخیر YOLOv8 مدل از اولترالیتیک، ما این پست را در مورد نحوه میزبانی YOLOv8 ارائه می دهیم PyTorchModel
در نقاط پایانی SageMaker. مدل YOLOv8 که تحت مجوز GNU GPL3 توزیع شده است، یک مدل تشخیص شی محبوب است که به دلیل کارایی زمان اجرا و همچنین دقت تشخیص شناخته شده است. نقاط پایانی Amazon SageMaker راه حلی با مقیاس پذیری آسان و بهینه سازی هزینه برای استقرار مدل ارائه می دهد.
بررسی اجمالی راه حل
تصویر زیر خدمات AWS مورد استفاده برای میزبانی مدل YOLOv8 را با استفاده از نقطه پایانی SageMaker و فراخوانی نقطه پایانی به عنوان کاربر نشان میدهد. راه حل استفاده می کند AWS CloudFormation به طور خودکار ایجاد یک نمونه 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
در آمازون S3. - یک نقطه پایانی SageMaker با میزبانی ایجاد می شود
model.tar.gz
. - دفترچه یادداشت
2_TestEndpoint.ipynb
برای آزمایش نقطه پایانی و جمع آوری نتایج استفاده می شود.
پیش نیازها
حساب AWS با نقش های AWS Identity and Access Management (IAM). که دسترسی به:
- AWS CloudFormation
- آمازون 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 می توانند متفاوت باشند. در این پست یک گردش کار برای گذراندن a ارائه می دهیم numpy
آرایه به نقطه پایانی و پردازش. با این حال، ورودی به نقطه پایانی می تواند باشد json
یا متن نیز. بسته به گردش کار خود، باید توابع موجود را تغییر دهید inference.py
برای تطبیق ورودی ها و خروجی های مختلف علاوه بر این، با انتشار اخیر YOLOv8، تیم Ultralytics API پایتون خود را منتشر کرد که به ما اجازه میدهد کتابخانه 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 استفاده می شود. و در نهایت، این PyTorchModel برای استقرار مدل در یک نقطه پایانی 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 Professional Services است. او دارای مدرک دکترای بیوفیزیک است و بیش از پنج سال تجربه صنعتی در ساخت راه حل های بینایی کامپیوتر و یادگیری ماشین دارد.
رومیل شاه یک دانشمند داده Edge IoT در AWS Professional Services است. رومیل بیش از شش سال تجربه صنعتی در زمینه بینایی کامپیوتر، یادگیری ماشین و دستگاه های لبه اینترنت اشیا دارد. او در کمک به مشتریان برای بهینهسازی و استقرار مدلهای یادگیری ماشین خود برای دستگاههای لبه در یک راهاندازی صنعتی مشارکت دارد.
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- پلاتوبلاک چین. 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
- ITS
- JPG
- json
- شناخته شده
- نام
- یاد گرفتن
- یادگیری
- کتابخانه
- مجوز
- بارگیری
- خیلی
- دستگاه
- فراگیری ماشین
- اصلی
- مدیریت
- بسیاری
- ماسک
- ماسک
- ماتپلوتلب
- ML
- مدل
- مدل
- تغییر
- بیش
- چندگانه
- نیاز
- دفتر یادداشت
- بی حس
- هدف
- تشخیص شی
- of
- on
- بهینه سازی
- سفارش
- در اصل
- OS
- نمای کلی
- تولید
- خارج از
- عبور
- خط لوله
- افلاطون
- هوش داده افلاطون
- PlatoData
- لطفا
- محبوب
- پست
- تمرین
- پیشگو
- در حال حاضر
- ارائه شده
- روند
- در حال پردازش
- حرفه ای
- ارائه
- فراهم می کند
- پــایتــون
- مارماهی
- بالا بردن
- تصادفی
- خواندن
- خوانندگان
- اخیر
- آزاد
- منتشر شد
- برداشتن
- مخزن
- مورد نیاز
- منابع
- پاسخ
- نتیجه
- نتایج
- برگشت
- دویدن
- در حال اجرا
- حکیم ساز
- ذخیره
- مقیاس پذیر
- مقیاس
- مقیاس گذاری
- دانشمند
- دانشمندان
- متولد دریا
- بخش
- تقسیم بندی
- خدمات
- برپایی
- شکل
- باید
- نشان داده شده
- ساده
- تنها
- شش
- راه حل
- مزایا
- پشته
- گام
- مراحل
- ذخیره سازی
- ذخیره شده
- پرده
- ساختار
- موفقیت
- پشتیبانی
- کار
- تیم
- قالب
- آزمون
- که
- La
- شان
- زمان
- به
- با هم
- مشعل
- چشم انداز مشعل
- زیر
- آپلود شده
- us
- کاربر
- دید
- خوب
- که
- اراده
- با
- در داخل
- خواهد بود
- سال
- یولو
- شما
- شما
- زفیرنت