

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

# 배치 추론 작업 생성
<a name="creating-batch-inference-job"></a>

 배치 추론 작업을 생성하여 S3에서 배치 입력 데이터를 기반으로 항목 추천을 받습니다. 입력 데이터는 JSON 형식의 사용자 또는 항목(또는 둘 다) 목록일 수 있습니다. Personalize 콘솔, AWS Command Line Interface (AWS CLI) 또는 AWS SDKs.

 배치 추론 작업을 생성할 때 입력 및 출력 위치에 S3 경로를 지정합니다. S3는 접두사를 기반으로 합니다. 입력 데이터 위치에 접두사를 제공하는 경우, Personalize는 해당 접두사와 일치하는 모든 파일을 입력 데이터로 사용합니다. 예를 들어, 사용자가 `s3://amzn-s3-demo-bucket/folderName`을 제공하고 버킷에 경로가 `s3://amzn-s3-demo-bucket/folderName_test`인 폴더가 있는 경우, Personalize는 두 폴더의 모든 파일을 입력 데이터로 사용합니다. 특정 폴더 내의 파일만을 입력 데이터로 사용하려면 S3 경로 끝에 접두사 구분 기호를 붙입니다(예: `/`: `s3://amzn-s3-demo-bucket/folderName/`). S3에서 객체를 구성하는 방법에 대한 자세한 내용은 [객체 구성, 나열 및 객체 작업](https://docs.aws.amazon.com/AmazonS3/latest/userguide/organizing-objects.html)을 참조하세요.

 권한 요구 사항, 권장 점수, 입력 데이터 준비 및 가져오기 등 Personalize의 배치 워크플로우에 대한 자세한 내용은 [사용자 지정 리소스를 사용하여 배치 항목 추천 사항 가져오기](getting-batch-recommendations.md)을 참조하세요.

**Topics**
+ [배치 추론 작업 생성(콘솔)](#batch-console)
+ [배치 추론 작업 생성(AWS CLI)](#batch-cli)
+ [배치 추론 작업(AWS SDKs) 생성](#batch-sdk)

## 배치 추론 작업 생성(콘솔)
<a name="batch-console"></a>

 [배치 추천을 위한 입력 데이터 준비](batch-data-upload.md) 작업을 완료했으면 일괄 추론 작업을 생성할 준비가 된 것입니다. 이 절차에서는 솔루션과 솔루션 버전(학습된 모델)을 이미 생성한 것으로 가정합니다.

**배치 추론 작업을 생성하려면(콘솔)**

1. [https://console.aws.amazon.com/acm-pca/home](https://console.aws.amazon.com/personalize/home)에서 Personalize 콘솔을 열고 계정에 로그인합니다.

1. **데이터세트 그룹** 페이지에서 데이터세트 그룹을 선택합니다.

1. 탐색 창의 **사용자 지정 리소스**에서 **배치 추론 작업**을 선택합니다.

1. **배치 추론 작업 생성**을 선택합니다.

1.  배치 추론 작업 유형을 선택합니다.
   + 테마 없이 항목 추천을 생성하려면 **항목 추천**을 선택합니다.
   +  유사-항목 레시피를 사용하고 유사한 항목 그룹에 설명 테마를 추가하려면 **콘텐츠 생성기를 통한 테마 적용 추천**을 선택합니다. 테마를 생성하려면 항목 이름 데이터 및 텍스트 데이터가 포함된 항목 데이터 세트가 있어야 합니다. 자세한 내용은 [콘텐츠 생성기에서 테마가 있는 배치 추천](themed-batch-recommendations.md) 단원을 참조하십시오.

1. **배치 추론 작업 세부 정보**의 **배치 추론 작업 이름**에서 배치 추론 작업의 이름을 지정합니다.

1. **솔루션**의 경우, 솔루션을 선택한 다음 추천을 생성하는 데 사용하려는 **솔루션 버전 ID**를 선택합니다.

1. **결과의 수**의 경우, 입력 데이터의 각 줄에 대한 추천의 수를 원하는 대로 지정할 수 있습니다. 기본값은 25입니다.

1.  배치 작업으로 테마가 포함된 추천이 생성되는 경우 **테마 적용 추천 세부 정보**에서 항목 데이터 세트의 항목 이름이나 제목이 포함된 열을 선택합니다. 이 데이터는 관련성이 더 높은 테마를 생성하는 데 도움이 될 수 있습니다. 자세한 내용은 [콘텐츠 생성기에서 테마가 있는 배치 추천](themed-batch-recommendations.md) 단원을 참조하십시오.

1.  **입력 소스**에서 입력 파일의 Amazon S3 경로를 지정합니다.

   다음 구문 사용: **s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json**

    입력 데이터는 솔루션에서 사용하는 레시피에 맞는 올바른 형식이어야 합니다. 입력 데이터 예제는 [배치 추론 작업 입력 및 출력 JSON 예제](batch-data-upload.md#batch-inference-job-json-examples)단원을 참조하세요.

1. **복호화 키**에서 버킷 암호화에 자체 AWS KMS 키를 사용하는 경우 키의 Amazon 리소스 이름(ARN)을 지정합니다. 사용자의 키를 사용하려면 Amazon Personalize에 권한이 있어야 합니다. 권한을 부여하는 방법에 대한 자세한 내용은 [Personalize에 AWS KMS 키 사용 권한 부여](granting-personalize-key-access.md) 섹션을 참조하세요.

1. **출력 대상**에서 출력 위치의 경로를 지정합니다. 출력 데이터에 대한 다른 위치(폴더 또는 다른 S3 버킷)를 사용하는 것이 좋습니다.

    다음 구문 사용: **s3://amzn-s3-demo-bucket/<output folder name>/** 

1. **암호화 키**에서 암호화에 자체 AWS KMS 키를 사용하는 경우 키의 ARN을 지정합니다. 사용자의 키를 사용하려면 Amazon Personalize에 권한이 있어야 합니다. 권한을 부여하는 방법에 대한 자세한 내용은 [Personalize에 AWS KMS 키 사용 권한 부여](granting-personalize-key-access.md) 섹션을 참조하세요.

1. **IAM 서비스 역할**의 경우, 설정 중에 Personalize용으로 생성한 IAM 서비스 역할을 선택합니다. 이 역할에는 각각 입력 및 출력 S3 버킷에 대한 읽기 및 쓰기 액세스 권한이 있어야 합니다.

1.  **필터**의 경우 필요에 따라 필터를 선택하여 배치 추천에 필터를 적용합니다. 필터가 자리표시자 파라미터를 사용하는 경우, 파라미터 값이 입력 JSON에 포함되어 있는지 확인하세요. 자세한 내용은 [입력 JSON에서 필터 값 제공](filter-batch.md#providing-filter-values) 단원을 참조하십시오.

1. **태그**의 경우, 원하는 태그를 추가할 수 있습니다. Personalize 리소스 태그 지정에 대한 자세한 내용은 [Personalize 리소스에 태그 지정](tagging-resources.md)단원을 참조하세요.

1.  **배치 추론 작업 생성**을 선택합니다. 배치 추론 작업 생성이 시작되고 **배치 추론 작업** 페이지가 나타나고 **배치 추론 작업 세부 정보** 단원이 표시됩니다.

    배치 추론 작업의 상태가 **활성**으로 변경되면 지정된 출력 S3 버킷에서 작업 출력을 찾을 수 있습니다. 출력 파일 이름의 형식은 `input-name.out`이 됩니다.

## 배치 추론 작업 생성(AWS CLI)
<a name="batch-cli"></a>

[배치 추천을 위한 입력 데이터 준비](batch-data-upload.md) 작업을 완료했으면 [CreateBatchInferenceJob](API_CreateBatchInferenceJob.md)작업을 사용하여 배치 추론 작업을 생성할 준비가 된 것입니다.

**Topics**
+ [배치 추론 작업 생성](#batch-cli-code-sample)
+ [테마를 생성하는 배치 추론 작업 생성](#batch-cli-themes)

### 배치 추론 작업 생성
<a name="batch-cli-code-sample"></a>

 `create-batch-inference-job` 명령을 사용하여 배치 추론 작업을 생성할 수 있습니다. 작업 이름을 지정하고, `Solution version ARN`을 솔루션 버전의 리소스 이름(ARN)으로 대체하고, `IAM service role ARN`을 설정 중에 Personalize용으로 생성한 IAM 서비스 역할의 ARN으로 대체하세요. 이 역할에는 각각 입력 및 출력 S3 버킷에 대한 읽기 및 쓰기 액세스 권한이 있어야 합니다. 원하는 대로 필터 ARN을 제공하여 추천을 필터링합니다. 필터가 자리표시자 파라미터를 사용하는 경우, 파라미터 값이 입력 JSON에 포함되어 있는지 확인하세요. 자세한 내용은 [배치 추천 및 사용자 세그먼트(사용자 지정 리소스) 필터링](filter-batch.md) 단원을 참조하십시오.

`S3 input path` 및 `S3 output path`를 입력 파일 및 출력 위치에 대한 S3 경로로 대체합니다. 출력 데이터에 대한 다른 위치(폴더 또는 다른 S3 버킷)를 사용하는 것이 좋습니다. 입력 및 출력 위치에는 구문: **s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json**및 **s3://amzn-s3-demo-bucket/<output folder name>/**을 사용합니다.

이 예제에는 선택 가능한 사용자-개인화 레시피별 `itemExplorationConfig`하이퍼파라미터: `explorationWeight`및 `explorationItemAgeCutOff`가 포함되어 있습니다. 원하는 대로 `explorationWeight`및 `explorationItemAgeCutOff`값을 포함하여 탐색을 구성합니다. 자세한 내용은 [사용자-개인 맞춤 레시피](native-recipe-new-item-USER_PERSONALIZATION.md) 단원을 참조하십시오.

```
aws personalize create-batch-inference-job \
--job-name Batch job name \
--solution-version-arn Solution version ARN \
--filter-arn Filter ARN \
--job-input s3DataSource={path=s3://S3 input path} \
--job-output s3DataDestination={path=s3://S3 output path} \
--role-arn IAM service role ARN \
--batch-inference-job-config "{\"itemExplorationConfig\":{\"explorationWeight\":\"0.3\",\"explorationItemAgeCutOff\":\"30\"}}"
```

### 테마를 생성하는 배치 추론 작업 생성
<a name="batch-cli-themes"></a>

유사한 항목에 대한 테마를 생성하려면 유사-항목 레시피를 사용해야 하며, 항목 데이터 세트에는 텍스트 필드와 항목 이름 데이터 열이 있어야 합니다. 테마가 있는 추천에 대한 자세한 내용은 [콘텐츠 생성기에서 테마가 있는 배치 추천](themed-batch-recommendations.md) 섹션을 참조하세요.

다음 코드는 테마가 있는 추천을 생성하는 배치 추론 작업을 만듭니다. `batch-inference-job-mode` 설정을 `THEME_GENERATION`으로 둡니다. 항목 이름 데이터를 저장하는 열의 이름으로 `COLUMN_NAME`을 바꿉니다.

```
aws personalize create-batch-inference-job \
--job-name Themed batch job name \
--solution-version-arn Solution version ARN \
--filter-arn Filter ARN \
--job-input s3DataSource={path=s3://S3 input path} \
--job-output s3DataDestination={path=s3://S3 output path} \
--role-arn IAM service role ARN \
--batch-inference-job-mode THEME_GENERATION \
--theme-generation-config "{\"fieldsForThemeGeneration\": {\"itemName\":\"COLUMN_NAME\"}}"
```

## 배치 추론 작업(AWS SDKs) 생성
<a name="batch-sdk"></a>

[배치 추천을 위한 입력 데이터 준비](batch-data-upload.md) 작업을 완료했으면 [CreateBatchInferenceJob](API_CreateBatchInferenceJob.md)작업을 사용하여 배치 추론 작업을 생성할 준비가 된 것입니다.

**Topics**
+ [배치 추론 작업 생성](#batch-sdk-code-sample)
+ [테마를 생성하는 배치 추론 작업 생성](#batch-sdk-themes)

### 배치 추론 작업 생성
<a name="batch-sdk-code-sample"></a>

 다음 코드를 사용하여 배치 추론 작업을 생성할 수 있습니다. 작업 이름, 솔루션 버전의 리소스 이름(ARN) 설정 중에 Personalize용으로 생성한 IAM 서비스 역할의 ARN을 지정합니다. 이 역할에는 입력 및 출력 S3 버킷에 대한 읽기 및 쓰기 액세스 권한이 있어야 합니다.

출력 데이터에 대한 다른 위치(폴더 또는 다른 S3 버킷)를 사용하는 것이 좋습니다. 입력 및 출력 위치에는 구문: **s3:/amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json**및 **s3://amzn-s3-demo-bucket/<output folder name>/**을 사용합니다.

 `numResults`의 경우, Personalize가 각 입력 데이터 라인에 대해 예측하기를 원하는 품목의 수를 지정합니다. 원하는 대로 필터 ARN을 제공하여 추천을 필터링합니다. 필터가 자리표시자 파라미터를 사용하는 경우, 파라미터 값이 입력 JSON에 포함되어 있는지 확인하세요. 자세한 내용은 [배치 추천 및 사용자 세그먼트(사용자 지정 리소스) 필터링](filter-batch.md) 단원을 참조하십시오.

------
#### [ SDK for Python (Boto3) ]

이 예제에는 선택 가능한 사용자-개인화 레시피별 `itemExplorationConfig`하이퍼파라미터: `explorationWeight`및 `explorationItemAgeCutOff`가 포함되어 있습니다. 원하는 대로 `explorationWeight`및 `explorationItemAgeCutOff`값을 포함하여 탐색을 구성합니다. 자세한 내용은 [사용자-개인 맞춤 레시피](native-recipe-new-item-USER_PERSONALIZATION.md)단원을 참조하세요.

```
import boto3

personalize_rec = boto3.client(service_name='personalize')

personalize_rec.create_batch_inference_job (
    solutionVersionArn = "Solution version ARN",
    jobName = "Batch job name",
    roleArn = "IAM service role ARN",
    filterArn = "Filter ARN",
    batchInferenceJobConfig = {
        # optional USER_PERSONALIZATION recipe hyperparameters
        "itemExplorationConfig": {      
            "explorationWeight": "0.3",
            "explorationItemAgeCutOff": "30"
        }
    },
    jobInput = 
       {"s3DataSource": {"path": "s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json"}},
    jobOutput = 
       {"s3DataDestination": {"path": "s3:/amzn-s3-demo-bucket/<output folder name>/"}}
)
```

------
#### [ SDK for Java 2.x ]

이 예제에는 선택적 사용자-개인화 레시피별 `itemExplorationConfig`필드: `explorationWeight`및 `explorationItemAgeCutOff`이(가) 포함되어 있습니다. 원하는 대로 `explorationWeight`및 `explorationItemAgeCutOff`값을 포함하여 탐색을 구성합니다. 자세한 내용은 [사용자-개인 맞춤 레시피](native-recipe-new-item-USER_PERSONALIZATION.md)단원을 참조하세요.

```
public static String createPersonalizeBatchInferenceJob(PersonalizeClient personalizeClient,
                                                        String solutionVersionArn,
                                                        String jobName,
                                                        String filterArn,
                                                        String s3InputDataSourcePath,
                                                        String s3DataDestinationPath,
                                                        String roleArn,
                                                        String explorationWeight,
                                                        String explorationItemAgeCutOff) {

  long waitInMilliseconds = 60 * 1000;
  String status;
  String batchInferenceJobArn;

  try {
      // Set up data input and output parameters.
      S3DataConfig inputSource = S3DataConfig.builder()
              .path(s3InputDataSourcePath)
              .build();
      S3DataConfig outputDestination = S3DataConfig.builder()
              .path(s3DataDestinationPath)
              .build();

      BatchInferenceJobInput jobInput = BatchInferenceJobInput.builder()
              .s3DataSource(inputSource)
              .build();
      BatchInferenceJobOutput jobOutputLocation = BatchInferenceJobOutput.builder()
              .s3DataDestination(outputDestination)
              .build();

      // Optional code to build the User-Personalization specific item exploration config.
      HashMap<String, String> explorationConfig = new HashMap<>();

      explorationConfig.put("explorationWeight", explorationWeight);
      explorationConfig.put("explorationItemAgeCutOff", explorationItemAgeCutOff);

      BatchInferenceJobConfig jobConfig = BatchInferenceJobConfig.builder()
              .itemExplorationConfig(explorationConfig)
              .build();
      // End optional User-Personalization recipe specific code.

      CreateBatchInferenceJobRequest createBatchInferenceJobRequest = CreateBatchInferenceJobRequest.builder()
              .solutionVersionArn(solutionVersionArn)
              .jobInput(jobInput)
              .jobOutput(jobOutputLocation)
              .jobName(jobName)
              .filterArn(filterArn)
              .roleArn(roleArn)
              .batchInferenceJobConfig(jobConfig)   // Optional
              .build();

      batchInferenceJobArn = personalizeClient.createBatchInferenceJob(createBatchInferenceJobRequest)
              .batchInferenceJobArn();
      DescribeBatchInferenceJobRequest describeBatchInferenceJobRequest = DescribeBatchInferenceJobRequest.builder()
              .batchInferenceJobArn(batchInferenceJobArn)
              .build();

      long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60;

      // wait until the batch inference job is complete.
      while (Instant.now().getEpochSecond() < maxTime) {

          BatchInferenceJob batchInferenceJob = personalizeClient
                  .describeBatchInferenceJob(describeBatchInferenceJobRequest)
                  .batchInferenceJob();

          status = batchInferenceJob.status();
          System.out.println("Batch inference job status: " + status);

          if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) {
              break;
          }
          try {
              Thread.sleep(waitInMilliseconds);
          } catch (InterruptedException e) {
              System.out.println(e.getMessage());
          }
      }
      return batchInferenceJobArn;

  } catch (PersonalizeException e) {
      System.out.println(e.awsErrorDetails().errorMessage());
  }
  return "";
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients module and commands using ES6 syntax.
import { CreateBatchInferenceJobCommand } from "@aws-sdk/client-personalize";
import { personalizeClient } from "./libs/personalizeClients.js";

// Or, create the client here.
// const personalizeClient = new PersonalizeClient({ region: "REGION"});

// Set the batch inference job's parameters.

export const createBatchInferenceJobParam = {
  jobName: "JOB_NAME",
  jobInput: {
    s3DataSource: {
      path: "INPUT_PATH",
    },
  },
  jobOutput: {
    s3DataDestination: {
      path: "OUTPUT_PATH",
    },
  },
  roleArn: "ROLE_ARN",
  solutionVersionArn: "SOLUTION_VERSION_ARN",
  numResults: 20,
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(
      new CreateBatchInferenceJobCommand(createBatchInferenceJobParam),
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

배치 작업을 처리하는 데 시간이 걸릴 수 있습니다. [DescribeBatchInferenceJob](API_DescribeBatchInferenceJob.md)을 호출하고 `batchRecommendationsJobArn`을 입력 파라미터로 전달하여 작업 상태를 확인할 수 있습니다. 를 호출하여 AWS 환경의 모든 Amazon Personalize 배치 추론 작업을 나열할 수도 있습니다[ListBatchInferenceJobs](API_ListBatchInferenceJobs.md).

### 테마를 생성하는 배치 추론 작업 생성
<a name="batch-sdk-themes"></a>

유사한 항목에 대한 테마를 생성하려면 유사-항목 레시피를 사용해야 하며, 항목 데이터 세트에는 텍스트 필드와 항목 이름 데이터 열이 있어야 합니다. 테마가 있는 추천에 대한 자세한 내용은 [콘텐츠 생성기에서 테마가 있는 배치 추천](themed-batch-recommendations.md) 섹션을 참조하세요.

다음 코드는 테마가 있는 추천을 생성하는 배치 추론 작업을 만듭니다. `batchInferenceJobMode` 설정을 `"THEME_GENERATION"`으로 둡니다. 항목 이름 데이터를 저장하는 열의 이름으로 `COLUMNN_NAME`을 바꿉니다.

```
import boto3

personalize_rec = boto3.client(service_name='personalize')

personalize_rec.create_batch_inference_job (
    solutionVersionArn = "Solution version ARN",
    jobName = "Batch job name",
    roleArn = "IAM service role ARN",
    filterArn = "Filter ARN",
    batchInferenceJobMode = "THEME_GENERATION",
    themeGenerationConfig = {
      "fieldsForThemeGeneration": {
          "itemName": "COLUMN_NAME"
      }
    },
    jobInput = 
       {"s3DataSource": {"path": "s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json"}},
    jobOutput = 
       {"s3DataDestination": {"path": "s3://amzn-s3-demo-bucket/<output folder name>/"}}
)
```