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