

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
<a name="model-monitor-data-capture-endpoint"></a>

**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 layanan hosting SageMaker AI. Ini mengharuskan Anda membuat model SageMaker AI, menentukan konfigurasi titik akhir, dan membuat titik akhir HTTPS.

Langkah-langkah yang diperlukan untuk mengaktifkan pengambilan data serupa apakah Anda menggunakan AWS SDK for Python (Boto) atau SageMaker Python SDK. Jika Anda menggunakan AWS SDK, tentukan [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)kamus, bersama dengan bidang wajib, dalam [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)metode untuk mengaktifkan pengambilan data. Jika Anda menggunakan SageMaker Python SDK, impor [DataCaptureConfig](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html#sagemaker.model_monitor.data_capture_config.DataCaptureConfig)Kelas 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 kode contoh dengan informasi Anda sendiri. *italicized placeholder text*

## Cara mengaktifkan pengambilan data
<a name="model-monitor-data-capture-defing.title"></a>

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 AI SageMaker Python AWS SDK for Python (Boto) 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 [DataCaptureConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataCaptureConfig.html)kamus 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`), URI Amazon 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 AI harus 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 [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)API di [Panduan Referensi API Layanan Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html).

------
#### [ SageMaker Python SDK ]

Impor `DataCaptureConfig` Kelas dari modul [sagemaker.model\$1monitor](https://sagemaker.readthedocs.io/en/stable/api/inference/model_monitor.html). 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 AI akan mengambil sampel default 20 (20%) data Anda.
+ `DestinationS3Uri`: Amazon S3 URI SageMaker AI akan digunakan untuk menyimpan data yang diambil. Jika Anda tidak menyediakannya, SageMaker AI akan menyimpan data yang diambil`"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
<a name="model-monitor-data-capture-deploy"></a>

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

------
#### [ AWS SDK untuk Python (Boto3) ]

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

Setelah Anda memiliki konfigurasi model dan titik akhir, gunakan [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)API 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 AI 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 selengkapnya, lihat [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)API.

------
#### [ SageMaker Python SDK ]

Tentukan nama untuk titik akhir Anda. Langkah ini bersifat opsional. Jika Anda tidak menyediakannya, SageMaker AI akan membuat nama 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 titik akhir HTTPS real-time dengan metode bawaan `deploy()` objek Model. Berikan nama jenis instans Amazon EC2 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
<a name="model-monitor-data-capture-view"></a>

Buat objek prediktor dari SageMaker Python [SDK](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html) 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 sebagai`endpoint_name`), bersama dengan objek serializer dan deserializer untuk serializer dan deserializer, masing-masing. [Untuk informasi tentang jenis serializer, lihat Kelas [Serializers](https://sagemaker.readthedocs.io/en/stable/api/inference/serializers.html) di AI SageMaker Python SDK.](https://sagemaker.readthedocs.io/en/stable/index.html)

```
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 CSV bernama. `validation_with_predictions` Set validasi sampel kami berisi label untuk setiap masukan.

Beberapa baris pertama dari pernyataan with pertama membuka file CSV set validasi, kemudian membagi setiap baris dalam file dengan karakter koma`","`, dan kemudian menyimpan dua objek yang dikembalikan ke dalam label dan variabel input\$1cols. 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 SageMaker berformat JSON-line khusus AI. 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 yang sedang berlangsung, `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 berikut ini. Nilai yang dikembalikan akan berbeda berdasarkan konfigurasi titik akhir, model SageMaker AI, 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"
}
```