亚马逊 Nova 蒸馏法 - 亚马逊 SageMaker AI

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

亚马逊 Nova 蒸馏法

本快速入门指南可帮助您开始使用人工智能上的监督微调 (SFT) 进行 Amazon Nova 模型蒸馏。 SageMaker

概念

模型蒸馏是一种将知识从大型高级模型转移到更小、更高效的模型的方法。对于亚马逊Nova机型,较大的 “教师” 模型(例如Amazon Nova Pro或Amazon Nova Premier)将其功能传递给了较小的 “学生” 模型(例如亚马逊Nova Lite或Amazon Nova Micro)。这将创建一个自定义模型,在使用更少资源的同时保持高性能。

关键组件

蒸馏过程主要涉及两种类型的模型:

教师模型作为知识来源,包括:

  • 亚马逊 Nova Pro(亚马逊。 nova-pro-v1:0)

  • 亚马逊 Nova Premier(亚马逊。 nova-premier-v1:0)

学生模型接收和运用知识:

  • 亚马逊 Nova Lite(亚马逊。 nova-lite-v1:0300 k)

  • 亚马逊 Nova Micro(亚马逊。 nova-micro-v1:0:128 k)

  • 亚马逊 Nova Pro(亚马逊。 nova-pro-v1:0:300 k)-仅在使用亚马逊 Nova Premier 作为教师时可用

使用案例

在以下情况下,模式蒸馏特别有益:

  • 您的应用程序对延迟、成本和准确性有严格的要求。

  • 您需要针对特定任务使用自定义模型,但缺少足够的高质量带标签的训练数据。

  • 您希望与高级模型的性能相匹配,同时保持较小模型的效率。

先决条件

  • AWS 账户 可以访问 Amazon Nova 型号和相应的服务配额(最少 6 个 P5 和 1 个 R5 实例)。

  • 具有 SageMaker 训练任务权限的 IAM 角色。

  • 用于存储训练数据和输出的 Amazon S3 存储桶。

数据增强设置

数据增强阶段使用 SageMaker 训练作业,使用教师模型生成高质量的训练数据。本节详细介绍了设置过程和要求。

IAM 角色

要创建 IAM 角色和附加策略,请参阅创建角色和附加策略(控制台)。如果您使用 AWS CLI,请按照 create- role 和中的说明进行操作。attach-role-policy有关更多信息,请参阅 SageMaker AI 开发者指南中的如何使用 SageMaker AI 执行角色

以下是示例命令供您参考。

创建 A SageMaker I 执行角色

该角色是通过信任关系创建的,允许 SageMaker 人工智能 Amazon Bedrock 担任这个角色。这使这些服务能够在执行批量推理作业时代表您执行操作。

aws iam create-role \ --role-name NovaCustomizationRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": ["sagemaker.amazonaws.com", "bedrock.amazonaws.com"] }, "Action": "sts:AssumeRole" } ] }'

附上必要的政策

# Attach AmazonSageMakerFullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess # Attach AmazonBedrockFullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonBedrockFullAccess # Attach S3 access policy aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess # Attach AmazonEC2FullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess # Attach AmazonEC2ContainerRegistryFullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess # Attach AmazonEC2ContainerRegistryFullAccess aws iam attach-role-policy \ --role-name NovaCustomizationRole \ --policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess

将以下内联策略附加到蒸馏容器所需的客户执行角色。

  • AWS KMS 权限:允许角色与 AWS 密钥管理服务进行交互,这是访问加密资源或管理加密密钥所必需的。

  • IAM:PassRole:当一个服务需要将此角色传递给另一个服务时,通常需要此权限,这是 AWS 服务集成中的常见模式。

aws iam put-role-policy \ --role-name NovaCustomizationRole \ --policy-name Distillation-Additional-Permissions\ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*" } ] }

亚马逊 VPC 配置

要使用为 A SageMaker I 训练任务创建 Amazon VPC 配置 AWS Management Console,请按照配置您的私有 VPC 进行 SageMaker 训练(控制台)中的说明进行操作。

创建新的亚马逊 VPC

Name: Distillation-VPC IPv4 CIDR: 10.0.0.0/16 (or your preferred range) Availability Zones: 2 Public Subnets: 2 Private Subnets: 2 NAT Gateways: 1 (in one AZ)

创建安全组

Name: Distillation-SG Description: Security group for data distillation jobs Inbound Rules: Allow all traffic from self Outbound Rules: Allow all traffic (0.0.0.0/0)

为以下服务创建 VPC 终端节点

com.amazonaws.[region].s3 com.amazonaws.[region].sagemaker.api com.amazonaws.[region].sagemaker.runtime com.amazonaws.[region].bedrock.api com.amazonaws.[region].bedrock.runtime com.amazonaws.[region].sts com.amazonaws.[region].logs com.amazonaws.[region].ecr.api com.amazonaws.[region].ecr.dkr

对于每个端点:

  • 选择您的蒸馏-VPC

  • 选择私有子网

  • 选择 Destillation-SG 安全组

AWS KMS 钥匙

使用 Amazon Bedrock 批量推理时,需要 AWS KMS 密钥来确保数据安全和合规性。Amazon Bedrock 批量推理任务要求使用 AWS KMS 密钥对输入和输出 Amazon S3 存储桶进行加密,以确保静态数据保护。

使用 AWS CLI 以下命令创建 KMS 密钥:

# Create KMS key aws kms create-key \ --description "KMS key for Amazon Bedrock batch inference Amazon S3 bucket" \ --region us-east-1

该命令将输出包括 ARN 在内的关键信息。输出示例:

{ "KeyMetadata": { "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Arn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } }
注意

保存输出中的 KMS 密钥 ARN,因为在下一节中创建 Amazon S3 存储桶时需要使用它。

Amazon S3 存储桶

您需要两种类型的 Amazon S3 存储。客户管理的 Amazon S3 存储桶存储您的输入数据和输出manifest.json文件。您可以创建和管理此存储桶,并且可以将单个存储桶用于输入和输出。此存储桶必须配置 KMS 加密,因为它将存储敏感的输出数据,并且将由 Amazon Bedrock 批量推理作业使用——Amazon Bedrock 需要使用 KMS 加密的存储桶来处理批量推理任务。

服务托管的 Amazon S3 存储桶存储模型权重。服务托管的 Amazon S3 存储桶是在您的第一次训练作业期间自动创建的。它具有受限的访问控制,只能通过清单文件访问特定路径。

要在特定存储桶中创建存储桶 AWS 区域,请使用 c reate-bucket CLI 命令

创建带 AWS KMS 加密功能的 Amazon S3 存储桶的命令示例。{kms_key_arn}用您的 AWS KMS 密钥 ARN 替换。如果您尚未创建 AWS KMS 密钥,则需要先创建密钥。

aws s3api create-bucket \ --bucket {my_bucket_name} \ --region {aws_region} \ --create-bucket-configuration LocationConstraint={aws_region} \ --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "{kms_key_arn}" }, "BucketKeyEnabled": true } ] }'

开始 SageMaker 训练作业

在开始训练作业之前,请准备好数据。

数据格式要求—— 您的输入数据集必须采用 JSONL 格式,每行都包含一个反向格式的样本,有关更多信息,请参阅准备数据以提炼理解模型。

数据集限制

  • 最低提示数:100

  • 最大文件大小:2GB

  • 最大线路长度:180KB

  • 文件格式:仅限 JSONL

要上传输入数据,请运行以下命令。

aws s3 cp /path/to/input-data/ s3://customer-input-data-bucket/ —recursive

数据增强配方

您可以从配方库中获取蒸馏配SageMaker HyperPod 方。蒸馏配方在目录下:recipes-collection/recipes/fine-tuning/nova. 数据增强过程由 YAML 配置文件控制。以下是每个参数的详细说明。所有字段均为必填字段。

参数 描述
名称

训练作业的描述性名称。这有助于确定您的工作 AWS Management Console。

蒸馏数据

启用数据提炼作业,请勿修改此字段。

maxNumberOf提示

数据集中提示的最大数量。

maxResponseLength

每个提示的最大响应长度(标记)。

maxInputFileSizeInGB

输入文件的最大大小(以 GB 为单位)。

maxLineLengthinkB

输入文件中单行的最大大小(以 KB 为单位)。

maxStudentModelFineTuningContextLengthInTokens

学生模型的最大上下文窗口大小(标记)。is 的值不得超过学生模型的容量。您可以根据学生模型容量将此值设置为 32k 或 64k。

teacherModelId

设置教师型号 ID 时,请从以下两个选项中进行选择:

  • 对于亚马逊 Titan Premier 来说:“us.amazon。 nova-premier-v1:0” 表示 IAD 区域。注意:这仅在 IAD 区域可用。

  • 对于亚马逊 Nova Pro:“us.amazon。 nova-pro-vIAD 地区为 1:0,“eu.amazon”。 nova-pro-v对于 ARN 区域,则为 1:0。

温度

控制响应随机性(建议平衡为 0.7)。

top_p

代币抽样的累积概率阈值(建议使用 0.9)。

客户存储桶

用于存储 input/output 数据的亚马逊 S3 存储桶。

kms_key

AWS KMS 加密 S3 中输出的密钥,Bedrock 批量推理需要此密钥来存储推理作业返回的输出。

限制

作为 Nova Premier 的教师模型——由于亚马逊 Bedrock 批量推断在 ARN (us-east-1) 区域不可用,因此仅在 IAD 区域 () 中支持。eu-north-1

最佳实践

数据准备

  • 包括 100 个带有标签的高质量示例,以指导教师模型

  • 提交前请移除质量差的标签

  • 遵循文本理解提示最佳实践

  • 在开始蒸馏之前,使用教师模型测试提示

型号选择

  • 使用 Nova Pro 作为一般用例的老师

  • 考虑使用 Nova Premier 获取专业领域知识

  • 根据延迟和成本要求选择学生模型

性能优化

使用 pySDK 开始工作

以下示例笔记本演示了如何运行蒸馏 SageMaker 训练作业。有关更多信息,请参阅使用 A SageMaker I 估算器运行训练作业

import os import sagemaker,boto3 from sagemaker.pytorch import PyTorch from sagemaker.inputs import TrainingInput sagemaker_session = sagemaker.Session() role = sagemaker.get_execution_role() # SETUP job_name = <Your_job_name> # Must be unique for every run input_s3_uri = <S3 URI to your input dataset> # Must end in .jsonl file output_s3_uri = <S3 URI to your output bucket> + job_name image_uri = "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-distillation-repo:SM-TJ-DISTILL-LATEST" # Do not change instance_type = "ml.r5.4xlarge" # Recommedation is to use cpu instances instance_count = 1 # Must be 1, do not change role_arn = <IAM role to execute the job with> recipe_path = <Local path to your recipe> # Execution 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, max_run=432000, sagemaker_session=sagemaker_session, image_uri=image_uri, subnets= ['subnet-xxxxxxxxxxxxxxxxx','subnet-xxxxxxxxxxxxxxxxx'], # Add subnet groups created in previous steps security_group_ids= ['sg-xxxxxxxxxxxxxxxxx'], # Add security group created in previous steps disable_profiler=True, debugger_hook_config=False ) trainingInput = TrainingInput( s3_data=input_s3_uri, distribution='FullyReplicated', s3_data_type='Converse' ) # The keys must be "train". estimator.fit(inputs={"train": trainingInput})

验证增强的数据质量

在进行微调之前,验证增强数据的质量至关重要:

  1. 查看输出存储桶中的sample_training_data.jsonl文件。此文件包含来自增强数据集的 50 个随机样本。

  2. 手动检查这些样本的相关性、连贯性以及与您的用例的一致性。

  3. 如果质量不符合您的预期,则可能需要调整输入数据或蒸馏参数,然后重新运行数据增强过程。

数据增强完成后,第二阶段涉及使用 Amazon 对学生模型进行微调。 SageMaker HyperPod有关更多信息,请参阅 监督微调 (SFT)

在 SFT 训练配方中,您可以传递从上一个作业返回的数据集路径。

data_s3_path: "s3://[escrow-bucket]/[job-name]/distillation_data/training_data.jsonl"

还要覆盖上一步中生成的推荐训练配置。

限制

  • 在此增强数据上仅支持 SFT Nova 微调技术。

  • 仅支持亚马逊上的 SFT Nova 微调技术。 SageMaker HyperPod

  • 不支持多模态蒸馏。

  • 不支持自定义教师模型。