Menangkap data dari titik akhir waktu nyata - Amazon SageMaker

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

Menangkap data dari titik akhir waktu nyata

catatan

Untuk mencegah dampak pada permintaan inferensi, Data Capture berhenti menangkap permintaan pada tingkat penggunaan disk yang tinggi. Disarankan agar penggunaan disk Anda tetap di bawah 75% untuk memastikan pengambilan data terus menangkap permintaan.

Untuk menangkap data untuk titik akhir real-time Anda, Anda harus menerapkan model menggunakan SageMaker layanan hosting. Ini mengharuskan Anda membuat SageMaker model, menentukan konfigurasi titik akhir, dan membuat titik HTTPS akhir.

Langkah-langkah yang diperlukan untuk mengaktifkan pengambilan data serupa apakah Anda menggunakan AWS SDK for Python (Boto) atau SageMaker PythonSDK. Jika Anda menggunakan AWS SDK, tentukan DataCaptureConfigkamus, bersama dengan bidang wajib, dalam CreateEndpointConfigmetode untuk mengaktifkan pengambilan data. Jika Anda menggunakan SageMaker PythonSDK, impor DataCaptureConfigKelas dan inisialisasi instance dari kelas ini. Kemudian, berikan objek ini ke DataCaptureConfig parameter dalam sagemaker.model.Model.deploy() metode.

Untuk menggunakan cuplikan kode yang sedang berjalan, ganti italicized placeholder text dalam kode contoh dengan informasi Anda sendiri.

Cara mengaktifkan pengambilan data

Tentukan konfigurasi pengambilan data. Anda dapat menangkap payload permintaan, payload respons, atau keduanya dengan konfigurasi ini. Cuplikan kode yang sedang berlangsung menunjukkan cara mengaktifkan pengambilan data menggunakan dan AWS SDK for Python (Boto) Python. SageMaker SDK

catatan

Anda tidak perlu menggunakan Model Monitor untuk menangkap permintaan atau muatan respons.

AWS SDK for Python (Boto)

Konfigurasikan data yang ingin Anda tangkap dengan DataCaptureConfigkamus saat Anda membuat titik akhir menggunakan CreateEndpointConfig metode ini. Setel EnableCapture ke nilai boolean True. Selain itu, berikan parameter wajib berikut:

  • EndpointConfigName: nama konfigurasi titik akhir Anda. Anda akan menggunakan nama ini saat mengajukan CreateEndpoint permintaan.

  • ProductionVariants: daftar model yang ingin Anda host di titik akhir ini. Tentukan tipe data kamus untuk setiap model.

  • DataCaptureConfig: tipe data kamus tempat Anda menentukan nilai integer yang sesuai dengan persentase awal data untuk sampel (InitialSamplingPercentage), Amazon URI S3 tempat Anda ingin menyimpan data yang diambil, dan daftar opsi pengambilan CaptureOptions (). Tentukan salah satu Input atau Output untuk CaptureMode dalam CaptureOptions daftar.

Anda dapat secara opsional menentukan bagaimana SageMaker seharusnya menyandikan data yang diambil dengan meneruskan argumen pasangan nilai kunci ke kamus. CaptureContentTypeHeader

# Create an endpoint config name. endpoint_config_name = '<endpoint-config-name>' # The name of the production variant. variant_name = '<name-of-production-variant>' # 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>' instance_type = '<instance-type>' #instance_type='ml.m5.xlarge' # Example # Number of instances to launch initially. initial_instance_count = <integer> # Sampling percentage. Choose an integer value between 0 and 100 initial_sampling_percentage = <integer> # The S3 URI containing the captured data s3_capture_upload_path = 's3://<bucket-name>/<data_capture_s3_key>' # Specify either Input, Output, or both capture_modes = [ "Input", "Output" ] #capture_mode = [ "Input"] # Example - If you want to capture input only endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, # List of ProductionVariant objects, one for each model that you want to host at this endpoint. ProductionVariants=[ { "VariantName": variant_name, "ModelName": model_name, "InstanceType": instance_type, # Specify the compute instance type. "InitialInstanceCount": initial_instance_count # Number of instances to launch initially. } ], DataCaptureConfig= { 'EnableCapture': True, # Whether data should be captured or not. 'InitialSamplingPercentage' : initial_sampling_percentage, 'DestinationS3Uri': s3_capture_upload_path, 'CaptureOptions': [{"CaptureMode" : capture_mode} for capture_mode in capture_modes] # Example - Use list comprehension to capture both Input and Output } )

Untuk informasi selengkapnya tentang opsi konfigurasi titik akhir lainnya, lihat CreateEndpointConfigAPIdi Panduan API Referensi SageMaker Layanan Amazon.

SageMaker Python SDK

Impor DataCaptureConfig Kelas dari modul sagemaker.model_monitor. Aktifkan pengambilan data dengan menyetel EnableCapture ke nilai True boolean.

Secara opsional memberikan argumen untuk parameter berikut:

  • SamplingPercentage: nilai integer yang sesuai dengan persentase data untuk sampel. Jika Anda tidak memberikan persentase sampling, SageMaker akan mengambil sampel default 20 (20%) dari data Anda.

  • DestinationS3Uri: Amazon S3 URI SageMaker akan digunakan untuk menyimpan data yang diambil. Jika Anda tidak menyediakannya, SageMaker akan menyimpan data yang ditangkap di"s3://<default-session-bucket>/ model-monitor/data-capture".

from sagemaker.model_monitor import DataCaptureConfig # Set to True to enable data capture enable_capture = True # Optional - Sampling percentage. Choose an integer value between 0 and 100 sampling_percentage = <int> # sampling_percentage = 30 # Example 30% # Optional - The S3 URI of stored captured-data location s3_capture_upload_path = 's3://<bucket-name>/<data_capture_s3_key>' # Specify either Input, Output or both. capture_modes = ['REQUEST','RESPONSE'] # In this example, we specify both # capture_mode = ['REQUEST'] # Example - If you want to only capture input. # Configuration object passed in when deploying Models to SM endpoints data_capture_config = DataCaptureConfig( enable_capture = enable_capture, sampling_percentage = sampling_percentage, # Optional destination_s3_uri = s3_capture_upload_path, # Optional capture_options = ["REQUEST", "RESPONSE"], )

Terapkan model Anda

Terapkan model Anda dan buat HTTPS titik akhir dengan DataCapture diaktifkan.

AWS SDK for Python (Boto3)

Berikan konfigurasi titik akhir ke SageMaker. Layanan meluncurkan instance komputasi ML dan menerapkan model atau model seperti yang ditentukan dalam konfigurasi.

Setelah Anda memiliki konfigurasi model dan titik akhir, gunakan CreateEndpointAPIuntuk 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)

Untuk informasi lebih lanjut, lihat CreateEndpointAPI.

SageMaker Python SDK

Tentukan nama untuk titik akhir Anda. Langkah ini bersifat opsional. Jika Anda tidak memberikan satu, SageMaker akan membuat nama yang unik untuk Anda:

from datetime import datetime endpoint_name = f"DEMO-{datetime.utcnow():%Y-%m-%d-%H%M}" print("EndpointName =", endpoint_name)

Terapkan model Anda ke HTTPS titik akhir real-time dengan metode bawaan deploy() objek Model. Berikan nama jenis EC2 instans Amazon untuk menerapkan model ini di instance_type bidang bersama dengan jumlah awal instance untuk menjalankan titik akhir pada bidang: initial_instance_count

initial_instance_count=<integer> # initial_instance_count=1 # Example instance_type='<instance-type>' # instance_type='ml.m4.xlarge' # Example # Uncomment if you did not define this variable in the previous step #data_capture_config = <name-of-data-capture-configuration> model.deploy( initial_instance_count=initial_instance_count, instance_type=instance_type, endpoint_name=endpoint_name, data_capture_config=data_capture_config )

Lihat Data yang Ditangkap

Buat objek prediktor dari SageMaker SDK Python Predictor Class. Anda akan menggunakan objek yang dikembalikan oleh Predictor Kelas untuk memanggil endpoint Anda di langkah masa depan. Berikan nama titik akhir Anda (didefinisikan sebelumnya sebagaiendpoint_name), bersama dengan objek serializer dan deserializer untuk serializer dan deserializer, masing-masing. Untuk informasi tentang jenis serializer, lihat Kelas Serializers di Python. SageMaker SDK

from sagemaker.predictor import Predictor from sagemaker.serializers import <Serializer> from sagemaker.deserializers import <Deserializers> predictor = Predictor(endpoint_name=endpoint_name, serializer = <Serializer_Class>, deserializer = <Deserializer_Class>) # Example #from sagemaker.predictor import Predictor #from sagemaker.serializers import CSVSerializer #from sagemaker.deserializers import JSONDeserializer #predictor = Predictor(endpoint_name=endpoint_name, # serializer=CSVSerializer(), # deserializer=JSONDeserializer())

Dalam skenario contoh kode lanjutan, kami memanggil titik akhir dengan data validasi sampel yang telah kami simpan secara lokal dalam file bernama. CSV validation_with_predictions Set validasi sampel kami berisi label untuk setiap masukan.

Beberapa baris pertama dari pernyataan with pertama membuka CSV file set validasi, kemudian membagi setiap baris dalam file dengan karakter koma",", dan kemudian menyimpan dua objek yang dikembalikan ke dalam label dan variabel input_cols. Untuk setiap baris, input (input_cols) diteruskan ke metode Predictor.predict() bawaan objek variabel prediktor (predictor).

Misalkan model mengembalikan probabilitas. Probabilitas berkisar antara nilai integer 0 dan 1.0. Jika probabilitas yang dikembalikan oleh model lebih besar dari 80% (0,8) kami menetapkan prediksi label nilai integer 1. Jika tidak, kita menetapkan prediksi label nilai integer dari 0.

from time import sleep validate_dataset = "validation_with_predictions.csv" # Cut off threshold of 80% cutoff = 0.8 limit = 200 # Need at least 200 samples to compute standard deviations i = 0 with open(f"test_data/{validate_dataset}", "w") as validation_file: validation_file.write("probability,prediction,label\n") # CSV header with open("test_data/validation.csv", "r") as f: for row in f: (label, input_cols) = row.split(",", 1) probability = float(predictor.predict(input_cols)) prediction = "1" if probability > cutoff else "0" baseline_file.write(f"{probability},{prediction},{label}\n") i += 1 if i > limit: break print(".", end="", flush=True) sleep(0.5) print() print("Done!")

Karena Anda mengaktifkan pengambilan data pada langkah sebelumnya, payload permintaan dan respons, bersama dengan beberapa data meta tambahan, disimpan di lokasi Amazon S3 yang Anda tentukan. DataCaptureConfig Pengiriman data pengambilan ke Amazon S3 dapat memerlukan beberapa menit.

Lihat data yang diambil dengan mencantumkan file pengambilan data yang disimpan di Amazon S3. Format jalur Amazon S3 adalah:. s3:///{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename.jsonl

Berharap untuk melihat file yang berbeda dari periode waktu yang berbeda, diatur berdasarkan jam ketika pemanggilan terjadi. Jalankan yang berikut ini untuk mencetak konten file tangkapan tunggal:

print("\n".join(capture_file[-3:-1]))

Ini akan mengembalikan file berformat JSON -line SageMaker tertentu. Berikut ini adalah contoh respons yang diambil dari titik akhir real-time yang kami panggil menggunakan csv/text data:

{"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"69,0,153.7,109,194.0,105,256.1,114,14.1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.0254181120544672","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"} {"captureData":{"endpointInput":{"observedContentType":"text/csv","mode":"INPUT", "data":"94,23,197.1,125,214.5,136,282.2,103,9.5,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1\n", "encoding":"CSV"},"endpointOutput":{"observedContentType":"text/csv; charset=utf-8","mode":"OUTPUT","data":"0.07675473392009735","encoding":"CSV"}}, "eventMetadata":{"eventId":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee","inferenceTime":"2022-02-14T17:25:49Z"},"eventVersion":"0"}

Dalam contoh proses, capture_file objek adalah tipe daftar. Indeks elemen pertama dari daftar untuk melihat permintaan inferensi tunggal.

# The capture_file object is a list. Index the first element to view a single inference request print(json.dumps(json.loads(capture_file[0]), indent=2))

Ini akan mengembalikan respons yang mirip dengan yang berikut ini. Nilai yang dikembalikan akan berbeda berdasarkan konfigurasi titik akhir, SageMaker model, dan data yang diambil:

{ "captureData": { "endpointInput": { "observedContentType": "text/csv", # data MIME type "mode": "INPUT", "data": "50,0,188.9,94,203.9,104,151.8,124,11.6,8,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0\n", "encoding": "CSV" }, "endpointOutput": { "observedContentType": "text/csv; charset=character-encoding", "mode": "OUTPUT", "data": "0.023190177977085114", "encoding": "CSV" } }, "eventMetadata": { "eventId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "inferenceTime": "2022-02-14T17:25:06Z" }, "eventVersion": "0" }