기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
실시간 엔드포인트에서 데이터 캡처
참고
Data Capture는 추론 요청에 영향이 없도록 하기 위해 디스크 사용량이 많은 경우 요청 캡처를 중단합니다. 데이터 캡처가 요청을 계속 캡처하도록 하려면, 디스크 사용률을 75% 미만으로 유지하는 것이 좋습니다.
실시간 엔드포인트의 데이터를 캡처하려면 호스팅 서비스를 사용하여 SageMaker 모델을 배포해야 합니다. 이렇게 하려면 SageMaker 모델을 생성하고, 엔드포인트 구성을 정의하고, HTTPS 엔드포인트를 생성해야 합니다.
데이터 캡처를 활성화하는 데 필요한 단계는 AWS SDK for Python (Boto) 또는 SageMaker Python 를 사용하든 비슷합니다SDK. 를 사용하는 경우 데이터 캡처를 활성화하는 CreateEndpointConfig 메서DataCaptureConfig드 내에서 필수 필드와 함께 사전을 AWS SDK정의합니다. SageMaker Python 를 사용하는 경우 DataCaptureConfigsagemaker.model.Model.deploy()
메서드의 DataCaptureConfig
파라미터에 전달합니다.
이전 코드 조각을 사용하려면 italicized
placeholder text
를 사용자 정보가 포함된 예제 코드에 입력합니다.
데이터 캡처 활성화 방법
데이터 캡처 구성을 지정합니다. 이 구성을 사용하여 요청 페이로드, 응답 페이로드 또는 둘 다를 캡처할 수 있습니다. 이전 코드 코드 조각은 AWS SDK for Python (Boto) 및 Python 을 사용하여 데이터 캡처를 SageMaker 활성화하는 방법을 보여줍니다SDK.
참고
요청 또는 응답 페이로드를 캡처하기 위해 모델 모니터를 사용할 필요는 없습니다.
모델 배포
모델을 배포하고 DataCapture
활성화된 HTTPS 엔드포인트를 생성합니다.
캡처된 데이터 보기
SageMaker Python 예측기 클래스에서 SDK 예측기Predictor
클래스에서 반환된 객체를 사용하여 향후 단계에서 엔드포인트를 호출합니다. 엔드포인트 이름(이전에 endpoint_name
으로 정의됨)을 serializer 및 deserializer용 serializer 및 deserializer 객체와 함께 제공합니다. 직렬화기 유형에 대한 자세한 내용은 SageMaker Python 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())
이전 코드 예제 시나리오에서는 라는 CSV 파일에 로컬로 저장한 샘플 검증 데이터가 포함된 엔드포인트를 호출합니다validation_with_predictions
. 샘플 검증 세트에는 각 입력에 대한 레이블이 포함되어 있습니다.
문이 있는 의 처음 몇 줄은 먼저 검증 세트 CSV 파일을 연 다음 파일 내의 각 행을 쉼표 문자 로 분할","
한 다음 반환된 두 객체를 레이블 및 input_cols 변수에 저장합니다. 각 행에 대해 입력(input_cols
)은 예측 변수(predictor
)의 객체 내장 메서드 Predictor.predict()
로 전달됩니다.
모델이 확률을 반환한다고 가정해 보겠습니다. 확률의 범위는 0~1.0입니다. 모델에서 반환되는 확률이 80%(0.8)보다 큰 경우 예측에 정수 값 레이블 1을 할당합니다. 그렇지 않으면 예측에 정수 값 레이블 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!")
이전 단계에서 데이터 캡처를 활성화했으므로 요청 및 응답 페이로드는 일부 추가 메타데이터와 함께 DataCaptureConfig
에서 지정한 Amazon S3 위치에 저장됩니다. 캡처 데이터를 Amazon S3로 전송하는 데 몇 분이 걸릴 수 있습니다.
캡처된 데이터는 Amazon S3에 저장된 데이터 캡처 파일을 나열하는 방식으로 확인하세요. 해당 Amazon S3 경로의 형식은 s3:///
입니다.{endpoint-name}/{variant-name}/yyyy/mm/dd/hh/filename
.jsonl
호출이 발생한 시간을 기준으로 구성된 서로 다른 기간의 서로 다른 파일을 볼 수 있습니다. 다음을 실행하여 단일 캡처 파일의 내용을 인쇄합니다.
print("\n".join(capture_file[-3:-1]))
이렇게 하면 SageMaker 특정 JSON줄 형식의 파일이 반환됩니다. 다음은 csv/text
데이터를 사용하여 호출한 실시간 엔드포인트에서 가져온 응답 샘플입니다.
{"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"}
진행 예시에서 capture_file
객체는 목록 유형입니다. 목록의 첫 번째 요소를 인덱싱하여 단일 추론 요청을 확인합니다.
# 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))
이는 다음과 비슷한 응답을 반환합니다. 반환되는 값은 엔드포인트 구성, SageMaker 모델 및 캡처된 데이터에 따라 달라집니다.
{ "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" }