مدل های Amazon SageMaker را با استفاده از باغ وحش مدل PyTorch ایجاد کنید

مدل های Amazon SageMaker را با استفاده از باغ وحش مدل PyTorch ایجاد کنید

گره منبع: 1778255

استقرار مدل‌های یادگیری ماشینی آموزش‌دیده (ML) با کیفیت بالا برای انجام استنتاج دسته‌ای یا زمان واقعی، بخش مهمی برای ارزش‌بخشی به مشتریان است. با این حال، فرآیند آزمایش ML می تواند خسته کننده باشد - رویکردهای زیادی وجود دارد که به زمان قابل توجهی برای پیاده سازی نیاز دارند. به همین دلیل است که مدل های ML از قبل آموزش دیده مانند مدل های ارائه شده در باغ وحش مدل PyTorch بسیار مفید هستند آمازون SageMaker یک رابط یکپارچه برای آزمایش با مدل‌های مختلف ML ارائه می‌کند، و PyTorch Model Zoo به ما این امکان را می‌دهد تا مدل‌های خود را به‌صورت استاندارد شده به راحتی تعویض کنیم.

این پست وبلاگ نحوه انجام استنتاج ML را با استفاده از یک مدل تشخیص شی از باغ وحش PyTorch Model در SageMaker نشان می دهد. مدل های ML از پیش آموزش دیده باغ وحش مدل PyTorch آماده هستند و به راحتی می توانند به عنوان بخشی از برنامه های ML استفاده شوند. راه اندازی این مدل های ML به عنوان نقطه پایانی SageMaker یا SageMaker Batch Transform کار برای استنتاج آنلاین یا آفلاین با مراحل ذکر شده در این پست وبلاگ آسان است. از a استفاده خواهیم کرد R-CNN سریعتر مدل تشخیص شی برای پیش‌بینی جعبه‌های مرزی برای کلاس‌های شی از پیش تعریف‌شده.

ما از طریق یک مثال سرتاسر، از بارگیری وزن‌های مدل تشخیص شی سریعتر R-CNN تا ذخیره آنها در سرویس ذخیره سازی ساده آمازون (Amazon S3) سطل، و برای نوشتن یک فایل ورودی و درک پارامترهای کلیدی در PyTorchModel API. در نهایت، مدل ML را مستقر می‌کنیم، با استفاده از SageMaker Batch Transform استنتاج را روی آن انجام می‌دهیم و خروجی مدل ML را بررسی می‌کنیم و نحوه تفسیر نتایج را یاد می‌گیریم. این راه حل را می توان برای هر مدل از پیش آموزش دیده دیگری در باغ وحش مدل PyTorch اعمال کرد. برای لیستی از مدل های موجود، به ادامه مطلب مراجعه کنید مستندات باغ وحش مدل PyTorch.

بررسی اجمالی راه حل

این پست وبلاگ مراحل زیر را طی خواهد کرد. برای نسخه کامل کار همه مراحل، نگاه کنید create_pytorch_model_sagemaker.ipynb

  • مرحله 1: راه اندازی
  • مرحله 2: بارگیری یک مدل ML از PyTorch Model Zoo
  • مرحله 3 مصنوعات مدل ML را در آمازون S3 ذخیره و آپلود کنید
  • مرحله 4: ساخت اسکریپت های استنتاج مدل ML
  • مرحله 5: راه اندازی یک کار تبدیل دسته ای SageMaker
  • مرحله 6: تجسم نتایج

نمودار معماری

ساختار دایرکتوری

کد این وبلاگ را می توانید در این مطلب پیدا کنید مخزن GitHub. پایگاه کد شامل همه چیزهایی است که برای ساخت مصنوعات مدل ML، راه اندازی کار تبدیل و تجسم نتایج به آن نیاز داریم.

این جریان کاری است که ما استفاده می کنیم. تمام مراحل زیر به ماژول های این ساختار اشاره دارد.

sagemaker_pytorch_model_zoo --> root directory |- inference.py --> entry point file |- create_pytorch_model_sagemaker.ipynb --> walks through all steps in this blog post |- cars.jpg --> input image

La sagemaker_torch_model_zoo پوشه باید حاوی inference.py به عنوان یک فایل ورودی، و create_pytorch_model_sagemaker.ipynb را برای بارگیری و ذخیره وزن های مدل، ایجاد یک شی مدل SageMaker، و در نهایت آن را به یک کار تبدیل دسته ای SageMaker ارسال کنید. برای اینکه مدل های ML خود را بیاورید، مسیرها را در قسمت Step 1: setup notebook تغییر دهید و یک مدل جدید را در مرحله 2: Loading an ML Model از بخش PyTorch Model Zoo بارگذاری کنید. بقیه مراحل زیر در ادامه به همین صورت باقی می مانند.

مرحله 1: راه اندازی

نقش های IAM

SageMaker عملیاتی را روی زیرساختی انجام می دهد که توسط SageMaker مدیریت می شود. SageMaker فقط می‌تواند اقداماتی را که در نقش اجرای IAM همراه نوت‌بوک برای SageMaker تعریف شده است، انجام دهد. برای مستندات دقیق تر در مورد ایجاد نقش های IAM و مدیریت مجوزهای IAM، به بخش مراجعه کنید اسناد نقش های AWS SageMaker. می‌توانیم نقش جدیدی خلق کنیم، یا می‌توانیم آن را دریافت کنیم نوت بوک SageMaker (Studio).نقش اجرای پیش‌فرض با اجرای خطوط کد زیر:

import sagemaker session = sagemaker.Session() # Set a default S3 bucket
default_bucket = session.default_bucket() # Get the region
region = boto3.Session().region_name # Get the SageMaker Execution Role
role_arn = sagemaker.get_execution_role()

کد بالا نقش اجرای SageMaker را برای نمونه نوت بوک دریافت می کند. این نقش IAM است که ما برای نمونه نوت بوک SageMaker یا SageMaker Studio خود ایجاد کردیم.

پارامترهای قابل تنظیم توسط کاربر

در اینجا تمام پارامترهای قابل تنظیم مورد نیاز برای ایجاد و راه اندازی کار تبدیل دسته ای SageMaker ما آمده است:

INSTANCE_TYPE= "ml.m5.xlarge"
INSTANCE_COUNT= 1
BUCKET = os.path.join("s3://", default_bucket) DATA_PATH= os.path.join(BUCKET, "images")
IMAGE_NAME = "cars.jpg"
RANDOM_STRING_LENGTH= 16
MODEL_NAME= "FasterRCNNResnet50" # Needs to be set to version 1.2 or higher to enable automatic PyTorch model repackaging
FRAMEWORK_VERSION= "1.2"
ENTRY_POINT_FILE_NAME= "inference.py" SAGEMAKER_EXECUTION_ROLE_ARN= role_arn
MODEL_ARTIFACTS_FILE_NAME= os.path.join(BUCKET, "modelzoo/fasterrcnn_resnet50_fpn/model.tar.gz")
IMAGE_URI= sagemaker.image_uris.retrieve(framework="pytorch",
region=region,
version="1.9.1",
py_version="py38",
image_scope='inference',
instance_type=INSTANCE_TYPE)

مرحله 2: بارگیری یک مدل ML از باغ وحش مدل PyTorch

در مرحله بعد، یک مدل تشخیص شی از باغ وحش PyTorch Model مشخص می کنیم و وزن مدل ML آن را ذخیره می کنیم. به طور معمول، ما یک مدل PyTorch را با استفاده از پسوندهای فایل .pt یا pth ذخیره می کنیم. قطعه کد زیر یک مدل سریعتر R-CNN ResNet50 ML از پیش آموزش دیده را از باغ وحش مدل PyTorch دانلود می کند:

model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)

تبدیل دسته‌ای SageMaker به وزن‌های مدل به عنوان ورودی نیاز دارد، بنابراین مدل ML از پیش آموزش‌دیده‌شده را به‌عنوان model.pt ذخیره می‌کنیم. اگر می‌خواهیم یک مدل سفارشی بارگذاری کنیم، می‌توانیم وزن‌های مدل را از یک مدل PyTorch دیگر به‌عنوان model.pt ذخیره کنیم.

H = 1080
W = 1920
scripted_fn = torch.jit.script(model, torch.randn(1, 3, H, W))
scripted_fn.save("model.pt")

مرحله 3: مصنوعات مدل ML را در Amazon S3 ذخیره و آپلود کنید

از آنجایی که ما از SageMaker برای استنتاج ML استفاده خواهیم کرد، باید وزن های مدل را در یک سطل S3 آپلود کنیم. ما می توانیم این کار را با استفاده از دستورات زیر یا با دانلود و به سادگی کشیدن و رها کردن فایل به طور مستقیم در S3 انجام دهیم. دستورات زیر ابتدا گروه فایل های داخل را فشرده می کند model.pt به یک تاربول و وزن های مدل را از دستگاه محلی ما در سطل S3 کپی کنید.

توجه داشته باشید: برای اجرای دستورات زیر باید داشته باشید رابط خط فرمان AWS (AWS CLI) نصب شده است.

tar -czvf model.tar.gz model.pt
aws s3 cp model.tar.gz $MODEL_ARTIFACTS_FILE_NAME

بعد، تصویر ورودی خود را در S3 کپی می کنیم. در زیر مسیر کامل S3 برای تصویر آمده است.

car_image_path = os.path.join(DATA_PATH, IMAGE_NAME)

ما می توانیم این تصویر را با دستور دیگری aws s3 cp روی S3 کپی کنیم.

aws s3 cp cars.jpg $car_image_path

مرحله 4: ساخت اسکریپت های استنتاج مدل ML

اکنون به فایل ورودی خود می پردازیم، inference.py مدول. ما می توانیم یک مدل PyTorch را که در خارج از SageMaker آموزش داده شده است، با استفاده از کلاس PyTorchModel مستقر کنیم. ابتدا شی PyTorchModelZoo را نمونه سازی می کنیم. سپس یک فایل ورودی inference.py برای انجام استنتاج ML با استفاده از تبدیل دسته ای SageMaker بر روی داده های نمونه میزبانی شده در آمازون S3 می سازیم.

درک شی PyTorchModel

La PyTorchModel کلاس در SageMaker Python API به ما اجازه می دهد تا استنتاج ML را با استفاده از آرتیفکت مدل دانلود شده خود انجام دهیم.

برای شروع کلاس PyTorchModel، باید پارامترهای ورودی زیر را درک کنیم:

  • name: نام مدل؛ توصیه می کنیم از نام مدل + تاریخ زمان یا یک رشته تصادفی + زمان تاریخ برای منحصر به فرد بودن استفاده کنید.
  • model_data: S3 URI آرتیفکت مدل بسته بندی شده ML.
  • entry_point: یک فایل پایتون تعریف شده توسط کاربر که توسط تصویر داکر استنتاج برای تعریف کنترل‌کننده‌ها برای درخواست‌های ورودی استفاده می‌شود. کد بارگذاری مدل، پیش پردازش ورودی، منطق پیش بینی و پس پردازش خروجی را تعریف می کند.
  • framework_version: برای فعال کردن بسته بندی خودکار مدل PyTorch باید روی نسخه 1.2 یا بالاتر تنظیم شود.
  • source_dir: دایرکتوری فایل enter_point.
  • role: نقش IAM برای درخواست خدمات AWS.
  • image_uri: از این تصویر کانتینر Amazon ECR Docker به عنوان پایه ای برای محیط محاسباتی مدل ML استفاده کنید.
  • sagemaker_session: جلسه SageMaker.
  • py_version: نسخه پایتون مورد استفاده

قطعه کد زیر کلاس PyTorchModel را برای انجام استنتاج با استفاده از مدل PyTorch از پیش آموزش دیده نمونه می کند:

model = PyTorchModel( name=RANDOM_STRING, model_data=MODEL_ARTIFACTS_FILE_NAME, entry_point=ENTRY_POINT_FILE_NAME, framework_version=FRAMEWORK_VERSION, role=SAGEMAKER_EXECUTION_ROLE_ARN, sagemaker_session=sagemaker_session, image_uri=IMAGE_URI, )

درک فایل ورودی (inference.py)

پارامتر enter_point به یک فایل پایتون با نام اشاره می کند inference.py. این نقطه ورودی بارگذاری مدل، پیش پردازش ورودی، منطق پیش بینی و پس پردازش خروجی را تعریف می کند. این کد سرویس دهنده مدل ML را در PyTorch از پیش ساخته شده تکمیل می کند ظرف یادگیری عمیق SageMaker تصویر

Inference.py شامل توابع زیر خواهد بود. در مثال ما، ما را اجرا می کنیم model_fn, input_fn, predict_fn و output_fn توابع برای نادیده گرفتن کنترل کننده استنتاج پیش فرض PyTorch.

  1. model_fn: یک دایرکتوری حاوی نقاط بازرسی مدل ایستا در تصویر استنتاج می گیرد. مدل را از یک مسیر مشخص باز می کند و بارگذاری می کند و یک مدل PyTorch را برمی گرداند.
  2. input_fn: بار درخواست ورودی (request_body) و نوع محتوای درخواست ورودی (request_content_type) را به عنوان ورودی دریافت می کند. رمزگشایی داده ها را کنترل می کند. این تابع باید برای ورودی مورد انتظار مدل تنظیم شود.
  3. predict_fn: یک مدل را بر روی داده های deserialized در input_fn فراخوانی می کند. با مدل ML بارگذاری شده، روی شی deserialized پیش بینی می کند.
  4. output_fn: نتیجه پیش بینی را به نوع محتوای پاسخ دلخواه سریال می کند. پیش بینی های به دست آمده از تابع predict_fn را به فرمت های JSON، CSV یا NPY تبدیل می کند.

مرحله 5: راه اندازی یک کار تبدیل دسته ای SageMaker

برای این مثال، ما نتایج استنتاج ML را از طریق یک کار تبدیل دسته ای SageMaker به دست خواهیم آورد. کارهای تبدیل دسته ای زمانی بسیار مفید هستند که بخواهیم یک بار استنتاج از مجموعه داده ها را بدون نیاز به نقطه پایانی پایدار بدست آوریم. الف را نمونه می کنیم حکیم ساز.ترانسفورماتور.ترانسفورماتور شی برای ایجاد و تعامل با کارهای تبدیل دسته ای SageMaker.

transformer = model.transformer(instance_type=INSTANCE_TYPE, instance_count=INSTANCE_COUNT )
transformer.transform(data=DATA_PATH, data_type="S3Prefix", content_type="application/x-image", wait=True )

مستندات ایجاد یک کار تبدیل دسته ای را در اینجا ببینید CreateTransformJob.

مرحله 6: تجسم نتایج

هنگامی که کار تبدیل دسته ای SageMaker به پایان رسید، می توانیم خروجی های استنتاج ML را از Amazon S3 بارگذاری کنیم. برای این کار به مسیر بروید کنسول مدیریت AWS و Amazon SageMaker را جستجو کنید. در پانل سمت چپ، زیر استنباط، نگاه کنید به مشاغل تبدیل دسته ای.

بعد از انتخاب تبدیل دسته ای، صفحه وب را ببینید که تمام کارهای تبدیل دسته ای SageMaker را فهرست می کند. ما می توانیم پیشرفت آخرین اجرای کار خود را مشاهده کنیم.

ابتدا، کار وضعیت «در حال پیشرفت» را خواهد داشت. پس از اتمام، تغییر وضعیت به تکمیل شده را مشاهده کنید.

هنگامی که وضعیت به عنوان تکمیل شده علامت گذاری شد، می توانیم روی کار کلیک کنیم تا نتایج را مشاهده کنیم. این صفحه وب شامل خلاصه کار، از جمله تنظیمات کاری است که به تازگی اجرا کردیم.

تحت پیکربندی داده های خروجی، یک مسیر خروجی S3 را مشاهده خواهیم کرد. اینجاست که خروجی استنتاج ML خود را پیدا می کنیم.

مسیر خروجی S3 را انتخاب کنید و یک فایل [image_name].[file_type].out را با داده های خروجی ما ببینید. فایل خروجی ما حاوی لیستی از نگاشت ها خواهد بود. خروجی نمونه:

[ { "boxes": [ [ 214.32322692871094, 192.18418884277344, 830.3932495117188, 521.6996459960938 ], [ 235.6244354248047, 301.3315734863281, 253.6448516845703, 312.3525695800781 ], [ 183.92031860351562, 291.7759704589844, 207.28196716308594, 312.1448669433594 ], ], "labels": [ 3, 3, 9, ], "scores": [ 0.8823906183242798, 0.7710548639297485, 0.4969744384288788, ] }
]

برای تجسم این پیش بینی ها، ابتدا مسیر خروجی را از شی ترانسفورماتور خود می خوانیم.

def get_output_from_s3(s3uri, file_name): parsed_url = urlparse(s3uri) bucket_name = parsed_url.netloc prefix = parsed_url.path[1:] s3 = boto3.resource('s3') obj = s3.Object(bucket_name, '{}/{}'.format(prefix, file_name)) return obj.get()["Body"].read().decode('utf-8') # Output path from Batch Transform job
output_path = transformer.output_path # Get the output file from S3
predictions = get_output_from_s3(output_path, "car.jpg.out")

در مرحله بعد، این فایل خروجی را پردازش می کنیم و پیش بینی های خود را تجسم می کنیم. در زیر آستانه اطمینان خود را مشخص می کنیم. ما لیست کلاس ها را از نقشه برداری شیء مجموعه داده COCO. در طول استنتاج، مدل فقط به تانسورهای ورودی نیاز دارد و پیش‌بینی‌های پس از پردازش را به‌عنوان فهرست [Dict[Tensor]]، یکی برای هر تصویر ورودی، برمی‌گرداند. فیلدهای Dict به شرح زیر است، که در آن N تعداد شناسایی است:

  1. جعبه ها (FloatTensor[N, 4]): جعبه های پیش بینی شده در [x1, y1, x2, y2] قالب ، با 0 <= x1 < x2 <= W and 0 <= y1 < y2 <= H، که در آن W عرض تصویر است و H ارتفاع تصویر است
  2. برچسب ها (Int64Tensor[N]): برچسب های پیش بینی شده برای هر تشخیص
  3. امتیازات (Tensor[N]): امتیازهای پیش بینی برای هر تشخیص

برای جزئیات بیشتر در مورد خروجی، مراجعه کنید اسناد PyTorch سریعتر R-CNN FPN.

خروجی مدل شامل جعبه های محدود کننده با امتیازهای اطمینان مربوطه است. ما می‌توانیم با حذف کادرهای محدودکننده‌ای که مدل برای آنها مطمئن نیست، نمایش مثبت کاذب را بهینه کنیم. قطعه کد زیر پیش‌بینی‌های موجود در فایل خروجی را پردازش می‌کند و جعبه‌های مرزی را روی پیش‌بینی‌هایی ترسیم می‌کند که امتیاز بالاتر از آستانه اطمینان ما است. ما آستانه احتمال را تعیین می کنیم، CONF_THRESHبرای این مثال تا 75.

def procress_batch_transform_output(predictions): predictions = eval(predictions) for pred in predictions[1:]: pred = pred[0] boxes = np.array(pred["boxes"]) labels = np.array(pred["labels"]) scores = np.array(pred["scores"]) scores_idx = scores >= CONF_THRESH boxes_meet = boxes[scores_idx, :] labels_meet = labels[scores_idx] scores_meet = scores[scores_idx] labels_str = [CLASSES[i] for i in labels_meet] # Return a tuple containing labels, label index, score, and bounding box processed_predictions = list(zip(labels_str, labels_meet, scores_meet, boxes_meet)) return processed_predictions def visualize_batch_transform_output(input_image, processed_predictions): # read input image from computer img = read_image(input_image) for label, label_index, score, box in processed_predictions: label = label + ", score: " + str(round(score, 2)) # draw bounding box and fill color box = torch.tensor(box) box = box.unsqueeze(0) img = draw_bounding_boxes(img, box, width=5,labels=[label], font_size=16) # transform this image to PIL image img = torchvision.transforms.ToPILImage()(img) # display output img.show() # Process the predictions in the output file
processed_predictions = procress_batch_transform_output(predictions)
visualize_batch_transform_output("car.jpg", processed_predictions)

در نهایت، ما این نگاشت ها را برای درک خروجی خود مجسم می کنیم.

توجه داشته باشید: اگر تصویر در نوت بوک شما نمایش داده نمی شود، لطفاً آن را در درخت دایرکتوری در سمت چپ JupyterLab پیدا کرده و از آنجا باز کنید.

اجرای کد نمونه

برای یک مثال کار کامل، کد موجود در آن را شبیه سازی کنید amazon-sagemaker-examples GitHub و سلول های موجود در create_pytorch_model_sagemaker.ipynb نوت بوک.

نتیجه

در این پست وبلاگ، ما یک مثال سرتاسری از انجام استنتاج ML با استفاده از یک مدل تشخیص شی از باغ وحش مدل PyTorch با استفاده از تبدیل دسته‌ای SageMaker به نمایش گذاشتیم. ما بارگذاری وزن‌های مدل تشخیص شی سریع‌تر R-CNN، ذخیره آن‌ها در یک سطل S3، نوشتن یک فایل ورودی، و درک پارامترهای کلیدی در PyTorchModel API را پوشش دادیم. در نهایت، مدل را مستقر کردیم و استنتاج مدل ML را انجام دادیم، خروجی مدل را تجسم کردیم و یاد گرفتیم که چگونه نتایج را تفسیر کنیم.


درباره نویسنده

دیپیکا خولار مهندس ML در آزمایشگاه راه حل های آمازون ام ال. او به مشتریان کمک می کند تا راه حل های ML را برای حل مشکلات تجاری خود ادغام کنند. اخیراً، او خطوط لوله آموزشی و استنباط را برای مشتریان رسانه ای و مدل های پیش بینی کننده برای بازاریابی ایجاد کرده است.

مارسلو آبرله مهندس ML در سازمان AWS AI است. او رهبری تلاش‌های MLOps را بر عهده دارد آزمایشگاه راه حل های آمازون ام ال، به مشتریان در طراحی و پیاده سازی سیستم های مقیاس پذیر ML کمک می کند. ماموریت او هدایت مشتریان در سفر ML سازمانی و تسریع در مسیر ML آنها به سمت تولید است.

نیناد کولکارنی دانشمند کاربردی در آزمایشگاه راه حل های آمازون ام ال. او با ایجاد راه حل هایی برای رفع مشکلات تجاری به مشتریان کمک می کند تا ML و AI را اتخاذ کنند. اخیراً، او مدل‌های پیش‌بینی‌کننده برای مشتریان ورزشی، خودرویی و رسانه‌ای ساخته است.

یاش شاه مدیر علوم در آزمایشگاه راه حل های آمازون ام ال. او و تیمش از دانشمندان کاربردی و مهندسان ML روی طیف وسیعی از موارد استفاده از ML از مراقبت‌های بهداشتی، ورزشی، خودروسازی و تولید کار می‌کنند.

تمبر زمان:

بیشتر از آموزش ماشین AWS