本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建 AutoML 作业,使用 API 微调文本生成模型
大型语言模型 (LLM) 擅长多种生成式任务,包括文本生成、摘要、完成工作、问题回答等。它们之所以有如此出色的表现,可以归结于它们庞大的规模以及针对不同数据集和各种任务进行的广泛训练。但是,在医疗保健和金融服务等特定领域中,这些模型可能需要进行自定义微调,以适应独特的数据和使用场景。通过根据特定领域进行量身定制的训练,可以改进 LLM 的性能,为目标应用提供准确性更高的输出。
Autopilot 提供了对一系列预训练生成式文本模型进行微调的功能。特别是,Autopilot 支持对由提供支持的通用大型语言模型 (LLM) 进行基于指令的微调。 JumpStart
注意
支持自动驾驶微调的文本生成模型目前只能在 Canvas 支持的 SageMaker 区域中使用。有关其支持的区域的完整列表,请参阅 SageMaker Canvas 的文档。
Fine-tuning 预训练模型需要一个包含清晰指令的特定数据集,以指导模型如何为该任务生成输出或行为。模型从数据集中学习,调整其参数以符合提供的指令。 Instruction-based 微调涉及使用带标签的示例,格式为提示-响应对,措辞为指令。有关微调的更多信息,请参阅Fine-tune 基础模型。
以下指南概述了创建 Amazon A SageMaker utopilot 作业作为试点实验的过程,以使用 API 参考对文本生成 LLM 进行微调。 SageMaker
注意
文本和映像分类、时间序列预测和大型语言模型微调等任务都可以通过 AutoML REST API 的第 2 版独家实现。如果你选择的语言是 Python,你可以直接参考适用于 Python (Boto3) 的 AWS SDK
喜欢用户界面便利性的用户可以使用 Amazon SageMaker Canv as 访问预训练模型和生成式 AI 基础模型,或者创建针对特定文本、图像分类、预测需求或生成式 AI 量身定制的自定义模型。
要以编程方式创建自动驾驶实验以微调 LLM,你可以使用 Ama SageMaker zon Autopilot 支持的任何语言调用 CreateAutoMLJobV2API 或。 AWS CLI
有关此 API 操作如何转换为所选语言中函数的信息,请参阅 CreateAutoMLJobV2 中的另请参阅部分并选择 SDK。例如,对于 Python 用户,请参阅 适用于 Python (Boto3) 的 AWS SDK中 create_auto_ml_job_v2 的完整请求语法。
注意
Autopilot 可以微调大型语言模型,无需对多个候选项进行训练和评估。取而代之的是,使用您的数据集,Autopilot直接微调您的目标模型,以增强默认的目标指标,即交叉熵损失。 Fine-tuning Autopilot 中的语言模型不需要设置该AutoMLJobObjective字段。
对 LLM 进行微调后,您可以在进行 DescribeAutoMLJobV2 API 调用时,通过 BestCandidate 访问各种 ROUGE 分数来评估其性能。该模型还提供了有关其训练和验证损失以及困惑度的信息。有关评估微调模型生成的文本质量的指标完整列表,请参阅在 Autopilot 中微调大型语言模型的指标。
先决条件
在使用 Autopilot 在 SageMaker AI 中创建微调实验之前,请务必执行以下步骤:
-
(可选)选择要微调的预训练模型。
有关可在 Amazon A SageMaker utopilot 中进行微调的预训练模型列表,请参阅。支持进行微调的大型语言模型模型选择并非强制性;如果未指定模型,Autopilot 会自动默认为模型 Falcon7BInstruct。
-
创建指令数据集。请参阅 数据集文件类型和输入数据格式,了解基于指令的数据集的格式要求。
-
将您的数据集置于 Amazon S3 存储桶中。
-
授予对包含用于运行实验的 Amazon S3 执行角色的输入数据的 SageMaker Amazon S3 存储桶的完全访问权限。
-
此外,您应为执行角色提供必要的权限,以访问所使用的默认存储 Amazon S3 存储桶 JumpStart。此访问权限是存储和检索中预训练的模型工件所必需的。 JumpStart要授予对此 Amazon S3 存储桶的访问权限,您必须针对执行角色创建新的内联自定义策略。
下面是一个策略示例,在配置
us-west-2中的 AutoML 微调作业时,您可以在 JSON 编辑器中使用该策略: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 微调的 Autopilot 实验时,必须提供以下值:
-
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。
以下示例提供了完整请求格式,用于对 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" } } }
所有其他参数都是可选的。
可选参数
以下各节提供了一些可以传递给微调 AutoML 作业的可选参数的详细信息。
您可以提供自己的验证数据集和自定义的数据拆分比率,也可以让 Autopilot 自动拆分数据集。
每个AutoMLJobChannel对象(参见必填参数 AutoMLJobInputDataConfig)都有ChannelType,可以将其设置为training或指定在构建机器学习模型时如何使用数据的validation值。
数据来源至少需要一个,最多可以有两个:一个用于训练数据,一个用于验证数据。如何将数据拆分为训练和验证数据集,取决于您有一个还是两个数据来源。
-
如果您只有一个数据来源,则默认情况下
ChannelType设置为training,并且必须具有此值。-
如果未设置
AutoMLDataSplitConfig中的ValidationFraction值,则默认情况下,将使用来自此来源中数据的 0.2 (20%) 进行验证。 -
如果
ValidationFraction设置为介于 0 和 1 之间的值,则根据指定的值拆分数据集,该值指定用于验证的数据集的比例。
-
-
如果您有两个数据来源,则其中一个
AutoMLJobChannel对象的ChannelType必须设置为默认值training。另一个数据来源的ChannelType必须设置为validation。这两个数据来源必须具有相同的格式(CSV 或 Parquet)和相同的架构。在这种情况下,您不可为ValidationFraction设置值,因为每个来源的所有数据都用于训练或验证。设置此值会导致错误。
利用 Autopilot,您可以自动将微调模型部署到端点。要为经过微调的模型启用自动部署,请在 AutoML 作业请求中包括 ModelDeployConfig。这允许将经过微调的模型部署到 A SageMaker I 端点。以下是可供自定义的配置。
-
要让 Autopilot 生成端点名称,请将
AutoGenerateEndpointName设置为True。 -
要为端点提供自己的名称,请设置
AutoGenerateEndpointName to。Falseand provide a name of your choice in EndpointName
对于需要在微调前接受最终用户许可协议的模型,您可以在配置 AutoMLProblemTypeConfig 时将 ModelAccessConfig 的 AcceptEula 属性设置为 TextGenerationJobConfig 中的 True,从而接受 EULA。
在配置 AutoMLProblemTypeConfig 时,您可以在 TextGenerationJobConfig 的 TextGenerationHyperParameters 属性中设置超参数值,从而优化文本生成模型的学习过程。
Autopilot 允许在所有模型中设置四个通用超参数。
-
epochCount:其值应是一个字符串,包含1至10范围内的整数值。 -
batchSize:其值应是一个字符串,包含1至64范围内的整数值。 -
learningRate:其值应是一个字符串,包含0至1范围内的浮点数值。 -
learningRateWarmupSteps:其值应是一个字符串,包含0至250范围内的整数值。
有关每个超参数的更多详情,请参阅 优化文本生成模型学习过程的超参数。
以下 JSON 示例显示了传递到配置所有四个超参数的TextGenerationHyperParameters字段。 TextGenerationJobConfig
"AutoMLProblemTypeConfig": { "TextGenerationJobConfig": { "BaseModelName": "Falcon7B", "TextGenerationHyperParameters": {"epochCount":"5", "learningRate":"0.000001", "batchSize": "32", "learningRateWarmupSteps": "10"} } }