

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

# 추론을 위한 공통 데이터 형식
<a name="cdf-inference"></a>

Amazon SageMaker AI 알고리즘은 온라인 및 미니 배치 예측을 가져오는 데 사용되는 HTTP 페이로드에 대한 여러 가지 MIME 유형을 수락 및 프로덕션합니다. 추론을 실행하기 전에 여러 AWS 서비스를 사용하여 레코드를 변환하거나 사전 처리할 수 있습니다. 최소한 다음에 대한 데이터를 변환해야 합니다.
+ 추론 요청 직렬화(사용자가 처리) 
+ 추론 요청 역직렬화(알고리즘이 처리) 
+ 추론 응답 직렬화(알고리즘이 처리) 
+ 추론 응답 역직렬화(사용자가 처리) 

**Topics**
+ [추론 요청 직렬화를 위한 데이터 변환](#ir-serialization)
+ [추론 응답 역직렬화를 위한 데이터 변환](#ir-deserialization)
+ [모든 알고리즘에 대한 공통 요청 형식](#common-in-formats)
+ [기본 제공 알고리즘에서 배치 변환 사용](#cm-batch)

## 추론 요청 직렬화를 위한 데이터 변환
<a name="ir-serialization"></a>

Amazon SageMaker AI 알고리즘 추론 요청을 위한 콘텐츠 유형 옵션에는 `text/csv`, `application/json` 및 `application/x-recordio-protobuf`가 있습니다. 이러한 유형을 모두 지원하지 않는 알고리즘은 다른 유형을 지원할 수 있습니다. 예를 들어 XGBoost는 이 목록에서 `text/csv`만 지원하지만 `text/libsvm`도 지원합니다.

`text/csv`에서 `invoke_endpoint`에 대한 Body 인수의 값은 각 특성에 대한 값을 쉼표로 구분하는 문자열이어야 합니다. 예를 들어 4가지 특성이 포함된 모델에 대한 레코드는 `1.5,16.0,14,23.0`과 유사할 수 있습니다. 훈련 데이터에서 수행되는 모든 변형은 또한 추론을 얻기 전 데이터에서 수행되어야 합니다. 특성의 순서가 중요하고, 변경되어서는 안 됩니다.

`application/json`은 더욱 유연하고 개발자가 애플리케이션에서 사용할 수 있는 여러 형식을 제공합니다. 상위 수준의 JavaScript에서 페이로드는 다음과 같은 모습일 수 있습니다.

```
let request = {
  // Instances might contain multiple rows that predictions are sought for.
  "instances": [
    {
      // Request and algorithm specific inference parameters.
      "configuration": {},
      // Data in the specific format required by the algorithm.
      "data": {
         "<field name>": dataElement
       }
    }
  ]
}
```

`dataElement` 지정에 대해 다음과 같은 옵션이 있습니다.

**프로토콜 버퍼 동등**

```
// Has the same format as the protocol buffers implementation described for training.
let dataElement = {
  "keys": [],
  "values": [],
  "shape": []
}
```

**단순한 숫자 벡터**

```
// An array containing numeric values is treated as an instance containing a
// single dense vector.
let dataElement = [1.5, 16.0, 14.0, 23.0]

// It will be converted to the following representation by the SDK.
let converted = {
  "features": {
    "values": dataElement
  }
}
```

**여러 레코드**

```
let request = {
  "instances": [
    // First instance.
    {
      "features": [ 1.5, 16.0, 14.0, 23.0 ]
    },
    // Second instance.
    {
      "features": [ -2.0, 100.2, 15.2, 9.2 ]
    }
  ]
}
```

## 추론 응답 역직렬화를 위한 데이터 변환
<a name="ir-deserialization"></a>

Amazon SageMaker AI 알고리즘은 여러 레이아웃에서 JSON을 반환합니다. 상위 수준에서 구조는 다음과 같습니다.

```
let response = {
  "predictions": [{
    // Fields in the response object are defined on a per algorithm-basis.
  }]
}
```

알고리즘 간 다른 예측이 포함된 필드입니다. 다음은 k-means 알고리즘 출력의 예제입니다.

**단일 레코드 추론** 

```
let response = {
  "predictions": [{
    "closest_cluster": 5,
    "distance_to_cluster": 36.5
  }]
}
```

**다중 레코드 추론**

```
let response = {
  "predictions": [
    // First instance prediction.
    {
      "closest_cluster": 5,
      "distance_to_cluster": 36.5
    },
    // Second instance prediction.
    {
      "closest_cluster": 2,
      "distance_to_cluster": 90.3
    }
  ]
}
```

**protobuf 입력이 포함된 다중 레코드 추론**

```
{
  "features": [],
  "label": {
    "closest_cluster": {
      "values": [ 5.0 ] // e.g. the closest centroid/cluster was 1.0
    },
    "distance_to_cluster": {
      "values": [ 36.5 ]
    }
  },
  "uid": "abc123",
  "metadata": "{ "created_at": '2017-06-03' }"
}
```

또한 SageMaker AI 알고리즘은 레코드당 응답 콘텐츠가 JSON 형식과 동일한 JSONLINES 형식을 지원합니다. 멀티 레코드 구조는 줄 바꿈 문자로 구분되는 레코드당 응답 객체의 모음입니다. 입력 데이터 포인트 2개에 대한 기본 제공 KMeans 알고리즘의 응답 콘텐츠는 다음과 같습니다.

```
{"distance_to_cluster": 23.40593910217285, "closest_cluster": 0.0}
{"distance_to_cluster": 27.250282287597656, "closest_cluster": 0.0}
```

배치 변환을 실행하는 중에는 `CreateTransformJobRequest`의 `Accept` 필드를 `application/jsonlines`로 설정하여 `jsonlines` 응답 유형을 사용하는 것이 좋습니다.

## 모든 알고리즘에 대한 공통 요청 형식
<a name="common-in-formats"></a>

대부분의 알고리즘은 다음과 같은 여러 가지 추론 요청 형식을 사용합니다.

### JSON 요청 형식
<a name="cm-json"></a>

**콘텐츠 유형:** application/JSON

**고밀도 형식**

```
let request =   {
    "instances":    [
        {
            "features": [1.5, 16.0, 14.0, 23.0]
        }
    ]
}


let request =   {
    "instances":    [
        {
            "data": {
                "features": {
                    "values": [ 1.5, 16.0, 14.0, 23.0]
                }
            }
        }
    ]
}
```

**저밀도 형식**

```
{
	"instances": [
		{"data": {"features": {
					"keys": [26, 182, 232, 243, 431],
					"shape": [2000],
					"values": [1, 1, 1, 4, 1]
				}
			}
		},
		{"data": {"features": {
					"keys": [0, 182, 232, 243, 431],
					"shape": [2000],
					"values": [13, 1, 1, 4, 1]
				}
			}
		},
	]
}
```

### JSONLINES 요청 형식
<a name="cm-jsonlines"></a>

**콘텐츠 유형:** application/JSONLINES

**고밀도 형식**

밀집 형식의 단일 레코드는 다음 중 하나로 표현될 수 있습니다.

```
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

또는 다음과 같습니다.

```
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
```

**저밀도 형식**

희소 형식의 단일 레코드는 다음 중 하나로 표현될 수 있습니다.

```
{"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }
```

멀티 레코드는 줄 바꿈 문자로 구분되는 위의 단일 레코드 표현이 연결된 형태로 표현됩니다.

```
{"data": {"features": { "keys": [0, 1, 3], "shape": [4], "values": [1, 4, 1] } } }
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

### CSV 요청 형식
<a name="cm-csv"></a>

**콘텐츠 유형:** text/CSV; label\$1size=0

**참고**  
Factorization Machine에 대해 CSV 지원을 이용할 수 없습니다.

### RECORDIO 요청 형식
<a name="cm-recordio"></a>

콘텐츠 유형: application/x-recordio-protobuf

## 기본 제공 알고리즘에서 배치 변환 사용
<a name="cm-batch"></a>

알고리즘에서 지원하는 경우 배치 변환을 실행하는 동안에는 JSON 대신 JSONLINES 응답 유형을 사용하는 것이 좋습니다. 이렇게 하려면 `CreateTransformJobRequest`의 `Accept` 필드를 `application/jsonlines`로 설정합니다.

변환 작업을 생성할 때 `SplitType`은 입력 데이터의 `ContentType`에 따라 설정해야 합니다. 마찬가지로, `CreateTransformJobRequest`의 `Accept` 필드에 따라 `AssembleWith`를 설정해야 합니다. 다음 테이블을 사용하여 이러한 필드를 설정합니다.


| ContentType | 권장 SplitType | 
| --- | --- | 
| application/x-recordio-protobuf | RecordIO | 
| text/csv | Line | 
| application/jsonlines | Line | 
| application/json | None | 
| application/x-image | None | 
| image/\$1 | None | 


| Accept | 권장 AssembleWith | 
| --- | --- | 
| application/x-recordio-protobuf | None | 
| application/json | None | 
| application/jsonlines | Line | 

특정 알고리즘의 응답 형식에 자세한 정보는 다음을 참조하세요.
+ [DeepAR 추론 형식](deepar-in-formats.md)
+ [Factorization Machine 응답 형식](fm-in-formats.md)
+ [IP Insights 추론 데이터 형식](ip-insights-inference-data-formats.md)
+ [K-Means 응답 형식](km-in-formats.md)
+ [k-NN 요청 및 응답 형식](kNN-inference-formats.md)
+ [선형 학습자 응답 형식](LL-in-formats.md)
+ [NTM 응답 형식](ntm-in-formats.md)
+ [Object2Vec 추론을 위한 데이터 형식](object2vec-inference-formats.md)
+ [Object2Vec에 대한 인코더 임베딩](object2vec-encoder-embeddings.md)
+ [PCA 응답 형식](PCA-in-formats.md)
+ [RCF 응답 형식](rcf-in-formats.md)