Amazon SageMaker Autopilot modellerini sunucusuz çıkarım uç noktalarına dağıtın PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Amazon SageMaker Autopilot modellerini sunucusuz çıkarım uç noktalarına dağıtın

Amazon SageMaker Otomatik Pilot tam kontrol ve görünürlüğü korumanıza izin verirken, verilerinize dayalı olarak en iyi makine öğrenimi (ML) modellerini otomatik olarak oluşturur, eğitir ve ayarlar. Autopilot ayrıca eğitilmiş modelleri gerçek zamanlı çıkarım uç noktalarına otomatik olarak dağıtabilir.

Soğuk başlatmaları tolere edebilen ani veya öngörülemeyen trafik modellerine sahip iş yükleriniz varsa, modeli sunucusuz bir çıkarım uç noktasına dağıtmak daha uygun maliyetli olacaktır.

Amazon SageMaker Sunucusuz Çıkarım öngörülemeyen trafik modellerine sahip ve soğuk başlatmaları tolere edebilen iş yükleri için ideal, amaca yönelik oluşturulmuş bir çıkarım seçeneğidir. Uzun süre çalışan bir bilgi işlem eşgörünümü tarafından desteklenen gerçek zamanlı bir çıkarım uç noktasının aksine, sunucusuz uç noktalar, yerleşik otomatik ölçeklendirme ile talep üzerine kaynakları sağlar. Sunucusuz uç noktalar, gelen isteklerin sayısına göre otomatik olarak ölçeklenir ve gelen istek olmadığında kaynakları sıfıra indirerek maliyetlerinizi en aza indirmenize yardımcı olur.

Bu gönderide, Autopilot tarafından eğitilmiş modellerin sunucusuz çıkarım uç noktalarına nasıl dağıtılacağını gösteriyoruz. Boto3 kütüphaneleri için Amazon Adaçayı Yapıcı.

Otomatik pilot eğitim modları

Bir Otopilot deneyi oluşturmadan önce, eğitim modunu Otopilot'un otomatik olarak seçmesine izin verebilir veya eğitim modunu manuel olarak seçebilirsiniz.

Otomatik pilot şu anda üç eğitim modunu desteklemektedir:

  • Oto – Veri kümesi boyutuna bağlı olarak, Autopilot otomatik olarak birleştirme veya HPO modunu seçer. 100 MB'den büyük veri kümeleri için Autopilot, HPO'yu seçer; Aksi takdirde, ensembling'i seçer.
  • topluluk – Otomatik pilot, Otomatik Gluon model istifleme kullanan birleştirme tekniği ve optimal bir tahmine dayalı model üretir.
  • Hiperparametre optimizasyonu (HPO) – Otopilot, veri kümenizde eğitim işleri yürütürken Bayes optimizasyonu veya çoklu uygunluk optimizasyonu kullanarak hiperparametreleri ayarlayarak bir modelin en iyi sürümünü bulur. HPO modu, veri kümenizle en alakalı algoritmaları seçer ve modellerinizi ayarlamak için en iyi hiperparametre aralığını seçer.

Otopilot eğitim modları hakkında daha fazla bilgi edinmek için bkz. Eğitim modları.

Çözüme genel bakış

Bu yazıda kullanıyoruz UCI Banka Pazarlama Bir müşterinin banka tarafından sunulan bir vadeli mevduata abone olup olmayacağını tahmin etmek için veri seti. Bu bir ikili sınıflandırma problemi türüdür.

kullanarak iki Autopilot işi başlatıyoruz. SageMaker için Boto3 kitaplıkları. İlk iş, seçilen eğitim modu olarak eşleştirmeyi kullanır. Ardından, oluşturulan tek topluluk modelini sunucusuz bir uç noktaya dağıtırız ve bu barındırılan uç noktaya çıkarım istekleri göndeririz.

İkinci iş, HPO eğitim modunu kullanır. Sınıflandırma problemi türleri için, Autopilot üç çıkarım kapsayıcısı oluşturur. Bu üç çıkarım kapsayıcısını ayıklıyoruz ve bunları ayrı sunucusuz uç noktalara yerleştiriyoruz. Ardından bu barındırılan uç noktalara çıkarım istekleri göndeririz.

Regresyon ve sınıflandırma problem türleri hakkında daha fazla bilgi için bkz. Regresyon ve sınıflandırma problem türleri için çıkarım kabı tanımları.

Otopilot işlerini şu adresten de başlatabiliriz: Amazon SageMaker Stüdyosu kullanıcı arayüzü İşleri kullanıcı arayüzünden başlatırsanız, Otomatik dağıtma seçeneği Dağıtım ve Gelişmiş ayarlar bölüm. Aksi takdirde, Otopilot en iyi adayı gerçek zamanlı bir son noktaya konuşlandırır.

Önkoşullar

Boto3'ün en son sürümüne ve SageMaker Python paketlerine sahip olduğunuzdan emin olun:

pip install -U boto3 sagemaker

SageMaker paket versiyonuna ihtiyacımız var >= 2.110.0 ve Boto3 versiyonu >= boto3-1.24.84.

Birleştirme moduyla bir Otomatik Pilot işi başlatın

SageMaker Boto3 kitaplıklarını kullanarak bir Otomatik Pilot işini başlatmak için create_auto_ml_job API. sonra geçiyoruz AutoMLJobConfig, InputDataConfig, ve AutoMLJobObjective girişler olarak create_auto_ml_job. Aşağıdaki koda bakın:

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)

Otomatik pilot BestCandidate sahip model nesnesi InferenceContainers modelleri çıkarım uç noktalarına dağıtmak için gereklidir. Almak için BestCandidate önceki iş için, describe_automl_job işlevi:

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)

Eğitilen modeli dağıtın

Şimdi önceki çıkarım kapsayıcısını sunucusuz bir uç noktaya dağıtıyoruz. İlk adım, çıkarım kabından bir model oluşturmak, ardından MemorySizeInMB ve MaxConcurrency model adıyla birlikte sunucusuz uç nokta için değerler. Son olarak yukarıda oluşturduğumuz endpoint konfigürasyonu ile bir endpoint oluşturuyoruz.

seçmenizi öneririz. uç noktanın bellek boyutu model boyutunuza göre. Bellek boyutu en az model boyutunuz kadar büyük olmalıdır. Sunucusuz uç noktanızın minimum RAM boyutu 1024 MB (1 GB) ve seçebileceğiniz maksimum RAM boyutu 6144 MB'dir (6 GB).

Seçebileceğiniz bellek boyutları 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB veya 6144 MB'dir.

Maliyet ve performans açısından sunucusuz bir uç noktanın doğru dağıtım seçeneği olup olmadığını belirlemenize yardımcı olması için şuraya başvurmanızı öneririz: SageMaker Sunucusuz Çıkarım Kıyaslama Araç Seti, farklı uç nokta yapılandırmalarını test eder ve en uygun olanı karşılaştırılabilir bir gerçek zamanlı barındırma örneğiyle karşılaştırır.

Sunucusuz uç noktaların yalnızca kabul ettiğini unutmayın. SingleModel çıkarım kapsayıcıları için. Birleştirme modundaki otomatik pilot, tek bir model oluşturur, böylece bu model kapsayıcısını uç noktaya olduğu gibi dağıtabiliriz. Aşağıdaki koda bakın:

# 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
	)

Sunucusuz çıkarım uç noktası InService, bir çıkarım isteği göndererek uç noktayı test edebilir ve tahminleri gözlemleyebiliriz. Aşağıdaki diyagram bu kurulumun mimarisini göstermektedir.

Ham verileri uç noktaya bir yük olarak gönderebileceğimizi unutmayın. Autopilot tarafından oluşturulan topluluk modeli, algoritma modeli ve paketleriyle birlikte gerekli tüm özellik dönüştürme ve ters etiket dönüştürme adımlarını otomatik olarak tek bir modelde birleştirir.

Eğitilen modele çıkarım isteği gönder

Birleştirme modu kullanılarak eğitilmiş modelinize çıkarım göndermek için aşağıdaki kodu kullanın:

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 moduyla bir Otomatik Pilot İşi başlatın

HPO modunda, CompletionCriteria, dışında MaxRuntimePerTrainingJobInSeconds ve MaxAutoMLJobRuntimeInSeconds, ayrıca belirtebiliriz MaxCandidates Otomatik pilot işinin oluşturacağı aday sayısını sınırlamak için. Bunların isteğe bağlı parametreler olduğunu ve yalnızca gösteri için iş çalışma süresini sınırlamak üzere ayarlandığını unutmayın. Aşağıdaki koda bakın:

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
				)

Almak için BestCandidate önceki iş için tekrar kullanabiliriz describe_automl_job işlevi:

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)

Eğitilen modeli dağıtın

Sınıflandırma sorunu türü için HPO modundaki otomatik pilot, üç çıkarım kabı oluşturur.

İlk kap, özellik dönüştürme adımlarını işler. Daha sonra, algoritma kapsayıcısı şunu üretir: predicted_label en yüksek olasılıkla. Son olarak, işlem sonrası çıkarım kabı, tahmin edilen etiket üzerinde bir ters dönüşüm gerçekleştirir ve onu orijinal etikete eşler. Daha fazla bilgi için bkz. Regresyon ve sınıflandırma problem türleri için çıkarım kabı tanımları.

Bu üç çıkarım kapsayıcısını ayıklıyoruz ve bunları ayrı bir sunucusuz uç noktalara dağıtıyoruz. Çıkarım için, önce yükü özellik dönüştürme kabına göndererek, ardından bu kaptan çıktıyı algoritma kabına geçirerek ve son olarak önceki çıkarım kabından çıktıyı son işleme kabına geçirerek uç noktaları sırayla çağırırız. bu da tahmin edilen etiketi verir.

Aşağıdaki diyagram bu kurulumun mimarisini göstermektedir. Üç sunucusuz uç noktaya dağıtılan HPO modundaki Otomatik Pilot modelini gösteren diyagram

Üç çıkarım kapsayıcısını BestCandidate aşağıdaki kodla:

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)

Eğitilen modele çıkarım isteği gönder

Çıkarım için, yükü sırayla gönderiyoruz: önce özellik dönüştürme kabına, ardından model kabına ve son olarak ters etiketli dönüşüm kabına.

HPO modundan üç çıkarım kapsayıcısının çıkarım isteği akışının görseli

Aşağıdaki koda bakın:

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

Bu örneğin tam uygulaması aşağıdaki jupyter'de mevcuttur. defter.

Temizlemek

Kaynakları temizlemek için oluşturulan sunucusuz uç noktaları, uç nokta yapılandırmalarını ve modelleri silebilirsiniz:

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

Sonuç

Bu gönderide, Autopilot tarafından oluşturulan modelleri hem topluluk hem de HPO modlarında sunucusuz çıkarım uç noktalarına nasıl dağıtabileceğimizi gösterdik. Bu çözüm, ham verilerden hızlı bir şekilde modeller oluşturmak için Autopilot gibi uygun maliyetli ve tam olarak yönetilen makine öğrenimi hizmetlerini kullanma ve bunlardan yararlanma becerinizi hızlandırabilir ve ardından maliyetleri azaltmak için yerleşik otomatik ölçeklendirme ile bunları tam olarak yönetilen sunucusuz çıkarım uç noktalarına dağıtabilir. .

İş KPI'lerinizle alakalı bir veri kümesiyle bu çözümü denemenizi öneririz. Bir Jupyter not defterinde uygulanan çözüme şu adresten bakabilirsiniz: GitHub repo.

Ek referanslar


Yazar Hakkında

Amazon SageMaker Autopilot modellerini sunucusuz çıkarım uç noktalarına dağıtın PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Praveen Chamarthi Amazon Web Services'ta Kıdemli Yapay Zeka/Makine Öğrenmesi Uzmanıdır. AI/ML ve AWS ile ilgili her şey konusunda tutkulu. Amerika'daki müşterilerin AWS'de makine öğrenimi iş yüklerini verimli bir şekilde ölçeklendirmesine, yenilik yapmasına ve çalıştırmasına yardımcı oluyor. Praveen boş zamanlarında okumayı sever ve bilimkurgu filmlerinden hoşlanır.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi