Amazon Nova 蒸餾 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon Nova 蒸餾

此快速入門指南可協助您在 SageMaker AI 上使用監督式微調 (SFT) 來開始使用 Amazon Nova 模型蒸餾。

模型蒸餾是一種將大型、進階模型中的知識傳輸到較小、高效模型的方法。使用 Amazon Nova 模型時,較大的「教師」模型 (例如 Amazon Nova Pro 或 Amazon Nova Premier) 會將其功能傳遞給較小的「學生」模型 (例如 Amazon Nova Lite 或 Amazon Nova Micro)。這會建立一個能維持高效能同時使用較少資源的自訂模型。

關鍵元件

蒸餾程序主要涉及兩種類型的模型:

教師模型做為知識來源,包含:

  • Amazon Nova Pro (amazon.nova-pro-v1:0)

  • Amazon Nova Premier (amazon.nova-premier-v1:0)

學生模型會接收並實作知識:

  • Amazon Nova Lite (amazon.nova-lite-v1:0:300k)

  • Amazon Nova Micro (amazon.nova-micro-v1:0:128k)

  • Amazon Nova Pro (amazon.nova-pro-v1:0:300k) - 僅適用於使用 Amazon Nova Premier 做為教師時

使用案例

在下列情況下,模式蒸餾特別有益:

  • 您的應用程式具有嚴格的延遲、成本和正確性需求。

  • 您需要特定任務的自訂模型,但缺少足夠的高品質標記訓練資料。

  • 您想要符合進階模型的效能,同時保持較小模型的效率。

先決條件

  • AWS 帳戶可存取 Amazon Nova 模型和適當的服務配額 (最低 6 個 P5 和 1 個 R5 執行個體)。

  • 具有 SageMaker 訓練任務許可的 IAM 角色。

  • 用來儲存訓練資料和輸出的 Amazon S3 儲存貯體。

設定資料增強

資料增強階段使用 SageMaker 訓練任務,以使用教師模型產生高品質的訓練資料。本節詳細說明設定程序和需求。

IAM 角色

若要建立 IAM 角色和連接政策,請參閱建立角色和連接政策 (主控台)。如果您使用 AWS CLI,請依照 create-roleattach-role-policy 中的指示。如需詳細資訊,請參閱《SageMaker AI 開發人員指南》中的如何使用 SageMaker AI 執行角色

以下的範例命令供您參考。

建立一個 SageMaker AI 執行角色

此角色是透過信任關係建立的,允許 SageMaker AI、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許可:允許角色與 AWSKey Management Service 互動,這是存取加密資源或管理加密金鑰的必要條件。

  • 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": "*" } ] }

Amazon VPC 組態

若要使用 為 SageMaker AI 訓練任務建立 Amazon VPC 組態AWS 管理主控台,請遵循設定 SageMaker 訓練的私有 VPC (主控台) 中的指示。

建立新的 Amazon 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

對於每個端點:

  • 選取您的 Distillation-VPC

  • 選擇私有子網路

  • 選取 Distillation-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 區域,請使用 create-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 組態檔案控制。以下是每個參數的詳細說明。全部都是必要欄位。

參數 Description
name

訓練任務的描述性名稱。這有助於在 中識別您的任務AWS 管理主控台。

distillation_data

啟用資料蒸餾任務,請勿修改此欄位。

maxNumberOfPrompts

資料集中提示數目的上限。

maxResponseLength

每個提示的回應長度上限 (記號)。

maxInputFileSizeInGB

輸入檔案的大小上限 (以 GB 為單位)。

maxLineLengthInKB

輸入檔案中單一行的大小上限 (以 KB 為單位)。

maxStudentModelFineTuningContextLengthInTokens

學生模型的內容視窗大小上限 (記號)。此值不得超過學生模型容量。您可以根據學生模型容量,將此值設定為 32k 或 64k。

teacherModelId

當您設定教師模型 ID 時,有兩種選擇:

  • 對於 Amazon Nova Premier:選擇適用於 IAD 區域的 "us.amazon.nova-premier-v1:0"。注意:這僅適用於 IAD 區域。

  • 對於 Amazon Nova Pro:選擇適用於 IAD 區域的 "us.amazon.nova-pro-v1:0",和適用於 ARN 區域的 "eu.amazon.nova-pro-v1:0"。

溫度

控制回應隨機性 (建議使用 0.7 以取得平衡)。

top_p

用於記號抽樣的累積機率閾值 (建議使用 0.9)。

customer_bucket

輸入/輸出資料的 Amazon S3 儲存貯體。

kms_key

AWS KMS在 S3 中加密輸出的金鑰。Bedrock 批次推論需要此金鑰來存放推論任務傳回的輸出。

限制

對於做為 Nova Premier 的教師模型 - 僅 IAD 區域 (us-east-1) 中支援,因為 Amazon Bedrock 批次推論不適用於 ARN (eu-north-1) 區域中。

最佳實務

資料準備

  • 包含 100 個高品質標籤範例來引導教師模型

  • 在提交之前移除品質不佳的標籤

  • 依照文字理解提示最佳實務

  • 開始蒸餾之前,先使用教師模型測試提示

模型選擇

  • 使用 Nova Pro 做為一般使用案例的教師

  • 考慮使用 Nova Premier 以取得專業領域知識

  • 根據延遲和成本需求選擇學生模型

效能最佳化

  • 從建議的溫度 (0.7) 和 top_p (0.9) 開始

  • 在微調之前先驗證增強的資料品質

  • 依照選取超參數中的指導方針調整超參數

使用 PySDK 啟動任務

下列範例筆記本示範如何執行 SageMaker 訓練任務以進行蒸餾。如需詳細資訊,請參閱使用 SageMaker AI 估算器執行訓練任務

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})

CloudWatch 日誌

日誌可在您 AWS 帳戶 中 /aws/sagemaker/TrainingJobs 日誌群組下的 Amazon CloudWatch 中取得。您會看到每個主機會有一個日誌檔案用於訓練任務。

成功的訓練

對於成功的訓練任務,您會在日誌結尾處看到日誌訊息「訓練完成」。

輸出儲存貯體包含下列檔案:

  • distillation_data/manifest.json:包含已增強資料的位置。您可以使用此資料集來啟動 Amazon Nova 微調任務。此資料集僅支援 SFT 訓練。

    { "distillation_data": "s3://customer_escrow_bucket/job_id/distillation_data/" }
  • distillation_data/sample_training_data.jsonl:此 JSONL 檔案包含 50 個用於預覽的增強資料範例,可協助您判斷資料品質。

  • distillation_data/training_config.json:此檔案包含適用於 Amazon Nova 微調任務的建議超參數。以下是範例 檔案:

    { "epochCount": 5, "learningRate": 1e-05, "batchSize": 1, "learningRateWarmupSteps": 1 }

驗證增強資料品質

在繼續進行微調之前,請務必驗證增強資料的品質:

  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 微調技術。

  • 僅支援 Amazon SageMaker HyperPod 上的 SFT Nova 微調技術。

  • 不支援多模態蒸餾。

  • 不支援自訂教師模型。