Triển khai các mô hình Amazon SageMaker Autopilot cho các điểm cuối suy luận phi máy chủ PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Triển khai các mô hình Amazon SageMaker Autopilot cho các điểm cuối suy luận serverless

Amazon SageMaker Tự động lái tự động xây dựng, đào tạo và điều chỉnh các mô hình học máy (ML) tốt nhất dựa trên dữ liệu của bạn, đồng thời cho phép bạn duy trì toàn quyền kiểm soát và khả năng hiển thị. Autopilot cũng có thể tự động triển khai các mô hình đã được đào tạo đến các điểm cuối suy luận theo thời gian thực.

Nếu bạn có khối lượng công việc với các mẫu lưu lượng truy cập tăng vọt hoặc không thể đoán trước có thể chịu được khởi động nguội thì việc triển khai mô hình đến điểm cuối suy luận không có máy chủ sẽ tiết kiệm chi phí hơn.

Suy luận không máy chủ của Amazon SageMaker là một tùy chọn suy luận được xây dựng có mục đích, lý tưởng cho khối lượng công việc có lưu lượng truy cập không thể đoán trước và có thể chịu được khởi động nguội. Không giống như điểm cuối suy luận theo thời gian thực, được hỗ trợ bởi một phiên bản điện toán chạy dài, điểm cuối không có máy chủ cung cấp tài nguyên theo yêu cầu với tính năng tự động thay đổi quy mô được tích hợp sẵn. Điểm cuối serverless tự động mở rộng quy mô dựa trên số lượng yêu cầu đến và giảm quy mô tài nguyên xuống 0 khi không có yêu cầu đến, giúp bạn giảm thiểu chi phí.

Trong bài đăng này, chúng tôi trình bày cách triển khai các mô hình được đào tạo Autopilot cho các điểm cuối suy luận không có máy chủ bằng cách sử dụng Thư viện Boto3 cho Amazon SageMaker.

Chế độ đào tạo lái tự động

Trước khi tạo thử nghiệm Autopilot, bạn có thể để Autopilot tự động chọn chế độ đào tạo hoặc bạn có thể chọn chế độ đào tạo theo cách thủ công.

Autopilot hiện hỗ trợ ba chế độ đào tạo:

  • Tự động – Dựa trên kích thước tập dữ liệu, Autopilot tự động chọn chế độ tập hợp hoặc HPO. Đối với các tập dữ liệu lớn hơn 100 MB, Autopilot chọn HPO; mặt khác, nó chọn tập hợp.
  • Lắp ráp - Autopilot sử dụng AutoGluon kỹ thuật tập hợp bằng cách sử dụng mô hình xếp chồng và tạo ra mô hình dự đoán tối ưu.
  • Tối ưu hóa siêu tham số (HPO) – Autopilot tìm phiên bản tốt nhất của mô hình bằng cách điều chỉnh siêu tham số bằng cách sử dụng tối ưu hóa Bayesian hoặc tối ưu hóa đa độ chính xác trong khi chạy các công việc đào tạo trên tập dữ liệu của bạn. Chế độ HPO chọn các thuật toán phù hợp nhất với tập dữ liệu của bạn và chọn phạm vi siêu tham số tốt nhất để điều chỉnh mô hình của bạn.

Để tìm hiểu thêm về các chế độ đào tạo Autopilot, hãy tham khảo Chế độ đào tạo.

Tổng quan về giải pháp

Trong bài đăng này, chúng tôi sử dụng Tiếp thị ngân hàng UCI dữ liệu để dự đoán liệu khách hàng có đăng ký tiền gửi có kỳ hạn do ngân hàng cung cấp hay không. Đây là một loại vấn đề phân loại nhị phân.

Chúng tôi khởi chạy hai công việc Autopilot bằng cách sử dụng Thư viện Boto3 cho SageMaker. Công việc đầu tiên sử dụng tập hợp làm phương thức đào tạo đã chọn. Sau đó, chúng tôi triển khai mô hình tập hợp duy nhất được tạo đến điểm cuối không có máy chủ và gửi yêu cầu suy luận đến điểm cuối được lưu trữ này.

Công việc thứ hai sử dụng chế độ đào tạo HPO. Đối với các loại vấn đề phân loại, Autopilot tạo ra ba vùng chứa suy luận. Chúng tôi trích xuất ba vùng chứa suy luận này và triển khai chúng tới các điểm cuối không có máy chủ riêng biệt. Sau đó, chúng tôi gửi yêu cầu suy luận đến các điểm cuối được lưu trữ này.

Để biết thêm thông tin về các loại vấn đề hồi quy và phân loại, hãy tham khảo Định nghĩa vùng chứa suy luận cho các loại vấn đề hồi quy và phân loại.

Chúng tôi cũng có thể khởi chạy các công việc Autopilot từ Xưởng sản xuất Amazon SageMaker Giao diện người dùng. Nếu bạn khởi chạy công việc từ giao diện người dùng, hãy đảm bảo tắt Triển khai tự động tùy chọn trong Cài đặt triển khai và nâng cao phần. Nếu không, Autopilot sẽ triển khai ứng viên tốt nhất đến điểm cuối thời gian thực.

Điều kiện tiên quyết

Đảm bảo bạn đã cài đặt phiên bản mới nhất của gói Boto3 và SageMaker Python:

pip install -U boto3 sagemaker

Chúng tôi cần phiên bản gói SageMaker >= 2.110.0 và phiên bản Boto3 >= boto3-1.24.84.

Khởi chạy công việc Autopilot với chế độ tập hợp

Để khởi chạy công việc Autopilot bằng thư viện SageMaker Boto3, chúng tôi sử dụng tạo_auto_ml_job API. Sau đó chúng tôi đi vào AutoMLJobConfig, InputDataConfigAutoMLJobObjective như đầu vào của create_auto_ml_job. Xem mã sau đây:

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)

Chế độ lái tự động trả lại BestCandidate đối tượng mô hình có InferenceContainers cần thiết để triển khai các mô hình tới các điểm cuối suy luận. Để có được BestCandidate đối với công việc trước đó, chúng tôi sử dụng describe_automl_job chức năng:

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)

Triển khai mô hình được đào tạo

Bây giờ chúng tôi triển khai vùng chứa suy luận trước đó đến điểm cuối không có máy chủ. Bước đầu tiên là tạo một mô hình từ vùng chứa suy luận, sau đó tạo cấu hình điểm cuối trong đó chúng ta chỉ định MemorySizeInMBMaxConcurrency các giá trị cho điểm cuối serverless cùng với tên mô hình. Cuối cùng, chúng ta tạo điểm cuối với cấu hình điểm cuối đã tạo ở trên.

Chúng tôi khuyên bạn nên chọn kích thước bộ nhớ của điểm cuối theo kích thước mô hình của bạn. Kích thước bộ nhớ ít nhất phải lớn bằng kích thước mô hình của bạn. Điểm cuối không có máy chủ của bạn có kích thước RAM tối thiểu là 1024 MB (1 GB) và kích thước RAM tối đa bạn có thể chọn là 6144 MB (6 GB).

Các kích thước bộ nhớ bạn có thể chọn là 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB hoặc 6144 MB.

Để giúp xác định xem điểm cuối không có máy chủ có phải là tùy chọn triển khai phù hợp từ góc độ chi phí và hiệu suất hay không, chúng tôi khuyến khích bạn tham khảo tài liệu Bộ công cụ đo điểm chuẩn suy luận không có máy chủ của SageMaker, kiểm tra các cấu hình điểm cuối khác nhau và so sánh cấu hình tối ưu nhất với phiên bản lưu trữ thời gian thực tương đương.

Lưu ý rằng điểm cuối serverless chỉ chấp nhận SingleModel cho các thùng chứa suy luận. Chế độ lái tự động ở chế độ tổng hợp sẽ tạo ra một mô hình duy nhất, vì vậy chúng tôi có thể triển khai vùng chứa mô hình này đến điểm cuối. Xem đoạn mã sau:

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

Khi điểm cuối suy luận serverless là InService, chúng ta có thể kiểm tra điểm cuối bằng cách gửi yêu cầu suy luận và quan sát các dự đoán. Sơ đồ sau minh họa kiến ​​trúc của thiết lập này.

Lưu ý rằng chúng tôi có thể gửi dữ liệu thô dưới dạng tải trọng đến điểm cuối. Mô hình tập hợp do Autopilot tạo ra sẽ tự động kết hợp tất cả các bước chuyển đổi tính năng và nhãn nghịch đảo cần thiết, cùng với mô hình thuật toán và các gói, thành một mô hình duy nhất.

Gửi yêu cầu suy luận đến mô hình được đào tạo

Sử dụng mã sau đây để gửi suy luận về mô hình của bạn được đào tạo bằng chế độ tập hợp:

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)

Khởi chạy Công việc lái tự động với chế độ HPO

Ở chế độ HPO, đối với CompletionCriteria, ngoài ra MaxRuntimePerTrainingJobInSecondsMaxAutoMLJobRuntimeInSeconds, chúng ta cũng có thể chỉ định MaxCandidates để giới hạn số lượng ứng viên mà công việc Autopilot sẽ tạo ra. Lưu ý rằng đây là những tham số tùy chọn và chỉ được đặt để giới hạn thời gian chạy công việc để trình diễn. Xem đoạn mã sau:

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
				)

Để có được BestCandidate đối với công việc trước đó, chúng ta có thể sử dụng lại describe_automl_job chức năng:

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)

Triển khai mô hình được đào tạo

Chế độ lái tự động ở chế độ HPO cho loại vấn đề phân loại sẽ tạo ra ba vùng chứa suy luận.

Vùng chứa đầu tiên xử lý các bước chuyển đổi tính năng. Tiếp theo, vùng chứa thuật toán tạo ra predicted_label với xác suất cao nhất. Cuối cùng, vùng chứa suy luận xử lý hậu kỳ thực hiện một phép biến đổi nghịch đảo trên nhãn được dự đoán và ánh xạ nó tới nhãn ban đầu. Để biết thêm thông tin, hãy tham khảo Định nghĩa vùng chứa suy luận cho các loại vấn đề hồi quy và phân loại.

Chúng tôi trích xuất ba vùng chứa suy luận này và triển khai chúng đến các điểm cuối không có máy chủ riêng biệt. Để suy luận, chúng tôi gọi các điểm cuối theo trình tự bằng cách gửi trọng tải trước đến vùng chứa chuyển đổi tính năng, sau đó chuyển đầu ra từ vùng chứa này sang vùng chứa thuật toán và cuối cùng chuyển đầu ra từ vùng chứa suy luận trước đó sang vùng chứa xử lý hậu kỳ, xuất ra nhãn dự đoán.

Sơ đồ sau minh họa kiến ​​trúc của thiết lập này. sơ đồ minh họa mô hình Autopilot ở chế độ HPO được triển khai cho ba điểm cuối serverless

Chúng tôi trích xuất ba vùng chứa suy luận từ BestCandidate với mã sau:

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)

Gửi yêu cầu suy luận đến mô hình được đào tạo

Để suy luận, chúng tôi gửi tải trọng theo trình tự: đầu tiên đến vùng chứa chuyển đổi tính năng, sau đó đến vùng chứa mô hình và cuối cùng đến vùng chứa biến đổi nhãn nghịch đảo.

hình ảnh luồng yêu cầu suy luận của ba vùng chứa suy luận từ chế độ HPO

Xem mã sau đây:

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

Việc triển khai đầy đủ ví dụ này có sẵn trong jupyter sau máy tính xách tay.

Làm sạch

Để dọn sạch tài nguyên, bạn có thể xóa các điểm cuối, cấu hình điểm cuối và mô hình không có máy chủ đã tạo:

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

Kết luận

Trong bài đăng này, chúng tôi đã trình bày cách có thể triển khai các mô hình được tạo bằng Autopilot ở cả chế độ tập hợp và chế độ HPO cho các điểm cuối suy luận không có máy chủ. Giải pháp này có thể tăng tốc khả năng sử dụng của bạn và tận dụng các dịch vụ ML được quản lý toàn diện và tiết kiệm chi phí như Autopilot để tạo mô hình nhanh chóng từ dữ liệu thô, sau đó triển khai chúng đến các điểm cuối suy luận không có máy chủ được quản lý hoàn toàn với tính năng tự động thay đổi quy mô tích hợp sẵn để giảm chi phí .

Chúng tôi khuyến khích bạn thử giải pháp này với tập dữ liệu có liên quan đến KPI kinh doanh của bạn. Bạn có thể tham khảo giải pháp được triển khai trong sổ ghi chép Jupyter ở phần Repo GitHub.

Tài liệu tham khảo bổ sung


Lưu ý

Triển khai các mô hình Amazon SageMaker Autopilot cho các điểm cuối suy luận phi máy chủ PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Praveen Chamarthi là Chuyên gia cao cấp về AI/ML của Amazon Web Services. Anh ấy đam mê AI/ML và mọi thứ về AWS. Anh ấy giúp khách hàng trên khắp Châu Mỹ mở rộng quy mô, đổi mới và vận hành khối lượng công việc ML một cách hiệu quả trên AWS. Khi rảnh rỗi, Praveen thích đọc sách và xem phim khoa học viễn tưởng.

Dấu thời gian:

Thêm từ Học máy AWS