قم بتشغيل أحمال عمل استدلال التعلم الآلي على المثيلات المستندة إلى AWS Graviton باستخدام Amazon SageMaker PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

قم بتشغيل أحمال عمل استدلال التعلم الآلي على المثيلات المستندة إلى AWS Graviton باستخدام Amazon SageMaker

اليوم ، نحن نطلق الأمازون SageMaker على الاستدلال أوس جرافيتون لتمكينك من الاستفادة من مزايا السعر والأداء والكفاءة التي تأتي من رقائق Graviton.

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

نظرة عامة موجزة عن Graviton

AWS Graviton عبارة عن مجموعة من المعالجات المصممة بواسطة AWS والتي توفر أفضل أداء للسعر وأكثر كفاءة في استخدام الطاقة من نظيراتها x86. تعد معالجات AWS Graviton 3 الأحدث في عائلة معالجات Graviton وهي مُحسّنة لأحمال عمل ML ، بما في ذلك دعم bfloat16 وعرض النطاق الترددي لبيانات متعددة التعليمات الفردية (SIMD). عند الجمع بين هاتين الميزتين ، يمكن أن يقدم Graviton 3 أداءً أفضل بثلاث مرات مقابل مثيلات Graviton 2. يستخدم Graviton 3 أيضًا ما يصل إلى 60٪ طاقة أقل لنفس الأداء الذي يمكن مقارنته الأمازون الحوسبة المرنة السحابية (Amazon EC2) مثيلات. هذه ميزة رائعة إذا كنت ترغب في تقليل بصمتك الكربونية وتحقيق أهداف الاستدامة الخاصة بك.

حل نظرة عامة

لنشر نماذجك في مثيلات Graviton ، يمكنك إما استخدام حاويات AWS Deep Learning 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 (دعم SM فقط).
    . بايثون TensorFlow PyTorch Scikit تعلم XGBoost
    الإصدارات المدعومة 3.8 2.9.1 1.12.1 1.0-1 1.3-1 إلى 1.5-1
  3. يتم تخزين النص البرمجي للاستدلال بتنسيق خدمة تخزين أمازون البسيطة (أمازون S3).

في الأقسام التالية ، نوجهك عبر خطوات النشر.

قم بإنشاء نموذج SageMaker

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

  1. حدد موقع النموذج الذي قمت بتخزينه في حاوية S3. انسخ URI.
    يمكنك استخدام نموذج URI لاحقًا في ملف MODEL_S3_LOCATION.
  2. حدد إصدار إطار العمل وإصدار Python الذي تم استخدامه أثناء تدريب النموذج.
    تحتاج إلى تحديد حاوية من قائمة حاويات AWS Deep Learning المتاحة وفقًا لإطار العمل الخاص بك وإصدار Python. لمزيد من المعلومات ، يرجى الرجوع إلى تقديم صور حاوية متعددة البنى لـ Amazon ECR.
  3. حدد موقع URI الخاص ببرنامج Python النصي في حاوية S3 (اسم الملف الشائع هو inference.py).
    مطلوب URI النصي للاستدلال في INFERENCE_SCRIPT_S3_LOCATION.
  4. باستخدام هذه المتغيرات ، يمكنك استدعاء واجهة برمجة تطبيقات SageMaker باستخدام الأمر التالي:
    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 من التكوين

ما هو معتمد

يوفر SageMaker حاويات Graviton العميقة المحسّنة للأداء لإطارات TensorFlow و PyTorch. تدعم هذه الحاويات رؤية الكمبيوتر ومعالجة اللغة الطبيعية والتوصيات وحالات استخدام الاستدلال العام العميق والواسع القائم على النموذج. بالإضافة إلى حاويات التعلم العميق ، يوفر SageMaker أيضًا حاويات لأطر ML الكلاسيكية مثل XGBoost و Scikit-Learn. الحاويات متوافقة بشكل ثنائي عبر مثيلات c6g / m6g و c7g ، وبالتالي فإن ترحيل تطبيق الاستدلال من جيل إلى آخر يكون سلسًا.

يدعم C6g / m6g fp16 (تعويم نصف دقيق) وللطرز المتوافقة يوفر أداء مكافئًا أو أفضل مقارنة بمثيلات c5. يعمل C7g على زيادة أداء ML بشكل كبير من خلال مضاعفة عرض SIMD ودعم bfloat-16 (bf16) ، وهو النظام الأساسي الأكثر فعالية من حيث التكلفة لتشغيل الطرازات الخاصة بك.

يوفر كل من c6g / m6g و c7g أداءً جيدًا لـ ML الكلاسيكي (على سبيل المثال ، XGBoost) مقارنة بمثيلات وحدة المعالجة المركزية الأخرى في SageMaker. يسمح دعم Bfloat-16 على c7g بالنشر الفعال لنماذج bf16 المدربة أو نماذج AMP (الدقة المختلطة التلقائية) المدربة. توفر الواجهة الخلفية لمكتبة Arm Compute Library (ACL) على Graviton نواة bfloat-16 يمكنها تسريع حتى مشغلي fp32 عبر الوضع الرياضي السريع ، دون تكميم النموذج.

أفضل الممارسات الموصى بها

في حالات Graviton ، كل vCPU هو جوهر مادي. لا يوجد تنازع على موارد وحدة المعالجة المركزية الشائعة (على عكس SMT) ، ويكون قياس أداء عبء العمل خطيًا مع كل إضافة وحدة المعالجة المركزية (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 ، ملف أمازون ساجميكر ستوديو دفتر ملاحظات ، أو دفتر Jupyter في الوضع المحلي. تحتاج إلى استرداد دور تنفيذ SageMaker إذا كنت تستخدم دفتر Jupyter في الوضع المحلي.

يأخذ المثال التالي في الاعتبار مجموعة بيانات CIFAR-10. يمكنك اتباع مثال دفتر الملاحظات من أمثلة SageMaker جيثب ريبو لإعادة إنتاج النموذج المستخدم في هذا المنشور. نحن نستخدم النموذج المدرب و cifar10_keras_main.py نص بايثون للاستدلال.

يتم تخزين النموذج في حاوية S3: s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

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 Graviton. بناءً على ذلك ، فإن URI الخاص بحاوية AWS Deep Learning Container الخاصة بنا هو 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")

    الآن نقوم بإعداد الحمولة لاستدعاء نقطة النهاية. نستخدم نفس النوع من الصور المستخدمة لتدريب النموذج. تم تنزيلها في الخطوات السابقة.

  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)

مقارنة السعر والأداء

تقدم المثيلات المستندة إلى Graviton أقل سعر وأفضل أداء مقارنة بالسعر مقارنة بالمثيلات المستندة إلى x86. على غرار مثيلات EC2 ، تقدم نقاط نهاية استدلال SageMaker مع مثيلات ml.c6g (Graviton 2) سعرًا أقل بنسبة 20٪ مقارنة بـ ml.c5 ، ومثيلات Graviton 3 ml.c7g أرخص بنسبة 15٪ من مثيلات ml.c6. لمزيد من المعلومات ، يرجى الرجوع إلى الأمازون SageMaker التسعير.

وفي الختام

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

لمعرفة المزيد عن Graviton ، ارجع إلى معالج AWS Graviton. يمكنك البدء في استخدام مثيلات EC2 المستندة إلى AWS Graviton على وحدة تحكم Amazon EC2 وبالرجوع إلى دليل AWS Graviton الفني. يمكنك نشر نقطة نهاية نموذج Sagemaker للاستدلال على Graviton باستخدام نموذج التعليمات البرمجية في منشور المدونة هذا.


عن المؤلفين

فيكتور جاراميلوفيكتور جاراميلو ، دكتوراه ، هو مهندس أول لتعلم الآلة في خدمات AWS الاحترافية. قبل AWS ، كان أستاذًا جامعيًا وعالمًا باحثًا في الصيانة التنبؤية. في أوقات فراغه ، يستمتع بركوب دراجته النارية وميكانيكا الدراجات النارية DIY.

زمناكو اورحمانزمناكو أورحمان ، دكتوراه ، هو مدير ممارسة ، و ML SME ، وعضو في المجتمع الميداني للتعلم الآلي (TFC) في Amazon Web Services. يساعد العملاء على الاستفادة من قوة السحابة لاستخراج القيمة من بياناتهم من خلال تحليلات البيانات والتعلم الآلي.

سونيتا نادامباليسونيتا نادامبالي هو مدير تطوير برمجيات في AWS. إنها تقود تحسينات أداء برامج Graviton من أجل إمالة الآلة ، و HPC ، وأعباء عمل الوسائط المتعددة. إنها متحمسة لتطوير المصادر المفتوحة وتقديم حلول برمجية فعالة من حيث التكلفة مع Arm SoCs.

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

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

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

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