

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

# 手动创建解决方案版本
<a name="creating-a-solution-version"></a>

完成[在 Amazon Personalize 中配置自定义解决方案](customizing-solution-config.md)后，就可以开始训练了：
+  如果您的解决方案使用自动训练，则解决方案会按照您指定的训练频率为您创建解决方案版本。默认情况下，所有新解决方案都使用自动训练，每 7 天创建一个新的解决方案版本。您仍然可以手动创建解决方案版本。有关更多信息，请参阅 [配置自动训练](solution-config-auto-training.md)。
+ 如果您关闭解决方案的自动训练，或者想要手动训练，则可以手动创建解决方案版本。*解决方案版本* 是指经过训练的机器学习模型。您可以使用控制台、Amazon Command Line Interface (Amazon CLI) 或 Amazon SDK 创建解决方案版本。如果解决方案版本的状态为 CREATE\$1PENDING 或 CREATE\$1IN\$1PROGRESS，则您可以使用 [StopSolutionVersionCreation](API_StopSolutionVersionCreation.md) 操作来停止解决方案版本的创建过程。请参阅[停止创建解决方案版本](stop-solution-version.md)。

如果由于错误而无法完成训练，则您无需支付训练费用。如果解决方案版本的状态为 CREATE\$1PENDING 或 CREATE\$1IN\$1PROGRESS，则您可以停止解决方案版本的创建过程。要停止创建解决方案版本，请导航至解决方案版本详细信息页面，然后选择**停止**。有关更多信息，请参阅 [停止创建解决方案版本](stop-solution-version.md)。

**Topics**
+ [创建解决方案版本（控制台）](#create-solution-version-console)
+ [创建解决方案版本 (Amazon CLI)](#create-solution-version-cli)
+ [创建解决方案版本 (Amazon SDK)](#create-solution-version-sdk)

## 创建解决方案版本（控制台）
<a name="create-solution-version-console"></a>

要使用 Amazon Personalize 控制台手动创建新的解决方案版本，请从解决方案的详细信息页面开始训练。

**创建新解决方案版本**

1. 打开 Amazon Personalize 控制台（网址为 [https://console.aws.amazon.com/personalize/home](https://console.amazonaws.cn/personalize/home)），并登录您的账户。

1. 导航到数据集组页面，然后选择包含新解决方案的数据集组。

1. 在导航窗格中的**自定义资源**下，选择**解决方案和配方**。

1. 在**解决方案和食谱**页面上，选择要创建解决方案版本的解决方案。

1. 在解决方案概述页面上，选择**创建解决方案版本**以开始训练新模型。

在解决方案详细信息页面上，您可以在**解决方案版本**部分跟踪训练进度。训练完成后，状态会变为**活动**，您可以使用 Amazon Personalize 提供的指标对其进行评估。有关更多信息，请参阅 [通过指标评估 Amazon Personalize 解决方案版本](working-with-training-metrics.md)。

 当解决方案版本处于活动状态时，就可以使用它来获得推荐。如何使用活跃解决方案版本取决于获取建议的方式：
+  要获得实时建议，必须通过 Amazon Personalize 市场活动部署活跃解决方案版本。您可以使用该市场活动为用户获取建议。请参阅[通过市场活动部署 Amazon Personalize 解决方案版本创建市场活动](campaigns.md)。
+ 对于批量建议，在创建批量推理作业或批量细分作业时指定一个活跃解决方案版本。请参阅[获取批量物品推荐](getting-batch-recommendations.md)或[获取批量用户细分](getting-user-segments.md)。

## 创建解决方案版本 (Amazon CLI)
<a name="create-solution-version-cli"></a>

当您的解决方案处于活动状态时，通过运行以下命令来训练模型。将 `solution arn` 替换为 [在 Amazon Personalize 中配置自定义解决方案](customizing-solution-config.md) 中的解决方案 Amazon 资源名称 (ARN)。

```
aws personalize create-solution-version \
  --solution-arn solution arn
```

这将显示解决方案版本 ARN，例如：

```
{
  "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/SolutionName/<version-id>"
}
```

通过使用 `describe-solution-version` 命令来检查解决方案版本的训练状态。提供上一步中返回的解决方案版本 ARN。有关 API 的更多信息，请参阅[DescribeSolutionVersion](API_DescribeSolutionVersion.md)。

```
aws personalize describe-solution-version \
  --solution-version-arn solution version arn
```

将显示解决方案版本的属性和训练 `status`。最初，状态显示为 CREATE PENDING，例如：

```
{
  "solutionVersion": {
      "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/solutionName/<version-id>",
      ...,
      "status": "CREATE PENDING"
  }
}
```

训练完成后，`status` 会变为 `ACTIVE`，您可以使用 Amazon Personalize 提供的指标对其进行评估。有关更多信息，请参阅 [通过指标评估 Amazon Personalize 解决方案版本](working-with-training-metrics.md)。如果由于错误而无法完成训练，则您无需支付训练费用。

如果解决方案版本的状态为 CREATE\$1PENDING 或 CREATE\$1IN\$1PROGRESS，则您可以使用 [StopSolutionVersionCreation](API_StopSolutionVersionCreation.md) 操作来停止解决方案版本的创建过程。请参阅[停止创建解决方案版本](stop-solution-version.md)。

 当解决方案版本处于活动状态时，就可以使用它来获得推荐。如何使用活跃解决方案版本取决于获取建议的方式：
+  要获得实时建议，必须通过 Amazon Personalize 市场活动部署活跃解决方案版本。您可以使用该市场活动为用户获取建议。请参阅[通过市场活动部署 Amazon Personalize 解决方案版本创建市场活动](campaigns.md)。
+ 对于批量建议，在创建批量推理作业或批量细分作业时指定一个活跃解决方案版本。请参阅[获取批量物品推荐](getting-batch-recommendations.md)或[获取批量用户细分](getting-user-segments.md)。

## 创建解决方案版本 (Amazon SDK)
<a name="create-solution-version-sdk"></a>

当您的解决方案处于活动状态时，使用以下代码创建解决方案版本。指定 [在 Amazon Personalize 中配置自定义解决方案](customizing-solution-config.md) 中的 Amazon 资源名称（ARN）。使用 [DescribeSolutionVersion](API_DescribeSolutionVersion.md) 操作来检索解决方案版本的状态。

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

```
import boto3

personalize = boto3.client('personalize')
# Store the solution ARN
solution_arn = 'solution arn'
        
# Use the solution ARN to get the solution status.
solution_description = personalize.describe_solution(solutionArn = 'solution_arn')['solution']
print('Solution status: ' + solution_description['status'])

# Use the solution ARN to create a solution version.
print ('Creating solution version')
response = personalize.create_solution_version(solutionArn = solution_arn)
solution_version_arn = response['solutionVersionArn']
print('Solution version ARN: ' + solution_version_arn)

# Use the solution version ARN to get the solution version status.
solution_version_description = personalize.describe_solution_version(
    solutionVersionArn = solution_version_arn)['solutionVersion']
print('Solution version status: ' + solution_version_description['status'])
```

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

```
public static String createPersonalizeSolutionVersion(PersonalizeClient personalizeClient, String solutionArn) {
        long maxTime = 0;
        long waitInMilliseconds = 30 * 1000; // 30 seconds
        String solutionStatus = "";
        String solutionVersionStatus = "";
        String solutionVersionArn = "";

        try {
            DescribeSolutionRequest describeSolutionRequest = DescribeSolutionRequest.builder()
                .solutionArn(solutionArn)
                .build();
            
            maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60;

            // Wait until solution is active. 
            while (Instant.now().getEpochSecond() < maxTime) {

                solutionStatus = personalizeClient.describeSolution(describeSolutionRequest).solution().status();
                System.out.println("Solution status: " + solutionStatus);

                if (solutionStatus.equals("ACTIVE") || solutionStatus.equals("CREATE FAILED")) {
                    break;
                }
                try {
                    Thread.sleep(waitInMilliseconds);
                } catch (InterruptedException e) {
                    System.out.println(e.getMessage());
                }
            }
            
            // Once the solution is active, start creating a solution version.
            
            if (solutionStatus.equals("ACTIVE")) {

                CreateSolutionVersionRequest createSolutionVersionRequest = CreateSolutionVersionRequest.builder()
                    .solutionArn(solutionArn)
                    .build();
                
                CreateSolutionVersionResponse createSolutionVersionResponse = personalizeClient.createSolutionVersion(createSolutionVersionRequest);
                solutionVersionArn = createSolutionVersionResponse.solutionVersionArn();

                System.out.println("Solution version ARN: " + solutionVersionArn);

                DescribeSolutionVersionRequest describeSolutionVersionRequest = DescribeSolutionVersionRequest.builder() 
                    .solutionVersionArn(solutionVersionArn)
                    .build();
                
                maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60;
                
                while (Instant.now().getEpochSecond() < maxTime) {

                    // Use the solution version ARN to get the solution version status.
                    solutionVersionStatus = personalizeClient.describeSolutionVersion(describeSolutionVersionRequest).solutionVersion().status();
                    System.out.println("Solution version status: " + solutionVersionStatus);
    
                    if (solutionVersionStatus.equals("ACTIVE") || solutionVersionStatus.equals("CREATE FAILED")) {
                        break;
                    }
                    try {
                        Thread.sleep(waitInMilliseconds);
                    } catch (InterruptedException e) {
                        System.out.println(e.getMessage());
                    }
                }
                return solutionVersionArn;
            }
        } catch(PersonalizeException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
```

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

```
// Get service clients module and commands using ES6 syntax.
import { CreateSolutionVersionCommand } from "@aws-sdk/client-personalize";
import { personalizeClient } from "./libs/personalizeClients.js";
// Or, create the client here.
// const personalizeClient = new PersonalizeClient({ region: "REGION"});

// Set the solution version parameters.
export const solutionVersionParam = {
  solutionArn: "SOLUTION_ARN" /* required */,
};

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

------



要检查当前解决方案版本状态，请调用 [DescribeSolutionVersion](API_DescribeSolutionVersion.md) 操作并传递从 `CreateSolutionVersion` 操作返回的解决方案版本的 ARN。训练完成后，`status` 会变为 `ACTIVE`，您可以使用 Amazon Personalize 提供的指标对其进行评估。有关更多信息，请参阅 [通过指标评估 Amazon Personalize 解决方案版本](working-with-training-metrics.md)。如果由于错误而无法完成训练，则您无需支付训练费用。

如果解决方案版本的状态为 CREATE\$1PENDING 或 CREATE\$1IN\$1PROGRESS，则您可以使用 [StopSolutionVersionCreation](API_StopSolutionVersionCreation.md) 操作来停止解决方案版本的创建过程。请参阅[停止创建解决方案版本](stop-solution-version.md)。

 当解决方案版本处于活动状态时，就可以使用它来获得推荐。如何使用活跃解决方案版本取决于获取建议的方式：
+  要获得实时建议，必须通过 Amazon Personalize 市场活动部署活跃解决方案版本。您可以使用该市场活动为用户获取建议。请参阅[通过市场活动部署 Amazon Personalize 解决方案版本创建市场活动](campaigns.md)。
+ 对于批量建议，在创建批量推理作业或批量细分作业时指定一个活跃解决方案版本。请参阅[获取批量物品推荐](getting-batch-recommendations.md)或[获取批量用户细分](getting-user-segments.md)。