创建批量推理作业 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建批量推理作业

创建批量推理任务,根据来自 Amazon S3 的输入数据为用户提供批量项目推荐。输入数据可以是 JSON 格式的用户列表或项目(或两者)列表。您可以使用 Amazon Personalize 控制台、Amazon Command Line Interface (Amazon CLI) 或Amazon SDK 创建批量推理作业。

有关 Amazon Personalize 中批处理工作流程的更多信息,包括权限要求、推荐评分以及准备和导入输入数据,请参阅获取批量推荐和用户细分

创建批量推理作业(控制台)

完成后准备和导入批量输入数据,就可以创建批量推理作业了。此过程假定您已创建了一个解决方案和解决方案版本(经过训练的模型)。

创建批量推理作业(控制台)
  1. 通过 https://console.aws.amazon.com/personalize/home 打开亚马逊 Personalize 控制台并登录您的账户。

  2. 数据集组页面上,选择您的数据集组。

  3. 在导航窗格中选择 Batch inference jobs (批处理推理作业),然后选择 Create batch inference job (创建批处理推理作业)

  4. Batch inference job details (批处理推理作业详细信息) 中,在 Batch inference job name (批处理推理作业名称) 中,指定批处理推理作业的名称。

  5. 对于 IAM 服务角色,选择您在设置期间为 Amazon Personalize 创建的 IAM 服务角色。此角色必须对您的输入和输出 Amazon S3 存储桶分别具有读写访问权限。

  6. 对于解决方案,选择解决方案,然后选择要用于生成建议的解决方案版本 ID

  7. 对于结果数量,可以选择为每行输入数据指定建议数量。默认值为 25。

  8. 对于输入数据配置,请指定输入文件的 Amazon S3 路径。

    使用下面的语法:s3://<name of your S3 bucket>/<folder name>/<input JSON file name>

    您的输入数据的格式必须与您的解决方案使用的配方一致。有关输入数据示例,请参阅输入与输出 JSON 示例

  9. 对于输出数据配置,请指定输出位置的路径。我们建议为输出数据使用不同的位置(文件夹或不同的 Amazon S3 存储桶)。

    使用下面的语法:s3://<name of your S3 bucket>/<output folder name>/

  10. 对于筛选器配置,可以选择一个过滤器来对批量推荐应用过滤器。如果您的过滤器使用占位符参数,请确保参数的值包含在输入 JSON 中。有关更多信息,请参阅在输入 JSON 中提供过滤器值

  11. 对于标签,可以选择添加任何标签。有关标记 Amazon Personalize 资源的更多信息,请参阅为 Amazon 贴标签:个性化资源

  12. 选择 Create batch inference job (创建批处理推理作业)。此时将开始创建批处理推理作业,Batch inference jobs (批处理推理作业) 页面将显示,并显示 Batch inference job detail (批处理推理作业详细信息) 部分。

  13. 当批推理任务的状态更改为 “活动” 时,您可以从指定的输出 Amazon S3 存储桶中检索任务的输出。输出文件的名称将采用 input-name.out 格式。

创建批量推理作业 (Amazon CLI)

完成后准备和导入批量输入数据,就可以使用以下create-batch-inference-job代码创建批量推理作业了。指定任务名称,将其Solution version ARN替换为解决方案版本的亚马逊资源名称 (ARN),然后将其替换为您在设置期间为 Amazon Personalize 创建的 IAM 服务角色的 ARN。IAM service role ARN此角色必须对您的输入和输出 Amazon S3 存储桶分别具有读写访问权限。(可选)提供过滤器 ARN 来筛选推荐。如果您的过滤器使用占位符参数,请确保参数的值包含在输入 JSON 中。有关更多信息,请参阅筛选批量推荐和用户细分

S3 input pathS3 output path替换为输入文件和输出位置的 Amazon S3 路径。我们建议为输出数据使用不同的位置(文件夹或不同的 Amazon S3 存储桶)。对输入和输出位置使用以下语法:s3://<name of your S3 bucket>/<folder name>/<input JSON file name>s3://<name of your S3 bucket>/<output folder name>/

该示例包括可选的用户个性化配方特定的itemExplorationConfig超参数:explorationWeightexplorationItemAgeCutOff。(可选)包括explorationWeightexplorationItemAgeCutOff值以配置探索。有关更多信息,请参阅 用户个性化配方

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\"}}" { "batchInferenceJobArn": "arn:aws:personalize:us-west-2:acct-id:batch-inference-job/batchInferenceJobName" }

创建批量推理作业 (AmazonSDK)

完成后准备和导入批量输入数据,就可以使用该操作创建批量推理CreateBatchInferenceJob作业了。

以下代码显示如何创建批量推理作业。指定任务名称、解决方案版本的亚马逊资源名称 (ARN) 以及您在设置期间为 Amazon Personalize 创建的 IAM 服务角色的 ARN。此角色必须对您的输入和写入访问权限 Amazon S3 存储桶的读写访问权限。

我们建议为输出数据使用不同的位置(文件夹或不同的 Amazon S3 存储桶)。对输入和输出位置使用以下语法:s3://<name of your S3 bucket>/<folder name>/<input JSON file name>s3://<name of your S3 bucket>/<output folder name>/

对于numResults,请指定您希望 Amazon Personalize 针对每行输入数据预测的商品数量。(可选)提供过滤器 ARN 来筛选推荐。如果您的过滤器使用占位符参数,请确保参数的值包含在输入 JSON 中。有关更多信息,请参阅筛选批量推荐和用户细分

SDK for Python (Boto3)

该示例包括可选的用户个性化配方特定的itemExplorationConfig超参数:explorationWeightexplorationItemAgeCutOff。(可选)包括explorationWeightexplorationItemAgeCutOff值以配置探索。有关更多信息,请参阅 用户个性化配方

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://<name of your S3 bucket>/<folder name>/<input JSON file name>"}}, jobOutput = {"s3DataDestination": {"path": "s3://<name of your S3 bucket>/<output folder name>/"}} )
SDK for Java 2.x

该示例包括可选的用户个性化配方特定itemExplorationConfig字段:explorationWeightexplorationItemAgeCutOff。(可选)包括explorationWeightexplorationItemAgeCutOff值以配置探索。有关更多信息,请参阅 用户个性化配方

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: { /* required */ s3DataSource: { /* required */ path: 'INPUT_PATH', /* required */ // kmsKeyArn: 'INPUT_KMS_KEY_ARN' /* optional */' } }, jobOutput: { /* required */ s3DataDestination: { /* required */ path: 'OUTPUT_PATH', /* required */ // kmsKeyArn: 'OUTPUT_KMS_KEY_ARN' /* optional */' } }, roleArn: 'ROLE_ARN', /* required */ solutionVersionArn: 'SOLUTION_VERSION_ARN', /* required */ numResults: 20 /* optional integer*/ }; 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 和传递 batchRecommendationsJobArn 作为输入参数来检查作业的状态。您也可以通过调用列出Amazon环境中的所有 Amazon Personalize 批量推理作业ListBatchInferenceJobs