本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 SageMaker 訓練任務微調 Amazon Nova 模型
使用 SageMaker 訓練任務微調 Amazon Nova 模型,可讓您針對特定使用案例自訂基礎模型。
先決條件
開始訓練任務之前,請注意下列事項。
-
Amazon S3 儲存貯體,用於存放訓練任務的輸入資料和輸出。您可以針對每種資料類型的兩個儲存貯體使用一個儲存貯體,或針對每種資料類型使用個別的儲存貯體。請確定您的儲存貯體位於您建立所有其他資源以進行訓練 AWS 區域 的相同位置。如需詳細資訊,請參閱建立一般用途儲存貯體。
-
具有執行訓練任務許可的 IAM 角色。請務必使用 連接 IAM 政策
AmazonSageMakerFullAccess。如需詳細資訊,請參閱如何使用 SageMaker 執行角色。 -
基本 Amazon Nova 配方,請參閱 取得 Amazon Nova 配方。
資料準備
準備高品質且格式正確的資料,是大型語言模型微調程序的重要第一步。無論您是使用監督式微調 (SFT) 或直接偏好設定最佳化 (DPO) 搭配全階或低階適應 (LoRA) 方法,您的資料都必須遵守特定格式要求,以確保成功的模型訓練。本節概述必要的資料格式、驗證方法和最佳實務,協助您有效地準備資料集,以微調 Amazon Nova 模型。
SFT
SFT 資料格式需求 - 對於完整排名 SFT 和 LoRA SFT,資料應遵循 Converse 格式。如需此格式的範例和限制條件,請參閱準備資料以進行微調了解模型。
SFT 資料驗證 - 若要在提交之前驗證資料集格式,我們建議您從 Amazon Bedrock 範例儲存庫jsonl檔案符合所需的格式規格,並在提交微調任務之前識別任何潛在問題。
DPO
DPO 資料格式需求 - 對於完整排名的 DPO 和具有 LoRA 的 DPO,資料應遵循 Converse 格式。資料集也需要採用與 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 個 epoch,則最多只能有 100k 個記錄。 |
|
Amazon Nova Lite |
完整排名 | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,您最多可以有 100k 個記錄。 |
|
| 影像和影片 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 50k 個記錄。 |
|||
| LoRA | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,您最多可以有 100k 個記錄。 |
||
| 影像和影片 | 如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 90k 個記錄。 | |||
|
Amazon Nova Pro |
完整排名 | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 40k 個記錄。 |
|
| 影像和影片 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 30k 個記錄。 |
|||
| LoRA | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 40k 個記錄。 |
||
| 影像和影片 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 35k 個記錄。 |
|||
|
64k 內容長度任務 |
Amazon Nova Micro | 完整排名和 LoRA | 僅限文字 |
如果您使用具有 64k 內容長度的資料集,例如執行 5 個 epoch,則最多只能有 50k 個記錄。 |
|
Amazon Nova Lite |
完整排名 | 僅限文字 |
如果您使用具有 64k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 50k 個記錄。 |
|
|
影像和影片 |
如果您使用具有 64k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 30k 個記錄。 |
|||
| LoRA | - |
Nova Lite 不支援 64k 的 LoRA。 |
||
| Amazon Nova Pro | 完整排名和 LoRA | 僅限文字 |
如果您使用具有 64k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 17k 個記錄。 |
|
|
影像和影片 |
如果您使用具有 64k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 15k 個記錄。 |
DPO 資料集限制
| 內容長度 | 模型 | 方法 | 資料集 | 描述 |
|---|---|---|---|---|
|
16k 內容長度任務 |
Amazon Nova Micro | 完整排名 | 僅限文字 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,則最多只能有 120k 個記錄。 |
| LoRA | 僅限文字 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,則最多只能有 125k 個記錄。 |
||
|
Amazon Nova Lite |
完整排名 | 僅限文字 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 130k 個記錄。 |
|
|
映像 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,您可以在 2 天內完成 20k 個範例 |
|||
| LoRA | 僅限文字 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 140k 個記錄。 |
||
|
映像 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,您可以在 2 天內完成 20k 個範例。 |
|||
|
Amazon Nova Pro |
完整排名 | 僅限文字 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 45k 個記錄。 |
|
|
映像 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,您可以在 4 天內完成 20k 個範例 |
|||
| LoRA | 僅限文字 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 55k 個記錄。 |
||
|
映像 |
如果您使用具有 16k 內容長度的資料集,例如執行 5 個 epoch,您可以在 4 天內完成 20k 個範例 |
|||
|
32k 內容長度任務 |
Amazon Nova Micro | 完整排名 | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多只能有 45k 個記錄。 |
| LoRA | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多只能有 50k 個記錄。 |
||
|
Amazon Nova Lite |
完整排名 | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 55k 個記錄。 |
|
| 映像 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 35k 個記錄。 |
|||
| LoRA | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 60k 個記錄。 |
||
| 映像 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 35k 個記錄。 |
|||
| Amazon Nova Pro | 完整排名 | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 20k 個記錄。 |
|
| 映像 |
如果您使用具有 64k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 16k 個記錄。 |
|||
| LoRA | 僅限文字 |
如果您使用具有 32k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 22k 個記錄。 |
||
| 映像 |
如果您使用具有 64k 內容長度的資料集,例如執行 5 個 epoch,則最多可以有 18k 個記錄。 |
透過減少 epoch 的數量或記錄的內容長度,您可以提供更多記錄。
全階 SFT 和 LoRA PEFT 組態
本節涵蓋全階監督式微調 (SFT) 和低階調整參數效率微調 (LoRA PEFT) 方法的配方組態指引。這些配方檔案可做為模型自訂任務的藍圖,讓您指定訓練參數、超參數和其他重要設定,以決定模型如何從資料中學習。若要調整超參數,請遵循選取超參數中的準則。
微調組態 (全階 SFT 和 LoRA PEFT)
在配方方面,完整排名 SFT 和 LoRA PEFT 的唯一區別是 LoRA PEFT 組態,如果使用 LoRA PEFT 型微調,則將完整排名設定為 'null',並將 設定為適當的值。範例配方可在 SageMaker HyperPod 配方
關於「執行」組態。
| 金錀 | 定義 | 微型 | Lite | Pro | |
|---|---|---|---|---|---|
| 執行組態 | model_type |
指定要使用的 Nova 模型變體。請勿修改此欄位。 |
「amazon.nova-micro-v1:0:128k」 |
「amazon.nova-lite-v1:0:300k」 |
「amazon.nova-pro-v1:0:300k」 |
| model_name_or_path |
基礎模型的路徑。 |
"nova-micro/prod" |
"nova-lite/prod" |
"nova-pro/prod" |
|
| 複本 |
用於分散式訓練的運算執行個體數目。 |
2、4 或 8 |
4、8 或 16 |
6、12 或 24 |
關於「training_config」組態。
| 根金鑰 | 子金鑰 | 定義 | 最少 | 最多 | |
|---|---|---|---|---|---|
| max_length |
字符中的序列長度上限。這會決定訓練的內容視窗大小。可調校至最接近的 1024 倍數,最大值:65536 (適用於 Lite Lora 32768)。 |
1024 |
65536,但支援 32768 的 Lite LoRA 除外。 | ||
| global_batch_size |
每個步驟的總範例,允許的值為 16、32、64。最大值:Nova Pro 為 32,Nova Lite 和 Micro 為 64。 |
16 | 32 for Nova Pro、64 for Nova Lite 和 Micro。 | ||
| 培訓人員組態 | 培訓師 | max_epochs |
完成通過訓練資料集的數目。對於大多數自訂任務,1-5 個 epoch 通常就足夠了。建議最多保留 5 個。 |
1 | - |
| 模型組態 | 模型 | 隱藏_捨棄 |
捨棄隱藏狀態輸出的機率。增加 (0.0-0.2) 以減少對較小資料集的過度擬合。邊界介於 0 - 1 之間。 |
0 | 1 |
| 模型 | attention_dropout |
降低注意力權重的機率。可協助進行一般化。邊界介於 0 - 1 之間。 |
0 | 1 | |
| 模型 | ffn_dropout |
捨棄前饋網路輸出的機率。邊界介於 0 - 1 之間。 |
0 | 1 | |
| 最佳化工具組態 | model.optim | lr |
學習率,在最佳化期間控制步進大小。限制介於 0 和 1 之間。通常設定為 1e-6 和 1e-4 之間,以獲得良好的效能。 |
0 | 1 |
| model.optim | name |
最佳化工具演算法。目前僅支援 |
- | - | |
| model.optim | adam_w_mode |
啟用 AdamW 模式 (true/false)。 |
- | - | |
| model.optim | eps |
Epsilon 提供數值穩定性。 |
|||
| model.optim | weight_decay |
L2 正規化強度,必須介於 0.0 和 1.0 之間。 |
0 | 1 | |
| model.optim | 測試版 |
Adam 最佳化工具 Beta 版必須介於 0.0 和 1.0 之間。 |
0 | 1 | |
| model.optim | sched_warmup_steps |
逐步提高學習率的步驟數量。這可改善訓練穩定性。介於 1 到 20 之間。 |
1 | 20 | |
| model.optim | sched_constant_steps |
持續學習速率的步驟。 |
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 允許的 。範例配方可在 SageMaker HyperPod 配方
| 根金鑰 | 子金鑰 | 定義 | 最少 | 最多 | |
|---|---|---|---|---|---|
| max_length | 字符中的序列長度上限。這會決定訓練的內容視窗大小。可調校至最接近的 1024 倍數,最大值:32,768。 |
1024 |
32768 |
||
| global_batch_size |
全域批次大小,允許的值為 {16, 32, 64, 128, 256}。 |
16 | 256 | ||
| 培訓人員組態 | 培訓師 | max_epochs |
完成通過訓練資料集的數目。對於大多數自訂任務,1-5 個 epoch 通常就足夠了。epoch 上限為 5。 |
1 | 5 |
| 模型組態 | 模型 | 隱藏_捨棄 |
捨棄隱藏狀態輸出的機率。增加 (0.0-0.2) 以減少對較小資料集的過度擬合。邊界介於 0 - 1 之間。 |
0 | 1 |
| 模型 | attention_dropout |
降低注意力權重的機率。可協助進行一般化。邊界介於 0 - 1 之間。 |
0 | 1 | |
| 模型 | ffn_dropout |
捨棄前饋網路輸出的機率。邊界介於 0 - 1 之間。 |
0 | 1 | |
| 最佳化工具組態 | model.optim | lr |
學習率,在最佳化期間控制步進大小。限制介於 0 和 1 之間。通常設定為 1e-6 和 1e-4 之間,以獲得良好的效能。 |
0 | 1 |
| model.optim | name |
最佳化工具演算法。目前僅支援 |
- | - | |
| model.optim | adam_w_mode |
啟用 AdamW 模式 (true/false)。 |
- | - | |
| model.optim | eps |
Epsilon 提供數值穩定性。 |
1.00E-10 | 1.00E-06 | |
| model.optim | weight_decay |
L2 正規化強度,必須介於 0.0 和 1.0 之間。 |
0 | 1 | |
| model.optim | Beta 版 |
Adam 最佳化工具 Beta 版必須介於 0.0 和 1.0 之間。 |
0 | 1 | |
| model.optim | sched_warmup_steps |
逐步提高學習率的步驟數量。這可改善訓練穩定性。介於 1 到 20 之間。 |
1 | 20 | |
| model.optim | sched_constant_steps |
持續學習速率的步驟。 |
|||
| 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 的受管基礎設施進行模型自訂。如需詳細資訊,請參閱使用 SageMaker AI 估算器來執行訓練任務。
參考資料表
在執行範例筆記本之前,請參閱下表以選取適當的容器映像 URIs和執行個體組態。
選取映像 URI
| Recipe | 映像 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 模型需要仔細選擇超參數。雖然本節說明基本配方結構和元件,但針對特定使用案例最佳化超參數通常需要額外的指導。如需超參數選取、最佳實務和最佳化策略的完整建議,請參閱選取超參數。此資源提供詳細的指引,以根據您的資料集特性和訓練目標,選擇適當的學習率、批次大小、訓練 epoch 和其他關鍵參數。建議您在微調配方組態時參閱本指南,以獲得最佳模型效能。
如需 epoch、學習速率和學習暖機步驟的最小值、最大值和預設值的詳細資訊,請參閱了解模型的超參數。
常見的配方修改
以下是根據特定使用案例的一些常見配方調整:
-
對於較小的資料集 (< 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