بارهای کاری استنتاج یادگیری ماشین را روی نمونه های مبتنی بر AWS Graviton با Amazon SageMaker PlatoBlockchain Data Intelligence اجرا کنید. جستجوی عمودی Ai.

بارهای کاری استنتاج یادگیری ماشین را روی نمونه های مبتنی بر AWS Graviton با Amazon SageMaker اجرا کنید

امروز در حال راه اندازی هستیم آمازون SageMaker استنباط بر AWS Graviton به شما امکان می دهد از مزایای قیمت، عملکرد و کارایی که از تراشه های Graviton به دست می آید، استفاده کنید.

نمونه‌های مبتنی بر Graviton برای استنتاج مدل در SageMaker در دسترس هستند. این پست به شما کمک می‌کند تا بار کار استنتاج یادگیری ماشین (ML) را از x86 به نمونه‌های مبتنی بر Graviton در SageMaker منتقل کنید. ما یک راهنمای گام به گام برای استقرار مدل آموزش‌دیده SageMaker شما در نمونه‌های مبتنی بر Graviton، پوشش بهترین شیوه‌ها هنگام کار با Graviton، بحث در مورد مزایای عملکرد قیمت، و نحوه استقرار یک مدل TensorFlow در نمونه SageMaker Graviton ارائه می‌کنیم.

مروری کوتاه بر گراویتون

AWS Graviton خانواده‌ای از پردازنده‌هایی است که توسط AWS طراحی شده‌اند که بهترین عملکرد قیمتی را ارائه می‌کنند و نسبت به همتایان x86 خود در مصرف انرژی کارآمدتر هستند. پردازنده‌های AWS Graviton 3 جدیدترین در خانواده پردازنده‌های Graviton هستند و برای بارهای کاری ML، از جمله پشتیبانی از bfloat16 و دو برابر پهنای باند Single Instruction Multiple Data (SIMD) بهینه‌سازی شده‌اند. وقتی این دو ویژگی با هم ترکیب شوند، Graviton 3 می تواند تا سه برابر عملکرد بهتری نسبت به نمونه های Graviton 2 ارائه دهد. Graviton 3 همچنین برای عملکرد مشابه تا 60٪ انرژی کمتری مصرف می کند ابر محاسبه الاستیک آمازون نمونه های (Amazon EC2). اگر می خواهید ردپای کربن خود را کاهش دهید و به اهداف پایداری خود برسید، این یک ویژگی عالی است.

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

برای استقرار مدل‌های خود در نمونه‌های گراویتون، از هر دو استفاده کنید ظروف یادگیری عمیق AWS or ظروف خود را بیاورید سازگار با معماری Arm v8.2.

انتقال (یا استقرار جدید) مدل‌های شما از نمونه‌های مجهز به x86 به نمونه‌های Graviton ساده است، زیرا AWS کانتینرهایی را برای میزبانی مدل‌ها با PyTorch، TensorFlow، Scikit-learn، و XGBoost فراهم می‌کند، و مدل‌ها دارای معماری ناشناس هستند. با این وجود، اگر می‌خواهید کتابخانه‌های خود را بیاورید، می‌توانید این کار را نیز انجام دهید، فقط مطمئن شوید که کانتینر شما با محیطی ساخته شده است که از معماری Arm64 پشتیبانی می‌کند. برای اطلاعات بیشتر ببین کانتینر الگوریتم خود را بسازید.

برای استقرار مدل خود باید سه مرحله را طی کنید:

  1. ایجاد یک مدل SageMaker: در میان پارامترهای دیگر، اطلاعات مربوط به مکان فایل مدل، محفظه ای که برای استقرار استفاده خواهد شد و مکان اسکریپت استنتاج را شامل می شود. (اگر یک مدل موجود دارید که قبلاً در یک نمونه استنتاج مبتنی بر x86 مستقر شده است، می توانید از این مرحله رد شوید.)
  2. ایجاد یک پیکربندی نقطه پایانی: این شامل اطلاعاتی در مورد نوع نمونه مورد نظر شما برای نقطه پایانی است (به عنوان مثال، ml.c7g.xlarge برای Graviton3)، نام مدلی که در مرحله 1 ایجاد کردید، و تعداد نمونه‌ها در هر نقطه پایانی
  3. نقطه پایانی را با پیکربندی نقطه پایانی ایجاد شده در مرحله 2 راه اندازی کنید.

پیش نیازها

قبل از شروع، پیش نیازهای زیر را در نظر بگیرید:

  1. پیش نیازهای ذکر شده را تکمیل کنید پیش نیازها.
  2. مدل شما باید یک مدل PyTorch، TensorFlow، XGBoost یا Scikit-learn باشد. جدول زیر خلاصه ای از نسخه هایی است که در حال حاضر تا زمان نگارش این مقاله پشتیبانی می شوند. برای اطلاع از آخرین به روز رسانی ها، مراجعه کنید SageMaker Framework Containers (فقط پشتیبانی SM).
    . پــایتــون TensorFlow PyTorch Scikit یاد بگیر XGBoost
    نسخه های پشتیبانی شده 3.8 2.9.1 1.12.1 1.0-1 1.3-1 تا 1.5-1
  3. اسکریپت استنتاج در آن ذخیره می شود سرویس ذخیره سازی ساده آمازون (Amazon S3).

در بخش‌های بعدی، شما را با مراحل استقرار آشنا می‌کنیم.

یک مدل SageMaker ایجاد کنید

اگر یک مدل موجود دارید که قبلاً در یک نمونه استنتاج مبتنی بر x86 مستقر شده است، می توانید این مرحله را نادیده بگیرید. در غیر این صورت، مراحل زیر را برای ایجاد یک مدل SageMaker انجام دهید:

  1. مدلی را که در یک سطل S3 ذخیره کرده اید پیدا کنید. URI را کپی کنید.
    شما از مدل URI در آینده استفاده می کنید MODEL_S3_LOCATION.
  2. نسخه فریمورک و نسخه پایتون که در آموزش مدل استفاده شده را شناسایی کنید.
    شما باید یک محفظه از لیست ظروف یادگیری عمیق AWS در چارچوب و نسخه پایتون خود انتخاب کنید. برای اطلاعات بیشتر مراجعه کنید معرفی تصاویر کانتینر چند معماری برای Amazon ECR.
  3. URI اسکریپت پایتون استنتاج را در سطل S3 بیابید (نام فایل رایج است inference.py).
    URI اسکریپت استنتاج در مورد نیاز است INFERENCE_SCRIPT_S3_LOCATION.
  4. با این متغیرها، می توانید با دستور زیر SageMaker API را فراخوانی کنید:
    client = boto3.client("sagemaker")
    
    client.create_model(
        ModelName="Your model name",
        PrimaryContainer={
            "Image": ,
            "ModelDataUrl": ,
            "Environment": {
            "SAGEMAKER_PROGRAM": "inference.py",
            "SAGEMAKER_SUBMIT_DIRECTORY": ,
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": 
            }
        },
        ExecutionRoleArn= 
    )

شما همچنین می توانید تصاویر چند معماری ایجاد کنید و از همان تصویر اما با برچسب های مختلف استفاده کنید. شما می توانید مشخص کنید که نمونه شما در کدام معماری مستقر خواهد شد. برای اطلاعات بیشتر مراجعه کنید معرفی تصاویر کانتینر چند معماری برای Amazon ECR.

یک پیکربندی نقطه پایانی ایجاد کنید

پس از ایجاد مدل، باید با اجرای دستور زیر یک پیکربندی نقطه پایانی ایجاد کنید (به نوع نمونه ای که استفاده می کنیم توجه کنید):

client.create_endpoint_config(
    EndpointConfigName= ,
    ProductionVariants=[
        {
         "VariantName": "v0",
         "ModelName": "Your model name",
         "InitialInstanceCount": 1,
         "InstanceType": "ml.c7g.xlarge",
        },
    ]
)

تصویر زیر جزئیات پیکربندی نقطه پایانی را در کنسول SageMaker نشان می دهد.

نقطه پایانی را راه اندازی کنید

با پیکربندی نقطه پایانی ایجاد شده در مرحله قبل، می توانید نقطه پایانی را مستقر کنید:

client.create_endpoint(
    EndpointName = "",
    EndpointConfigName = ""
    )

صبر کنید تا نقطه پایانی مدل شما مستقر شود. پیش‌بینی‌ها را می‌توان به همان روشی که برای نقاط پایانی خود در موارد مبتنی بر x86 پیش‌بینی می‌کنید درخواست کرد.

اسکرین شات زیر نقطه پایانی شما را در کنسول SageMaker نشان می دهد.

SageMaker Endpoint از Configuration

آنچه پشتیبانی می شود

SageMaker ظروف عمیق Graviton با عملکرد بهینه شده را برای چارچوب های TensorFlow و PyTorch ارائه می دهد. این کانتینرها از دید کامپیوتر، پردازش زبان طبیعی، توصیه‌ها و موارد استفاده استنتاج مبتنی بر مدل عمیق و گسترده پشتیبانی می‌کنند. علاوه بر کانتینرهای یادگیری عمیق، SageMaker همچنین کانتینرهایی را برای چارچوب های کلاسیک ML مانند XGBoost و Scikit-learn ارائه می دهد. کانتینرها با نمونه های c6g/m6g و c7g باینری سازگار هستند، بنابراین انتقال برنامه استنتاج از نسلی به نسل دیگر بدون درز است.

C6g/m6g از fp16 (شناور نیمه دقیق) پشتیبانی می کند و برای مدل های سازگار عملکردی معادل یا بهتر در مقایسه با نمونه های c5 ارائه می دهد. C7g با دوبرابر کردن عرض SIMD و پشتیبانی از bfloat-16 (bf16)، که مقرون به صرفه ترین پلت فرم برای اجرای مدل های شما است، عملکرد ML را به طور قابل ملاحظه ای افزایش می دهد.

هر دو c6g/m6g و c7g عملکرد خوبی را برای ML کلاسیک (مثلا XGBoost) در مقایسه با سایر نمونه‌های CPU در SageMaker ارائه می‌کنند. پشتیبانی از Bfloat-16 در c7g امکان استقرار کارآمد مدل های آموزش دیده bf16 یا AMP (Automatic Mixed Precision) را فراهم می کند. کتابخانه محاسباتی Arm (ACL) در Graviton هسته‌های bfloat-16 را فراهم می‌کند که می‌توانند حتی عملگرهای fp32 را از طریق حالت ریاضی سریع، بدون کوانتیزه‌سازی مدل، شتاب دهند.

بهترین شیوه های توصیه شده

در نمونه های Graviton، هر vCPU یک هسته فیزیکی است. هیچ مناقشه ای برای منابع رایج CPU وجود ندارد (برخلاف SMT)، و مقیاس عملکرد بار کاری با هر افزودن vCPU خطی است. بنابراین، توصیه می شود هر زمان که مورد استفاده اجازه می دهد از استنباط دسته ای استفاده کنید. این امکان استفاده موثر از vCPU ها را با پردازش موازی دسته در هر هسته فیزیکی فراهم می کند. اگر استنباط دسته‌ای ممکن نباشد، اندازه نمونه بهینه برای بار معین مورد نیاز است تا اطمینان حاصل شود که سربار زمان‌بندی رشته‌های سیستم‌عامل از توان محاسباتی همراه با vCPUهای اضافی بیشتر نیست.

TensorFlow به طور پیش‌فرض دارای هسته‌های Eigen است و توصیه می‌شود برای دریافت بهینه‌ترین باطن استنتاج به OneDNN با ACL بروید. پشتیبانی OneDNN و حالت ریاضی سریع bfloat-16 را می توان هنگام راه اندازی سرویس کانتینر فعال کرد:

docker run -p 8501:8501 --name tfserving_resnet 
--mount type=bind,source=/tmp/resnet,target=/models/resnet 
-e MODEL_NAME=resnet -e TF_ENABLE_ONEDNN_OPTS=1 
-e DNNL_DEFAULT_FPMATH_MODE=BF16 -e -t tfs:mkl_aarch64

دستور سرویس قبلی میزبان یک مدل استاندارد resnet50 با دو پیکربندی مهم است:

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

اینها را می توان به روش زیر به محفظه استنتاج منتقل کرد:

client.create_model(
    ModelName="Your model name",
    PrimaryContainer={
    "Image": ,
    "ModelDataUrl": ,
    "Environment": {
        "SAGEMAKER_PROGRAM": "inference.py",
        "SAGEMAKER_SUBMIT_DIRECTORY": "",
        "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
        "SAGEMAKER_REGION": ,
        "TF_ENABLE_ONEDNN_OPTS": "1",
        "DNNL_DEFAULT_FPMATH_MODE": "BF16"
         }
     },
     ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
)

نمونه استقرار

در این پست، ما به شما نشان می‌دهیم که چگونه یک مدل TensorFlow را که در SageMaker آموزش دیده است، بر روی یک نمونه استنتاج SageMaker مبتنی بر Graviton اجرا کنید.

شما می توانید نمونه کد را در یک نمونه نوت بوک SageMaker اجرا کنید Amazon SageMaker Studio نوت بوک یا یک نوت بوک Jupyter در حالت محلی. اگر از نوت بوک Jupyter در حالت محلی استفاده می کنید، باید نقش اجرای SageMaker را بازیابی کنید.

مثال زیر مجموعه داده CIFAR-10 را در نظر می گیرد. شما می توانید نمونه نوت بوک را از نمونه های SageMaker دنبال کنید GitHub repo برای بازتولید مدلی که در این پست استفاده شده است. ما از مدل آموزش دیده و cifar10_keras_main.py اسکریپت پایتون برای استنتاج

مدل در یک سطل S3 ذخیره می شود: s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

La cifar10_keras_main.py اسکریپت، که می تواند برای استنتاج استفاده شود، در زیر ذخیره می شود:s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

ما با استفاده از us-east-1 منطقه و استقرار مدل در یک نمونه مبتنی بر گراویتون ml.c7g.xlarge. بر این اساس، URI کانتینر یادگیری عمیق AWS ما است 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. با کد زیر راه اندازی کنید:
    import sagemaker
    import boto3
    import datetime
    import json
    import gzip
    import os
    
    sagemaker_session = sagemaker.Session()
    bucket = sagemaker_session.default_bucket()
    role = sagemaker.get_execution_role()
    region = sagemaker_session.boto_region_name

  2. مجموعه داده را برای آزمایش نقطه پایانی دانلود کنید:
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. پیکربندی مدل و نقطه پایانی را ایجاد کنید و نقطه پایانی را مستقر کنید:
    timestamp = "{:%Y-%m-%d-%H-%M-%S}".format(datetime.datetime.now())
    
    client = boto3.client("sagemaker")
    
    MODEL_NAME = f"graviton-model-{timestamp}"
    ENDPOINT_NAME = f"graviton-endpoint-{timestamp}"
    ENDPOINT_CONFIG_NAME = f"graviton-endpoint-config-{timestamp}"
    
    # create sagemaker model
    create_model_response = client.create_model(
        ModelName=MODEL_NAME,
        PrimaryContainer={
        "Image":  "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker ",
        "ModelDataUrl":  "s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz",
        "Environment": {
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": region
            }
        },
        ExecutionRoleArn=role
    )
    print ("create_model API response", create_model_response)

  4. به صورت اختیاری، می توانید اسکریپت استنتاج خود را به آن اضافه کنید Environment in create_model اگر در ابتدا آن را به عنوان یک مصنوع به مدل SageMaker خود در طول آموزش اضافه نکردید:
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": ,
    		
    # create sagemaker endpoint config
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=ENDPOINT_CONFIG_NAME,
        ProductionVariants=[
            {
             "VariantName": "v0",
             "ModelName": MODEL_NAME,
             "InitialInstanceCount": 1,
             "InstanceType": "ml.c7g.xlarge" 
            },
        ]
    )
    print ("ncreate_endpoint_config API response", create_endpoint_config_response)
    
    # create sagemaker endpoint
    create_endpoint_response = client.create_endpoint(
        EndpointName = ENDPOINT_NAME,
        EndpointConfigName = ENDPOINT_CONFIG_NAME,
    )
    print ("ncreate_endpoint API response", create_endpoint_response)   
    

    شما باید چند دقیقه صبر کنید تا استقرار انجام شود.

  5. وضعیت نقطه پایانی را با کد زیر تأیید کنید:
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

    شما همچنین می توانید چک کنید کنسول مدیریت AWS برای اینکه ببینید چه زمانی مدل شما مستقر شده است.

  6. محیط زمان اجرا را برای فراخوانی نقاط پایانی تنظیم کنید:
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

    اکنون payload را برای فراخوانی نقطه پایانی آماده می کنیم. ما از همان نوع تصاویر استفاده شده برای آموزش مدل استفاده می کنیم. این ها در مراحل قبلی دانلود شدند.

  7. محموله را روی تانسورها ریخته و قالب درستی را که مدل انتظار دارد تنظیم کنید. برای این مثال، ما فقط یک پیش‌بینی درخواست می‌کنیم.
    input_image = x_test[0].reshape(1,32,32,3)

    خروجی مدل را به صورت آرایه می گیریم.

  8. ما می توانیم این خروجی را به احتمالات تبدیل کنیم اگر یک softmax برای آن اعمال کنیم:
    CONTENT_TYPE = 'application/json'
    ACCEPT = 'application/json'
    PAYLOAD = json.dumps(input_image.tolist())
    
    response = runtime.invoke_endpoint(
        EndpointName=ENDPOINT_NAME, 
        ContentType=CONTENT_TYPE,
        Accept=ACCEPT,
        Body=PAYLOAD
    )
        
    print(response['Body'].read().decode())

منابع را پاکسازی کنید

خدمات مربوط به این راه حل متحمل هزینه است. وقتی استفاده از این راه حل را تمام کردید، منابع زیر را پاک کنید:

client.delete_endpoint(EndpointName=ENDPOINT_NAME)
client.delete_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_NAME)
client.delete_model(ModelName=MODEL_NAME)

مقایسه قیمت و عملکرد

نمونه‌های مبتنی بر گراویتون در مقایسه با نمونه‌های مبتنی بر x86، کمترین قیمت و بهترین عملکرد را ارائه می‌دهند. مشابه نمونه‌های EC2، نقاط پایانی استنباط SageMaker با نمونه‌های ml.c6g (Graviton 2) 20٪ قیمت کمتری در مقایسه با ml.c5 ارائه می‌کند و نمونه‌های Graviton 3 ml.c7g 15٪ ارزان‌تر از نمونه‌های ml.c6 هستند. برای اطلاعات بیشتر مراجعه کنید قیمت گذاری آمازون SageMaker.

نتیجه

در این پست، قابلیت جدید SageMaker را برای استقرار مدل‌ها در نمونه‌های استنتاج مبتنی بر Graviton به نمایش گذاشتیم. ما به شما راهنمایی هایی در مورد بهترین شیوه ها ارائه کردیم و به طور خلاصه در مورد مزایای قیمت-عملکرد نوع جدید نمونه های استنتاج بحث کردیم.

برای آشنایی بیشتر با گراویتون به ادامه مطلب مراجعه کنید پردازنده گراویتون AWS. می توانید با نمونه های EC2 مبتنی بر AWS Graviton در کنسول EC2 آمازون و با مراجعه به راهنمای فنی AWS Graviton. شما می توانید یک نقطه پایانی مدل Sagemaker را برای استنتاج در Graviton با کد نمونه در این پست وبلاگ مستقر کنید.


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

ویکتور جارامیلوویکتور جارامیلو، دکترا، مهندس ارشد یادگیری ماشین در خدمات حرفه ای AWS است. قبل از AWS، او یک استاد دانشگاه و دانشمند پژوهشی در زمینه تعمیر و نگهداری پیش‌بینی بود. او در اوقات فراغت از موتور سواری و مکانیک موتور سیکلت خود لذت می برد.

زمناکو اوراحمنزمناکو اوراحمن، دکترا، یکی از اعضای Practice Manager، ML SME، و Machine Learning Technical Field Community (TFC) در خدمات وب آمازون است. او به مشتریان کمک می کند تا با استفاده از تجزیه و تحلیل داده ها و یادگیری ماشین، از قدرت ابر برای استخراج ارزش از داده های خود استفاده کنند.

سونیتا نادامپالیسونیتا نادامپالی مدیر توسعه نرم افزار در AWS است. او بهینه سازی عملکرد نرم افزار Graviton را برای تکیه ماشین، HPC و بارهای کاری چندرسانه ای هدایت می کند. او مشتاق توسعه منبع باز و ارائه راه حل های نرم افزاری مقرون به صرفه با Arm SoC است.

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

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

تمبر زمان:

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