

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

# 创建 AutoML 作业，使用 API 微调文本生成模型
<a name="autopilot-create-experiment-finetune-llms"></a>

大型语言模型 (LLMs) 擅长多种生成任务，包括文本生成、摘要、完成、问答等。它们之所以有如此出色的表现，可以归结于它们庞大的规模以及针对不同数据集和各种任务进行的广泛训练。但是，在医疗保健和金融服务等特定领域中，这些模型可能需要进行自定义微调，以适应独特的数据和使用场景。通过根据自己的特定领域量身定制培训， LLMs 可以提高他们的绩效，并为目标应用程序提供更准确的输出。

Autopilot 提供了对一系列预训练生成式文本模型进行微调的功能。特别是，Autopilot 支持对由提供支持的通用大型语言模型 () LLMs 进行**基于指令的微调**。 JumpStart

**注意**  
支持自动驾驶微调的文本生成模型目前只能在 Canvas 支持的 SageMaker 区域中使用。有关[其支持的区域的完整列表，请参阅 SageMaker Canvas 的](https://docs.amazonaws.cn/sagemaker/latest/dg/canvas.html)文档。

微调预训练模型需要包含清晰指令的特定数据集，用于指导模型如何针对任务生成输出或行为。模型从数据集中学习，调整其参数以遵从提供的指令。基于指令的微调包括使用标记的示例，将其格式化为提示-回答对，并以指令的形式措辞。有关微调的更多信息，请参阅[微调基础模型](https://docs.amazonaws.cn/sagemaker/latest/dg/jumpstart-foundation-models-fine-tuning.html)。

以下指南概述了创建 Amazon A SageMaker utopilot 作业作为试点实验的流程，以便 LLMs 使用 SageMaker [API](https://docs.amazonaws.cn/sagemaker/latest/dg/autopilot-reference.html) 参考微调文本生成。

**注意**  
文本和映像分类、时间序列预测和大型语言模型微调等任务都可以通过 [AutoML REST API](autopilot-reference.md) 的第 2 版独家实现。如果您选择的语言是 Python，则可以直接引用 Amazon SageMaker Python 软件开发工具包的 A [uto MLV2 对象](https://sagemaker.readthedocs.io/en/stable/api/training/automlv2.html#sagemaker.automl.automlv2.AutoMLV2)。[适用于 Python (Boto3) 的 Amazon SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_auto_ml_job_v2.html)  
喜欢用户界面便利性的用户可以使用 [Amazon SageMaker Canv](https://docs.amazonaws.cn/sagemaker/latest/dg/canvas-getting-started.html) as 访问预训练模型和生成式 AI 基础模型，或者创建针对特定文本、图像分类、预测需求或生成式 AI 量身定制的自定义模型。

要以编程方式创建自动驾驶实验以微调 LLM，你可以使用 Ama SageMaker zon Autopilot 支持的任何语言调用 [https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html)API 或。 Amazon CLI

有关此 API 操作如何转换为所选语言中函数的信息，请参阅 `CreateAutoMLJobV2` 中的[另请参阅](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#API_CreateAutoMLJobV2_SeeAlso)部分并选择 SDK。例如，对于 Python 用户，请参阅 适用于 Python (Boto3) 的 Amazon SDK中 `[create\$1auto\$1ml\$1job\$1v2](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_auto_ml_job_v2)` 的完整请求语法。

**注意**  
Autopilot 可以微调大型语言模型，无需对多个候选项进行训练和评估。取而代之的是，Autopilot 使用您的数据集直接微调目标模型，以增强默认的目标指标，即交叉熵损失。在 Autopilot 中微调语言模型不需要设置 `AutoMLJobObjective` 字段。

对 LLM 进行微调后，您可以在进行 `[DescribeAutoMLJobV2](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_DescribeAutoMLJobV2.html)` API 调用时，通过 `[BestCandidate](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CandidateProperties.html#sagemaker-Type-CandidateProperties-CandidateMetrics)` 访问各种 ROUGE 分数来评估其性能。该模型还提供了有关其训练和验证损失以及困惑度的信息。有关评估微调模型生成的文本质量的指标完整列表，请参阅[在 Autopilot 中微调大型语言模型的指标](autopilot-llms-finetuning-metrics.md)。

## 先决条件
<a name="autopilot-llms-finetuning-api-prerequisites"></a>

在使用 Autopilot 在 SageMaker AI 中创建微调实验之前，请务必执行以下步骤：
+ （可选）选择要微调的预训练模型。

  有关可在 Amazon A SageMaker utopilot 中进行微调的预训练模型列表，请参阅。[支持进行微调的大型语言模型](autopilot-llms-finetuning-models.md)模型的选择不是强制性的；如果未指定型号，Autopilot 会自动默认为 *Falc BInstruct* on7 型号。
+ 创建指令数据集。请参阅 [数据集文件类型和输入数据格式](autopilot-llms-finetuning-data-format.md)，了解基于指令的数据集的格式要求。
+ 将您的数据集置于 Amazon S3 存储桶中。
+ 授予对包含用于运行实验的 Amazon S3 执行角色的输入数据的 SageMaker Amazon S3 存储桶的完全访问权限。
  + 有关检索 SageMaker AI 执行角色的信息，请参阅[获取执行角色](sagemaker-roles.md#sagemaker-roles-get-execution-role)。
  + 有关向您的 SageMaker AI 执行角色授予访问 Amazon S3 中一个或多个特定存储桶的权限的信息，请参阅中的向 A * SageMaker I 执行角色添加其他 Amazon S3 权限*。[创建执行角色](sagemaker-roles.md#sagemaker-roles-create-execution-role)
+ 此外，您应为执行角色提供必要的权限，以访问所使用的默认存储 Amazon S3 存储桶 JumpStart。此访问权限是存储和检索中预训练的模型工件所必需的。 JumpStart要授予对此 Amazon S3 存储桶的访问权限，您必须针对执行角色创建新的内联自定义策略。

  下面是一个策略示例，在配置 `us-west-2` 中的 AutoML 微调作业时，您可以在 JSON 编辑器中使用该策略：

  *JumpStart的存储桶名称遵循预先确定的模式，该模式取决于. Amazon Web Services 区域您必须相应地调整存储桶的名称。*

  ```
  {
      "Sid": "Statement1",
      "Effect": "Allow",
      "Action": [
          "s3:GetObject",
          "s3:PutObject",
          "s3:ListBucket"
      ],
      "Resource": [
          "arn:aws:s3:::jumpstart-cache-prod-us-west-2",
          "arn:aws:s3:::jumpstart-cache-prod-us-west-2/*"
      ]
  }
  ```

完成此操作后，您可以在 Autopilot API 请求中使用此执行角色的 ARN。

## 必需参数
<a name="autopilot-llms-finetuning-api-required-params"></a>

调用 `[CreateAutoMLJobV2](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html)` 创建用于 LLM 微调的 Autopilot 实验时，必须提供以下值：
+ `[AutoMLJobName](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#API_CreateAutoMLJobV2_RequestSyntax)`，用于指定您作业的名称。名称应为 `string` 类型，最小长度为 1 个字符，最大长度为 32 个字符。
+ `[AutoMLJobInputDataConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-AutoMLJobInputDataConfig)` 中至少有一个 `training` 类型的 `[AutoMLJobChannel](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_AutoMLJobChannel.html)`。此通道指定微调数据集所在 Amazon S3 存储桶的名称。您可以选择定义 `validation` 通道。如果未提供验证通道，并且在 [https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_AutoMLDataSplitConfig.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_AutoMLDataSplitConfig.html) 中配置了 `ValidationFraction`，则使用此分数将训练数据集随机划分为训练集和验证集。此外，您可以为数据集指定内容的类型（CSV 或 Parquet 文件）。
+ 类型为 `[TextGenerationJobConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_TextGenerationJobConfig.html)` 的 `[AutoMLProblemTypeConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-AutoMLProblemTypeConfig)` 用于配置训练作业的设置。

  具体而言，您可以在 `BaseModelName` 字段中指定要微调的基础模型的名称。有关可在 Amazon A SageMaker utopilot 中进行微调的预训练模型列表，请参阅。[支持进行微调的大型语言模型](autopilot-llms-finetuning-models.md)
+ `[OutputDataConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_AutoMLOutputDataConfig.html)`，指定用于存储 AutoML 作业构件的 Amazon S3 输出路径。
+ `[RoleArn](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJob.html#sagemaker-CreateAutoMLJob-request-RoleArn)`，指定用于访问您的数据的角色的 ARN。

以下示例提供了完整请求格式，用于对 `CreateAutoMLJobV2` 发出 API 调用以微调 (`Falcon7BInstruct`) 模型。

```
{
   "AutoMLJobName": "<job_name>",
   "AutoMLJobInputDataConfig": [ 
      { 
         "ChannelType": "training",
         "CompressionType": "None",
         "ContentType": "text/csv", 
         "DataSource": { 
            "S3DataSource": { 
               "S3DataType": "S3Prefix",
               "S3Uri": "s3://<bucket_name>/<input_data>.csv"
            }
         }
      }
   ],
  "OutputDataConfig": {
      "S3OutputPath": "s3://<bucket_name>/output",
      "KmsKeyId": "arn:aws:kms:<region>:<account_id>:key/<key_value>"
   },
   "RoleArn":"arn:aws:iam::<account_id>:role/<sagemaker_execution_role_name>",
   "AutoMLProblemTypeConfig": {
        "TextGenerationJobConfig": {
            "BaseModelName": "Falcon7BInstruct"
       }
   }
}
```

所有其他参数都是可选的。

## 可选参数
<a name="autopilot-llms-finetuning-api-optional-params"></a>

以下各节提供了一些可以传递给微调 AutoML 作业的可选参数的详细信息。

### 如何指定 AutoML 作业的训练和验证数据集
<a name="autopilot-llms-finetuning-data-training-or-validation"></a>

您可以提供自己的验证数据集和自定义的数据拆分比率，也可以让 Autopilot 自动拆分数据集。

每个[https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_AutoMLJobChannel.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_AutoMLJobChannel.html)对象（参见必填参数 [Auto MLJob InputDataConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-AutoMLJobInputDataConfig)）都有`ChannelType`，可以将其设置为`training`或指定在构建机器学习模型时如何使用数据的`validation`值。

数据来源至少需要一个，最多可以有两个：一个用于训练数据，一个用于验证数据。如何将数据拆分为训练和验证数据集，取决于您有一个还是两个数据来源。
+ 如果您只有**一个数据来源**，则默认情况下 `ChannelType` 设置为 `training`，并且必须具有此值。
  + 如果未设置 [https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_AutoMLDataSplitConfig.html](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_AutoMLDataSplitConfig.html) 中的 `ValidationFraction` 值，则默认情况下，将使用来自此来源中数据的 0.2 (20%) 进行验证。
  + 如果 `ValidationFraction` 设置为介于 0 和 1 之间的值，则根据指定的值拆分数据集，该值指定用于验证的数据集的比例。
+ 如果您有**两个数据来源**，则其中一个 `AutoMLJobChannel` 对象的 `ChannelType` 必须设置为默认值 `training`。另一个数据来源的 `ChannelType` 必须设置为 `validation`。这两个数据来源必须具有相同的格式（CSV 或 Parquet）和相同的架构。在这种情况下，您不可为 `ValidationFraction` 设置值，因为每个来源的所有数据都用于训练或验证。设置此值会导致错误。

### 如何启用自动部署
<a name="autopilot-llms-finetuning-auto-model-deployment"></a>

利用 Autopilot，您可以自动将微调模型部署到端点。要为经过微调的模型启用自动部署，请在 AutoML 作业请求中包括 `[ModelDeployConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-ModelDeployConfig)`。这允许将经过微调的模型部署到 A SageMaker I 端点。以下是可供自定义的配置。
+ 要让 Autopilot 生成端点名称，请将 `[AutoGenerateEndpointName](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_ModelDeployConfig.html#API_ModelDeployConfig_Contents)` 设置为 `True`。
+ 要为端点提供自己的名称，请设置 `[AutoGenerateEndpointName](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_ModelDeployConfig.html#API_ModelDeployConfig_Contents) to False and provide a name of your choice in [EndpointName](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_ModelDeployConfig.html#API_ModelDeployConfig_Contents)`。

### 使用 AutoML API 微调模型时如何设置 EULA 接受度
<a name="autopilot-llms-finetuning-set-eula"></a>

对于需要在微调前接受最终用户许可协议的模型，您可以在配置 `[AutoMLProblemTypeConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-AutoMLProblemTypeConfig)` 时将 `[ModelAccessConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_ModelAccessConfig.html)` 的 `AcceptEula` 属性设置为 `[TextGenerationJobConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_TextGenerationJobConfig.html)` 中的 `True`，从而接受 EULA。

### 如何设置超参数以优化模型的学习过程
<a name="autopilot-llms-finetuning-set-hyperparameters"></a>

在配置 `[AutoMLProblemTypeConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_CreateAutoMLJobV2.html#sagemaker-CreateAutoMLJobV2-request-AutoMLProblemTypeConfig)` 时，您可以在 `[TextGenerationJobConfig](https://docs.amazonaws.cn/sagemaker/latest/APIReference/API_TextGenerationJobConfig.html)` 的 `TextGenerationHyperParameters` 属性中设置超参数值，从而优化文本生成模型的学习过程。

Autopilot 允许在所有模型中设置四个通用超参数。
+ `epochCount`：其值应是一个字符串，包含 `1` 至 `10` 范围内的整数值。
+ `batchSize`：其值应是一个字符串，包含 `1` 至 `64` 范围内的整数值。
+ `learningRate`：其值应是一个字符串，包含 `0` 至 `1` 范围内的浮点数值。
+ `learningRateWarmupSteps`：其值应是一个字符串，包含 `0` 至 `250` 范围内的整数值。

有关每个超参数的更多详情，请参阅 [优化文本生成模型学习过程的超参数](autopilot-llms-finetuning-hyperparameters.md)。

以下 JSON 示例显示了传递到配置所有四个超参数的`TextGenerationHyperParameters`字段。 TextGenerationJobConfig 

```
"AutoMLProblemTypeConfig": {
  "TextGenerationJobConfig": {
    "BaseModelName": "Falcon7B",
    "TextGenerationHyperParameters": {"epochCount":"5", "learningRate":"0.000001", "batchSize": "32", "learningRateWarmupSteps": "10"}
  }
}
```