使用 API 创建 AutoML 作业以微调文本生成模型 - Amazon SageMaker

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

使用 API 创建 AutoML 作业以微调文本生成模型

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

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

注意

支持自动驾驶微调的文本生成模型目前只能在 Canvas 支持的 SageMaker 区域中使用。有关其支持的区域的完整列表,请参阅 SageMaker Canvas 的文档。

微调预训练模型需要包含清晰指令的特定数据集,用于指导模型如何针对任务生成输出或行为。模型从数据集中学习,调整其参数以遵从提供的指令。基于指令的微调涉及使用带标签的示例,这些示例格式为提示-响应对,措辞为指令。有关微调的更多信息,请参见微调基础模型

以下指南概述了创建 Amazon A SageMaker utopilot 作业作为试点实验的过程,以使用 API 参考对文本生成 LLM 进行微调。 SageMaker

注意

诸如文本和图像分类、时间序列预测以及大型语言模型的微调等任务仅通过 AutoML REST API 版本 2 提供。如果你选择的语言是 Python,你可以直接参考AWS SDK for Python (Boto3)或 Amazon Pyth SageMaker on 软件开发工具包的 A utoLv2 对象

喜欢用户界面便利性的用户可以使用 Amazon SageMaker Canv as 访问预训练模型和生成式 AI 基础模型,或者创建针对特定文本、图像分类、预测需求或生成式 AI 量身定制的自定义模型。

要以编程方式创建自动驾驶实验以微调 LLM,你可以使用 Ama SageMaker zon Autopilot 支持的任何语言调用 CreateAutoMLJobV2API 或。 AWS CLI

有关此 API 操作如何转换为您所选语言的函数的信息,请参阅的 “另请参阅” 部分CreateAutoMLJobV2并选择 SDK。例如,对于 Python 用户,请参阅 AWS SDK for Python (Boto3)中 create_auto_ml_job_v2 的完整请求语法。

注意

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

对 LLM 进行微调后,您可以通过调DescribeAutoMLJobV2用 API BestCandidate 时访问各种ROUGE分数来评估其性能。该模型还提供了有关其训练和验证损失以及困惑度的信息。有关评估微调模型生成的文本质量的指标完整列表,请参阅在 Autopilot 中微调大型语言模型的指标

先决条件

在使用 Autopilot 在中创建微调实验之前 SageMaker,请务必执行以下步骤:

  • (可选)选择要微调的预训练模型。

    有关可在 Amazon A SageMaker utopilot 中进行微调的预训练模型列表,请参阅。支持进行微调的大型语言模型模型的选择不是强制性的;如果未指定任何型号,Autopilot 会自动默认为模型 falc on7binStruct。

  • 创建指令数据集。数据集文件类型和输入数据格式要了解基于指令的数据集的格式要求,请参阅。

  • 将您的数据集置于 Amazon S3 存储桶中。

  • 授予对包含您用于运行实验的 SageMaker 执行角色的输入数据的 Amazon S3 存储桶的完全访问权限。

    • 有关检索 SageMaker 执行角色的信息,请参阅获取执行角色

    • 有关向您的 SageMaker 执行角色授予访问 Amazon S3 中一个或多个特定存储桶的权限的信息,请参阅中的向 SageMaker 执行角色添加其他 Amazon S3 权限创建执行角色

  • 此外,您还应为执行角色提供必要的权限,以访问所使用的默认存储 Amazon S3 存储桶 SageMaker JumpStart。此访问权限是存储和检索中预训练的模型工件所必需的。 SageMaker JumpStart要授予对此 Amazon S3 存储桶的访问权限,您必须针对执行角色创建新的内联自定义策略。

    以下是您在配置 AutoML 微调作业时可以在 JSON 编辑器中使用的策略示例:us-west-2

    SageMaker JumpStart的存储桶名称遵循预先确定的模式,该模式取决于. AWS 区域您必须相应地调整存储桶的名称。

    { "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。

必需参数

在调用CreateAutoMLJobV2为 LLM 微调创建自动驾驶实验时,必须提供以下值:

  • AutoMLJobName,用于指定您作业的名称。名称应为 string 类型,最小长度为 1 个字符,最大长度为 32 个字符。

  • AutoMLJobInputDataConfig 中至少有一个 training 类型的 AutoMLJobChannel。此通道指定微调数据集所在 Amazon S3 存储桶的名称。您可以选择定义 validation 通道。如果未提供验证通道,并且在 AutoMLDataSplitConfig 中配置了 ValidationFraction,则使用此分数将训练数据集随机划分为训练集和验证集。此外,您可以为数据集指定内容的类型(CSV 或 Parquet 文件)。

  • TextGenerationJobConfig用于配置训练作业设置的类型。AutoMLProblemTypeConfig

    具体而言,您可以在 BaseModelName 字段中指定要微调的基础模型的名称。有关可在 Amazon A SageMaker utopilot 中进行微调的预训练模型列表,请参阅。支持进行微调的大型语言模型

  • OutputDataConfig,指定用于存储 AutoML 作业构件的 Amazon S3 输出路径。

  • RoleArn,指定用于访问您的数据的角色的 ARN。

以下是调用 API 以CreateAutoMLJobV2微调 (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" } } }

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

可选参数

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

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

每个AutoMLJobChannel对象(参见必填参数 a utoML JobInputDataConfig)都有一个ChannelType,可以将其设置为training或指定在构建机器学习模型时如何使用数据的validation值。

数据来源至少需要一个,最多可以有两个:一个用于训练数据,一个用于验证数据。如何将数据拆分为训练和验证数据集,取决于您有一个还是两个数据来源。

  • 如果您只有一个数据来源,则默认情况下 ChannelType 设置为 training,并且必须具有此值。

    • 如果未设置 AutoMLDataSplitConfig 中的 ValidationFraction 值,则默认情况下,将使用来自此来源中数据的 0.2 (20%) 进行验证。

    • 如果 ValidationFraction 设置为介于 0 和 1 之间的值,则根据指定的值拆分数据集,该值指定用于验证的数据集的比例。

  • 如果您有两个数据来源,则其中一个 AutoMLJobChannel 对象的 ChannelType 必须设置为默认值 training。另一个数据来源的 ChannelType 必须设置为 validation。这两个数据来源必须具有相同的格式(CSV 或 Parquet)和相同的架构。在这种情况下,您不可为 ValidationFraction 设置值,因为每个来源的所有数据都用于训练或验证。设置此值会导致错误。

借助 Autopilot,您可以自动将经过微调的模型部署到端点。要为经过微调的模型启用自动部署,请在 AutoML 作业请求中包括 ModelDeployConfig。这允许将经过微调的模型部署到 SageMaker 终端节点。以下是可供自定义的配置。

对于需要在微调之前接受最终用户许可协议的型号,您可以通过在配置TextGenerationJobConfig时将 to 的AcceptEula属性设置ModelAccessConfigTrue来接受 EULA。AutoMLProblemTypeConfig

在配置文本生成模型TextGenerationJobConfig时,您可以通过在的TextGenerationHyperParameters属性中设置超参数值来优化文本生成模型的学习过程。AutoMLProblemTypeConfig

Autopilot 允许在所有模型中设置四个常见的超参数。

  • epochCount: 它的值应该是一个字符串,其中包含一个介于 to 范围内的整数值101

  • batchSize: 它的值应该是一个字符串,其中包含一个介于 to 范围内的整数值641

  • learningRate: 它的值应该是一个字符串,其中包含一个介于 to 范围内的浮点值。0 1

  • learningRateWarmupSteps: 它的值应该是一个字符串,其中包含一个介于 to 范围内的整数值2500

有关每个超参数的更多详细信息,请参阅使用超参数优化文本生成模型的学习过程

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

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