انشر نماذج Amazon SageMaker Autopilot لنقاط نهاية الاستدلال بدون خادم. PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.

انشر نماذج Amazon SageMaker Autopilot لنقاط نهاية الاستدلال بدون خادم

Amazon SageMaker الطيار الآلي يقوم تلقائيًا بإنشاء وتدريب وضبط أفضل نماذج التعلم الآلي (ML) استنادًا إلى بياناتك ، مع السماح لك بالحفاظ على التحكم الكامل والرؤية. يمكن للطيار الآلي أيضًا نشر نماذج مدربة لنقاط نهاية الاستدلال في الوقت الفعلي تلقائيًا.

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

استدلال Amazon SageMaker Serverless هو خيار استدلال مبني لغرض معين ومثالي لأحمال العمل مع أنماط حركة مرور غير متوقعة ويمكنه تحمل البدايات الباردة. على عكس نقطة نهاية الاستدلال في الوقت الفعلي ، والمدعومة بمثيل حوسبة طويل الأمد ، توفر نقاط النهاية التي لا تحتوي على خادم موارد عند الطلب باستخدام مقياس تلقائي مدمج. يتم قياس نقاط النهاية بدون خادم تلقائيًا استنادًا إلى عدد الطلبات الواردة وتقليص الموارد إلى الصفر في حالة عدم وجود طلبات واردة ، مما يساعدك على تقليل تكاليفك.

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

أوضاع تدريب الطيار الآلي

قبل إنشاء تجربة الطيار الآلي ، يمكنك إما السماح للطيار الآلي بتحديد وضع التدريب تلقائيًا ، أو يمكنك تحديد وضع التدريب يدويًا.

يدعم الطيار الآلي حاليًا ثلاثة أوضاع تدريب:

  • السيارات - استنادًا إلى حجم مجموعة البيانات ، يختار الطيار الآلي تلقائيًا إما وضع التجميع أو وضع HPO. بالنسبة لمجموعات البيانات الأكبر من 100 ميغا بايت ، يختار الطيار الآلي HPO ؛ خلاف ذلك ، فإنه يختار التجميع.
  • تجميع - يستخدم الطيار الآلي ملف AutoGluon تقنية التجميع باستخدام نموذج التراص وتنتج نموذجًا تنبؤيًا مثاليًا.
  • تحسين Hyperparameter (HPO) - يجد الطيار الآلي أفضل إصدار من النموذج عن طريق ضبط المعلمات الفائقة باستخدام تحسين Bayesian أو تحسين الدقة المتعددة أثناء تشغيل وظائف التدريب على مجموعة البيانات الخاصة بك. يحدد وضع HPO الخوارزميات الأكثر صلة بمجموعة البيانات الخاصة بك ويختار أفضل نطاق من المعلمات الفائقة لضبط النماذج الخاصة بك.

لمعرفة المزيد حول أوضاع تدريب الطيار الآلي ، ارجع إلى أوضاع التدريب.

حل نظرة عامة

في هذا المنشور ، نستخدم ملف تسويق بنك UCI مجموعة بيانات للتنبؤ بما إذا كان العميل سيشترك في وديعة لأجل يقدمها البنك. هذا هو نوع مشكلة تصنيف ثنائي.

أطلقنا وظيفتين للطيار الآلي باستخدام ملف مكتبات Boto3 لبرنامج SageMaker. تستخدم الوظيفة الأولى التجميع كوضع التدريب المختار. نقوم بعد ذلك بنشر نموذج المجموعة المفردة الذي تم إنشاؤه إلى نقطة نهاية بدون خادم وإرسال طلبات الاستدلال إلى نقطة النهاية المستضافة هذه.

الوظيفة الثانية تستخدم وضع التدريب HPO. بالنسبة لأنواع مشاكل التصنيف ، يقوم الطيار الآلي بإنشاء ثلاث حاويات للاستدلال. نقوم باستخراج حاويات الاستدلال الثلاثة هذه ونشرها لفصل نقاط النهاية التي لا تحتوي على خادم. ثم نرسل طلبات الاستدلال إلى نقاط النهاية المستضافة هذه.

لمزيد من المعلومات حول أنواع مشاكل الانحدار والتصنيف ، يرجى الرجوع إلى تعريفات حاوية الاستدلال لأنواع مشاكل الانحدار والتصنيف.

يمكننا أيضًا إطلاق وظائف الطيار الآلي من أمازون ساجميكر ستوديو واجهة المستخدم. إذا قمت بتشغيل وظائف من واجهة المستخدم ، فتأكد من إيقاف تشغيل النشر التلقائي الخيار في النشر والإعدادات المتقدمة الجزء. خلاف ذلك ، سيقوم الطيار الآلي بنشر أفضل مرشح لنقطة نهاية في الوقت الحقيقي.

المتطلبات الأساسية المسبقة

تأكد من تثبيت أحدث إصدار من Boto3 وحزم SageMaker Python:

pip install -U boto3 sagemaker

نحتاج إلى إصدار حزمة SageMaker >= 2.110.0 ونسخة Boto3 >= boto3-1.24.84.

إطلاق مهمة الطيار الآلي مع وضع التجميع

لإطلاق مهمة الطيار الآلي باستخدام مكتبات SageMaker Boto3 ، نستخدم ملف create_auto_ml_job API. ثم نمر AutoMLJobConfig, InputDataConfigو AutoMLJobObjective كمدخلات ل create_auto_ml_job. انظر الكود التالي:

bucket = session.default_bucket()
role = sagemaker.get_execution_role()
prefix = "autopilot/bankadditional"
sm_client = boto3.Session().client(service_name='sagemaker',region_name=region)

timestamp_suffix = strftime('%d%b%Y-%H%M%S', gmtime())
automl_job_name = f"uci-bank-marketing-{timestamp_suffix}"
max_job_runtime_seconds = 3600
max_runtime_per_job_seconds = 1200
target_column = "y"
problem_type="BinaryClassification"
objective_metric = "F1"
training_mode = "ENSEMBLING"

automl_job_config = {
    'CompletionCriteria': {
      'MaxRuntimePerTrainingJobInSeconds': max_runtime_per_job_seconds,
      'MaxAutoMLJobRuntimeInSeconds': max_job_runtime_seconds
    },    
    "Mode" : training_mode
}

automl_job_objective= { "MetricName": objective_metric }

input_data_config = [
    {
      'DataSource': {
        'S3DataSource': {
          'S3DataType': 'S3Prefix',
          'S3Uri': f's3://{bucket}/{prefix}/raw/bank-additional-full.csv'
        }
      },
      'TargetAttributeName': target_column
    }
  ]

output_data_config = {
	    'S3OutputPath': f's3://{bucket}/{prefix}/output'
	}


sm_client.create_auto_ml_job(
				AutoMLJobName=auto_ml_job_name,
				InputDataConfig=input_data_config,
				OutputDataConfig=output_data_config,
				AutoMLJobConfig=automl_job_config,
				ProblemType=problem_type,
				AutoMLJobObjective=automl_job_objective,
				RoleArn=role)

يعيد الطيار الآلي ملف BestCandidate كائن النموذج الذي يحتوي على InferenceContainers مطلوب لنشر النماذج لاستنتاج نقاط النهاية. للحصول على BestCandidate للوظيفة السابقة ، نستخدم describe_automl_job وظيفة:

job_response = sm_client.describe_auto_ml_job(AutoMLJobName=automl_job_name)
best_candidate = job_response['BestCandidate']
inference_container = job_response['BestCandidate']['InferenceContainers'][0]
print(inference_container)

نشر النموذج المدرب

نقوم الآن بنشر حاوية الاستدلال السابقة على نقطة نهاية بدون خادم. تتمثل الخطوة الأولى في إنشاء نموذج من حاوية الاستدلال ، ثم إنشاء تكوين نقطة نهاية نحدد فيه امتداد MemorySizeInMB و MaxConcurrency قيم نقطة النهاية بدون خادم مع اسم النموذج. أخيرًا ، نقوم بإنشاء نقطة نهاية مع تكوين نقطة النهاية الذي تم إنشاؤه أعلاه.

نوصي باختيار ملف حجم ذاكرة نقطة النهاية وفقًا لحجم النموذج الخاص بك. يجب أن يكون حجم الذاكرة على الأقل بحجم نموذجك. الحد الأدنى لحجم ذاكرة الوصول العشوائي (RAM) لنقطة النهاية التي لا تستخدم خادمًا هو 1024 ميجابايت (1 جيجابايت) ، والحد الأقصى لذاكرة الوصول العشوائي الذي يمكنك اختياره هو 6144 ميجابايت (6 جيجابايت).

أحجام الذاكرة التي يمكنك اختيارها هي 1024 ميجابايت ، 2048 ميجابايت ، 3072 ميجابايت ، 4096 ميجابايت ، 5120 ميجابايت ، أو 6144 ميجابايت.

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

لاحظ أن نقاط النهاية بدون خادم تقبل فقط SingleModel لحاويات الاستدلال. يولد الطيار الآلي في وضع التجميع نموذجًا واحدًا ، لذلك يمكننا نشر حاوية النموذج هذه كما هي في نقطة النهاية. انظر الكود التالي:

# Create Model
	model_response = sm_client.create_model(
				ModelName=model_name,
				ExecutionRoleArn=role,
				Containers=[inference_container]
	)

# Create Endpoint Config
	epc_response = sm_client.create_endpoint_config(
		EndpointConfigName = endpoint_config_name,
		ProductionVariants=[
			{
				"ModelName": model_name,
				"VariantName": "AllTraffic",
				"ServerlessConfig": {
					"MemorySizeInMB": memory,
					"MaxConcurrency": max_concurrency
				}
			}
		]
	)

# Create Endpoint
	ep_response = sm_client.create_endpoint(
		EndpointName=endpoint_name,
		EndpointConfigName=endpoint_config_name
	)

عندما تكون نقطة نهاية الاستدلال بدون خادم InService، يمكننا اختبار نقطة النهاية عن طريق إرسال طلب استنتاج ومراقبة التوقعات. يوضح الرسم البياني التالي بنية هذا الإعداد.

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

إرسال طلب الاستدلال إلى النموذج المدرب

استخدم الكود التالي لإرسال استدلال على نموذجك الذي تم تدريبه باستخدام وضع التجميع:

from sagemaker.predictor import Predictor
from sagemaker.serializers import CSVSerializer


payload = "34,blue-collar,married,basic.4y,no,no,no,telephone,may,tue,800,4,999,0,nonexistent,1.1,93.994,-36.4,4.857,5191.0"

predictor = Predictor(
        endpoint_name=endpoint,
        sagmaker_session=session,
        serializer=CSVSerializer(),
    )

prediction = predictor.predict(payload).decode(‘utf-8’)
print(prediction)

قم بتشغيل وظيفة الطيار الآلي باستخدام وضع HPO

في وضع HPO ، لـ CompletionCriteriaالى جانب ذلك MaxRuntimePerTrainingJobInSeconds و MaxAutoMLJobRuntimeInSeconds, يمكننا أيضًا تحديد MaxCandidates للحد من عدد المرشحين الذين ستولدهم وظيفة الطيار الآلي. لاحظ أن هذه معلمات اختيارية ويتم تعيينها فقط للحد من وقت تشغيل الوظيفة للتوضيح. انظر الكود التالي:

training_mode = "HYPERPARAMETER_TUNING"

automl_job_config["Mode"] = training_mode
automl_job_config["CompletionCriteria"]["MaxCandidates"] = 15
hpo_automl_job_name =  f"{model_prefix}-HPO-{timestamp_suffix}"

response = sm_client.create_auto_ml_job(
					  AutoMLJobName=hpo_automl_job_name,
					  InputDataConfig=input_data_config,
					  OutputDataConfig=output_data_config,
					  AutoMLJobConfig=automl_job_config,
					  ProblemType=problem_type,
					  AutoMLJobObjective=automl_job_objective,
					  RoleArn=role,
					  Tags=tags_config
				)

للحصول على BestCandidate للوظيفة السابقة ، يمكننا مرة أخرى استخدام describe_automl_job وظيفة:

job_response = sm_client.describe_auto_ml_job(AutoMLJobName=automl_job_name)
best_candidate = job_response['BestCandidate']
inference_containers = job_response['BestCandidate']['InferenceContainers']
print(inference_containers)

نشر النموذج المدرب

يقوم الطيار الآلي في وضع HPO لنوع مشكلة التصنيف بإنشاء ثلاث حاويات للاستدلال.

تتعامل الحاوية الأولى مع خطوات تحويل المعالم. بعد ذلك ، تقوم حاوية الخوارزمية بإنشاء ملف predicted_label بأعلى احتمال. أخيرًا ، تقوم حاوية الاستدلال بعد المعالجة بإجراء تحويل عكسي على الملصق المتوقع وتعيينه إلى الملصق الأصلي. لمزيد من المعلومات ، يرجى الرجوع إلى تعريفات حاوية الاستدلال لأنواع مشاكل الانحدار والتصنيف.

نستخرج حاويات الاستدلال الثلاثة هذه وننشرها في نقاط نهاية منفصلة بدون خادم. للاستدلال ، نستدعي نقاط النهاية بالتسلسل عن طريق إرسال الحمولة أولاً إلى حاوية تحويل الميزات ، ثم تمرير الإخراج من هذه الحاوية إلى حاوية الخوارزمية ، وأخيراً تمرير الإخراج من حاوية الاستنتاج السابقة إلى حاوية ما بعد المعالجة ، الذي ينتج التسمية المتوقعة.

يوضح الرسم البياني التالي بنية هذا الإعداد. رسم تخطيطي يوضح نموذج الطيار الآلي في وضع HPO المنتشر على ثلاث نقاط نهاية بدون خادم

نستخرج حاويات الاستدلال الثلاثة من ملف BestCandidate مع الكود التالي:

job_response = sm_client.describe_auto_ml_job(AutoMLJobName=automl_job_name)
inference_containers = job_response['BestCandidate']['InferenceContainers']

models = list()
endpoint_configs = list()
endpoints = list()

# For brevity, we've encapsulated create_model, create endpoint_config and create_endpoint as helper functions
for idx, container in enumerate(inference_containers):
    (status, model_arn) = create_autopilot_model(
								    sm_client,
								    automl_job_name,
            						role,
								    container,
								    idx)
    model_name = model_arn.split('/')[1]
    models.append(model_name)

    endpoint_config_name = f"epc-{model_name}"
    endpoint_name = f"ep-{model_name}"
    (status, epc_arn) = create_serverless_endpoint_config(
								    sm_client,
								    endpoint_config_name,
								    model_name,
            						memory=2048,
								    max_concurrency=10)
	endpoint_configs.append(endpoint_config_name)

	response = create_serverless_endpoint(
								    sm_client,
								    endpoint_name,
								    endpoint_config_name)
	endpoints.append(endpoint_name)

إرسال طلب الاستدلال إلى النموذج المدرب

للاستدلال ، نرسل الحمولة في تسلسل: أولاً إلى حاوية تحويل الميزات ، ثم إلى حاوية النموذج ، وأخيراً إلى حاوية التحويل ذات التسمية العكسية.

مرئي لتدفق طلب الاستدلال لثلاث حاويات استدلال من وضع HPO

انظر الكود التالي:

from sagemaker.predictor import Predictor
from sagemaker.serializers import CSVSerializer

payload = "51,technician,married,professional.course,no,yes,no,cellular,apr,thu,687,1,0,1,success,-1.8,93.075,-47.1,1.365,5099.1"


for _, endpoint in enumerate(endpoints):
    try:
        print(f"payload: {payload}")
        predictor = Predictor(
            endpoint_name=endpoint,
            sagemaker_session=session,
            serializer=CSVSerializer(),
        )
        prediction = predictor.predict(payload)
        payload=prediction
    except Exception as e:
        print(f"Error invoking Endpoint; {endpoint} n {e}")
        break

التنفيذ الكامل لهذا المثال متاح في المشتري التالي مفكرة.

تنظيف

لتنظيف الموارد ، يمكنك حذف نقاط النهاية التي لا تحتوي على خادم ، وتكوينات نقطة النهاية ، والنماذج:

sm_client = boto3.Session().client(service_name='sagemaker',region_name=region)

for _, endpoint in enumerate(endpoints):
    try:
        sm_client.delete_endpoint(EndpointName=endpoint)
    except Exception as e:
        print(f"Exception:n{e}")
        continue
        
for _, endpoint_config in enumerate(endpoint_configs):
    try:
        sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config)
    except Exception as e:
        print(f"Exception:n{e}")
        continue

for _, autopilot_model in enumerate(models):
    try:
        sm_client.delete_model(ModelName=autopilot_model)
    except Exception as e:
        print(f"Exception:n{e}")
        continue

وفي الختام

في هذا المنشور ، أظهرنا كيف يمكننا نشر النماذج التي تم إنشاؤها بواسطة الطيار الآلي في كل من أوضاع المجموعة و HPO لنقاط نهاية الاستدلال بدون خادم. يمكن لهذا الحل تسريع قدرتك على استخدام والاستفادة من خدمات ML ذات التكلفة المعقولة والمدارة بالكامل مثل Autopilot لإنشاء نماذج بسرعة من البيانات الأولية ، ثم نشرها لنقاط نهاية الاستدلال بدون خادم مُدارة بالكامل مع توسيع تلقائي مدمج لتقليل التكاليف .

نحن نشجعك على تجربة هذا الحل مع مجموعة بيانات ذات صلة بمؤشرات الأداء الرئيسية الخاصة بشركتك. يمكنك الرجوع إلى الحل المطبق في دفتر Jupyter في ملف جيثب ريبو.

مراجع إضافية


عن المؤلف

انشر نماذج Amazon SageMaker Autopilot لنقاط نهاية الاستدلال بدون خادم. PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.برافين شامارثي هو أخصائي أول في الذكاء الاصطناعي / تعلم الآلة مع Amazon Web Services. إنه متحمس للذكاء الاصطناعي / تعلم الآلة وكل ما يتعلق بـ AWS. يساعد العملاء في جميع أنحاء الأمريكتين على توسيع نطاق أعباء عمل ML وابتكارها وتشغيلها بكفاءة على AWS. في أوقات فراغه ، يحب برافين القراءة ويستمتع بأفلام الخيال العلمي.

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

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