为文本生成模型微调创建 Amazon SageMaker Autopilot 实验 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为文本生成模型微调创建 Amazon SageMaker Autopilot 实验

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

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

注意

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

微调预训练模型需要包含清晰指令的特定数据集,用于指导模型如何针对任务生成输出或行为。模型从数据集中学习,调整其参数以遵从提供的指令。基于指令的微调涉及到使用已标注的样本,该样本采用提示和响应对的格式,并可解析为指令。有关微调的更多信息,请参阅微调根基模型

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

注意

文本和图像分类、时间序列预测以及大型语言模型微调等任务只能通过最新版本的 SageMaker API 获得。

用户如果偏好用户界面的便利性,则可以使用 Amazon SageMaker Canvas 访问预训练模型、生成式人工智能根基模型或者创建自定义的模型,针对特定文本、图像分类或预测需求进行定制。

在 SageMaker 中使用 Autopilot 创建微调实验之前,请确保:

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

    有关可在 Amazon SageMaker Autopilot 中进行微调的预训练模型列表,请参阅支持进行微调的大型语言模型。模型选择并非强制性;如果未指定模型,Autopilot 会自动默认为模型 Falcon-7B-Instruct

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

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

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

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

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

  • 此外,您应向执行角色提供必要的权限,以便访问 SageMaker JumpStart 使用的默认 Amazon S3 存储桶存储空间。存储和检索 SageMaker JumpStart 预训练的语言模型 (LLM) 构件需要此权限。要授予对此 Amazon S3 存储桶的访问权限,您必须针对执行角色创建新的内联自定义策略。

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

    SageMaker 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。

以编程方式创建 Autopilot 实验

要以编程方式创建 Autopilot 实验以微调大型语言模型,您可以使用 Amazon SageMaker Autopilot 支持的任何语言或 Amazon CLI 调用 CreateAutoMLJobV2 API。

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

注意

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

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

必需参数

在调用 CreateAutoMLJobV2 以创建 Autopilot 实验进行 LLM 微调时,您必须提供以下值:

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

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

  • 类型为 TextGenerationJobConfigAutoMLProblemTypeConfig 用于配置微调训练作业的设置。

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

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

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

以下示例提供了完整请求格式,用于对 CreateAutoMLJobV2 发出 API 调用以微调 Falcon-7B-Instruct (Falcon7B) 模型。

{ "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": "Falcon7B" } } }

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

可选参数

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

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

每个 AutoMLJobChannel 对象(参见必需参数 AutoMLJobInputDataConfig)都有一个 ChannelType,可以将其设置为 trainingvalidation 值,指定在构建机器学习模型时如何使用数据。

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

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

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

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

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

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