Buat Endpoint Inferensi Asinkron - Amazon SageMaker

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Buat Endpoint Inferensi Asinkron

Buat titik akhir asinkron dengan cara yang sama seperti Anda membuat titik akhir menggunakan layanan hosting: SageMaker

  • Buat model SageMaker denganCreateModel.

  • Buat konfigurasi titik akhir denganCreateEndpointConfig.

  • Buat titik akhir HTTPS denganCreateEndpoint.

Untuk membuat titik akhir, pertama-tama Anda membuat model dengan CreateModel, di mana Anda menunjuk ke artefak model dan jalur registri Docker (Gambar). Anda kemudian membuat konfigurasi menggunakan CreateEndpointConfigtempat Anda menentukan satu atau beberapa model yang dibuat menggunakan CreateModel API untuk disebarkan dan sumber daya yang SageMaker ingin Anda sediakan. Buat titik akhir Anda dengan CreateEndpointmenggunakan konfigurasi titik akhir yang ditentukan dalam permintaan. Anda dapat memperbarui titik akhir asinkron dengan API. UpdateEndpoint Kirim dan terima permintaan inferensi dari model yang dihosting di titik akhir dengan. InvokeEndpointAsync Anda dapat menghapus titik akhir Anda dengan DeleteEndpointAPI.

Untuk daftar lengkap Gambar yang tersedia, lihat SageMaker Gambar Deep Learning Containers yang Tersedia. Lihat Gunakan kode inferensi Anda sendiri untuk informasi tentang cara membuat gambar Docker Anda.

Buat Model

Contoh berikut menunjukkan cara membuat model menggunakan AWS SDK for Python (Boto3). Beberapa baris pertama mendefinisikan:

  • sagemaker_client: Objek SageMaker klien tingkat rendah yang memudahkan untuk mengirim dan menerima permintaan ke AWS layanan.

  • sagemaker_role: Variabel string dengan peran SageMaker IAM Amazon Resource Name (ARN).

  • aws_region: Variabel string dengan nama AWS wilayah Anda.

import boto3 # Specify your AWS Region aws_region='<aws_region>' # Create a low-level SageMaker service client. sagemaker_client = boto3.client('sagemaker', region_name=aws_region) # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<account>:role/*"

Selanjutnya, tentukan lokasi model pra-terlatih yang disimpan di Amazon S3. Dalam contoh ini, kami menggunakan model XGBoost pra-terlatih bernama. demo-xgboost-model.tar.gz URI Amazon S3 lengkap disimpan dalam variabel string: model_url

#Create a variable w/ the model S3 URI s3_bucket = '<your-bucket-name>' # Provide the name of your S3 bucket bucket_prefix='saved_models' model_s3_key = f"{bucket_prefix}/demo-xgboost-model.tar.gz" #Specify S3 bucket w/ model model_url = f"s3://{s3_bucket}/{model_s3_key}"

Tentukan wadah utama. Untuk wadah utama, Anda menentukan image Docker yang berisi kode inferensi, artefak (dari pelatihan sebelumnya), dan peta lingkungan khusus yang digunakan kode inferensi saat Anda menerapkan model untuk prediksi.

Dalam contoh ini, kami menentukan gambar kontainer algoritma bawaan XGBoost:

from sagemaker import image_uris # Specify an AWS container image. container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')

Buat model di Amazon SageMaker denganCreateModel. Tentukan hal berikut:

  • ModelName: Nama untuk model Anda (dalam contoh ini disimpan sebagai variabel string yang disebutmodel_name).

  • ExecutionRoleArn: Nama Sumber Daya Amazon (ARN) dari peran IAM yang SageMaker dapat diasumsikan Amazon untuk mengakses artefak model dan gambar Docker untuk penerapan pada instance komputasi HTML atau untuk pekerjaan transformasi batch.

  • PrimaryContainer: Lokasi gambar Docker utama yang berisi kode inferensi, artefak terkait, dan peta lingkungan khusus yang digunakan kode inferensi saat model diterapkan untuk prediksi.

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, })

Lihat CreateModeldeskripsi di Panduan Referensi SageMaker API untuk daftar lengkap parameter API.

Jika Anda menggunakan wadah yang SageMaker disediakan, Anda dapat meningkatkan batas waktu server model dan ukuran payload dari nilai default ke maksimum yang didukung kerangka kerja dengan menyetel variabel lingkungan di langkah ini. Anda mungkin tidak dapat memanfaatkan batas waktu maksimum dan ukuran payload yang didukung Asynchronous Inference jika Anda tidak secara eksplisit mengatur variabel-variabel ini. Contoh berikut menunjukkan bagaimana Anda dapat mengatur variabel lingkungan untuk wadah PyTorch Inferensi berdasarkan TorchServe.

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, 'Environment': { 'TS_MAX_REQUEST_SIZE': '100000000', 'TS_MAX_RESPONSE_SIZE': '100000000', 'TS_DEFAULT_RESPONSE_TIMEOUT': '1000' }, })

Setelah Anda selesai membuat endpoint Anda, Anda harus menguji apakah Anda telah mengatur variabel lingkungan dengan benar dengan mencetaknya dari inference.py skrip Anda. Tabel berikut mencantumkan variabel lingkungan untuk beberapa kerangka kerja yang dapat Anda atur untuk mengubah nilai default.

Kerangka Kerja Variabel-variabel lingkungan

PyTorch 1.8 (berdasarkan TorchServe)

'TS_MAX_REQUEST_SIZE': '100000000'

'TS_MAX_RESPONSE_SIZE': '100000000'

'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'

PyTorch 1.4 (berdasarkan MMS)

'MMS_MAX_REQUEST_SIZE': '1000000000'

'MMS_MAX_RESPONSE_SIZE': '1000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

HuggingFace Kontainer Inferensi (berdasarkan MMS)

'MMS_MAX_REQUEST_SIZE': '2000000000'

'MMS_MAX_RESPONSE_SIZE': '2000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

Buat Konfigurasi Endpoint

Setelah Anda memiliki model, buat konfigurasi titik akhir dengan CreateEndpointConfig. SageMaker Layanan hosting Amazon menggunakan konfigurasi ini untuk menyebarkan model. Dalam konfigurasi, Anda mengidentifikasi satu atau beberapa model, yang dibuat menggunakan with CreateModel, untuk menyebarkan sumber daya yang SageMaker ingin disediakan Amazon. Tentukan AsyncInferenceConfig objek dan berikan lokasi keluaran Amazon S3 untuk. OutputConfig Anda dapat secara opsional menentukan topik Amazon SNS untuk mengirim pemberitahuan tentang hasil prediksi. Untuk informasi selengkapnya tentang topik Amazon SNS, lihat Mengonfigurasi Amazon SNS.

Contoh berikut menunjukkan cara membuat konfigurasi endpoint menggunakan AWS SDK for Python (Boto3):

import datetime from time import gmtime, strftime # Create an endpoint config name. Here we create one based on the date # so it we can search endpoints based on creation time. endpoint_config_name = f"XGBoostEndpointConfig-{strftime('%Y-%m-%d-%H-%M-%S', gmtime())}" # The name of the model that you want to host. This is the name that you specified when creating the model. model_name='<The_name_of_your_model>' create_endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, # You will specify this name in a CreateEndpoint request. # List of ProductionVariant objects, one for each model that you want to host at this endpoint. ProductionVariants=[ { "VariantName": "variant1", # The name of the production variant. "ModelName": model_name, "InstanceType": "ml.m5.xlarge", # Specify the compute instance type. "InitialInstanceCount": 1 # Number of instances to launch initially. } ], AsyncInferenceConfig={ "OutputConfig": { # Location to upload response outputs when no location is provided in the request. "S3OutputPath": f"s3://{s3_bucket}/{bucket_prefix}/output" # (Optional) specify Amazon SNS topics "NotificationConfig": { "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name", "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name", } }, "ClientConfig": { # (Optional) Specify the max number of inflight invocations per instance # If no value is provided, Amazon SageMaker will choose an optimal value for you "MaxConcurrentInvocationsPerInstance": 4 } } ) print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

Dalam contoh yang disebutkan di atas, Anda menentukan kunci berikut OutputConfig untuk AsyncInferenceConfig bidang:

  • S3OutputPath: Lokasi untuk mengunggah output respons ketika tidak ada lokasi yang disediakan dalam permintaan.

  • NotificationConfig: (Opsional) Topik SNS yang memposting pemberitahuan kepada Anda saat permintaan inferensi berhasil (SuccessTopic) atau jika gagal (ErrorTopic).

Anda juga dapat menentukan argumen opsional berikut untuk ClientConfig di AsyncInferenceConfig bidang:

  • MaxConcurrentInvocationsPerInstance: (Opsional) Jumlah maksimum permintaan bersamaan yang dikirim oleh SageMaker klien ke wadah model.

Buat Endpoint

Setelah Anda memiliki konfigurasi model dan titik akhir, gunakan CreateEndpointAPI untuk membuat titik akhir Anda. Nama titik akhir harus unik dalam AWS Wilayah di AWS akun Anda.

Berikut ini membuat endpoint menggunakan konfigurasi endpoint yang ditentukan dalam permintaan. Amazon SageMaker menggunakan titik akhir untuk menyediakan sumber daya dan menerapkan model.

# The name of the endpoint.The name must be unique within an AWS Region in your AWS account. endpoint_name = '<endpoint-name>' # The name of the endpoint configuration associated with this endpoint. endpoint_config_name='<endpoint-config-name>' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name)

Saat Anda memanggil CreateEndpoint API, Inferensi SageMaker Asinkron Amazon mengirimkan pemberitahuan pengujian untuk memeriksa apakah Anda telah mengonfigurasi topik Amazon SNS. Inferensi SageMaker Asinkron Amazon juga mengirimkan pemberitahuan pengujian setelah panggilan ke dan. UpdateEndpoint UpdateEndpointWeightsAndCapacities Ini memungkinkan Anda SageMaker memeriksa apakah Anda memiliki izin yang diperlukan. Pemberitahuan dapat diabaikan begitu saja. Pemberitahuan pengujian memiliki formulir berikut:

{ "eventVersion":"1.0", "eventSource":"aws:sagemaker", "eventName":"TestNotification" }