DeepAR 추론 형식 - 아마존 SageMaker

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

DeepAR 추론 형식

DeepAR JSON 요청 형식

모델의 엔드포인트를 사용하여 교육된 모델을 쿼리합니다. 엔드포인트는 다음 JSON 요청 형식을 취합니다.

요청에서 instances 필드는 모델이 예측해야 하는 시계열과 일치합니다.

범주를 사용하여 모델을 훈련한 경우 각 인스턴스에 cat을 제공해야 합니다. cat 필드 없이 모델을 훈련한 경우에는 해당 필드가 누락된 것입니다.

모델이 사용자 지정 요인(feature) 시계열(dynamic_feat)을 사용하여 훈련된 경우 각 인스턴스에 대해 동일한 수의 dynamic_feat 값을 제공해야 합니다. 각 값의 길이는 length(target) + prediction_length로 지정된 길이여야 하는데, 여기서 마지막 prediction_length 값은 예측할 미래의 시점에 해당합니다. 사용자 지정 요인(feature) 시계열을 사용하지 않고 모델을 훈련한 경우에는 요청에 이 필드를 포함하면 안 됩니다.

{ "instances": [ { "start": "2009-11-01 00:00:00", "target": [4.0, 10.0, "NaN", 100.0, 113.0], "cat": [0, 1], "dynamic_feat": [[1.0, 1.1, 2.1, 0.5, 3.1, 4.1, 1.2, 5.0, ...]] }, { "start": "2012-01-30", "target": [1.0], "cat": [2, 1], "dynamic_feat": [[2.0, 3.1, 4.5, 1.5, 1.8, 3.2, 0.1, 3.0, ...]] }, { "start": "1999-01-30", "target": [2.0, 1.0], "cat": [1, 3], "dynamic_feat": [[1.0, 0.1, -2.5, 0.3, 2.0, -1.2, -0.1, -3.0, ...]] } ], "configuration": { "num_samples": 50, "output_types": ["mean", "quantiles", "samples"], "quantiles": ["0.5", "0.9"] } }

configuration 필드는 선택적입니다. configuration.num_samples는 중앙값 및 분위를 예측하기 위해 모델에서 생성하는 샘플 경로의 수를 설정하고, configuration.output_types는 요청에서 반환할 정보를 설명합니다. 유효 값은 "mean", "quantiles""samples"입니다. "quantiles"를 지정한 경우 configuration.quantiles의 각 분위 값은 시계열로 반환됩니다. "samples"를 지정한 경우 모델은 또한 다른 출력을 계산하는 데 사용되는 원시 샘플을 반환합니다.

DeepAR JSON 응답 형식

다음은 응답 형식으로, [...]는 어레이의 수입니다.

{ "predictions": [ { "quantiles": { "0.9": [...], "0.5": [...] }, "samples": [...], "mean": [...] }, { "quantiles": { "0.9": [...], "0.5": [...] }, "samples": [...], "mean": [...] }, { "quantiles": { "0.9": [...], "0.5": [...] }, "samples": [...], "mean": [...] } ] }

DeepAR의 응답 제한 시간은 60초입니다. 단일 요청에서 여러 시계열을 전달하는 경우에는 예상이 순차적으로 생성됩니다. 모델 크기에 따라 각 시계열에 대한 예상에는 일반적으로 약 300~1000밀리초 이상이 걸리기 때문에 단일 요청에서 너무 많은 시계열을 전달하면 시간 초과가 발생할 수 있습니다. 따라서 요청당 가급적 적은 수의 시계열을 보내고 대신 요청 횟수를 늘리는 것이 더 낫습니다. DeepAR 알고리즘은 인스턴스당 여러 작업자를 사용하기 때문에 동시에 여러 요청을 보내면 처리량을 훨씬 더 높일 수 있습니다.

CPU당 충분한 메모리가 있는 경우 기본적으로 DeepAR에서는 추론을 위해 CPU당 작업자 하나를 사용합니다. 모델이 큰데 각 CPU에 모델을 실행할 충분한 메모리가 없는 경우 작업자의 수가 줄어듭니다. 추론에 사용되는 작업자 수는 환경 변수 MODEL_SERVER_WORKERS을(를) 사용하여 덮어쓸 수 있습니다. 예를 들어, SageMaker CreateModel API를 호출할 때 MODEL_SERVER_WORKERS=1을(를) 설정합니다.

DeepAR 알고리즘과 배치 변환

DeepAR 예측은 JSON Lines 형식을 사용하여 데이터에서 배치 변환을 통해 추론을 얻을 수 있도록 지원합니다. 이 형식에서 각 레코드는 단일 행의 JSON 객체로 표현되며 행은 줄 바꿈 문자로 구분됩니다. 이 형식은 모델 훈련에 사용되는 JSON Lines 형식과 동일합니다. 자세한 내용은 DeepAR 알고리즘을 위한 입력/출력 인터페이스을 참조하세요. 예:

{"start": "2009-11-01 00:00:00", "target": [4.3, "NaN", 5.1, ...], "cat": [0, 1], "dynamic_feat": [[1.1, 1.2, 0.5, ..]]} {"start": "2012-01-30 00:00:00", "target": [1.0, -5.0, ...], "cat": [2, 3], "dynamic_feat": [[1.1, 2.05, ...]]} {"start": "1999-01-30 00:00:00", "target": [2.0, 1.0], "cat": [1, 4], "dynamic_feat": [[1.3, 0.4]]}
참고

CreateTransformJob을 사용하여 변환 작업을 생성할 경우에는 기본값이 현재 실행 시간 오류를 일으키므로 BatchStrategy 값을 SingleRecord로 설정하고 TransformInput 구성의 SplitType 값을 Line으로 설정합니다.

호스팅 엔드포인트 추론 형식과 유사하게 다음과 같은 두 가지 경우에 해당하면 각 인스턴스의 catdynamic_feat 필드가 필요합니다.

  • 모델이 catdynamic_feat 필드가 모두 포함된 데이터 세트에 대해 훈련된 경우

  • 훈련 작업에 사용된 해당하는 cardinalitynum_dynamic_feat 값이 "".으로 설정되지 않은 경우

호스팅 엔드포인트 추론과 달리 구성 필드는 환경 변수 DEEPAR_INFERENCE_CONFIG를 사용하여 전체 배치 추론 작업에 대해 한 번만 설정됩니다. CreateTransformJob API를 호출하여 모델이 생성되는 경우에는 DEEPAR_INFERENCE_CONFIG의 값을 전달할 수 있습니다. 컨테이너 환경에 DEEPAR_INFERENCE_CONFIG가 없으면 추론 컨테이너는 다음 기본값을 사용합니다.

{ "num_samples": 100, "output_types": ["mean", "quantiles"], "quantiles": ["0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9"] }

출력은 역시 JSON Lines 형식이고, 각 행은 예측 하나에 해당하고, 순서는 해당하는 입력 파일 내 인스턴스 순서와 동일합니다. 예측은 온라인 추론 모드에서 응답으로 반환되는 객체와 동일한 객체로 인코딩됩니다. 예:

{ "quantiles": { "0.1": [...], "0.2": [...] }, "samples": [...], "mean": [...] }

SageMaker CreateTransformJobTransformInput 구성에서 요청 클라이언트는 AssembleWith 값을 Line(으)로 명시적으로 설정해야 합니다. 기본값 None은(는) 모든 JSON 객체를 같은 줄에 연결합니다.

예를 들어 다음은 사용자 지정 DEEPAR_INFERENCE_CONFIG을(를) 사용하는 DeepAR 작업에 대한 SageMaker CreateTransformJob 요청입니다.

{ "BatchStrategy": "SingleRecord", "Environment": { "DEEPAR_INFERENCE_CONFIG" : "{ \"num_samples\": 200, \"output_types\": [\"mean\"] }", ... }, "TransformInput": { "SplitType": "Line", ... }, "TransformOutput": { "AssembleWith": "Line", ... }, ... }