本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 SageMaker 训练作业微调 Amazon Nova 模型
通过 SageMaker 训练作业微调 Amazon Nova 模型提供了一种针对特定用例自定义基础模型的强大方法。
先决条件
在开始训练作业之前,请注意以下几点。
-
Amazon S3 存储桶用于存储您的输入数据和训练作业的输出。您可以为两者使用一个存储桶,也可以为每种类型的数据使用不同的存储桶。确保您的存储桶与您创建所有其他训练资源 AWS 区域 的地方相同。有关更多信息,请参阅创建通用存储桶。
-
具有运行训练任务权限的 IAM 角色。请务必将 IAM 策略附加到中
AmazonSageMakerFullAccess
。有关更多信息,请参阅如何使用 SageMaker 执行角色。 -
基本的 Amazon Nova 食谱,请参阅获取亚马逊 Nova 食谱。
数据准备
准备高质量、格式正确的数据是大型语言模型微调过程中的关键第一步。无论您使用的是监督微调 (SFT) 还是直接偏好优化 (DPO),无论是采用全等级还是低等级自适应 (LoRa) 方法,您的数据都必须符合特定的格式要求,以确保成功的模型训练。本节概述了必要的数据格式、验证方法和最佳实践,可帮助您有效地准备数据集以微调 Amazon Nova 模型。
SFT
SFT 数据格式要求——对于全级 SFT 和 LoRa SFT,数据都应遵循匡威格式。有关此格式的示例和约束条件,请参阅准备数据以进行微调了解模型。
SFT 数据验证-要在提交数据集之前验证您的数据集格式,我们建议使用 Amazon Bedrock 示例jsonl
文件符合所需的格式规范,并在提交微调作业之前识别出任何潜在的问题。
DPO
DPO 数据格式要求——对于全等级的 DPO 和使用 LoRa 的 DPO,数据都应遵循匡威格式。数据集还必须采用与 SFT 相似的格式,唯一的不同是最后一回合需要有偏好对。
DPO 数据集其他约束-SFT 对数据集的其他限制相同。有关更多信息,请参阅数据集约束。需要一个用于训练的 JSONL 文件和一个用于验证的 JSONL 文件。验证集是可选的。
DPO 数据集建议-至少 1,000 个偏好对,便于有效训练。高质量的偏好数据将带来更有效的结果。
DPO 数据格式示例
// N-1 turns same as SFT format { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } // content list can contain multiple 'text' objects ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } // content list can contain multiple 'text' objects ], "preferenceLabel": "non-preferred" } ] }
DPO 数据格式示例(多圈)
{ "system": [ { "text": "..." } ], "messages":[ { "role": "user", "content": [ { "text": "..." } ] }, { "role": "assistant", "content": [ { "text": "..." } ] }, { "role": "user", "content": [ { "text": "..." } ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } ], "preferenceLabel": "non-preferred" } ] } ], }
DPO 数据格式示例(含图片)
{ "system": [ { "text": "..." } ], "messages":[ { "role": "user", "content": [ { "text": "..." }, { "text": "..." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/your-image.jpg", "bucketOwner": "your-aws-account-id" } } } } // "content" can have multiple "text" and "image" objects. // max image count is 10 ] }, { "role": "assistant", "content": [ { "text": "..." } ] }, { "role": "user", "content": [ { "text": "..." }, { "text": "..." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/your-image.jpg", "bucketOwner": "your-aws-account-id" } } } } // "content" can have multiple "text" and "image" objects. // max image count is 10 ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } ], "preferenceLabel": "non-preferred" } ] } ], }
训练作业默认为 1 天的时间限制,但出于说明目的,下表中的估计值假设训练持续时间为 5 天。作为最佳实践,我们建议将训练时限延长至最长 28 天,以适应更长的训练工作量。要申请提高限额,请参阅申请增加配额。
SFT 数据集限制
上下文长度 | 模型 | 方法 | 数据集 | 描述 |
---|---|---|---|---|
32k 个上下文长度作业 |
Amazon Nova Micro | 满等级和 LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多只能有 100k 条记录。 |
Amazon Nova Lite |
满级 | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 100k 条记录。 |
|
图像和视频 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 5 万条记录。 |
|||
LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 100k 条记录。 |
||
图像和视频 | 如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 90k 条记录。 | |||
Amazon Nova Pro |
满级 | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 40k 条记录。 |
|
图像和视频 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 30k 条记录。 |
|||
LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 40k 条记录。 |
||
图像和视频 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 35k 条记录。 |
|||
64k 上下文长度作业 |
Amazon Nova Micro | 满等级和 LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 64k,例如,运行了 5 个纪元,则最多只能有 5 万条记录。 |
Amazon Nova Lite |
满级 | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 64k,例如,运行了 5 个纪元,则最多可以有 5 万条记录。 |
|
图像和视频 |
如果您使用的数据集所有记录的上下文长度均为 64k,例如,运行了 5 个纪元,则最多可以有 30k 条记录。 |
|||
LoRa | - |
Nova Lite 在 64k 时不支持 LoRa。 |
||
Amazon Nova Pro | 满等级和 LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 64k,例如,运行了 5 个纪元,则最多可以有 17k 条记录。 |
|
图像和视频 |
如果您使用的数据集所有记录的上下文长度均为 64k,例如,运行了 5 个纪元,则最多可以有 15k 条记录。 |
DPO 数据集限制
上下文长度 | 模型 | 方法 | 数据集 | 描述 |
---|---|---|---|---|
16k 个上下文长度作业 |
Amazon Nova Micro | 满级 | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行了 5 个纪元,则最多只能有 120 万条记录。 |
LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行了 5 个纪元,则最多只能有 125k 条记录。 |
||
Amazon Nova Lite |
满级 | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行了 5 个纪元,则最多可以有 130 万条记录。 |
|
图像 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行 5 个时代,则可以在 2 天内完成 2 万个样本 |
|||
LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行了 5 个纪元,则最多可以有 140k 条记录。 |
||
图像 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行 5 个时代,则可以在 2 天内完成 2 万个样本。 |
|||
Amazon Nova Pro |
满级 | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行了 5 个纪元,则最多可以有 45k 条记录。 |
|
图像 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行 5 个时代,则可以在 4 天内完成 2 万个样本 |
|||
LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行了 5 个纪元,则最多可以有 5.5 万条记录。 |
||
图像 |
如果您使用的数据集所有记录的上下文长度均为 16k,例如,运行 5 个时代,则可以在 4 天内完成 2 万个样本 |
|||
32k 个上下文长度作业 |
Amazon Nova Micro | 满级 | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多只能有 45k 条记录。 |
LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多只能有 5 万条记录。 |
||
Amazon Nova Lite |
满级 | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 55k 条记录。 |
|
图像 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 35k 条记录。 |
|||
LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 60k 条记录。 |
||
图像 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 35k 条记录。 |
|||
Amazon Nova Pro | 满级 | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 20k 条记录。 |
|
图像 |
如果您使用的数据集所有记录的上下文长度均为 64k,例如,运行了 5 个纪元,则最多可以有 16k 条记录。 |
|||
LoRa | 仅限文本 |
如果您使用的数据集所有记录的上下文长度均为 32k,例如,运行了 5 个纪元,则最多可以有 22k 条记录。 |
||
图像 |
如果您使用的数据集所有记录的上下文长度均为 64k,例如,运行了 5 个纪元,则最多可以有 18k 条记录。 |
通过减少记录的时代数量或上下文长度,您可以提供更多记录。
全级 SFT 和 LoRa PEFT 配置
本节涵盖了有关全等级监督微调 (SFT) 和低等级自适应参数高效微调 (LoRa PEFT) 方法的配方配置指南。这些配方文件用作模型自定义任务的蓝图,允许您指定训练参数、超参数和其他关键设置,以确定模型如何从数据中学习。要调整超参数,请遵循选择超参数中的指导方针。
微调配置(全级 SFT 和 LoRa PEFT)
就配方而言,满级 SFT 和 LoRa PEFT 之间的唯一区别是 LoRa PEFT 配置,对于满级,该配置设置为 “空”,如果使用基于 LoRa Peft 的微调,则设置为适当的值。食谱 GitHub 库中提供了示例SageMaker HyperPod 食谱
关于 “运行” 配置。
键 | 定义 | Micro | 精简版 | Pro 版 | |
---|---|---|---|---|---|
运行配置 | 型号_类型 |
指定要使用的 Nova 模型变体。请勿修改此字段。 |
“亚马逊。 nova-micro-v1:0:128 k” |
“亚马逊。 nova-lite-v1:0:300 k” |
“亚马逊。 nova-pro-v1:0:300 k” |
模型名称或路径 |
基础模型的路径。 |
“nova-micro/prod” |
“nova-lite/prod” |
“nova-pro/prod” |
|
replicas |
用于分布式训练的计算实例数量。 |
2、4 或 8 |
4、8 或 16 |
6、12 或 24 |
关于 “training_config” 配置。
根密钥 | 儿童钥匙 | 定义 | 最小值 | 最大值 | |
---|---|---|---|---|---|
max_length |
以令牌为单位的最大序列长度。这决定了训练的上下文窗口大小。可调至最接近的 1024 倍数,最大值:65536(适用于 Lite Lora 32768)。 |
1024 |
65536,但支持 32768 的 Lite LoRa 除外。 | ||
全局批次大小 |
每个步骤的样本总数,允许的值为 16、32、64。最大值:Nova Pro 为 32,Nova Lite 和 Micro 为 64。 |
16 | Nova Pro 为 32,Nova Lite 和 Micro 为 64 | ||
培训师配置 | 训练者 | max_epochs |
通过训练数据集的完整传球次数。对于大多数自定义任务,1-5 个周期通常就足够了。建议最多保持 5 个。 |
1 | - |
模型配置 | 模型 | hidden_dropout |
丢弃隐藏状态输出的概率。增加 (0.0-0.2) 以减少对较小数据集的过度拟合。边界介于 0-1 之间。 |
0 | 1 |
模型 | 注意力_dropout |
注意力权重下降的概率。可以帮助概括。边界介于 0-1 之间。 |
0 | 1 | |
模型 | ffn_dropout |
丢弃前馈网络输出的概率。边界介于 0-1 之间。 |
0 | 1 | |
优化器配置 | model.optim | lr |
学习速率,控制优化期间的步长。限制介于 0 和 1 之间。为了获得良好的性能,通常设置在 1e-6 和 1e-4 之间。 |
0 | 1 |
model.optim | 名称 |
优化器算法。目前仅支持 |
- | - | |
model.optim | adam_w_mode |
启用 adamW 模式(对/错)。 |
- | - | |
model.optim | eps |
Epsilon 用于数值稳定性。 |
|||
model.optim | 重量衰减 |
L2 正则化强度,必须介于 0.0 和 1.0 之间。 |
0 | 1 | |
model.optim | 测试版 |
Adam 优化器测试版必须介于 0.0 和 1.0 之间。 |
0 | 1 | |
model.optim | 计划_热身_步骤 |
逐步提高学习率的步骤数。这提高了训练的稳定性。介于 1 到 20 之间。 |
1 | 20 | |
model.optim | 计划常量步骤 |
以恒定的学习速度步数。 |
1.00E-10 | 1.00E-06 | |
model.optim | sched.min_lr |
衰减结束时的最低学习率。限制介于 0 和 1 之间,但必须小于学习率。 |
0 | 1 | |
LoRa PEFT 配置 |
model.peft | peft_scheme |
使用 “lora” 或 “null”。 “lora” 使用 LoRa PEFT 方法进行参数高效的微调。 “null” 开始全等级微调。 |
- | - |
model.peft | lora_tuning.loraplus_lr_ratio |
LoRa+ 学习率缩放系数,必须介于 0.0 和 100.0 之间。 |
0 | 100 | |
model.peft | lora_tuning.alpha |
LoRa 权重的缩放系数。允许的值为 32、64、96、128、160 和 192。 |
32 | 192 | |
model.peft | lora_tuning.adapter_dropout |
LoRa 参数的正则化。必须介于 0.0 和 1.0 之间。 |
0 | 1 |
微调特定配置 (DPO)
与LoRa PEFT和 FullRank SFT相比,直接偏好优化(DPO)之间的唯一区别在于dpo_cfg配置和允许值。请参阅下表中的示例,了解专门允许 DPO。食谱 GitHub 库中提供了示例SageMaker HyperPod 食谱
根密钥 | 儿童钥匙 | 定义 | 最小值 | 最大值 | |
---|---|---|---|---|---|
max_length | 以令牌为单位的最大序列长度。这决定了训练的上下文窗口大小。可调至最接近的 1024 倍数,最大值:32,768。 |
1024 |
32768 |
||
全局批次大小 |
全局批次大小,允许的值为 {16、32、64、128、256}。 |
16 | 256 | ||
培训师配置 | 训练者 | max_epochs |
通过训练数据集的完整传球次数。对于大多数自定义任务,1-5 个周期通常就足够了。最大周期为 5。 |
1 | 5 |
模型配置 | 模型 | hidden_dropout |
丢弃隐藏状态输出的概率。增加 (0.0-0.2) 以减少对较小数据集的过度拟合。边界介于 0-1 之间。 |
0 | 1 |
模型 | 注意力_dropout |
注意力权重下降的概率。可以帮助概括。边界介于 0-1 之间。 |
0 | 1 | |
模型 | ffn_dropout |
丢弃前馈网络输出的概率。边界介于 0-1 之间。 |
0 | 1 | |
优化器配置 | model.optim | lr |
学习速率,控制优化期间的步长。限制介于 0 和 1 之间。为了获得良好的性能,通常设置在 1e-6 和 1e-4 之间。 |
0 | 1 |
model.optim | 名称 |
优化器算法。目前仅支持 |
- | - | |
model.optim | adam_w_mode |
启用 adamW 模式(对/错)。 |
- | - | |
model.optim | eps |
Epsilon 用于数值稳定性。 |
1.00E-10 | 1.00E-06 | |
model.optim | 重量衰减 |
L2 正则化强度,必须介于 0.0 和 1.0 之间。 |
0 | 1 | |
model.optim | 测试版 |
Adam 优化器测试版必须介于 0.0 和 1.0 之间。 |
0 | 1 | |
model.optim | 计划_热身_步骤 |
逐步提高学习率的步骤数。这提高了训练的稳定性。介于 1 到 20 之间。 |
1 | 20 | |
model.optim | 计划常量步骤 |
以恒定的学习速度步数。 |
|||
model.optim | sched.min_lr |
衰减结束时的最低学习率。限制介于 0 和 1 之间,但必须小于学习率。 |
0 | 1 | |
LoRa PEFT 配置 |
model.peft | peft_scheme |
使用 “lora” 或 “null”。 “lora” 使用 LoRa PEFT 方法进行参数高效的微调。 “null” 开始全等级微调。 |
- | - |
model.peft | lora_tuning.loraplus_lr_ratio |
LoRa+ 学习率缩放系数,必须介于 0.0 和 100.0 之间。 |
0 | 100 | |
model.peft | lora_tuning.alpha |
LoRa 权重的缩放系数。允许的值为 32、64、96、128、160 和 192。 |
32 | 192 | |
model.peft | lora_tuning.adapter_dropout |
LoRa 参数的正则化。必须介于 0.0 和 1.0 之间。 |
0 | 1 | |
DPO 配置 | model-dpo_cfg | beta |
优惠执行的力量。 |
0.001 | 0.1 |
在 SageMaker 训练作业中运行定制的 Nova 模型
本节演示如何通过 Jupyter 笔记本环境在 SageMaker 训练作业中运行自定义的 Nova 模型。您将找到一个完整的示例,该示例介绍了配置和启动训练作业的过程,以及用于选择相应容器镜像 URIs 和实例配置的参考表。这种方法使您可以对微调工作流程进行编程控制,同时利用 SageMaker托管基础设施进行模型自定义。有关更多信息,请参阅使用 A SageMaker I 估算器运行训练作业。
参考表
在运行示例笔记本之前,请参阅下表以选择相应的容器映像 URIs 和实例配置。
选择图片 URI
配方 | 映像 URI |
---|---|
SFT 图片 URI |
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-SFT-latest |
DPO 图片 URI |
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest |
选择实例类型和计数
模型 | 作业类型 | 实例类型 | 推荐的实例数 | 允许的实例数 |
---|---|---|---|---|
Amazon Nova Micro | 微调(SFT/DPO) |
p5.48xlarge |
2 | 2,4,8 |
Amazon Nova Lite | 微调(SFT/DPO) |
p5.48xlarge |
4 | 4,8,16 |
Amazon Nova Pro | 微调(SFT/DPO) |
p5.48xlarge |
6 | 6,12,24 |
示例笔记本
以下示例笔记本演示了如何运行训练作业。有关如何使用 SageMaker AI 训练作业自定义 Nova 模型的其他入门笔记本,请参阅使用 SageMaker AI 估算器运行训练作业。
# 1. Install dependencies !pip install sagemaker # 2. Import dependencies and initialize sagemaker session import sagemaker,boto3 sm = boto3.client('sagemaker', region_name='us-east-1') sagemaker_session = sagemaker.session.Session(boto_session=boto3.session.Session(), sagemaker_client=sm) # 3. Configure your job # Define the core configuration for launching a SageMaker Training Job. This includes input/output S3 URIs, container image, hardware setup, and other runtime parameters. Update the placeholders below before submitting the job. job_name = "<Your Job Name>" input_s3_uri = "<S3 path to input data>" validation_s3_uri = "<S3 path to validation data>" # optional, leave blank if no validation data output_s3_uri = "<S3 path to output location>" image_uri = "<Image URI from documentation>" # you can choose the image for SFT/DPO instance_type = "ml.p5.48xlarge" # do not change instance_count = <Integer number of hosts> # change hosts as needed. Refer to documentation for allowed values based on model type. role_arn = "<IAM Role you want to use to run the job>" recipe_path = "<Local path to the recipe file>" # 4. Launch SageMaker Training Job # This block sets up and runs the SageMaker training job using the PyTorch estimator. It configures the training image, hardware, input channels, and TensorBoard integration. Validation data is included if provided. from sagemaker.debugger import TensorBoardOutputConfig from sagemaker.pytorch import PyTorch from sagemaker.inputs import TrainingInput tensorboard_output_config = TensorBoardOutputConfig( s3_output_path=output_s3_uri, ) estimator = PyTorch( output_path=output_s3_uri, base_job_name=job_name, role=role_arn, instance_count=instance_count, instance_type=instance_type, training_recipe=recipe_path, sagemaker_session=sagemaker_session, image_uri=image_uri, tensorboard_output_config=tensorboard_output_config, # Add the setting for using TensorBoard. disable_profiler=True, debugger_hook_config=False ) trainingInput = TrainingInput( s3_data=input_s3_uri, distribution='FullyReplicated', s3_data_type='Converse' ) if (validation_s3_uri): validationInput = TrainingInput( s3_data=validation_s3_uri, distribution='FullyReplicated', s3_data_type='Converse' ) estimator.fit(inputs={"train": trainingInput, "validation": validationInput}) # inputs must be called "train" and "validation", do not change else: estimator.fit(inputs={"train": trainingInput}) # 5. Monitor your training job # To monitor your training job, you can either: # * Go to your AWS console -> Amazon Sagemaker AI -> Training -> Training Jobs # * run the following command # sm.describe_training_job(TrainingJobName="<complete training job name>")
超参数优化指南
要有效地微调 Nova LLM 模型,需要仔细选择超参数。虽然本节介绍了基本的配方结构和组件,但针对您的特定用例优化超参数通常需要额外的指导。有关超参数选择、最佳实践和优化策略的全面建议,请参阅选择超参数。本资源提供详细指导,帮助您根据数据集特征和训练目标选择适当的学习率、批次大小、训练周期和其他关键参数。我们建议您在微调配方配置以实现最佳模型性能时参阅本指南。
有关周期的最小值、最大值和默认值、学习速率和学习预热步骤的详细信息,请参阅用于理解模型的超参数。
常见配方修改
以下是一些基于特定用例的常见配方调整:
-
对于较小的数据集(小于 1,000 个示例)
training_config: max_epochs: 2 # More passes through a smaller dataset model: hidden_dropout: 0.1 # Increase regularization weight_decay: 0.01 # Increase regularization
-
在计算有限的情况下提高效率
peft: peft_scheme: "lora" lora_tuning:
-
用于复杂的指令调谐
optim: lr: 5e-6 # Lower learning rate for more stable learning sched: warmup_steps: 100 # Longer warmup for stability