مدل‌های Amazon SageMaker Autopilot را در نقاط پایانی استنتاج بدون سرور به هوش داده پلاتو بلاک چین مستقر کنید. جستجوی عمودی Ai.

مدل های Amazon SageMaker Autopilot را در نقاط پایانی استنتاج بدون سرور مستقر کنید

Amazon SageMaker Autopilot بهترین مدل‌های یادگیری ماشینی (ML) را بر اساس داده‌های شما به‌طور خودکار می‌سازد، آموزش می‌دهد و تنظیم می‌کند، در حالی که به شما امکان می‌دهد کنترل و دید کامل را حفظ کنید. Autopilot همچنین می تواند مدل های آموزش دیده را به صورت خودکار در نقاط پایانی استنتاج بلادرنگ مستقر کند.

اگر حجم کاری با الگوهای ترافیکی تند یا غیرقابل پیش بینی دارید که می تواند شروع سرد را تحمل کند، پس استقرار مدل در نقطه پایانی استنتاج بدون سرور مقرون به صرفه تر خواهد بود.

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

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

حالت های آموزش خلبان خودکار

قبل از ایجاد یک آزمایش خودکار، می‌توانید به Autopilot اجازه دهید حالت آموزشی را به طور خودکار انتخاب کند، یا می‌توانید حالت آموزش را به صورت دستی انتخاب کنید.

Autopilot در حال حاضر از سه حالت آموزشی پشتیبانی می کند:

  • خودکار - بر اساس اندازه مجموعه داده، Autopilot به طور خودکار حالت ensembling یا HPO را انتخاب می کند. برای مجموعه داده های بزرگتر از 100 مگابایت، Autopilot HPO را انتخاب می کند. در غیر این صورت، آنسامبلینگ را انتخاب می کند.
  • گروه بندی - خلبان خودکار از AutoGluon تکنیک مجموعه‌سازی با استفاده از انباشته کردن مدل و تولید یک مدل پیش‌بینی بهینه.
  • بهینه سازی فراپارامتر (HPO) – خلبان خودکار بهترین نسخه یک مدل را با تنظیم فراپارامترها با استفاده از بهینه‌سازی بیزی یا بهینه‌سازی چند وفاداری در حین اجرای کارهای آموزشی روی مجموعه داده شما پیدا می‌کند. حالت HPO الگوریتم‌هایی را انتخاب می‌کند که بیشترین ارتباط را با مجموعه داده شما دارند و بهترین محدوده ابرپارامترها را برای تنظیم مدل‌های شما انتخاب می‌کند.

برای کسب اطلاعات بیشتر در مورد حالت های آموزش Autopilot به ادامه مطلب مراجعه کنید حالت های آموزشی.

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

در این پست از بازاریابی بانک UCI مجموعه داده ای برای پیش بینی اینکه آیا مشتری در یک سپرده مدت دار ارائه شده توسط بانک مشترک می شود یا خیر. این یک نوع مشکل طبقه بندی باینری است.

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

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

برای اطلاعات بیشتر در مورد انواع مشکل رگرسیون و طبقه بندی، به تعاریف ظرف استنتاج برای انواع مسئله رگرسیون و طبقه بندی.

ما همچنین می توانیم کارهای خلبان خودکار را از طریق راه اندازی کنیم Amazon SageMaker Studio UI. اگر کارها را از UI راه اندازی می کنید، مطمئن شوید که آن را خاموش کنید استقرار خودکار گزینه در استقرار و تنظیمات پیشرفته بخش. در غیر این صورت، Autopilot بهترین نامزد را در یک نقطه پایانی بلادرنگ مستقر می کند.

پیش نیازها

مطمئن شوید که آخرین نسخه Boto3 و بسته های SageMaker Python را نصب کرده اید:

pip install -U boto3 sagemaker

ما به نسخه بسته SageMaker نیاز داریم >= 2.110.0 و نسخه Boto3 >= boto3-1.24.84.

یک کار خلبان خودکار با حالت ensembling راه اندازی کنید

برای راه‌اندازی یک کار خلبان خودکار با استفاده از کتابخانه‌های 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 مقادیر برای نقطه پایانی بدون سرور همراه با نام مدل. در نهایت، یک نقطه پایانی با پیکربندی نقطه پایانی ایجاد شده در بالا ایجاد می کنیم.

توصیه می کنیم خود را انتخاب کنید اندازه حافظه نقطه پایانی با توجه به اندازه مدل شما اندازه حافظه باید حداقل به اندازه اندازه مدل شما باشد. نقطه پایانی بدون سرور شما دارای حداقل اندازه رم 1024 مگابایت (1 گیگابایت) است و حداکثر اندازه رمی که می توانید انتخاب کنید 6144 مگابایت (6 گیگابایت) است.

اندازه های حافظه ای که می توانید انتخاب کنید 1024 مگابایت، 2048 مگابایت، 3072 مگابایت، 4096 مگابایت، 5120 مگابایت، یا 6144 مگابایت است.

برای کمک به تعیین اینکه آیا نقطه پایانی بدون سرور گزینه مناسبی برای استقرار از منظر هزینه و عملکرد است یا خیر، توصیه می کنیم به SageMaker Serverless Inference Benchmarking Toolkit، که پیکربندی‌های نقطه پایانی مختلف را آزمایش می‌کند و بهینه‌ترین آنها را با یک نمونه میزبانی بلادرنگ مقایسه می‌کند.

توجه داشته باشید که نقاط پایانی بدون سرور فقط پذیرفته می شوند 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، می توانیم نقطه پایانی را با ارسال یک درخواست استنتاج آزمایش کنیم و پیش بینی ها را مشاهده کنیم. نمودار زیر معماری این راه اندازی را نشان می دهد.

توجه داشته باشید که ما می توانیم داده های خام را به عنوان یک بار به نقطه پایانی ارسال کنیم. مدل مجموعه تولید شده توسط Autopilot به طور خودکار تمام مراحل مورد نیاز تبدیل ویژگی و تبدیل برچسب معکوس را به همراه مدل الگوریتم و بسته‌ها در یک مدل واحد ترکیب می‌کند.

درخواست استنباط را به مدل آموزش دیده ارسال کنید

از کد زیر برای ارسال استنباط بر روی مدل آموزش دیده با استفاده از حالت ensembling استفاده کنید:

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 با بیشترین احتمال در نهایت، ظرف استنتاج پس از پردازش، یک تبدیل معکوس بر روی برچسب پیش بینی شده انجام می دهد و آن را به برچسب اصلی نگاشت می کند. برای اطلاعات بیشتر مراجعه کنید تعاریف ظرف استنتاج برای انواع مسئله رگرسیون و طبقه بندی.

ما این سه محفظه استنتاج را استخراج می کنیم و آنها را در یک نقطه پایانی بدون سرور جداگانه مستقر می کنیم. برای استنتاج، نقاط پایانی را به ترتیب با ارسال بار به محفظه تبدیل ویژگی، سپس ارسال خروجی از این محفظه به محفظه الگوریتم و در نهایت ارسال خروجی از ظرف استنتاج قبلی به ظرف پس از پردازش، فراخوانی می کنیم. که برچسب پیش بینی شده را خروجی می دهد.

نمودار زیر معماری این راه اندازی را نشان می دهد. نموداری که مدل Autopilot را در حالت 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

اجرای کامل این مثال در jupyter زیر موجود است دفتر یادداشت.

پاک کردن

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

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

نتیجه

در این پست، ما نشان دادیم که چگونه می‌توانیم مدل‌های تولید شده Autopilot را در حالت‌های گروهی و HPO در نقاط پایانی استنتاج بدون سرور مستقر کنیم. این راه حل می تواند توانایی شما را برای استفاده و بهره گیری از خدمات مقرون به صرفه و کاملاً مدیریت شده ML مانند Autopilot برای تولید سریع مدل ها از داده های خام و سپس استقرار آنها در نقاط پایانی استنتاج بدون سرور کاملاً مدیریت شده با مقیاس خودکار داخلی برای کاهش هزینه ها افزایش دهد. .

ما شما را تشویق می کنیم که این راه حل را با مجموعه داده مرتبط با KPIهای کسب و کار خود امتحان کنید. می توانید به راه حل پیاده سازی شده در نوت بوک Jupyter در GitHub repo.

مراجع اضافی


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

مدل‌های Amazon SageMaker Autopilot را در نقاط پایانی استنتاج بدون سرور به هوش داده پلاتو بلاک چین مستقر کنید. جستجوی عمودی Ai.پراوین چامارتی یک متخصص ارشد AI/ML با خدمات وب آمازون است. او مشتاق هوش مصنوعی/ML و همه چیزهای AWS است. او به مشتریان در سرتاسر قاره آمریکا کمک می‌کند تا حجم‌های کاری ML را به طور کارآمد در AWS تغییر دهند، نوآوری کنند. پراوین در اوقات فراغت خود عاشق خواندن فیلم های علمی تخیلی است.

تمبر زمان:

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