

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

# SageMaker HyperPod 上的 Amazon Nova 自訂
<a name="nova-hp"></a>

您可以使用 Amazon Nova [配方自訂 Amazon Nova 模型，包括增強型 Amazon Nova](nova-model-recipes.md) 2.0 模型，並在 Hyperpod 上對其進行訓練。配方是 YAML 組態檔案，可將有關如何執行模型自訂任務的詳細資訊提供給 SageMaker AI。SageMaker HyperPod 支援兩種類型的服務：Forge 和非 Forge。

Hyperpod 提供具有最佳化 GPU 執行個體和 Amazon FSx for Lustre 儲存的高效能運算， 透過與 TensorBoard、 靈活的檢查點管理可反覆改進， 無縫部署到 Amazon Bedrock 以進行推論， 和有效率的可擴展多節點分散式訓練，共同為組織提供安全、 執行者、 和彈性的環境，可根據其特定業務需求量身打造 Amazon Nova 模型。

SageMaker HyperPod 上的 Amazon Nova 自訂會在服務管理的 Amazon S3 儲存貯體中存放模型成品，包括模型檢查點。服務受管儲存貯體中的成品會使用 SageMaker AI 受管 AWS KMS 金鑰加密。服務受管 Amazon S3 儲存貯體目前不支援使用客戶受管 KMS 金鑰進行資料加密。您可以使用此檢查點位置進行評估任務或 Amazon Bedrock 推論。

標準定價適用於運算執行個體、Amazon S3 儲存體和 FSx for Lustre。如需定價詳細資訊，請參閱 [Hyperpod 定價](https://aws.amazon.com/sagemaker-ai/pricing/)、[Amazon S3 定價](https://aws.amazon.com/s3/pricing/)和 [FSx for Lustre 定價](https://aws.amazon.com/fsx/lustre/pricing/)。

## Amazon Nova 2 模型的運算需求
<a name="nova-hp-compute-2"></a>

下表摘要說明 Amazon Nova 2 模型的 SageMaker HyperPod 和 SageMaker AI 訓練任務訓練的運算需求。


**Nova 2 訓練需求**  

| 訓練技術 | 最小執行個體 | 執行個體類型 | GPU 計數 | 備註 | 支援模型 | 
| --- |--- |--- |--- |--- |--- |
| SFT (LoRA) | 4 | P5.48xlarge | 16 | 具參數效率的微調 | Nova 2 Lite | 
| SFT （完整排名） | 4 | P5.48xlarge | 32 | 完整模型微調 | Nova 2 Lite | 
| SageMaker 訓練任務 (LoRA) 上的 RFT | 2 | P5.48xlarge | 16 |  AWS 環境中的自訂獎勵函數 | Nova 2 Lite | 
| SageMaker 訓練任務的 RFT （完整排名） | 4 | P5.48xlarge | 32 | 32K 內容長度 | Nova 2 Lite | 
| SageMaker HyperPod 上的 RFT | 8 | P5.48xlarge | 64 | 預設 8192 內容長度 | Nova 2 Lite | 
| CPT | 4 | P5.48xlarge | 16 | 每天處理每個執行個體大約 400M個字符 | Nova 2 Lite | 

若要在 Hyperpod 上最佳化 Amazon Nova 模型自訂工作流程，請遵循這些建議的最佳實務，以有效率地訓練、資源管理和成功部署模型。

## Amazon Nova 自訂的最佳實務
<a name="best-practices"></a>

### 概觀
<a name="nova-customization-overview"></a>

本節提供自訂技術的概觀，並協助您選擇符合您需求和可用資料的最佳方法。

#### LLM 訓練的兩個階段
<a name="nova-llm-training-stages"></a>

大型語言模型訓練包含兩個主要階段：訓練前和訓練後。在預先訓練期間，模型會處理原始文字權杖，並針對下一個權杖預測進行最佳化。此程序會建立模式完成器，從 Web 和策劃的文字中吸收語法、語意、事實和推理模式。不過，預先訓練的模型不了解指示、使用者目標或內容適當的行為。它以適合其訓練分佈的任何樣式繼續文字。預先訓練的模型會自動完成，而不是遵循指示、產生不一致的格式，並且可以從訓練資料反映不良的偏差或不安全的內容。訓練前會建置一般能力，而不是任務實用性。

訓練後會將模式完成器轉換為有用的助理。您會執行多輪受管微調 (SFT)，以教導模型遵循指示、遵循結構描述和政策、呼叫工具，並透過模擬高品質的示範來產生可靠的輸出。此對齊會教導模型以任務而非文字的形式回應提示以繼續。然後，套用強化微調 (RFT)，使用可衡量的意見回饋 （例如驗證器或 LLM-as-a-judge)、平衡準確性與簡潔性、安全性與涵蓋範圍，或在限制下進行多步驟推理等權衡。實際上，您會在週期中替換 SFT 和 RFT，將預先訓練的模型塑造為可靠且符合政策的系統，以一致地執行複雜的任務。

### 選擇正確的自訂方法
<a name="nova-choosing-customization-approach"></a>

在本節中，我們將介紹訓練後自訂策略：RFT 和 SFT。

#### 強化微調 (RFT)
<a name="nova-reinforcement-fine-tuning"></a>

強化微調透過意見回饋訊號改善模型效能，這些訊號是可測量的分數或獎勵，表示回應品質，而不是直接監督並準確回答。與從輸入輸出對中學習的傳統監督式微調不同，RFT 使用獎勵函數來評估模型回應，並反覆最佳化模型以最大化這些獎勵。此方法非常適合定義確切正確輸出具有挑戰性的任務，但您可以可靠地測量回應品質。RFT 可讓模型透過試驗和意見回饋來學習複雜的行為和偏好，因此非常適合需要細微決策、創意問題解決或遵守您可以程式設計方式評估的特定品質標準的應用程式。例如，回答複雜的法律問題是 RFT 的理想使用案例，因為您想要教導模型如何更準確地回答問題。

##### 運作方式
<a name="nova-rft-how-it-works"></a>

在強化微調中，您可以從指令調校的基準開始，並將每個提示視為小型競賽。對於指定的輸入，您從模型中抽樣一些候選答案，使用獎勵函數對每個答案進行評分，然後在該群組中對其進行排名。更新步驟會調節模型，使分數較高的候選者在下次的可能性更高，分數較低的候選者的可能性更低，而stay-close-to-baseline的限制則可防止行為偏離或變得模糊或攻擊。您可以在許多提示上重複此迴圈、重新整理硬案例、在您看到入侵時收緊驗證器或判斷摩擦，以及持續追蹤任務指標。

##### 何時使用 RFT
<a name="nova-rft-when-to-use"></a>

受益於 RFT 的任務具有多種特徵。即使單一正確輸出難以指定，它們仍有可測量的成功訊號。他們認可部分點數或分級品質，因此您可以在提示中或使用獎勵函數，對較差的答案進行排名。它們涉及多個必須平衡的目標 （例如簡潔、清晰、安全或成本的準確性）。它們需要遵守您可以程式設計方式檢查的明確限制。它們在可觀察結果的工具媒介型或環境型設定中操作 （成功或失敗、延遲、資源使用）。它們發生在低標籤的機制中，其中收集黃金目標很昂貴，但自動化或以摩擦為基礎的意見回饋有很多。當您可以將品質轉換為可靠的純量或排名，並希望模型優先放大分數較高的行為，而不需要詳盡的標記目標時，RFT 最有效。

**考慮下列情況下的其他方法：**
+ 您有大量且可靠的標籤輸入輸出對 – 使用 SFT
+ 主要差距是知識或行話 – 使用擷取擴增產生 (RAG)
+ 您的獎勵訊號發出吵雜或不可靠，而且您無法使用更好的 Rubrics 或 Checker 進行修正 – 在 RFT 之前先穩定該訊號

##### 何時不使用 RFT
<a name="nova-rft-when-not-to-use"></a>

避免在這些情況下使用 RFT：
+ 您可以便宜地產生可靠的標籤輸入輸出對 (SFT 更簡單、更便宜且更穩定）
+ 差距是知識或行話，而不是行為 （使用 RAG)
+ 您的獎勵訊號是雜訊、稀疏、容易玩遊戲，或昂貴或運算速度緩慢 （請先修正評估者）
+ 基準效能接近零 （在最佳化偏好設定之前使用 SFT 引導）
+ 任務具有確定性結構描述、嚴格格式或單一正確答案 (SFT 或規則型驗證效果更好）
+ 緊迫的延遲或成本預算無法吸收額外取樣或探勘 RFT 所需的
+ 未在獎勵中明確指定和強制執行安全或政策限制

如果您可以指向「正確答案」，請使用 SFT。如果您需要新知識，請使用 RAG。只有在您擁有穩固的基準和強大、快速、hard-to-exploit的獎勵函數之後，才使用 RFT。

#### 監督式微調 (SFT)
<a name="nova-supervised-fine-tuning"></a>

受監督的微調會在您任務的人工標籤輸入輸出對資料集上訓練 LLM。您可以提供具有正確或所需回應的提示範例 （問題、指示等），並繼續在這些範例上訓練模型。模型會調整其權重，將監督損失降至最低 （通常在其預測和目標輸出字符之間跨熵）。這是大多數監督式機器學習任務中使用的相同訓練，適用於專門 LLM。

SFT 會變更行為，而不是知識。它不會教導模型在預先訓練中看不到的新事實或術語。它教導模型如何回答，而不是知道什麼。如果您需要新的網域知識 （例如內部術語），請使用擷取擴增產生 (RAG) 在推論時間提供該內容。然後，SFT 會在頂端新增所需的指示遵循行為。

##### 運作方式
<a name="nova-sft-how-it-works"></a>

SFT 透過將回應權杖的平均跨熵損失降至最低，將提示權杖視為內容，並遮罩它們免受損失來最佳化 LLM。模型會內化您的目標風格、結構和決策規則，學習為每個提示產生正確的完成。例如，若要將文件分類為自訂類別，您可以使用提示 （文件文字） 和標籤完成 （類別標籤） 微調模型。您可以針對這些配對進行訓練，直到模型以高機率為每個提示輸出正確的標籤。

您可以使用幾百個範例執行 SFT，並擴展到幾十萬個。SFT 範例必須高品質，並直接符合所需的模型行為。

##### 何時使用 SFT
<a name="nova-sft-when-to-use"></a>

當您有明確定義且具有明確所需輸出的任務時，請使用 SFT。如果您可以明確陳述「給予 X 輸入，正確的輸出為 Y」並收集這類映射的範例，則監督式微調是不錯的選擇。SFT 在這些案例中表現優異：
+ **結構化或複雜的分類任務** – 將內部文件或合約分類為許多自訂類別。使用 SFT，模型學習這些特定類別優於單獨提示。
+ **具有已知答案的問題回答或轉換任務** – 微調模型以回答公司知識庫的問題，或在每個輸入都有正確回應的格式之間轉換資料。
+ **格式化和樣式一致性** – 透過微調正確格式或色調的範例，訓練模型一律以特定格式或色調回應。例如，針對顯示特定品牌語音的提示-回應對進行訓練，會教導模型產生具有該樣式的輸出。指示遵循行為通常透過 SFT 最初就精心策劃的良好助理行為範例進行教學。

當您可以指定正確的行為時，SFT 是教導 LLM 新技能或行為的最直接方式。它使用模型現有的語言理解，並專注於您的任務。當您希望模型執行特定項目，且您有或可以建立範例資料集時，請使用 SFT。

當您可以組合高品質的提示和回應對，以密切反映您想要的行為時，請使用 SFT。它適合具有明確目標或決定性格式的任務，例如結構描述、函數或工具呼叫，以及結構式答案，其中模擬是適當的訓練訊號。目標是行為塑造：教導模型將提示視為任務、遵循指示、採用語氣和拒絕政策，以及產生一致的格式。規劃至少數百次示範，資料品質、一致性和重複資料刪除的重要性高於原始磁碟區。若要直接、符合成本效益的更新，請使用低範圍調整等參數效率方法來訓練小型轉接器，同時讓大多數骨幹保持不變。

##### 何時不使用 SFT
<a name="nova-sft-when-not-to-use"></a>

當差距是知識而非行為時，請勿使用 SFT。它不會教導模型新的事實、術語或最近的事件。在這些情況下，請使用擷取擴增的產生，在推論時帶來外部知識。當您可以測量品質，但無法標記單一正確答案時，請避免 SFT。使用強化微調搭配可驗證的獎勵或 LLM-as-a-judge 來直接最佳化這些獎勵。如果您的需求或內容經常變更，請依賴擷取和工具使用，而不是重新訓練模型。

**Topics**
+ [Amazon Nova 2 模型的運算需求](#nova-hp-compute-2)
+ [Amazon Nova 自訂的最佳實務](#best-practices)
+ [Nova Forge SDK](nova-hp-forge-sdk.md)
+ [建立具有受限執行個體群組 (RIG) 的 SageMaker HyperPod EKS 叢集](nova-hp-cluster.md)
+ [Amazon SageMaker HyperPod 基本命令指南](nova-hp-essential-commands-guide.md)
+ [的 Nova Forge 存取和設定](nova-forge-hp-access.md)
+ [Amazon Nova 模型的訓練](nova-hp-training.md)
+ [評估您的訓練模型](nova-hp-evaluate.md)
+ [使用 MLflow 監控 HyperPod 任務](nova-hp-mlflow.md)

# Nova Forge SDK
<a name="nova-hp-forge-sdk"></a>

Amazon Nova Forge SDK 是全方位的 Python SDK，可為完整的 Amazon Nova 模型自訂生命週期提供統一的程式設計界面。開發套件透過提供單一、一致的 API 來跨 Amazon SageMaker 和 Amazon Bedrock 平台進行訓練、評估、監控、部署和推論，簡化模型自訂。

如需詳細資訊，請參閱[Nova Forge SDK](nova-forge-sdk.md)。

# 建立具有受限執行個體群組 (RIG) 的 SageMaker HyperPod EKS 叢集
<a name="nova-hp-cluster"></a>

若要在 Hyperpod 上自訂模型，必須設定必要的基礎設施。如需使用限制執行個體群組 (RIG) 設定 SageMaker HyperPod EKS 叢集的詳細資訊，請造訪 [研討會](https://catalog.us-east-1.prod.workshops.aws/workshops/dcac6f7a-3c61-4978-8344-7535526bf743/en-US)，其中提供設定程序的詳細演練。

# Amazon SageMaker HyperPod 基本命令指南
<a name="nova-hp-essential-commands-guide"></a>

Amazon SageMaker HyperPod 提供廣泛的命令列功能來管理訓練工作流程。本指南涵蓋從連線至叢集到監控任務進度等常見操作的基本命令。

**先決條件**  
使用這些命令之前，請確定您已完成下列設定：
+ 建立 RIG 的 SageMaker HyperPod 叢集 （通常在 us-east-1 中）
+ 為訓練成品建立的輸出 Amazon S3 儲存貯體
+ 已設定適當許可的 IAM 角色
+ 以正確的 JSONL 格式上傳的訓練資料
+ FSx for Lustre 同步已完成 （在第一個任務的叢集日誌中驗證）

**Topics**
+ [安裝配方 CLI](#nova-hp-essential-commands-guide-install)
+ [連線至叢集](#nova-hp-essential-commands-guide-connect)
+ [啟動訓練任務](#nova-hp-essential-commands-guide-start-job)
+ [檢查任務狀態](#nova-hp-essential-commands-guide-status)
+ [監控任務日誌](#nova-hp-essential-commands-guide-logs)
+ [列出作用中任務](#nova-hp-essential-commands-guide-list-jobs)
+ [取消任務](#nova-hp-essential-commands-guide-cancel-job)
+ [執行評估任務](#nova-hp-essential-commands-guide-evaluation)
+ [常見問題](#nova-hp-essential-commands-guide-troubleshooting)

## 安裝配方 CLI
<a name="nova-hp-essential-commands-guide-install"></a>

在執行安裝命令之前，導覽至配方儲存庫的根目錄。

**如果使用非 Forge 自訂技術，請使用 Hyperpodrecipes 儲存庫，對於 Forge 型自訂，請參閱 forge 特定配方儲存庫。**  
執行下列命令來安裝 SageMaker HyperPod CLI：

**注意**  
確保您不在作用中的 conda / anaconda / miniconda 環境或其他虛擬環境中  
如果是，請使用 結束環境：  
`conda deactivate` 適用於 conda / anaconda / miniconda 環境
`deactivate` 適用於 Python 虛擬環境

 如果您使用的是非 Forge 自訂技術，請下載 sagemaker-hyperpod-recipes，如下所示：

```
git clone -b release_v2 https://github.com/aws/sagemaker-hyperpod-cli.git
cd sagemaker-hyperpod-cli
pip install -e .
cd ..
root_dir=$(pwd)
export PYTHONPATH=${root_dir}/sagemaker-hyperpod-cli/src/hyperpod_cli/sagemaker_hyperpod_recipes/launcher/nemo/nemo_framework_launcher/launcher_scripts:$PYTHONPATH
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
rm -f ./get_helm.sh
```

如果您是** Forge 訂閱者，**您應該使用下列程序下載配方。

```
mkdir NovaForgeHyperpodCLI
cd NovaForgeHyperpodCLI
aws s3 cp s3://nova-forge-c7363-206080352451-us-east-1/v1/ ./ --recursive
pip install -e .

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
rm -f ./get_helm.sh
```

**提示**  
若要在執行 之前使用[新的虛擬環境](https://docs.python.org/3/library/venv.html)`pip install -e .`，請執行：  
`python -m venv nova_forge`
`source nova_forge/bin/activate`
您的命令列現在會在提示開頭顯示 (nova\$1forge)
這可確保使用 CLI 時沒有相互競爭的相依性

**目的**：為什麼要執行 `pip install -e .` ？

此命令會以可編輯模式安裝 SageMaker HyperPod CLI，可讓您使用更新的配方，而無需每次重新安裝。它還可讓您新增 CLI 可以自動取得的新配方。

## 連線至叢集
<a name="nova-hp-essential-commands-guide-connect"></a>

在執行任何任務之前，將 SageMaker HyperPod CLI 連接至您的叢集：

```
export AWS_REGION=us-east-1 &&  SageMaker HyperPod  connect-cluster --cluster-name <your-cluster-name> --region us-east-1
```

**重要**  
此命令會建立後續命令所需的內容檔案 (`/tmp/hyperpod_context.json`)。如果您看到找不到此檔案的錯誤，請重新執行 connect 命令。

**專業秘訣**：您可以透過將 `--namespace kubeflow`引數新增至命令，進一步將叢集設定為一律使用 `kubeflow` 命名空間，如下所示：

```
export AWS_REGION=us-east-1 && \
hyperpod connect-cluster \
--cluster-name <your-cluster-name> \
--region us-east-1 \
--namespace kubeflow
```

這可讓您在與任務互動時，在每個命令`-n kubeflow`中新增 。

## 啟動訓練任務
<a name="nova-hp-essential-commands-guide-start-job"></a>

**注意**  
如果執行 PPO/RFT 任務，請確保您將標籤選擇器設定新增至 ，`src/hyperpod_cli/sagemaker_hyperpod_recipes/recipes_collection/cluster/k8s.yaml`以便將所有 Pod 排程在相同的節點上。  

```
label_selector:
  required:
    sagemaker.amazonaws.com/instance-group-name:
      - <rig_group>
```

使用具有選用參數覆寫的配方啟動訓練任務：

```
hyperpod start-job -n kubeflow \
--recipe fine-tuning/nova/nova_1_0/nova_micro/SFT/nova_micro_1_0_p5_p4d_gpu_lora_sft \
--override-parameters '{
"instance_type": "ml.p5.48xlarge",
    "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-HP-SFT-latest"
  }'
```

**預期的輸出**：

```
Final command: python3 <path_to_your_installation>/NovaForgeHyperpodCLI/src/hyperpod_cli/sagemaker_hyperpod_recipes/main.py recipes=fine-tuning/nova/nova_micro_p5_gpu_sft cluster_type=k8s cluster=k8s base_results_dir=/local/home/<username>/results cluster.pullPolicy="IfNotPresent" cluster.restartPolicy="OnFailure" cluster.namespace="kubeflow" container="708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:HP-SFT-DATAMIX-latest"

Prepared output directory at /local/home/<username>/results/<job-name>/k8s_templates
Found credentials in shared credentials file: ~/.aws/credentials
Helm script created at /local/home/<username>/results/<job-name>/<job-name>_launch.sh
Running Helm script: /local/home/<username>/results/<job-name>/<job-name>_launch.sh

NAME: <job-name>
LAST DEPLOYED: Mon Sep 15 20:56:50 2025
NAMESPACE: kubeflow
STATUS: deployed
REVISION: 1
TEST SUITE: None
Launcher successfully generated: <path_to_your_installation>/NovaForgeHyperpodCLI/src/hyperpod_cli/sagemaker_hyperpod_recipes/launcher/nova/k8s_templates/SFT

{
 "Console URL": "https://us-east-1.console.aws.amazon.com/sagemaker/home?region=us-east-1#/cluster-management/<your-cluster-name>"
}
```

## 檢查任務狀態
<a name="nova-hp-essential-commands-guide-status"></a>

使用 kubectl 監控執行中的任務：

```
kubectl get pods -o wide -w -n kubeflow | (head -n1 ; grep <your-job-name>)
```

**了解 Pod 狀態**  
下表說明常見的 Pod 狀態：


| 狀態 | Description | 
| --- |--- |
| `Pending` | Pod 已接受但尚未排程到節點，或等待提取容器映像 | 
| `Running` | Pod 繫結至節點，其中至少有一個容器正在執行或啟動 | 
| `Succeeded` | 所有容器都已成功完成，且不會重新啟動 | 
| `Failed` | 終止的所有容器至少有一個結尾為失敗的容器 | 
| `Unknown` | 無法判斷 Pod 狀態 （通常是由於節點通訊問題） | 
| `CrashLoopBackOff` | 容器重複失敗；Kubernetes 從重新啟動嘗試中退避 | 
| `ImagePullBackOff` / `ErrImagePull` | 無法從登錄檔提取容器映像 | 
| `OOMKilled` | 容器因超過記憶體限制而終止 | 
| `Completed` | 任務或 Pod 成功完成 （批次任務完成） | 

**提示**  
使用 `-w`旗標即時觀看 Pod 狀態更新。按 `Ctrl+C` 停止觀看。

## 監控任務日誌
<a name="nova-hp-essential-commands-guide-logs"></a>

您可以透過以下三種方式之一來檢視日誌：

**使用 CloudWatch**  
您的日誌可在 AWS 您的帳戶中使用，其中包含 CloudWatch 下的 Hyperpodcluster。若要在瀏覽器中檢視它們，請導覽至您帳戶中的 CloudWatch 首頁，並搜尋您的叢集名稱。例如，如果您的叢集被呼叫`my-hyperpod-rig`，則日誌群組會有 字首：
+ **日誌群組**： `/aws/sagemaker/Clusters/my-hyperpod-rig/{UUID}`
+ 進入日誌群組後，您可以使用節點執行個體 ID 來尋找您的特定日誌，例如 - `hyperpod-i-00b3d8a1bf25714e4`。
  + `i-00b3d8a1bf25714e4` 這裡代表訓練任務執行所在的 Hyperpodfriendly 機器名稱。回顧我們在上一個命令`kubectl get pods -o wide -w -n kubeflow | (head -n1 ; grep my-cpt-run)`輸出中如何擷取名為 **NODE** 的資料欄。
  + 在這種情況下，「主要」節點執行是在 Hyperpod-`i-00b3d8a1bf25714e4` 上執行，因此我們將使用該字串來選取要檢視的日誌群組。選取顯示 `SagemakerHyperPodTrainingJob/rig-group/[NODE]`

**使用 CloudWatch Insights**  
如果您的任務名稱方便使用，但不希望完成上述所有步驟，您可以直接查詢 下的所有日誌`/aws/sagemaker/Clusters/my-hyperpod-rig/{UUID}`，以尋找個別日誌。

CPT：

```
fields @timestamp, @message, @logStream, @log
| filter @message like /(?i)Starting CPT Job/
| sort @timestamp desc
| limit 100
```

若要完成任務，請將 取代`Starting CPT Job`為 `CPT Job completed`

然後，您可以按一下結果並挑選「Epoch 0」，因為那將是您的主節點。

**使用 AWS AWS CLI**  
您可以選擇使用 CLI AWS 結尾您的日誌。執行此操作之前，請使用 檢查您的 aws cli 版本`aws --version`。也建議您使用此公用程式指令碼，以協助追蹤終端機中的即時日誌

**適用於 V1**：

```
aws logs get-log-events \
--log-group-name /aws/sagemaker/YourLogGroupName \
--log-stream-name YourLogStream \
--start-from-head | jq -r '.events[].message'
```

**適用於 V2**：

```
aws logs tail /aws/sagemaker/YourLogGroupName \
 --log-stream-name YourLogStream \
--since 10m \
--follow
```

## 列出作用中任務
<a name="nova-hp-essential-commands-guide-list-jobs"></a>

檢視叢集中執行的所有任務：

```
hyperpod list-jobs -n kubeflow
```

**輸出範例：**

```
{
  "jobs": [
    {
      "Name": "test-run-nhgza",
      "Namespace": "kubeflow",
      "CreationTime": "2025-10-29T16:50:57Z",
      "State": "Running"
    }
  ]
}
```

## 取消任務
<a name="nova-hp-essential-commands-guide-cancel-job"></a>

隨時停止執行中的任務：

```
hyperpod cancel-job --job-name <job-name> -n kubeflow
```

**尋找您的任務名稱**  
**選項 1：從您的配方**

任務名稱是在配方的 `run` 區塊中指定：

```
run:
  name: "my-test-run"                        # This is your job name
  model_type: "amazon.nova-micro-v1:0:128k"
  ...
```

**選項 2：從 list-jobs 命令**

使用 `hyperpod list-jobs -n kubeflow` 並從輸出複製 `Name` 欄位。

## 執行評估任務
<a name="nova-hp-essential-commands-guide-evaluation"></a>

使用評估配方評估訓練過的模型或基礎模型。

**先決條件**  
在執行評估任務之前，請確定您有：
+ 來自訓練任務`manifest.json`檔案的檢查點 Amazon S3 URI （適用於訓練模型）
+ 以正確格式上傳至 Amazon S3 的評估資料集
+ 用於評估結果的輸出 Amazon S3 路徑

**命令**  
執行下列命令來啟動評估任務：

```
hyperpod start-job -n kubeflow \
  --recipe evaluation/nova/nova_2_0/nova_lite/nova_lite_2_0_p5_48xl_gpu_bring_your_own_dataset_eval \
  --override-parameters '{
    "instance_type": "p5.48xlarge",
    "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-HP-Eval-latest",
    "recipes.run.name": "<your-eval-job-name>",
    "recipes.run.model_name_or_path": "<checkpoint-s3-uri>",
    "recipes.run.output_s3_path": "s3://<your-bucket>/eval-results/",
    "recipes.run.data_s3_path": "s3://<your-bucket>/eval-data.jsonl"
  }'
```

**參數描述**：
+ `recipes.run.name`：評估任務的唯一名稱
+ `recipes.run.model_name_or_path`：來自 `manifest.json`或基本模型路徑的 Amazon S3 URI （例如 `nova-micro/prod`)
+ `recipes.run.output_s3_path`：評估結果的 Amazon S3 位置
+ `recipes.run.data_s3_path`：評估資料集的 Amazon S3 位置

**提示**：
+ **特定模型配方**：每個模型大小 （微型、精簡型、專業） 都有自己的評估配方
+ **基礎模型評估**：使用基礎模型路徑 （例如 `nova-micro/prod`) 而非檢查點 URIs來評估基礎模型

**評估資料格式**  
**輸入格式 (JSONL)**：

```
{
  "metadata": "{key:4, category:'apple'}",
  "system": "arithmetic-patterns, please answer the following with no other words: ",
  "query": "What is the next number in this series? 1, 2, 4, 8, 16, ?",
  "response": "32"
}
```

**輸出格式**：

```
{
  "prompt": "[{'role': 'system', 'content': 'arithmetic-patterns, please answer the following with no other words: '}, {'role': 'user', 'content': 'What is the next number in this series? 1, 2, 4, 8, 16, ?'}]",
  "inference": "['32']",
  "gold": "32",
  "metadata": "{key:4, category:'apple'}"
}
```

**欄位描述**：
+ `prompt`：傳送至模型的格式化輸入
+ `inference`：模型產生的回應
+ `gold`：輸入資料集的預期正確答案
+ `metadata`：從輸入傳遞的選用中繼資料

## 常見問題
<a name="nova-hp-essential-commands-guide-troubleshooting"></a>
+ `ModuleNotFoundError: No module named 'nemo_launcher'`，您可能需要根據`hyperpod_cli`安裝 的位置`nemo_launcher`，將 新增至您的 python 路徑。範例命令：

  ```
  export PYTHONPATH=<path_to_hyperpod_cli>/sagemaker-hyperpod-cli/src/hyperpod_cli/sagemaker_hyperpod_recipes/launcher/nemo/nemo_framework_launcher/launcher_scripts:$PYTHONPATH
  ```
+ `FileNotFoundError: [Errno 2] No such file or directory: '/tmp/hyperpod_current_context.json'` 表示您錯過執行 Hyperpod Connect 叢集命令。
+ 如果您沒有看到任務排程，請仔細檢查 SageMaker HyperPod CLI 的輸出是否具有包含任務名稱和其他中繼資料的本節。如果沒有，請執行下列動作來重新安裝 helm Chart：

  ```
  curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
  chmod 700 get_helm.sh
  ./get_helm.sh
  rm -f ./get_helm.sh
  ```

# 的 Nova Forge 存取和設定
<a name="nova-forge-hp-access"></a>

若要設定 Amazon Nova Forge 以與 任務搭配使用，您需要：
+ 訂閱 Amazon Nova Forge
+ 設定叢集

**Topics**
+ [訂閱 Amazon Nova Forge](nova-forge-subscribing.md)
+ [設定基礎設施](nova-forge-hyperpod-setup.md)
+ [負責任的 AI](nova-forge-responsible-ai.md)

# 訂閱 Amazon Nova Forge
<a name="nova-forge-subscribing"></a>

若要存取 Amazon Nova Forge 功能，請完成下列步驟：

1. 驗證管理員對 AWS 帳戶的存取權。

1. 導覽至 SageMaker AI 主控台並[請求存取 Amazon Nova Forge](nova-forge.md)。

1. 等待 Amazon Nova 團隊在訂閱請求核准後傳送電子郵件確認。

1. 使用 標籤`forge-subscription`標記您的執行角色。存取 Amazon Nova Forge 功能和檢查點時需要此標籤。將下列標籤新增至您的執行角色：
   + 索引鍵：`forge-subscription`
   + 值：`true`

**注意**  
標準 Amazon Nova 功能仍可在沒有 Forge 訂閱的情況下使用。Amazon Nova Forge 旨在在所有模型訓練階段建立具有控制和彈性的自訂前沿模型。

# 設定基礎設施
<a name="nova-forge-hyperpod-setup"></a>

一旦您的 Amazon Nova Forge 訂閱獲得核准，請設定必要的基礎設施以使用啟用 Forge 的功能。如需使用限制執行個體群組 (RIG) 建立 EKS 叢集的詳細說明，請遵循[研討會](https://catalog.us-east-1.prod.workshops.aws/workshops/dcac6f7a-3c61-4978-8344-7535526bf743/en-US)說明。

# 負責任的 AI
<a name="nova-forge-responsible-ai"></a>

**內容管制設定**：Amazon Nova Forge 客戶可存取 Amazon Nova Lite 1.0 和 Pro 1.0 模型的可自訂內容管制設定 (CCMS)。CCMS 可讓您調整內容管制控制，以符合您的特定業務需求，同時維護重要的負責任 AI 防護措施。若要判斷您的業務使用案例是否符合 CCMS 的資格，請聯絡您的 Amazon Web Services 客戶經理。

Amazon Nova Forge 提供負責任的 AI Toolkit，其中包含訓練資料、評估基準和執行期控制，協助您將模型與 Amazon Nova 負責任的 AI 準則保持一致。

**訓練資料**：資料混合中的「RAI」類別包含強調負責任 AI 原則、安全考量和負責任技術部署的案例和案例。使用這些項目，在持續的預先訓練期間以負責任的方式調整模型。

**評估**：基準任務可用於測試模型偵測和拒絕不適當、有害或不正確內容的能力。使用這些評估來衡量基本模型效能與自訂模型效能之間的差異。

# Amazon Nova 模型的訓練
<a name="nova-hp-training"></a>

在 SageMaker HyperPod 上訓練 Amazon Nova 模型支援多種技術，包括持續訓練前 (CPT)、監督微調 (SFT) 和強化微調 (RFT)。每種技術都提供不同的自訂需求，並且可以套用至不同的 Amazon Nova 模型版本。

**Topics**
+ [持續預先訓練 (CPT)](nova-cpt.md)
+ [監督式微調 (SFT)](nova-fine-tune.md)
+ [SageMaker HyperPod 上的強化微調 (RFT)](nova-hp-rft.md)

# 持續預先訓練 (CPT)
<a name="nova-cpt"></a>

持續訓練前 (CPT) 是一種訓練技術，透過向特定網域或企業的其他未標記文字公開基礎模型，以延伸訓練前階段。與需要標記的輸入輸出對的監督式微調不同，CPT 會在原始文件上進行訓練，以協助模型更深入了解新網域、學習特定網域的術語和撰寫模式，以及適應特定內容類型或主題領域。

當您有大量 （數十億個字符） 的網域特定文字資料，例如法律文件、醫學文獻、技術文件或專屬商業內容，而且您希望模型在該網域中開發原生流暢性時，這種方法特別有用。一般而言，在 CPT 階段之後，模型需要經過額外的指令調校階段，讓模型能夠使用新取得的知識並完成有用的任務。

**支援的模型**  
CPT 適用於下列 Amazon Nova 模型：
+ Nova 1.0 (Micro、Lite、Pro)
+ Nova 2.0 （精簡型）

**何時使用 Nova 1.0 與 Nova 2.0**  
Amazon Nova 系列模型提供多個價格效能操作點，可在準確度、速度和成本之間進行最佳化。

當您需要下列項目時，請選擇 Nova 2.0：
+ 複雜分析任務的進階推理功能
+ 編碼、數學和科學問題解決的卓越效能
+ 更長的內容長度支援
+ 更好的多語言效能

**注意**  
較大的模型不一定會更好。在 Nova 1.0 和 Nova 2.0 模型之間進行選取時，請考慮成本效能權衡和您的特定業務需求。

# Nova 2.0 上的 CPT
<a name="nova-cpt-2"></a>

Amazon Nova Lite 2.0 是在比 Nova Lite 1.0 更大且更多樣化的資料集上訓練的推理模型。雖然是較大的模型，但 Nova Lite 2.0 提供比 Nova Lite 1.0 更快的推論，同時提供增強的推理功能、更長的內容長度和改善的多語言效能。

Nova 2.0 上的 CPT 可讓您使用網域特定資料擴充這些進階功能，讓模型能夠在專業領域開發深度專業知識，同時維持其卓越的推理和分析能力。

## 範例 CPT 配方
<a name="nova-cpt-2-sample-recipe"></a>

以下是 CPT 的範例配方。您可以在配方儲存庫中找到此[配方和其他項目](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/training/nova)。

```
# Note:
# This recipe can run on p5.48xlarge
# Run config
run:
  name: "my-cpt-run"                           # A descriptive name for your training job
  model_type: "amazon.nova-2-lite-v1:0:256k"   # Model variant specification, do not change
  model_name_or_path: "nova-lite-2/prod"        # Base model path, do not change
  replicas: 8                                   # Number of compute instances for training, allowed values are 4, 8, 16, 32
  data_s3_path: ""                              # Customer data paths
  validation_data_s3_path: ""                   # Customer validation data paths
  output_s3_path: ""                            # Output artifact path,  job-specific configuration - not compatible with standard SageMaker Training Jobs
  mlflow_tracking_uri: ""                       # Required for MLFlow
  mlflow_experiment_name: "my-cpt-experiment"   # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-cpt-run"                 # Optional for MLFlow. Note: leave this field non-empty

## Training specific configs
training_config:
  task_type: cpt
  max_length: 8192                              # Maximum context window size (tokens)
  global_batch_size: 256                        # Global batch size, allowed values are 32, 64, 128, 256.

  trainer:
    max_steps: 10                               # The number of training steps to run total
    val_check_interval: 10                      # The number of steps between running validation. Integer count or float percentage
    limit_val_batches: 2                        # Batches of the validation set to use each trigger

  model:
    hidden_dropout: 0.0                         # Dropout for hidden states, must be between 0.0 and 1.0
    attention_dropout: 0.0                      # Dropout for attention weights, must be between 0.0 and 1.0

  optim:
    optimizer: adam
    lr: 1e-5                                    # Learning rate
    name: distributed_fused_adam                # Optimizer algorithm, do not change
    adam_w_mode: true                           # Enable AdamW mode
    eps: 1e-06                                  # Epsilon for numerical stability
    weight_decay: 0.0                           # L2 regularization strength, must be between 0.0 and 1.0
    adam_beta1: 0.9                             # Beta1 for Adam optimizer
    adam_beta2: 0.95                            # Beta2 for Adam optimizer
    sched:
      warmup_steps: 10                          # Learning rate warmup steps
      constant_steps: 0                         # Steps at constant learning rate
      min_lr: 1e-6                              # Minimum learning rate, must be lower than lr
```

## 2.0 上 CPT 的資料準備
<a name="nova-cpt-2-data-prep"></a>

**資料格式要求**  
訓練和驗證資料集必須是符合下列格式的 JSONL 檔案，其中每一行都包含代表與必要欄位和結構對話的 JSON 物件。請見此處範例：

```
{"text": "AWS stands for Amazon Web Services"}
{"text": "Amazon SageMaker is a fully managed machine learning service"}
{"text": "Amazon Bedrock is a fully managed service for foundation models"}
```

文字項目應包含代表目標網域的自然流動、高品質內容。

測試資料是否能夠轉換為 [Arrow 格式](https://huggingface.co/docs/datasets/en/about_arrow)。使用以下 python 指令碼來提供協助。確保至少使用 `datasets==2.18.0`版本：

```
from datasets import load_dataset, load_from_disk
from pathlib import Path

input_path = Path("<Your jsonl file>")
output_path = Path("<Your output directory>")

dataset = load_dataset("json", data_files=str(input_path), split="train")
dataset.save_to_disk(str(output_path), max_shard_size="1GB")

try:
  test_dataset = datasets.load_from_disk(output_dir)
  print(f"Dataset loaded successfully ✅! Contains {len(test_dataset)} samples")
except Exception as e:
  print(e)
```

它應該列印與 JSONL 檔案中相同的行數。

使用 datamixing 時，請使用 執行第一個任務`max_steps=2`。這將有助於在叢集中建立資料存取的最佳化，並驗證所有資料混合是否可用。

**如何準備 CPT 的資料**  
訓練資料是持續預先訓練成功最重要的決定因素。雖然 CPT 資料通常被描述為「未標記」，但事實更為細微。資料的結構、格式化和呈現方式會決定模型是否會獲得業務使用案例所需的知識和技能。

### 準備 CPT 的結構化業務資料集
<a name="nova-cpt-2-structured-data"></a>

這是公司和組織在領域中建立專業基礎模型的常見挑戰。大多數企業擁有結構化資料的豐富儲存庫：產品目錄、使用者設定檔、交易日誌、表單提交、API 呼叫和操作中繼資料。乍看之下，這看起來與標準預先訓練中常用的非結構化 Web 文字非常不同。

若要有效地從結構化商業資料中學習，請仔細考慮下游任務並設計資料呈現，以強制模型學習正確的預測關係。

若要釋放持續預先訓練的完整潛力，請考慮：
+ 模型在推論時間應執行的任務
+ 原始資料中存在哪些資訊
+ 如何建構該資料，讓模型學習正確擷取和操作資訊

只要將結構化資料傾印到訓練中，就不會教導模型推理它。主動調整資料呈現的形狀，以引導模型學習的內容。

在下列各節中，有文獻回顧，展示了資料增強的重要性，並為結構化業務資料提供範例增強策略，以提供有關如何處理和組織 CPT 業務資料集的有用想法。

**文獻中 CPT 的結構化資料**  
CPT 可以將網域事實封裝到模型中，但通常無法在輸入或任務轉移時擷取和操縱這些事實。受控實驗顯示，如果在預先訓練期間沒有多樣化的擴增，模型會以簡潔的方式記住事實，即使在稍後的指令調校後仍難以擷取，並且建議像訓練早期的訊號一樣注入指令。對於半結構化資料，隨機序列化和其他擴增可減少結構描述過度擬合，這就是為什麼 CPT 應與指令樣式任務交錯，而不是先執行 和稍後執行 IFT。專注於財務的工作進一步發現，與循序配方相比，在批次時間聯合混合 CPT 和指令資料可改善一般化並減少忘記。Qwen 技術報告透過將高品質指令資料整合到預先訓練本身來收斂在相同的模式，這可提升內容學習並保留後續的指示，同時獲得新的領域知識。

半結構化體的資料擴增是關鍵控制桿。合成圖形感知 CPT 會將小型網域集擴展到實體連結體庫，以明確教導推論時具有擷取的關係和化合物。Joint CPT plus 指令混合在財務和平衡網域和一般資料中優於序列管道，可降低一般技能的降級。非常大規模的網域 CPT 也可以保留廣泛的能力，甚至允許透過模型合併進行權衡，但仍指向指令調校作為必要的後續步驟，加強在 CPT 期間引入指令訊號的值。

**透過隨機化和隨機化來注入多樣性**  
有助於從結構化和半結構化資料集有效教導模型的一般策略是隨機隨機捨棄資料集中的欄位順序，甚至隨機捨棄一些索引鍵。

隨機顯示欄位會強制模型讀取每個值的意義，而不是顯示的位置，並了解所有欄位之間的關係。例如，如果視訊遊戲張貼在 amazon 商店，當 "Title"、"Platform"、"Price"、"Condition" 和 "Edition" 以不同的排列到達時，模型無法倚賴「第三個槽是平台」；它必須將標籤繫結至值，並了解屬性之間的雙邊關係：標題 ⇄ 平台、平台 ⇄ 價格、條件 ⇄ 價格。例如，它可以從遊戲名稱和觀察價格推斷可能平台，或根據標題和平台估計合理的價格範圍。

在序列化期間隨機捨棄金鑰就像功能捨棄一樣：它可防止在任何一個欄位上進行共同調整，並強制模型從剩餘的證據中復原缺少的資訊。如果沒有「平台」，模型必須從標題字串或相容性文字中挑選；如果「價格」隱藏，則必須從平台、版本和條件中三角。這會建置對稱 (A→B 和 B→A)、對雜亂真實世界清單的穩健性，以及欄位遺失、重新命名或重新排序時的結構描述變異。

購物風格範例讓它變得具體。以多種方式序列化相同的項目："Title： 'Elden Ring' \$1 Platform： PlayStation 5 \$1 Condition： Used—Like New \$1 Price： \$134.99" 和排列，例如 "Price： \$134.99 \$1 Title： 'Elden Ring' \$1 Condition： Used—Like New \$1 Platform： PlayStation 5"，並且在某些傳遞中捨棄 "Platform"，同時在描述中保留 "Compatible with PS5"。訓練互補目標，例如從 \$1title， price\$1 預測平台，以及從 \$1title， platform\$1 預測價格儲存貯體。由於索引鍵的順序和存在會有所不同，因此唯一穩定的策略是了解屬性之間的真實關係，而不是記住範本。

### 資料呈現的方式很重要
<a name="nova-cpt-2-data-presentation"></a>

LLMs會從他們已看到的內容預測下一個字符來學習。因此，訓練期間顯示的欄位和事件順序會決定模型可以學習的內容。如果訓練格式符合實際任務，則損失會落在確切的決策權杖上。如果欄位在沒有結構的情況下拼湊在一起，模型會學習捷徑或記住熱門度，然後在要求選擇選項時失敗。

先顯示情況，再顯示選項，再顯示決策。如果模型也應該了解結果或說明，請在決策之後放置它們。

### CPT 的封裝範例
<a name="nova-cpt-2-packing"></a>

**什麼是封裝？**  
這只是表示使用多個完整範例填入訓練資料中的每個序列視窗，以便視窗以真實字符密集，而不是填補。

**為什麼它很重要**  
在訓練期間會設定最大內容長度，例如 8，192 個字符。批次的形狀為 【批次大小 × 內容長度】。如果訓練範例短於內容長度，則會填充剩餘的位置。即使已遮罩遺失，填補仍會透過注意力和 MLP 核心執行，因此會為沒有學習訊號的字符支付運算費用。

**如何進行封裝？**  
若要封裝多個範例，請在 之間使用` [DOC] `分隔符號串連多個訓練範例 （請注意 【DOC】 前後的空間），讓範例的完整長度低於所需的內容長度。

封裝的文件範例如下所示：

```
{"text": "training sample 1 [DOC] training sample 2 [DOC] training sample 3"}
```

### CPT 調校參數
<a name="nova-cpt-2-tuning-parameters"></a>

可使用 CPT 進行微調的參數包括：

**執行組態**  

+ **名稱**：訓練任務的描述性名稱。這有助於在 AWS 管理主控台中識別您的任務。
+ **model\$1type**：要使用的 Amazon Nova 模型變體。可用的選項為 `amazon.nova-2-lite-v1:0:256k`。
+ **model\$1name\$1or\$1path**：用於訓練的基本模型路徑。可用的選項為 `nova-lite-2/prod`，或訓練後檢查點的 S3 路徑 (`s3://customer-escrow-bucket-unique_id/training_run_name`)。
+ **複本**：用於分散式訓練的運算執行個體數量。可用的值會根據您選擇的模型而有所不同。Amazon Nova Lite 2.0 支援 4、8、16 或 32 個複本。
+ **data\$1s3\$1path**：訓練資料集的 S3 位置，這是 JSONL 檔案。此檔案必須位於與叢集相同的 AWS 帳戶和區域。提供的所有 S3 位置都必須位於相同的帳戶和區域中。
+ **validation\$1data\$1s3\$1path**：（選用） 驗證資料集的 S3 位置，這是 JSONL 檔案。此檔案必須位於與叢集相同的帳戶和區域中。提供的所有 S3 位置都必須位於相同的帳戶和區域中。
+ **output\$1s3\$1path**：儲存資訊清單和 TensorBoard 日誌的 S3 位置。提供的所有 S3 位置都必須位於相同的 AWS 帳戶和 AWS 區域。
+ **mlflow\$1tracking\$1uri**：用於 MLFlow 記錄的 MLFlow 應用程式的 ARN
+ **mlflow\$1experiment\$1name**：MLFlow 實驗名稱
+ **mlflow\$1run\$1name**：MLFlow 執行名稱

**訓練組態**  

+ **max\$1length**：字符中的序列長度上限。這會決定訓練的內容範圍大小。CPT 的最大支援值為 8192 個記號。

  序列越長，越能提高訓練效率，但代價是需要增加記憶體。我們建議您將 max\$1length 參數與資料分佈配對。
+ **global\$1batch\$1size**：跨所有裝置和工作者，一次向前或向後傳遞一起處理的訓練範例總數。

  此值會乘以每個裝置的批次大小和裝置數目。它會影響訓練和輸送量的穩定性。我們建議您從適合您記憶體的批次大小開始，並從該處向上擴展。對於特定網域的資料，批次越大可能會使梯度過度平滑。

**培訓人員設定**  

+ **max\$1steps**：要執行的訓練步驟數目。每個步驟都會訓練具有元素`global_batch_size`數目的模型

**模型設定**  

+ **hidden\$1dropout**：捨棄隱藏狀態輸出的機率。將此值增加約 0.0-0.2 可減少對較小資料集的過度擬合。有效值介於 0-1 (含) 之間。
+ **attention\$1dropout**：捨棄注意力權重的機率。此參數可協助進行一般化。有效值介於 0-1 (含) 之間。

**最佳化工具組態**  

+ **lr**：學習率，可在最佳化期間控制步驟大小。我們建議使用介於 1e-6-1e-4 之間的值，以獲得良好的效能。有效值介於 0-1 (含) 之間。
+ name****：最佳化工具演算法。目前僅支援 `distributed_fused_adam`。
+ **weight\$1decay**：L2 正規化強度。較高的值 (介於 0.01-0.1 之間) 會增加正規化。
+ **warmup\$1steps**：逐步提高學習率的步驟數。這可改善訓練穩定性。有效值介於 1-20 (含) 之間。
+ **min\$1lr**：衰減結束時的最低學習率。有效值介於 0-1 (含) 之間，但必須小於學習率。

# 監督式微調 (SFT)
<a name="nova-fine-tune"></a>

SFT 訓練程序包含兩個主要階段：
+ **資料準備**：遵循已建立的指導方針，將資料集建立、清除或重新格式化為所需的結構。確定輸入、輸出和輔助資訊 （例如推理追蹤或中繼資料） 已正確對齊並格式化。
+ **訓練組態**：定義模型的訓練方式。使用 時，此組態會寫入 YAML 配方檔案中，其中包含：
  + 資料來源路徑 （訓練和驗證資料集）
  + 金鑰超參數 (epoch、學習率、批次大小）
  + 選用元件 （分散式訓練參數等）

## Nova 模型比較和選擇
<a name="nova-model-comparison"></a>

Amazon Nova 2.0 是在比 Amazon Nova 1.0 更大且更多樣化的資料集上訓練的模型。主要改進包括：
+ 支援明確**推理模式的增強推理功能** 
+ 跨其他語言**的更廣泛多語言效能** 
+ **改善複雜任務的效能**，包括編碼和工具使用
+ 以更長的內容長度提供更高的準確性和穩定性的延伸內容**處理** 

## 何時使用 Nova 1.0 與 Nova 2.0
<a name="nova-model-selection"></a>

在下列情況下選擇 Amazon Nova 2.0：
+ 需要具有進階推理功能的卓越效能
+ 需要多語言支援或複雜的任務處理
+ 編碼、工具呼叫或分析任務需要更好的結果

# 新版本 2.0 上的 SFT
<a name="nova-sft-2-fine-tune"></a>

Amazon Nova Lite 2.0 為監督式微調提供了增強功能，包括進階推理模式、改善多模態理解和延伸內容處理。在 Nova 2.0 上的 SFT 可讓您將這些強大的功能適應您的特定使用案例，同時在複雜的任務上維持模型的卓越效能。

SFT on Nova 2.0 的主要功能包括：
+ **推理模式支援**：訓練模型在增強型分析功能的最終答案之前產生明確的推理追蹤。
+ **進階多模式訓練**：微調文件理解 (PDF)、影片理解和影像型任務，以提高準確性。
+ **工具呼叫功能**：訓練模型，以有效地使用外部工具和函數呼叫進行複雜的工作流程。
+ **延伸內容支援**：利用較長的內容時段，為文件密集型應用程式提供更好的穩定性和準確性。

**注意**  
如需使用哪些容器映像或範例配方的詳細資訊，請前往 [ Amazon Nova 配方](nova-model-recipes.md)。

**Topics**
+ [選擇合理模式 （僅限 Nova 2.0)](#nova-sft-2-reasoning-mode)
+ [工具呼叫資料格式](#nova-sft-2-tool-calling)
+ [文件了解資料格式](#nova-sft-2-document-understanding)
+ [影片了解 SFT](#nova-sft-2-video-understanding)
+ [資料上傳指示](#nova-sft-2-data-upload)
+ [建立微調任務](#nova-sft-2-creating-job)
+ [SFT 調校參數](#nova-sft-2-tuning-parameters)
+ [超參數指引](#nova-sft-2-hyperparameters)

## 範例 SFT 配方
<a name="nova-sft-2-sample-recipe"></a>

以下是 SFT 的範例配方。您可以在配方儲存庫中找到此[配方和其他項目](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/fine-tuning/nova)。

```
run:
  name: my-full-rank-sft-run
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://my-bucket-name/train.jsonl  #  only and not compatible with SageMaker Training Jobs
  replicas: 4                                     # Number of compute instances for training, allowed values are 4, 8, 16, 32
  output_s3_path: s3://my-bucket-name/outputs/    # Output artifact path (HyperPod job-specific; not compatible with standard SageMaker Training Jobs)
  mlflow_tracking_uri: ""                         # Required for MLFlow
  mlflow_experiment_name: "my-full-rank-sft-experiment"  # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-full-rank-sft-run"         # Optional for MLFlow. Note: leave this field non-empty

training_config:
  max_steps: 100                    # Maximum training steps. Minimal is 4.
  save_steps: ${oc.select:training_config.max_steps}  # How many training steps the checkpoint will be saved
  save_top_k: 5                     # Keep top K best checkpoints. Note supported only for  jobs. Minimal is 1.
  max_length: 32768                 # Sequence length (options: 8192, 16384, 32768 [default], 65536)
  global_batch_size: 32             # Global batch size (options: 32, 64, 128)
  reasoning_enabled: true           # If data has reasoningContent, set to true; otherwise False

  lr_scheduler:
    warmup_steps: 15                # Learning rate warmup steps. Recommend 15% of max_steps
    min_lr: 1e-6                    # Minimum learning rate, must be between 0.0 and 1.0

  optim_config:                     # Optimizer settings
    lr: 1e-5                        # Learning rate, must be between 0.0 and 1.0
    weight_decay: 0.0               # L2 regularization strength, must be between 0.0 and 1.0
    adam_beta1: 0.9                  # Exponential decay rate for first-moment estimates
    adam_beta2: 0.95                 # Exponential decay rate for second-moment estimates

  peft:                             # Parameter-efficient fine-tuning (LoRA)
    peft_scheme: "null"             # Disable LoRA for PEFT
```

## 選擇合理模式 （僅限 Nova 2.0)
<a name="nova-sft-2-reasoning-mode"></a>

Amazon Nova 2.0 支援增強分析功能的推理模式：
+ **原因模式 （已啟用）**：
  + 在訓練組態`reasoning_enabled: true`中設定
  + 模型會訓練 在最終答案之前產生推理追蹤
  + 改善複雜推理任務的效能
+ **非原因模式 （已停用）**：
  + 設定`reasoning_enabled: false`或省略 參數 （預設）
  + 沒有明確推理的標準 SFT
  + 適合無法受益於step-by-step推理的任務

**注意**  
啟用推理時，會以高推理的努力運作。SFT 沒有低推理選項。
SFT 不支援多模式推理內容。原因模式適用於純文字輸入。

### 將推理模式與非合理的資料集搭配使用
<a name="nova-sft-2-reasoning-non-reasoning-data"></a>

`reasoning_enabled: true` 允許使用 在非合理資料集上訓練 Amazon Nova。不過，這樣做可能會導致模型失去其推理功能，因為 Amazon Nova 主要學習在不套用推理的情況下產生資料中呈現的回應。

如果在非合理資料集上訓練 Amazon Nova，但仍希望在推論期間使用推理：

1. 在訓練期間停用推理 (`reasoning_enabled: false`)

1. 稍後在推論期間啟用推理

雖然此方法允許在推論時間進行推理，但與推論相比，它不保證改善效能，無需推理。

**最佳實務：**在使用推理資料集時啟用訓練推理和推論，並在使用非合理的資料集時停用兩者。

**注意**  
如需使用哪些容器映像或範例配方的詳細資訊，請前往 [ Amazon Nova 配方](nova-model-recipes.md)。

## 工具呼叫資料格式
<a name="nova-sft-2-tool-calling"></a>

SFT 支援訓練模型以使用工具 （函數呼叫）。以下是工具呼叫的範例輸入格式：

**範例輸入：**

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are an expert in composing function calls."
    }
  ],
  "toolConfig": {
    "tools": [
      {
        "toolSpec": {
          "name": "getItemCost",
          "description": "Retrieve the cost of an item from the catalog",
          "inputSchema": {
            "json": {
              "type": "object",
              "properties": {
                "item_name": {
                  "type": "string",
                  "description": "The name of the item to retrieve cost for"
                },
                "item_id": {
                  "type": "string",
                  "description": "The ASIN of item to retrieve cost for"
                }
              },
              "required": [
                "item_id"
              ]
            }
          }
        }
      },
      {
        "toolSpec": {
          "name": "getItemAvailability",
          "description": "Retrieve whether an item is available in a given location",
          "inputSchema": {
            "json": {
              "type": "object",
              "properties": {
                "zipcode": {
                  "type": "string",
                  "description": "The zipcode of the location to check in"
                },
                "quantity": {
                  "type": "integer",
                  "description": "The number of items to check availability for"
                },
                "item_id": {
                  "type": "string",
                  "description": "The ASIN of item to check availability for"
                }
              },
              "required": [
                "item_id", "zipcode"
              ]
            }
          }
        }
      }
    ]
  },
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "I need to check whether there are twenty pieces of the following item available. Here is the item ASIN on Amazon: id-123. Please check for the zipcode 94086"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "reasoningContent": {
            "reasoningText": {
              "text": "The user wants to check how many pieces of the item with ASIN id-123 are available in the zipcode 94086"
            }
          }
        },
        {
          "toolUse": {
            "toolUseId": "getItemAvailability_0",
            "name": "getItemAvailability",
            "input": {
              "zipcode": "94086",
              "quantity": 20,
              "item_id": "id-123"
            }
          }
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "toolResult": {
            "toolUseId": "getItemAvailability_0",
            "content": [
              {
                "text": "[{\"name\": \"getItemAvailability\", \"results\": {\"availability\": true}}]"
              }
            ]
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Yes, there are twenty pieces of item id-123 available at 94086. Would you like to place an order or know the total cost?"
        }
      ]
    }
  ]
}
```

工具呼叫資料的重要考量事項：
+ ToolUse 必須僅以助理輪換顯示
+ ToolResult 必須僅顯示在使用者轉彎中
+ ToolResult 只能是文字或 JSON；Amazon Nova 模型目前不支援其他模態
+ toolSpec 中的 inputSchema 必須是有效的 JSON 結構描述物件
+ 每個 ToolResult 必須參考先前助理 ToolUse 中的有效 ToolUse toolUseId，每個toolUseId 在每次對話中只使用一次

**注意**  
如需使用哪些容器映像或範例配方的詳細資訊，請前往 [ Amazon Nova 配方](nova-model-recipes.md)。

## 文件了解資料格式
<a name="nova-sft-2-document-understanding"></a>

SFT 支援文件理解任務的訓練模型。以下是範例輸入格式：

**範例輸入**

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"
        },
        {
          "document": {
            "format": "pdf",
            "source": {
              "s3Location": {
                "uri": "s3://my-bucket-name/path/to/documents/customer_service_debugging.pdf",
                "bucketOwner": "123456789012"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"
        }
      ],
      "reasoning_content": [
        {
          "text": "I need to find the relevant section in the document to answer the question.",
          "type": "text"
        }
      ]
    }
  ]
}
```

文件理解的重要考量：
+ 僅支援 PDF 檔案
+ 文件大小上限為 10 MB
+ 範例可以包含文件和文字，但無法將文件與其他形式 （例如影像或影片） 混合

**注意**  
如需使用哪些容器映像或範例配方的詳細資訊，請前往 [ Amazon Nova 配方](nova-model-recipes.md)。

## 影片了解 SFT
<a name="nova-sft-2-video-understanding"></a>

SFT 支援微調模型以進行影片理解任務。以下是範例輸入格式：

**範例輸入**

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"
        },
        {
          "video": {
            "format": "mp4",
            "source": {
              "s3Location": {
                "uri": "s3://my-bucket-name/path/to/videos/customer_service_debugging.mp4",
                "bucketOwner": "123456789012"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"
        }
      ],
      "reasoning_content": [
        {
          "text": "I need to find the relevant section in the video to answer the question.",
          "type": "text"
        }
      ]
    }
  ]
}
```

了解影片的重要考量：
+ 影片上限為 50 MB
+ 影片最長可達 15 分鐘
+ 每個範例只允許一個影片；不支援相同範例中的多個影片
+ 範例可以包含影片和文字，但無法將影片與其他形式 （例如影像或文件） 混合

**注意**  
如需使用哪些容器映像或範例配方的詳細資訊，請前往 [ Amazon Nova 配方](nova-model-recipes.md)。

## 資料上傳指示
<a name="nova-sft-2-data-upload"></a>

將訓練和驗證資料集上傳至 S3 儲存貯體。在配方的 `run` 區塊中指定這些位置：

```
## Run config
run:
  ...
  data_s3_path: "s3://<bucket-name>/<training-directory>/<training-file>.jsonl"
```

**注意**：將 `<bucket-name>`、`<training-directory>`、`<training-file>`、 `<validation-directory>`和 取代`<validation-file>`為實際的 S3 路徑。

**注意**：使用 Amazon Nova 2.0 的 SFT 目前不支援驗證資料集。如果提供驗證資料集，則會予以忽略。

## 建立微調任務
<a name="nova-sft-2-creating-job"></a>

使用 `run` 區塊中的 `model_type`和 `model_name_or_path` 欄位來定義基本模型：

```
## Run config
run:
  ...
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  ...
```

## SFT 調校參數
<a name="nova-sft-2-tuning-parameters"></a>

可使用 SFT 進行調校的參數包括：

**執行組態**  

+ **名稱**：訓練任務的描述性名稱。這有助於在 AWS 管理主控台中識別您的任務。
+ **model\$1type**：要使用的 Amazon Nova 模型變體。可用的選項為 `amazon.nova-2-lite-v1:0:256k`。
+ **model\$1name\$1or\$1path**：用於訓練的基本模型路徑。可用的選項為 `nova-lite-2/prod`，或訓練後檢查點的 S3 路徑 (`s3://customer-escrow-bucket-unique_id/training_run_name`)。
+ **複本**：用於分散式訓練的運算執行個體數量。可用的值會根據您選擇的模型而有所不同。Amazon Nova Lite 2.0 支援 4、8、16 或 32 個複本。
+ **data\$1s3\$1path**：訓練資料集的 S3 位置，這是 JSONL 檔案。此檔案必須位於與叢集相同的 AWS 帳戶和區域。提供的所有 S3 位置都必須位於相同的帳戶和區域中。
+ **validation\$1data\$1s3\$1path**：（選用） 驗證資料集的 S3 位置，這是 JSONL 檔案。此檔案必須位於與叢集相同的帳戶和區域中。提供的所有 S3 位置都必須位於相同的帳戶和區域中。
+ **output\$1s3\$1path**：儲存資訊清單和 TensorBoard 日誌的 S3 位置。提供的所有 S3 位置都必須位於相同的 AWS 帳戶和 AWS 區域。
+ **mlflow\$1tracking\$1uri**：用於 MLFlow 記錄的 MLFlow 應用程式的 ARN。
+ **mlflow\$1experiment\$1name**：MLFlow 實驗名稱。
+ **mlflow\$1run\$1name**：MLFlow 執行名稱。

**訓練組態**  

+ **max\$1steps**：要執行的訓練步驟數目。每個步驟都會使用元素`global_batch_size`數目來訓練模型。
+ **save\$1steps**：在訓練期間儲存模型檢查點的頻率 （步驟中）。
+ **save\$1top\$1k**：根據驗證指標要保留的最佳檢查點數目上限。
+ **max\$1length**：字符的序列長度上限。這會決定訓練的內容範圍大小。SFT 的最大支援值為 32768 個字符。

  序列越長，越能提高訓練效率，但代價是需要增加記憶體。我們建議您將 max\$1length 參數與資料分佈配對。
+ **global\$1batch\$1size**：跨所有裝置和工作者，一次向前或向後傳遞一起處理的訓練範例總數。

  此值會乘以每個裝置的批次大小和裝置數目。它會影響訓練和輸送量的穩定性。我們建議您從適合您記憶體的批次大小開始，並從該處向上擴展。對於特定網域的資料，批次越大可能會使梯度過度平滑。
+ **reasoning\$1enabled**：在訓練期間啟用推理功能的布林值旗標。

**學習率排程器**  

+ **warmup\$1steps**：逐步提高學習率的步驟數目。這可改善訓練穩定性。
+ **min\$1lr**：衰減結束時的最低學習率。有效值介於 0-1 (含) 之間，但必須小於學習率。

**最佳化工具組態**  

+ **lr**：學習率，可在最佳化期間控制步進大小。我們建議使用介於 1e-6-1e-4 之間的值，以獲得良好的效能。有效值介於 0-1 (含) 之間。
+ **weight\$1decay**：L2 正規化強度。較高的值 (介於 0.01-0.1 之間) 會增加正規化。
+ **adam\$1beta1**：Adam 最佳化工具中第一時間預估的指數衰減率。預設為 0.9。
+ **adam\$1beta2**：Adam 最佳化工具中第二個時刻預估的指數衰減率。預設為 0.95。

**PEFT 組態**  

+ **peft\$1scheme**：要使用的參數有效微調方案。選項`'null'`適用於全等級微調或`lora`適用於以 LoRA 為基礎的微調。

**LoRA 調校 （當 peft\$1scheme 為 'lora' 時）**  

+ **alpha**：LoRA 擴展參數。控制低階調整的大小。典型值的範圍是 8 到 128。
+ **lora\$1plus\$1lr\$1ratio**：LoRA\$1 最佳化的學習率比率。此乘數會特別針對 LoRA 參數調整學習率。

## 超參數指引
<a name="nova-sft-2-hyperparameters"></a>

根據訓練方法，使用以下建議的超參數：

**完整排名訓練**
+ **Epochs**：1
+ **學習率 (lr)**：1e-5
+ **最低學習率 (min\$1lr)**：1e-6

**LoRA （低排名調整）**
+ **Epochs**：2
+ **學習率 (lr)**：5e-5
+ **最低學習率 (min\$1lr)**：1e-6

**注意**：根據資料集大小和驗證效能調整這些值。監控訓練指標以防止過度擬合。

# SageMaker HyperPod 上的強化微調 (RFT)
<a name="nova-hp-rft"></a>

強化微調 (RFT) 是一種機器學習技術，可透過意見回饋訊號改善模型效能，這些訊號是可測量的分數或獎勵，指出回應品質，而不是直接監督並準確回答。與從輸入輸出對中學習的傳統監督式微調不同，RFT 使用獎勵函數來評估模型回應，並反覆最佳化模型以最大化這些獎勵。

此方法對於定義確切正確輸出具有挑戰性的任務特別有效，但您可以可靠地測量回應品質。RFT 可讓模型透過試驗和意見回饋來學習複雜的行為和偏好，非常適合需要細微決策、創意問題解決或遵守可程式設計評估的特定品質標準的應用程式。

**何時使用 RFT**  
當您可以定義明確、可衡量的成功條件，但難以為訓練提供確切正確的輸出時，請使用 RFT。它非常適合品質為主觀或多面向的任務，例如創意撰寫、程式碼最佳化或複雜推理，其中有多個有效解決方案，但有些解決方案明顯優於其他解決方案。

當您有以下項目時，RFT 最有效：
+ 可靠的獎勵函數，可透過程式設計方式評估模型輸出
+ 需要使模型行為符合特定偏好設定或限制條件
+ 傳統監督式微調因收集高品質標籤範例昂貴或不切實際而縮短的情況

對於需要反覆改進、個人化或遵守可編碼為獎勵訊號的複雜業務規則的應用程式，請考慮 RFT。

**RFT 最適合什麼**  
RFT 在可以客觀測量輸出品質，但難以預先定義最佳回應的網域中表現卓越：
+ **數學問題解決**：具有多個解決方案路徑的可驗證正確性
+ **程式碼產生和最佳化**：可測試的執行結果和效能指標
+ **科學推理任務**：邏輯一致性和事實準確性
+ **結構化資料分析**：以程式設計方式驗證的輸出
+ **多步驟推理**：需要step-by-step邏輯進展的任務
+ **工具用量和 API 呼叫**：執行結果可衡量的成功
+ **複雜工作流程**：遵守特定限制條件和業務規則

當您需要平衡多個競爭目標，例如準確性、效率和風格時，RFT 的效果非常好。

**何時使用推理模式進行 RFT 訓練**  
Amazon Nova 2.0 支援 RFT 訓練期間的推理模式。可使用下列模式：
+ **無**：無推理 （省略 reasoning\$1effort 欄位）
+ **低**：最低推理開銷
+ **高**：推理功能上限 （指定 reasoning\$1effort 時預設為預設值）

**注意**  
RFT 沒有媒體選項。如果組態中沒有 reasoning\$1effort 欄位，則會停用推理。

針對下列項目使用高推理：
+ 複雜的分析任務
+ 數學問題解決
+ 多步驟邏輯扣除
+ step-by-step思考可增加價值的任務

對下列項目不使用 （省略 reasoning\$1effort) 或低推理：
+ 簡單事實查詢
+ 直接分類
+ 速度和成本最佳化
+ 直接的問答

**重要**  
較高的推理模式會增加訓練時間和成本、推論延遲和成本，但也會提高複雜推理任務的模型功能。

**支援的模型**  
RFT onSageMaker HyperPod 支援 Amazon Nova Lite 2.0 (amazon.nova-2-lite-v1：0：256k)。

**主要步驟**  
RFT 程序包含四個關鍵階段：
+ **實作評估者**：建立獎勵函數，根據您的品質條件以程式設計方式對模型回應進行評分。
+ **上傳提示**：準備和上傳指定對話格式的訓練資料，以及評估的參考資料。
+ **啟動任務**：使用您設定的參數啟動強化微調程序。
+ **監控**：透過指標儀表板追蹤訓練進度，以確保模型有效地學習。

每個步驟都以上一個步驟為基礎，評估者做為透過提供一致的意見回饋訊號來引導整個訓練程序的基礎。

**Topics**
+ [Nova 2.0 上的 RFT](nova-hp-rft-nova2.md)

# Nova 2.0 上的 RFT
<a name="nova-hp-rft-nova2"></a>

RFT 訓練資料遵循 OpenAI 對話格式。每個訓練範例都是 JSON 物件，其中包含訊息、參考答案和選用的工具定義。本節提供在 Nova 2.0 上準備 RFT 有效訓練資料的指引。

**Topics**
+ [資料格式和結構](#nova-hp-rft-data-format)
+ [欄位描述](#nova-hp-rft-field-descriptions)
+ [超參數指引](#nova-hp-rft-monitoring-hyperparams)
+ [其他屬性](#nova-hp-rft-additional-properties)
+ [資料集大小建議](#nova-hp-rft-dataset-size)
+ [有效訓練資料的特性](#nova-hp-rft-effective-data)
+ [監控 RFT 訓練](nova-hp-rft-monitoring.md)

## 資料格式和結構
<a name="nova-hp-rft-data-format"></a>

每個訓練範例都是包含下列項目的 JSON 物件：
+ **訊息**：一系列使用系統、使用者和選擇性助理角色的對話式轉場
+ **reference\$1answer**：獎勵計算的預期輸出或評估條件
+ **工具** （選用）：模型可用的函數定義陣列
+ **id** （選用）：追蹤和刪除重複資料的唯一識別符

每個範例應該位於 JSONL 檔案中的單一行上，每行一個 JSON 物件。

### 範例 1：化學測試問題
<a name="nova-hp-rft-example-chemistry"></a>

下列範例顯示包含 Ground Truth 值的參考答案的化學問題：

```
{  
  "id": "chem-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful chemistry assistant"  
    },  
    {  
      "role": "user",  
      "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C"  
    }  
  ],  
  "reference_answer": {  
    "donor_bond_counts": 2,  
    "acceptor_bond_counts": 4,  
    "explanation": "Calculated using Lipinski's rule of five: N-H groups (2 donors), N and O atoms with lone pairs (4 acceptors)"  
  }  
}
```

**注意**  
reference\$1answer 包含使用網域特定規則計算的 Ground Truth 值。您的獎勵函數會將模型的預測值與這些參考值進行比較，以計算獎勵分數。

### 範例 2：數學問題
<a name="nova-hp-rft-example-math"></a>

下列範例顯示解決方案步驟的數學問題：

```
{  
  "id": "math-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  }  
}
```

### 範例 3：工具用量
<a name="nova-hp-rft-example-tool"></a>

下列範例顯示具有預期行為的工具用量：

```
{  
  "id": "tool-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful game master assistant"  
    },  
    {  
      "role": "user",  
      "content": "Generate a strength stat for a warrior character. Apply a +2 racial bonus modifier."  
    }  
  ],  
  "tools": [  
    {  
      "type": "function",  
      "function": {  
        "name": "StatRollAPI",  
        "description": "Generates character stats by rolling 4d6, dropping the lowest die result, and applying a modifier.",  
        "parameters": {  
          "type": "object",  
          "properties": {  
            "modifier": {  
              "description": "An integer representing the modifier to apply to the total of the stat roll.",  
              "type": "integer"  
            }  
          },  
          "required": ["modifier"]  
        }  
      }  
    }  
  ],  
  "reference_answer": {  
    "tool_called": "StatRollAPI",  
    "tool_parameters": {  
      "modifier": 2  
    },  
    "expected_behavior": "Call StatRollAPI with modifier=2 and return the calculated stat value"  
  }  
}
```

## 欄位描述
<a name="nova-hp-rft-field-descriptions"></a>


| 欄位 | Description | 其他備註 | 必要 | 
| --- |--- |--- |--- |
| id | 此 RFT 範例的唯一識別符 | 字串 （例如 "sample-001")。適用於追蹤和重複資料刪除。 | 否 | 
| messages | 定義提示和內容的聊天訊息排序清單 |  物件的陣列。模型會依序查看它們。通常以系統訊息開頭，然後是使用者。 | 是 | 
| messages【】.role | 誰在訊息中說話 | 常見值："system"、"user" （有時在其他內容中為 "assistant") | 否 | 
| messages【】.content | 訊息的文字內容 | 純字串。對於系統，它是指示，對於使用者，它是任務或輸入。 | 否 | 
| 工具 | 在此範例中，模型可用的工具規格 | 陣列。每個項目都會定義工具的界面和中繼資料。類型可能包括「函數」或「內部」。 | 否 | 
| reference\$1answer | 此範例的預期模型輸出 | 字串或物件，視任務而定。用作評估或訓練的目標。 | 否 | 

**注意**  
任何其他自訂欄位 （例如 task\$1id、Cucky\$1level、 context\$1data) 都不會經過驗證，並將做為中繼資料傳遞給您的獎勵函數。

## 超參數指引
<a name="nova-hp-rft-monitoring-hyperparams"></a>

根據您的訓練方法，使用以下建議的超參數：

**一般：**
+ Epochs：1
+ 學習率 (lr)：1e-7
+ 世代數：8
+ 最大新權杖數：8192
+ 批次大小：256

**LoRA （低排名調整）：**
+ LoRA 排名：32

**注意**  
根據您的資料集大小和驗證效能調整這些值。監控訓練指標以防止過度擬合。

## 其他屬性
<a name="nova-hp-rft-additional-properties"></a>

「additionalProperties」： true 設定可讓您包含核心結構描述需求以外的自訂欄位，讓您靈活地新增獎勵函數進行適當評估所需的任何資料。

### 常見的其他欄位
<a name="nova-hp-rft-common-fields"></a>

您可以包含下列類型的其他欄位：

**中繼資料：**
+ task\$1id：追蹤的唯一識別符
+ difficulty\$1level：問題複雜性指標
+ 網域：主旨區域或類別
+ expected\$1reasoning\$1steps：解決方案中的步驟數

**評估條件：**
+ evaluation\$1criteria：特定分級盧布
+ custom\$1scoring\$1weights：不同層面的相對重要性
+ context\$1data：問題的背景資訊
+ external\$1references：相關文件或資源的連結

### 具有其他屬性的範例
<a name="nova-hp-rft-additional-example"></a>

下列範例包含自訂中繼資料欄位：

```
{  
  "id": "algebra_001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  },  
  "task_id": "algebra_001",  
  "difficulty_level": "easy",  
  "domain": "algebra",  
  "expected_reasoning_steps": 3  
}
```

## 資料集大小建議
<a name="nova-hp-rft-dataset-size"></a>

### 起點
<a name="nova-hp-rft-starting-point"></a>

從下列最低資料集大小開始：
+ 最少 100 個訓練範例
+ 最少 100 個評估範例

優先考慮高品質的輸入資料和可靠的獎勵函數，該函數會在模型回應時一致地執行。

### 評估優先方法
<a name="nova-hp-rft-evaluation-first"></a>

在投資大規模 RFT 訓練之前，請評估模型的基準效能：
+ **高效能 （超過 95% 的獎勵）**：RFT 可能不必要，您的模型已表現良好
+ **效能非常差 (0% 獎勵）**：先切換到 SFT 以建立基本功能
+ **中等效能**：RFT 可能是適當的

此評估優先方法可確保獎勵函數沒有錯誤，並判斷 RFT 是否適合您的使用案例。從小型開始，您可以熟悉 RFT 工作流程、及早識別和修正問題、在擴展之前驗證您的方法，以及測試獎勵函數可靠性。驗證後，您可以擴展到更大的資料集，以進一步改善效能。

## 有效訓練資料的特性
<a name="nova-hp-rft-effective-data"></a>

### 清晰度和一致性
<a name="nova-hp-rft-clarity"></a>

良好的 RFT 範例需要清晰、不明確的輸入資料，以便在不同的模型輸出間實現準確的獎勵計算。避免資料中的雜訊，包括：
+ 不一致的格式
+ 矛盾的標籤或指示
+ 模棱兩可的提示
+ 衝突的參考答案

任何模棱兩可的情況都會誤導訓練程序，導致模型學習非預期的行為。

### 多樣性
<a name="nova-hp-rft-diversity"></a>

您的資料集應擷取生產使用案例的完整多樣性，以確保強大的實際效能。包括：
+ 各種問題類型和困難程度
+ 不同的輸入格式和邊緣案例
+ 來自所有預期案例的代表性範例

這種多樣性有助於防止過度擬合，並確保模型正常處理不熟悉的輸入。

### 獎勵函數考量事項
<a name="nova-hp-rft-reward-considerations"></a>

設計您的獎勵函數以進行高效訓練：
+ 在幾秒鐘內執行 （非分鐘）
+ 使用 Lambda 有效平行化
+ 傳回一致、可靠的分數
+ 正常處理不同類型的模型輸出

快速、可擴展的獎勵函數可大規模進行快速迭代和經濟實惠的實驗。

# 監控 RFT 訓練
<a name="nova-hp-rft-monitoring"></a>

在訓練期間監控關鍵指標，以確保有效學習並及早識別潛在問題。

**Topics**
+ [要追蹤的關鍵指標](#nova-hp-rft-monitoring-metrics)
+ [RFT 之後的評估](#nova-hp-rft-monitoring-evaluation)
+ [使用微調的模型](#nova-hp-rft-monitoring-checkpoints)
+ [限制和最佳實務](#nova-hp-rft-monitoring-limitations)
+ [疑難排解](#nova-hp-rft-monitoring-troubleshooting)

## 要追蹤的關鍵指標
<a name="nova-hp-rft-monitoring-metrics"></a>

在訓練期間使用 MlFlow 監控下列指標：

**獎勵指標：**
+ **平均獎勵分數**：模型回應的整體品質 （應隨時間增加）
+ **獎勵分配**：獲得高、中和低獎勵的回應百分比
+ **訓練與驗證獎勵**：比較以偵測過度擬合

**訓練指標：**
+ **政策更新**：成功權重更新的數量
+ **推展完成率**：成功評估的範例百分比

**關注模式：**
+ 獎勵穩定 （表示學習不佳）
+ 驗證獎勵在訓練獎勵增加時下降 （過度擬合）
+ 獎勵差異會隨著時間大幅增加 （不穩定）
+ 獎勵函數錯誤的高百分比 （實作問題）

**停止訓練的時機：**
+ 實現目標效能指標
+ 獎勵穩定且不再改善
+ 驗證效能降低 （偵測到過度擬合）
+ 達到訓練預算上限

## RFT 之後的評估
<a name="nova-hp-rft-monitoring-evaluation"></a>

訓練完成後，請評估微調後的模型，以評估效能改善：
+ **執行 RFT 評估任務**：使用 RFT 訓練中的檢查點做為模型
+ **與基準比較**：在相同的測試集中評估基礎模型和微調模型
+ **分析指標**：檢閱任務特定的指標 （準確性、獎勵分數等）
+ **執行定性審查**：手動檢查範例輸出的品質

如需詳細評估程序，請參閱評估一節。

## 使用微調的模型
<a name="nova-hp-rft-monitoring-checkpoints"></a>

**存取檢查點：**

訓練完成後，找到您的檢查點：

1. 在 S3 `output_path`中導覽至您的

1. 下載並擷取 `output.tar.gz`

1. 開啟 `manifest.json`

1. 複製 `checkpoint_s3_bucket`值

**部署以進行推論：**

使用檢查點 S3 路徑進行推論或進一步訓練：

```
run:
    model_type: amazon.nova-2-lite-v1:0:256k
    model_name_or_path: "s3://customer-escrow-<account-number>-smtj-<unique-identifier>/<job-name>"
```

如需部署和推論說明，請參閱推論一節。

## 限制和最佳實務
<a name="nova-hp-rft-monitoring-limitations"></a>

**目前的限制：**

**Beta 限制：**
+ 需要為 RFT 建立新的 RIG 群組。此限制將由 GA 解決。
+ 執行個體類型需求：僅支援 P5 執行個體 （最低 8x P5.48xlarge)。即將推出：支援較小的執行個體類型 (ETA：2025 年 1 月中）。

**功能限制：**
+ 15 分鐘 Lambda 逾時：獎勵函數必須在 15 分鐘內完成
+ 僅限單轉：不支援多轉對話
+ 驗證資料集：訓練期間不支援。使用個別的評估任務來評估訓練進度。

**訓練考量事項：**
+ 低獎勵案例：當少於 5% 的範例獲得正面獎勵時可能會遇到困難 - 首先考慮 SFT
+ 資料需求：需要足夠的多樣性才能有效地學習
+ 運算成本：比監督式微調更昂貴

**Nova Forge 會移除其中一些限制：**
+ 支援多轉對話
+ 允許超過 15 分鐘逾時的獎勵函數
+ 提供進階演算法和調校選項
+ 專為複雜的企業使用案例而設計，專門調校以建置前沿模型

**最佳實務：**

**從小開始並擴展：**
+ 從最少的資料集 (100-200 個範例） 和很少的訓練 epoch 開始
+ 在向上擴展之前驗證您的方法
+ 根據結果逐漸增加資料集大小和訓練步驟

**先使用 SFT 的基準：**
+ 如果獎勵分數持續較低 （例如，一律為 0)，請在 RFT 之前執行 SFT
+ RFT 需要合理的基準效能才能有效改善

**設計有效率的獎勵函數：**
+ 以秒為單位執行，而非以分鐘為單位
+ 將外部 API 呼叫降至最低
+ 使用有效率的演算法和資料結構
+ 實作適當的錯誤處理
+ 訓練前徹底測試
+ 利用 Lambda 的平行擴展功能

**主動監控訓練：**
+ 追蹤一段時間內的平均獎勵分數
+ 觀看跨範例的獎勵分佈
+ 比較訓練與驗證獎勵
+ 尋找相關的模式 （平穩、過度擬合、不穩定）

**根據結果反覆運算：**
+ 如果反覆運算後獎勵未改善，請調整獎勵函數設計
+ 增加資料集多樣性，以提供更清晰的學習訊號
+ 如果獎勵保持接近零，請考慮切換至 SFT
+ 使用不同的超參數進行實驗 （學習率、批次大小）

**最佳化資料品質：**
+ 確保多樣化的代表性範例
+ 包含邊緣案例和困難的範例
+ 驗證獎勵函數是否正確為所有範例類型評分
+ 移除或修正混淆獎勵函數的範例

## 疑難排解
<a name="nova-hp-rft-monitoring-troubleshooting"></a>

**獎勵函數錯誤：**

症狀：訓練期間獎勵函數呼叫的高錯誤率


| 問題 | 徵狀 | Resolution | 
| --- |--- |--- |
| Lambda 逾時 | 15 分鐘後頻繁逾時 | 最佳化函數效能；考慮使用 Nova Forge 進行複雜的評估 | 
| 並行不足 | Lambda 限流錯誤 | 增加 lambda\$1concurrency\$1limit 或請求增加配額 | 
| 無效的傳回格式 | 訓練失敗，格式錯誤 | 確認傳回結構符合所需的界面格式 | 
| 未處理的例外狀況 | 間歇性錯誤 | 新增全面的錯誤處理和記錄 | 
| 外部 API 失敗 | 不一致的評分 | 實作重試邏輯和備用策略 | 

**訓練效能不佳：**

症狀：獎勵未改善或在低值時保持穩定

解決方法：
+ **驗證獎勵函數正確性**：使用已知良好/不良的範例進行測試
+ **檢查基準效能**：評估基礎模型；如果準確度接近零，請先執行 SFT
+ **增加資料多樣性**：新增涵蓋不同案例的更多不同範例
+ **調整超參數**：嘗試不同的學習率或批次大小
+ **檢閱獎勵訊號品質**：確保獎勵區分好回應和壞回應

**過度擬合：**

症狀：訓練獎勵增加，而驗證獎勵減少

解決方法：
+ **減少訓練步驟**：提早停止訓練
+ **增加資料集大小**：新增更多訓練範例
+ **新增正規化**：調整 `weight_decay`或 `entropy_coeff`
+ **增加資料多樣性**：確保訓練集代表完整分佈

# 評估您的訓練模型
<a name="nova-hp-evaluate"></a>

評估配方是一種 YAML 組態檔案，可定義 Amazon Nova 模型評估任務的執行方式。使用此配方，您可以根據常見的基準或您自己的自訂資料集，來評估基礎或訓練模型的效能。指標可以存放在 Amazon S3 或 TensorBoard 中。評估會提供量化指標，協助您評估各種任務的模型效能，以判斷是否需要進一步自訂。

模型評估是一種離線程序，在程序中會根據具有預先定義的回答測試模型。系統不會即時或根據即時使用者互動來評估它們。對於即時評估，將模型部署到 Amazon Bedrock 之後，您可以透過呼叫 Amazon Bedrock 執行時期 API 來評估模型。

**Topics**
+ [可用的基準任務](customize-fine-tune-evaluate-available-tasks.md)
+ [了解配方參數](customize-fine-tune-evaluate-understand-modify.md)
+ [評估配方範例](customize-fine-tune-evaluate-recipe-examples.md)
+ [啟動評估任務](customize-fine-tune-evaluate-start-job.md)
+ [存取和分析評估結果](customize-fine-tune-evaluate-access-results.md)
+ [RFT 評估](nova-hp-evaluate-rft.md)

# 可用的基準任務
<a name="customize-fine-tune-evaluate-available-tasks"></a>

提供範例程式碼套件，示範如何使用 Amazon Nova 的 SageMaker AI 模型評估功能來計算基準指標。若要存取程式碼套件，請參閱 [sample-Nova-lighteval-custom-task](https://github.com/aws-samples/sample-Nova-lighteval-custom-task/)。

以下是支援的可用產業標準基準清單。您可以在 `eval_task` 參數中指定下列基準。


| Benchmark | 模態 | Description | 指標 | 策略 | 子任務可用 | 
| --- |--- |--- |--- |--- |--- |
| mmlu | 文字 | 多任務語言理解 – 測試 57 個主題的知識。 | 正確性 | zs\$1cot | 是 | 
| mmlu\$1pro | 文字 | MMLU – 專業子集 – 專注於專業領域，例如法律、醫學、會計和工程。 | 正確性 | zs\$1cot | 否 | 
| bbh | 文字 | 進階推理任務 – 一系列挑戰性問題，可測試高階認知和問題解決技能。 | 正確性 | zs\$1cot | 是 | 
| gpqa | 文字 | 一般物理問題回答 – 評估對物理概念的理解及解決相關問題的能力。 | 正確性 | zs\$1cot | 否 | 
| 數學運算 | 文字 | 數學問題解決 – 測量代數、微積分和應用題等主題的數學推理能力。 | exact\$1match | zs\$1cot | 是 | 
| strong\$1reject | 文字 | 品質控管任務 – 測試模型可偵測和拒絕不適當、有害或不正確內容的能力。 | 偏轉 | zs | 是 | 
| IFEval | 文字 | 指示追蹤評估 – 測量模型遵循指定指示的準確度，並根據規格完成任務。 | 正確性 | zs | 否 | 
| gen\$1qa | 文字 | 自訂資料集評估 – 可讓您使用自有資料集進行基準測試，並使用如 ROUGE 和 BLEU 等指標將模型輸出與參考回答進行比較。 | 全部 | gen\$1qa | 否 | 
| llm\$1judge | 文字 | LLM-as-a-Judge 偏好設定比較 – 使用 Amazon Nova Judge 模型來判斷您的提示配對回應之間的偏好設定 (B 相較於 A)，計算 B 優於 A 的機率。 | 全部 | 評審 | 否 | 
| humaneval | 文字 | HumanEval - 旨在評估大型語言模型程式碼產生功能的基準資料集 | pass@1 | zs | 否 | 
|  mm\$1llm\$1judge  |  多模態 （影像）  |  這個新基準的行為與`llm_judge`上述以文字為基礎的行為相同。唯一的差別是它支援映像推論。  |  全部  |  評審  |  否  | 
|  rubric\$1llm\$1judge  | Text |  Rubric Judge 是建置在 Amazon Nova 2.0 Lite 上的增強LLM-as-a-judge 評估模型。與只提供偏好判定的[原始判斷模型](https://aws.amazon.com/blogs/machine-learning/evaluating-generative-ai-models-with-amazon-nova-llm-as-a-judge-on-amazon-sagemaker-ai/)不同，Ruberic Judge 會動態產生為每個提示量身打造的自訂評估條件，並跨多個維度指派精細分數。  |  全部  |  評審  |  否  | 
|  aime\$12024  | Text |  AIME 2024 - 美國邀請數學檢查問題測試進階數學推理和問題解決  |  exact\$1match  |  zs\$1cot  | No | 
|  calendar\$1scheduling  | Text |  Natural Plan - 行事曆排程任務測試規劃能力，以跨多天和多人安排會議  |  exact\$1match  |  fs  | No | 

下列是可用的 `mmlu` 子任務：

```
MMLU_SUBTASKS = [
    "abstract_algebra",
    "anatomy",
    "astronomy",
    "business_ethics",
    "clinical_knowledge",
    "college_biology",
    "college_chemistry",
    "college_computer_science",
    "college_mathematics",
    "college_medicine",
    "college_physics",
    "computer_security",
    "conceptual_physics",
    "econometrics",
    "electrical_engineering",
    "elementary_mathematics",
    "formal_logic",
    "global_facts",
    "high_school_biology",
    "high_school_chemistry",
    "high_school_computer_science",
    "high_school_european_history",
    "high_school_geography",
    "high_school_government_and_politics",
    "high_school_macroeconomics",
    "high_school_mathematics",
    "high_school_microeconomics",
    "high_school_physics",
    "high_school_psychology",
    "high_school_statistics",
    "high_school_us_history",
    "high_school_world_history",
    "human_aging",
    "human_sexuality",
    "international_law",
    "jurisprudence",
    "logical_fallacies",
    "machine_learning",
    "management",
    "marketing",
    "medical_genetics",
    "miscellaneous",
    "moral_disputes",
    "moral_scenarios",
    "nutrition",
    "philosophy",
    "prehistory",
    "professional_accounting",
    "professional_law",
    "professional_medicine",
    "professional_psychology",
    "public_relations",
    "security_studies",
    "sociology",
    "us_foreign_policy",
    "virology",
    "world_religions"
]
```

下列是可用的 `bbh` 子任務：

```
BBH_SUBTASKS = [
    "boolean_expressions",
    "causal_judgement",
    "date_understanding",
    "disambiguation_qa",
    "dyck_languages",
    "formal_fallacies",
    "geometric_shapes",
    "hyperbaton",
    "logical_deduction_five_objects",
    "logical_deduction_seven_objects",
    "logical_deduction_three_objects",
    "movie_recommendation",
    "multistep_arithmetic_two",
    "navigate",
    "object_counting",
    "penguins_in_a_table",
    "reasoning_about_colored_objects",
    "ruin_names",
    "salient_translation_error_detection",
    "snarks",
    "sports_understanding",
    "temporal_sequences",
    "tracking_shuffled_objects_five_objects",
    "tracking_shuffled_objects_seven_objects",
    "tracking_shuffled_objects_three_objects",
    "web_of_lies",
    "word_sorting"
]
```

下列是可用的 `math` 子任務：

```
MATH_SUBTASKS = [
    "algebra",
    "counting_and_probability",
    "geometry",
    "intermediate_algebra",
    "number_theory",
    "prealgebra",
    "precalculus",
]
```

# 了解配方參數
<a name="customize-fine-tune-evaluate-understand-modify"></a>

**執行組態**  
以下是一般執行組態及所涉及參數的說明。

```
run:
  name: eval_job_name
  model_type: amazon.nova-micro-v1:0:128k
  model_name_or_path: nova-micro/prod
  replicas: 1
  data_s3_path: ""
  output_s3_path: s3://output_path
  mlflow_tracking_uri: ""
  mlflow_experiment_name : ""
  mlflow_run_name : ""
```
+ `name`：(必要) 評估任務的描述性名稱。這有助於在 AWS 主控台中識別您的任務。
+ `model_type`：(必要) 指定要使用的 Amazon Nova 模型變體。請勿手動修改此欄位。選項包括：
  + `amazon.nova-micro-v1:0:128k`
  + `amazon.nova-lite-v1:0:300k`
  + `amazon.nova-pro-v1:0:300k`
  + `amazon.nova-2-lite-v1:0:256k`
+ `model_name_or_path`：(必要) 基本模型的路徑或訓練後檢查點的 S3 路徑。選項包括：
  + `nova-micro/prod`
  + `nova-lite/prod`
  + `nova-pro/prod`
  + `nova-lite-2/prod`
  + (訓練後檢查點的 S3 路徑) `s3://<escrow bucket>/<job id>/outputs/checkpoints`
+ `replicas`：(必要) 分散式訓練中要使用的運算執行個體數目。您必須將此值設定為 1，因為不支援多節點。
+ `data_s3_path`：(必要) 輸入資料集的 S3 路徑。除非您使用的是*使用自有資料集*或 *LLM 即評審*配方，否則請將此參數保留空白。
+ `output_s3_path`：(必要) 存放輸出評估成品的 S3 路徑。請注意，輸出 S3 儲存貯體必須由建立任務的相同帳戶建立。
+ `mlflow_tracking_uri`：（選用） 用於追蹤 MLflow 執行/實驗的 MLFlow 追蹤伺服器 ARN。請確保您具有從 SageMaker AI 執行角色存取追蹤伺服器的許可

**評估組態**  
以下是模型評估組態及所涉及參數的說明。

```
evaluation:
  task: mmlu
  strategy: zs_cot
  subtask: mathematics
  metric: accuracy
```
+ `task`：(必要) 指定要使用的評估基準或任務。

  支援的任務清單：
  + mmlu
  + mmlu\$1pro
  + bbh
  + gpqa
  + 數學運算
  + strong\$1reject
  + gen\$1qa
  + ifeval
  + llm\$1judge
  + humaneval
  + mm\$1llm\$1judge
  + rubric\$1llm\$1judge
  + aime\$12024
  + calendar\$1scheduling
  + humaneval
+ `strategy`：(必要) 定義評估方法：
  + zs\$1cot：零樣本思緒鏈 - 一種可提示大型語言模型的方法，鼓勵逐步推理，而無需明確的範例。
  + zs：零樣本 - 一種無需任何先前訓練範例即可解決問題的方法。
  + gen\$1qa：使用自有資料集配方特定的策略。
  + judge：Amazon Nova LLM 作為 Judge 和 mm\$1llm\$1judge 的特定策略。
+ `subtask`：(選用且可移除) 針對特定評估任務指定特定子任務。如果您的任務沒有任何子任務，請從配方中移除此項目。
+ `metric`：(必要) 要使用的評估指標。
  + 正確性：正確回答的百分比
  + exact\$1match：(對於 `math` 基準) 會傳回輸入預測字串與其參考完全相符的比率。
  + 偏轉：(對於 `strong reject` 基準測試) 會將相對偏轉傳回基本模型和顯著性指標的差異。
  + pass@1：(對於 `humaneval` 基準測試) 用來測量模型最高可信度預測符合正確回答之案例百分比的指標。
  + `all`：傳回下列指標：
    + 對於 `gen_qa` 和使用自有資料集基準，這會傳回下列指標：
      + `rouge1`：測量所產生文字和參考文字之間一元語法 (一個字) 的重疊。
      + `rouge2`：測量所產生文字和參考文字之間二元語法 (連續兩個字) 的重疊。
      + `rougeL`：測量文字之間最長的共同子序列，允許相符項目中的差距。
      + `exact_match`：二元分數 (0 或 1)，指出產生的文字是否逐字元完全符合參考文字。
      + `quasi_exact_match`：類似於完全相符但更寬鬆，通常忽略大小寫、標點符號和空格差異。
      + `f1_score`：精確率和召回率的調和平均數，可測量預測回答和參考回答之間的字詞重疊。
      + `f1_score_quasi`：類似於 f1\$1score，但比對更寬鬆，使用會忽略次要差異的標準化文字比較。
      + `bleu`：測量所產生文字和參考文字之間 n 元語法比對的精確率，常用於轉譯評估。
    + 對於 `llm_judge`和 `mm_llm_judge`，使用您自己的資料集基準，請傳回下列指標：
      + `a_scores`：跨向前和向後評估傳遞的 `response_A` 其獲勝次數。
      + `a_scores_stderr`：跨配對判斷的 `response_A scores` 其標準誤。
      + `b_scores`：跨向前和向後評估傳遞的 `response_B` 其獲勝次數。
      + `b_scores_stderr`：跨配對判斷的 `response_B scores` 其標準誤。
      + `ties`：將 `response_A` 和 `response_B` 評估為相等的判斷數目。
      + `ties_stderr`：跨配對判斷的繫結其標準誤。
      + `inference_error`：無法正確評估的判斷計數。
      + `inference_error_stderr`：跨判斷的推論錯誤其標準誤。
      + `score`：根據 `response_B` 其向前和向後傳遞中的獲勝來彙總分數。
      + `score_stderr`：跨配對判斷的彙總分數其標準誤。
      + `winrate`：使用 Bradley-Terry 機率計算將比 response\$1A 偏好 response\$1B 的機率。
      + `lower_rate`：從引導取樣預估勝率的下限 (第 2.5 個百分位數)。

**推論組態**  
以下是推論組態及所涉及參數的說明。所有參數都是選用的。

```
inference:
  max_new_tokens: 200
  top_k: -1
  top_p: 1.0
  temperature: 0
  top_logprobs: 10
  reasoning_effort: null  # options: low/high to enable reasoning or null to disable reasoning
```
+ `max_new_tokens`：要產生的記號數目上限。這必須為整數。
+ `top_k`：要考慮的最高機率記號數量。這必須為整數。
+ `top_p`：記號抽樣的累積機率閾值。這必須是介於 0.0 到 1.0 (含) 之間的浮點數。
+ `temperature`：記號選擇中的隨機性。越大的值會導致越大的隨機性。使用 0 會讓結果具有決定性。此值必須是最小值為 0 的浮點數。
+ `top_logprobs`：推論回應中要傳回的最大 logprob 數目。此值必須是從 0 到 20 的整數。Logprob 包含考慮的輸出字符，以及訊息內容中傳回的每個輸出字符的日誌機率。
+ `reasoning_effort`：控制可推理模型的推理行為。`reasoning_effort` 只有在 `model_type`指定可推理的模型時設定 （目前為 `amazon.nova-2-lite-v1:0:256k`)。可用選項為 `null`（如果未設定預設值；停用推理）`low`、 或 `high`。

請注意，對於 `humaneval`，我們建議使用下列推論組態：

```
inference:
  top_k: 1
  max_new_tokens: 1600
  temperature: 0.0
```

**MLFlow 組態**  
以下是 MLFlow 組態和所涉及參數的說明。所有參數都是選用的。

```
run:
  mlflow_tracking_uri: ""
  mlflow_experiment_name: ""
  mlflow_run_name: ""
```
+ `mlflow_tracking_uri`：選用） MLflow 追蹤伺服器的位置 （僅在 SMHP 上需要）
+ `mlflow_experiment_name`：（選用） 將相關 ML 執行分組的實驗名稱
+ `mlflow_run_name`：（選用） 實驗中特定訓練執行的自訂名稱

# 評估配方範例
<a name="customize-fine-tune-evaluate-recipe-examples"></a>

Amazon Nova 提供四種類型的評估配方，可在 SageMaker HyperPod 配方 GitHub 儲存庫中找到。

## 一般文字基準配方
<a name="nova-model-hp-evaluation-config-example-text"></a>

這些配方可讓您在一套完整的純文字基準之間評估 Amazon Nova 模型的基本功能。它們會以格式 `xxx_general_text_benchmark_eval.yaml` 提供。

## 使用自有資料集基準配方
<a name="nova-model-hp-evaluation-config-byo"></a>

這些配方可讓您使用自有資料集進行基準測試，並使用不同類型的指標比較模型輸出以參考回答。它們會以格式 `xxx_bring_your_own_dataset_eval.yaml` 提供。

以下是使用自有資料集需求：
+ 檔案格式需求
  + 您必須包含一個 `gen_qa.jsonl` 包含評估範例的檔案。
  + 您的資料集必須上傳至 SageMaker 訓練任務可存取的 SS3 位置。
  + 檔案必須遵循一般問與答資料集所需的結構描述格式。
+ 結構描述格式需求 - JSONL 檔案中的每一行都必須是具有下列欄位的 JSON 物件：
  + `query`：(必要) 字串，包含需要回答的問題或指示
  + `response`：(必要) 字串，包含預期模型輸出
  + `system`：(選用) 字串，包含在處理查詢之前設定 AI 模型行為、角色或個性的系統提示。
  + `metadata`：（選用） 字串包含與項目相關聯的中繼資料，用於標記目的。

以下是使用自有資料集範例項目

```
{
   "system":"You are a english major with top marks in class who likes to give minimal word responses: ",
   "query":"What is the symbol that ends the sentence as a question",
   "response":"?"
}
{
   "system":"You are a pattern analysis specialist that provides succinct answers: ",
   "query":"What is the next number in this series? 1, 2, 4, 8, 16, ?",
   "response":"32"
}
{
   "system":"You have great attention to detail that follows instructions accurately: ",
   "query":"Repeat only the last two words of the following: I ate a hamburger today and it was kind of dry",
   "response":"of dry"
}
```

若要使用您的自訂資料集，請使用下列必要欄位修改您的評估配方，切勿變更任何內容：

```
evaluation:
  task: gen_qa
  strategy: gen_qa
  metric: all
```

有下列限制：
+ 每次評估只允許一個 JSONL 檔案。
+ 該檔案必須嚴格遵循定義的結構描述。
+ 內容長度限制：對於資料集中的每個範例，內容長度 （包括系統 \$1 查詢提示） 應小於 3.5k。

## Nova LLM 即評審基準配方
<a name="nova-model-evaluation-config-llm-judge"></a>

Amazon Nova LLM 即評審是一種模型評估功能，可讓客戶將一個模型的回應品質與自訂資料集上的基準模型回應進行比較。它會採用具有提示、基準回應和挑戰者回應的資料集，並使用 Amazon Nova Judge 模型，根據 [Bradley-Terry 機率](https://en.wikipedia.org/wiki/Bradley%E2%80%93Terry_model)和配對比較提供勝率指標。

配方會以 `xxx_llm_judge_eval.yaml` 格式提供。

以下是 LLM 即評審需求：
+ 檔案格式需求
  + 包含一個包含評估範例的 `llm_judge.jsonl` 檔案。檔案名稱必須是 `llm_judge.jsonl`。
  + 您的資料集必須上傳至 [SageMaker AI SageMaker HyperPod RIG](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-hp-cluster.html) 可存取的 S3 位置。
  + 檔案必須遵循 `llm_judge.jsonl` 資料集所需的結構描述格式。
  + 輸入資料集應確保所有記錄都不到 12k 內容長度。
+ 結構描述格式需求 - JSONL 檔案中的每一行都必須是具有下列欄位的 JSON 物件：
  + `prompt`：(必要) 字串，包含所產生回應的提示。
  + `response_A`：字串，包含基準回應。
  + `response_B`：字串，包含與基準回應比較的替代回應。

以下是 LLM 即評審範例項目

```
{
"prompt": "What is the most effective way to combat climate change?",
"response_A": "The most effective way to combat climate change is through a combination of transitioning to renewable energy sources and implementing strict carbon pricing policies. This creates economic incentives for businesses to reduce emissions while promoting clean energy adoption.",
"response_B": "We should focus on renewable energy. Solar and wind power are good. People should drive electric cars. Companies need to pollute less."
}
{
"prompt": "Explain how a computer's CPU works",
"response_A": "CPU is like brain of computer. It does math and makes computer work fast. Has lots of tiny parts inside.",
"response_B": "A CPU (Central Processing Unit) functions through a fetch-execute cycle, where instructions are retrieved from memory, decoded, and executed through its arithmetic logic unit (ALU). It coordinates with cache memory and registers to process data efficiently using binary operations."
}
{
"prompt": "How does photosynthesis work?",
"response_A": "Plants do photosynthesis to make food. They use sunlight and water. It happens in leaves.",
"response_B": "Photosynthesis is a complex biochemical process where plants convert light energy into chemical energy. They utilize chlorophyll to absorb sunlight, combining CO2 and water to produce glucose and oxygen through a series of chemical reactions in chloroplasts."
}
```

若要使用您的自訂資料集，請使用下列必要欄位修改您的評估配方，切勿變更任何內容：

```
evaluation:
  task: llm_judge
  strategy: judge
  metric: all
```

有下列限制：
+ 每次評估只允許一個 JSONL 檔案。
+ 該檔案必須嚴格遵循定義的結構描述。
+ Amazon Nova Judge 模型在所有模型系列規格 (即 Lite、Micro 和 Pro) 之間皆相同。
+ 目前不支援自訂判斷模型。
+ 內容長度限制：對於資料集中的每個範例，內容長度 （包括系統 \$1 查詢提示） 應小於 7k。

## Nova LLM 作為多模態 （影像） 基準配方的判斷
<a name="nova-model-hp-evaluation-mm-llm-judge"></a>

Nova LLM Judge for multi-modal （影像），簡稱為 Amazon Nova MM\$1LLM Judge，是一種模型評估功能，可讓您使用自訂資料集，比較一個模型的回應品質與基準模型的回應。它接受包含提示、基準回應和挑戰者回應的資料集，以及 Base64-encoded字串形式的影像，然後使用 Amazon Nova Judge 模型，透過配對比較，根據 [Bradley-Terry](https://en.wikipedia.org/wiki/Bradley%E2%80%93Terry_model) 機率提供獲勝率指標。配方格式：`xxx_mm_llm_judge _eval.yaml`。

**Nova LLM 資料集需求**

檔案格式：
+ 包含評估範例的單一 `mm_llm_judge.jsonl` 檔案。檔案名稱必須剛好為 `llm_judge.jsonl`。
+ 您必須將資料集上傳至 SageMaker Training Jobs 可存取的 SS3 位置。
+ 檔案必須遵循 `mm_llm_judge` 資料集所需的結構描述格式。
+ 輸入資料集應確保所有記錄都低於 12 k 內容長度，不包括影像的屬性。

結構描述格式 - `.jsonl` 檔案中的每一行都必須是具有下列欄位的 JSON 物件。
+ 必要欄位。

  `prompt`：字串，包含所產生回應的提示。

  `images`：陣列包含具有資料屬性的物件清單 （值為 Base64-encoded的影像字串）。

  `response_A`：字串，包含基準回應。

  `response_B`：字串，包含與基準回應比較的替代回應。

範例項目

為了便於閱讀，以下範例包含新的行和縮排，但在實際的資料集中，每個記錄應該位於單一行。

```
{
  "prompt": "what is in the image?",
  "images": [
    {
      "data": "data:image/jpeg;Base64,/9j/2wBDAAQDAwQDAwQEAwQFBAQFBgo..."
    }
  ],
  "response_A": "a dog.",
  "response_B": "a cat.",
}
{
  "prompt": "how many animals in echo of the images?",
  "images": [
    {
      "data": "data:image/jpeg;Base64,/9j/2wBDAAQDAwQDAwQEAwQFBAQFBgo..."
    },
    {
      "data": "data:image/jpeg;Base64,/DKEafe3gihn..."
    }
  ],
  "response_A": "The first image contains one cat and the second image contains one dog",
  "response_B": "The first image has one aminal and the second has one animal",
}
```

若要使用您的自訂資料集，請使用下列必要欄位修改您的評估配方，切勿變更任何內容：

```
evaluation:
  task: mm_llm_judge
  strategy: judge
  metric: all
```

**限制**
+ 每次評估只允許一個 `.jsonl` 檔案。
+ 該檔案必須嚴格遵循定義的結構描述。
+ Nova MM Judge 模型僅支援影像參考。
+ Nova MM Judge 模型在 Amazon Nova Lite 規格之間是相同的。
+ 目前不支援自訂判斷模型。
+ 不支援 Amazon S3 映像 URI。
+ 輸入資料集應確保所有記錄都低於 12 k 內容長度，但不包括影像屬性。

## 以 Rubric 為基礎的判斷
<a name="nova-hp-evaluate-rubric-judge"></a>

Rubric Judge 是建置在 Amazon Nova 2.0 Lite 上的增強LLM-as-a-judge 評估模型。與只提供偏好判斷 (A>B、B>A 或 tie) 的[原始判斷模型](https://aws.amazon.com/blogs/machine-learning/evaluating-generative-ai-models-with-amazon-nova-llm-as-a-judge-on-amazon-sagemaker-ai/)不同，Ruberic Judge 會動態產生為每個提示量身打造的自訂評估條件，並跨多個維度指派精細分數。

主要功能：
+ **產生動態條件**：根據輸入提示自動建立相關的評估維度
+ **加權分數**：為每個條件指派重要性權重，以反映其相對重要性
+ **精細評估**：針對每個條件提供二進位 (true/false) 或擴展 (1-5) 的詳細分數
+ **品質指標**：計算連續品質分數 (0-1 比例），以量化回應之間的差異程度

模型產生的範例條件：

```
price_validation:
  description: "The response includes validation to ensure price is a positive value."
  type: "scale"
  weight: 0.3
```

模型會根據所有產生的條件評估這兩個回應，然後使用這些條件層級分數來通知其最終偏好決策。

**Topics**
+ [配方組態](#nova-hp-evaluate-rubric-judge-recipe)
+ [輸入資料集格式](#nova-hp-evaluate-rubric-judge-input)
+ [評估輸出](#nova-hp-evaluate-rubric-judge-output)
+ [推理模型支援](#nova-hp-evaluate-rubric-judge-reasoning)

### 配方組態
<a name="nova-hp-evaluate-rubric-judge-recipe"></a>

**Rubric Judge 配方**  
在您的配方`task: rubric_llm_judge`中設定 以啟用 Rubric Judge：

```
run:
  name: nova-eval-job-name                              # [MODIFIABLE] Unique identifier for your evaluation job
  model_type: amazon.nova-2-lite-v1:0:256k              # [FIXED] Rubric Judge model type
  model_name_or_path: "nova-lite-2/prod"                # [FIXED] Path to model checkpoint or identifier
  replicas: 1                                           # [MODIFIABLE] Number of replicas for SageMaker Training job
  data_s3_path: ""                                      # [FIXED] Leave empty for SageMaker Training job
  output_s3_path: ""                                    # [FIXED] Leave empty for SageMaker Training job

evaluation:
  task: rubric_llm_judge                                # [FIXED] Evaluation task - enables Rubric Judge
  strategy: judge                                       # [FIXED] Evaluation strategy
  metric: all                                           # [FIXED] Metric calculation method

inference:
  max_new_tokens: 12000                                 # [MODIFIABLE] Maximum tokens to generate
  top_k: -1                                             # [MODIFIABLE] Top-k sampling parameter
  top_p: 1.0                                            # [MODIFIABLE] Nucleus sampling parameter
  temperature: 0                                        # [MODIFIABLE] Sampling temperature (0 = deterministic)
```

**原始 LLM 做為判斷配方 （用於比較）**  
原始判斷模型使用 `task: llm_judge`：

```
run:
  name: eval-job-name                                   # [MODIFIABLE] Unique identifier for your evaluation job
  model_type: amazon.nova-micro-v1:0:128k               # [FIXED] Model type
  model_name_or_path: "nova-micro/prod"                 # [FIXED] Path to model checkpoint or identifier
  replicas: 1                                           # [MODIFIABLE] Number of replicas for SageMaker Training job
  data_s3_path: ""                                      # [FIXED] Leave empty for SageMaker Training job
  output_s3_path: ""                                    # [FIXED] Leave empty for SageMaker Training job

evaluation:
  task: llm_judge                                       # [FIXED] Original judge task
  strategy: judge                                       # [FIXED] Evaluation strategy
  metric: all                                           # [FIXED] Metric calculation method

inference:
  max_new_tokens: 12000                                 # [MODIFIABLE] Maximum tokens to generate
  top_k: -1                                             # [MODIFIABLE] Top-k sampling parameter
  top_p: 1.0                                            # [MODIFIABLE] Nucleus sampling parameter
  temperature: 0                                        # [MODIFIABLE] Sampling temperature (0 = deterministic)
```

### 輸入資料集格式
<a name="nova-hp-evaluate-rubric-judge-input"></a>

輸入資料集格式與[原始判斷模型](https://aws.amazon.com/blogs/machine-learning/evaluating-generative-ai-models-with-amazon-nova-llm-as-a-judge-on-amazon-sagemaker-ai/)相同：

**必要欄位：**
+ `prompt`：包含輸入提示和指示的字串
+ `response_A`：包含基準模型輸出的字串
+ `response_B`：包含自訂模型輸出的字串

**範例資料集 (JSONL 格式）：**

```
{"prompt": "What is the most effective way to combat climate change?", "response_A": "The most effective way to combat climate change is through a combination of transitioning to renewable energy sources and implementing strict carbon pricing policies. This creates economic incentives for businesses to reduce emissions while promoting clean energy adoption.", "response_B": "We should focus on renewable energy. Solar and wind power are good. People should drive electric cars. Companies need to pollute less."}
{"prompt": "Explain how a computer's CPU works", "response_A": "CPU is like brain of computer. It does math and makes computer work fast. Has lots of tiny parts inside.", "response_B": "A CPU (Central Processing Unit) functions through a fetch-execute cycle, where instructions are retrieved from memory, decoded, and executed through its arithmetic logic unit (ALU). It coordinates with cache memory and registers to process data efficiently using binary operations."}
{"prompt": "How does photosynthesis work?", "response_A": "Plants do photosynthesis to make food. They use sunlight and water. It happens in leaves.", "response_B": "Photosynthesis is a complex biochemical process where plants convert light energy into chemical energy. They utilize chlorophyll to absorb sunlight, combining CO2 and water to produce glucose and oxygen through a series of chemical reactions in chloroplasts."}
```

**格式需求：**
+ 每個項目必須是單行 JSON 物件
+ 使用換行分隔項目
+ 遵循範例所示的確切欄位命名

### 評估輸出
<a name="nova-hp-evaluate-rubric-judge-output"></a>

**輸出結構**  
Rubric Judge 與原始判斷模型相比，會產生增強的評估指標：

```
{
  "config_general": {
    "lighteval_sha": "string",
    "num_fewshot_seeds": "int",
    "max_samples": "int | null",
    "job_id": "int",
    "start_time": "float",
    "end_time": "float",
    "total_evaluation_time_secondes": "string",
    "model_name": "string",
    "model_sha": "string",
    "model_dtype": "string | null",
    "model_size": "string"
  },
  "results": {
    "custom|rubric_llm_judge_judge|0": {
      "a_scores": "float",
      "a_scores_stderr": "float",
      "b_scores": "float",
      "b_scores_stderr": "float",
      "ties": "float",
      "ties_stderr": "float",
      "inference_error": "float",
      "inference_error_stderr": "float",
      "score": "float",
      "score_stderr": "float",
      "weighted_score_A": "float",
      "weighted_score_A_stderr": "float",
      "weighted_score_B": "float",
      "weighted_score_B_stderr": "float",
      "score_margin": "float",
      "score_margin_stderr": "float",
      "winrate": "float",
      "lower_rate": "float",
      "upper_rate": "float"
    }
  },
  "versions": {
    "custom|rubric_llm_judge_judge|0": "int"
  }
}
```

**Rubric Judge 中的新指標**  
以下六個指標對 Rubric Judge 來說是唯一的，並提供精細的品質評估：


| 指標 | Description | 
| --- |--- |
| weighted\$1score\$1A | response\$1A 在所有模型產生的評估條件中的平均標準化品質分數。分數依標準重要性加權，並標準化為 0-1 比例 （較高 = 品質更佳） | 
| weighted\$1score\$1A\$1stderr | weighted\$1score\$1A 平均值的標準錯誤，表示統計不確定性 | 
| weighted\$1score\$1B | response\$1B 在所有模型產生的評估條件中的平均標準化品質分數。分數依標準重要性加權，並標準化為 0-1 比例 （較高 = 品質更佳） | 
| weighted\$1score\$1B\$1stderr | weighted\$1score\$1B 平均值的標準錯誤，表示統計不確定性 | 
| score\$1margin | 加權分數之間的差異 （計算方式為 weighted\$1score\$1A - weighted\$1score\$1B)。範圍：-1.0 到 1.0。正值 = response\$1A 較佳；負值 = response\$1B 較佳；接近零 = 相似品質 | 
| score\$1margin\$1stderr | score\$1margin 平均值的標準誤差，表示品質差異測量的不確定性 | 

**了解加權分數指標**  
**目的**：加權分數提供持續的品質測量，以補充二進位偏好設定的判斷，進而更深入地了解模型效能。

**與原始判斷的主要差異**：
+ **原始判斷**：僅輸出離散偏好設定 (A>B、B>A、A=B)
+ **Rubric Judge**：根據自訂條件輸出偏好設定和持續品質分數 (0-1 比例）

**解譯 score\$1margin**：
+ `score_margin = -0.128`：Response\$1B 得分比 response\$1A 高 12.8 個百分點
+ `|score_margin| < 0.1`：縮小品質差異 （關閉決策）
+ `|score_margin| > 0.2`：清楚的品質差異 （可信決策）

**使用案例**：
+ **模型改進**：識別模型表現不佳的特定領域
+ **品質量化**：測量效能差距的幅度，而不只是取捨率
+ **可信度評估**：區分密切決策和明確的品質差異

**重要**  
最終判斷仍以判斷模型的明確偏好標籤為基礎，以保留整體推理，並透過向前/向後評估確保適當的位置偏差緩解。加權分數做為可觀測性工具，而不是主要判定的替代項目。

**計算方法**  
透過下列程序計算加權分數：
+ **擷取條件資料**：剖析判斷器的 YAML 輸出以擷取條件分數和權重
+ **標準化分數**：
  + 規模類型條件 (1-5)：透過計算將 標準化為 0-1 `(score - 1) / 4`
  + 二進位條件 (true/false)：轉換為 1.0/0.0
+ **套用權重**：將每個標準化分數乘以其條件權重
+ **彙總**：每個回應的所有加權分數總和
+ **計算邊界**：運算 `score_margin = weighted_score_A - weighted_score_B`

**範例**：如果 response\$1A 的加權總和為 0.65，而 response\$1B 的加權總和為 0.78，則 `score_margin`會是 -0.13，表示 response\$1B 在所有加權條件的品質提高 13 個百分點。

### 推理模型支援
<a name="nova-hp-evaluate-rubric-judge-reasoning"></a>

推理模型支援可使用推理能力的 Amazon Nova 模型進行評估，這些模型在產生最終回應之前執行明確的內部推理。此功能會透過 `reasoning_effort` 參數使用 API 層級控制來動態啟用或停用推理功能，進而改善複雜分析任務的回應品質。

**支援的模型**：
+ amazon.nova-2-lite-v1：0：256k

**配方組態**  
將 `reasoning_effort` 參數新增至配方的 `inference`區段，以啟用推理：

```
run:
  name: eval-job-name                                    # [MODIFIABLE] Unique identifier for your evaluation job
  model_type: amazon.nova-2-lite-v1:0:256k               # [FIXED] Must be a reasoning-supported model
  model_name_or_path: nova-lite-2/prod                   # [FIXED] Path to model checkpoint or identifier
  replicas: 1                                            # [MODIFIABLE] Number of replicas for SageMaker Training job
  data_s3_path: ""                                       # [MODIFIABLE] Leave empty for SageMaker Training job; optional for SageMaker  SageMaker HyperPod  job
  output_s3_path: ""                                     # [MODIFIABLE] Output path for SageMaker  SageMaker HyperPod  job (not compatible with SageMaker Training jobs)

evaluation:
  task: mmlu                                             # [MODIFIABLE] Evaluation task
  strategy: generate                                     # [MODIFIABLE] Evaluation strategy
  metric: all                                            # [MODIFIABLE] Metric calculation method

inference:
  reasoning_effort: high                                 # [MODIFIABLE] Enables reasoning mode; options: low/medium/high or null to disable
  max_new_tokens: 200                                    # [MODIFIABLE] Maximum tokens to generate
  top_k: 50                                              # [MODIFIABLE] Top-k sampling parameter
  top_p: 1.0                                             # [MODIFIABLE] Nucleus sampling parameter
  temperature: 0                                         # [MODIFIABLE] Sampling temperature (0 = deterministic)
```

**使用 reasoning\$1effort 參數**  
`reasoning_effort` 參數控制可推理模型的推理行為。

**先決條件：**
+ **模型相容性**：`reasoning_effort`只有在`model_type`指定可推理的模型時設定 （目前為 `amazon.nova-2-lite-v1:0:256k`)
+ **錯誤處理**：使用 `reasoning_effort`搭配不支援的模型會失敗 `ConfigValidationError: "Reasoning mode is enabled but model '{model_type}' does not support reasoning. Please use a reasoning-capable model or disable reasoning mode."`

**可用的選項**：


| 選項 | Behavior (行為) | 字符限制 | 使用案例 | 
| --- |--- |--- |--- |
| null （預設） | 停用推理模式 | N/A | 無推理額外負荷的標準評估 | 
| low | 啟用具有限制條件的推理 | 用於內部推理的 4，000 個字符 | 需要簡潔推理的案例；針對速度和成本進行最佳化 | 
| high | 啟用無限制的推理 | 內部推理沒有字符限制 | 需要廣泛分析和step-by-step推理的複雜問題 | 

**何時啟用推理**  
針對**下列項目使用推理模式 (`medium`、 `low`或 `high`)**：
+ 複雜的問題解決任務 （數學、邏輯拼圖、編碼）
+ 需要中繼推理的多步驟分析問題
+ 詳細說明或step-by-step思考可提高準確性的任務
+ 回應品質優先於速度的情況

針對下列項目**使用非原因模式 （省略參數）**：
+ 簡單問答或事實查詢
+ 創意撰寫任務
+ 當更快的回應時間至關重要時
+ 應排除推理開銷的績效基準
+ 推理無法改善任務效能時的成本最佳化

**疑難排解**  
**錯誤：「啟用原因模式，但模型不支援推理」**

**原因**： `reasoning_effort` 參數設定為非空值，但指定的 `model_type`不支援推理。

**解決方法：**
+ 確認您的模型類型為 `amazon.nova-2-lite-v1:0:256k`
+ 如果使用不同的模型，請切換到具有推理功能的模型，或從配方中移除 `reasoning_effort` 參數

# 啟動評估任務
<a name="customize-fine-tune-evaluate-start-job"></a>

以下提供建議的評估執行個體類型和模型類型組態：

```
# Install Dependencies (Helm - https://helm.sh/docs/intro/install/)
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
rm -f ./get_helm.sh

# Install the SageMaker HyperPod CLI
git clone --recurse-submodules https://github.com/aws/sagemaker-hyperpod-cli.git
git checkout -b release_v2
cd sagemaker-hyperpod-cli
pip install .

# Verify the installation
hyperpod --help

# Connect to a SageMaker HyperPod Cluster
hyperpod connect-cluster --cluster-name cluster-name


# Submit the Job using the recipe for eval
# Namespace by default should be kubeflow
hyperpod start-job [--namespace namespace] --recipe evaluation/nova/nova_micro_p5_48xl_general_text_benchmark_eval --override-parameters \
'{
    "instance_type":"p5d.48xlarge",
    "container": "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-evaluation-repo:SM-HP-Eval-V2-latest",
    "recipes.run.name": custom-run-name,
    "recipes.run.model_type": model_type,
    "recipes.run.model_name_or_path" " model name or finetune checkpoint s3uri,
    "recipes.run.data_s3_path": s3 for input data only for genqa and llm_judge, must be full S3 path that include filename,
}'

# List jobs
hyperpod list-jobs [--namespace namespace] [--all-namespaces]

# Getting Job details
hyperpod get-job --job-name job-name [--namespace namespace] [--verbose]

# Listing Pods
hyperpod list-pods --job-name job-name --namespace namespace

# Cancel Job
hyperpod cancel-job --job-name job-name [--namespace namespace]
```

您也應能夠透過 Amazon EKS 叢集主控台檢視任務狀態。

# 存取和分析評估結果
<a name="customize-fine-tune-evaluate-access-results"></a>

評估任務成功完成後，您可以使用本節中的資訊來存取和分析結果。根據配方中定義的 `output_s3_path` (例如 `s3://output_path/`)，輸出結構如下：

```
job_name/
├── eval-result/
│    └── results_[timestamp].json
│    └── inference_output.jsonl (only present for gen_qa)
│    └── details/
│        └── model/
│            └── execution-date-time/
│                └──details_task_name_#_datetime.parquet
└── tensorboard-results/
    └── eval/
        └── events.out.tfevents.[timestamp]
```

指標結果會存放在指定的 S3 輸出位置 `s3://output_path/job_name/eval-result/result-timestamp.json`。

Tensorboard 結果會存放在 S3 路徑 `s3://output_path/job_name/eval-tensorboard-result/eval/event.out.tfevents.epoch+ip` 中。

`llm_judge` 和 `strong_reject` 除外，所有的推論輸出都存放在 S3 路徑：`s3://output_path/job_name/eval-result/details/model/taskname.parquet`。

對於 `gen_qa`，`inference_output.jsonl` 檔案包含每個 JSON 物件的下列欄位：
+ 提示 - 提交到模型的最終提示
+ 推論 - 來自模型的原始推論輸出
+ gold - 來自輸入資料集的目標回應
+ 中繼資料 - 如果提供，來自輸入資料集的中繼資料字串

若要在 Tensorboard 中視覺化您的評估指標，請完成下列步驟：

1. 導覽至 SageMaker AI Tensorboard。

1. 選取 **S3 資料夾**。

1. 新增 S3 資料夾路徑，例如 `s3://output_path/job-name/eval-tensorboard-result/eval`。

1. 等待同步完成

時間序列、純量和文字視覺化可供使用。

建議遵循下列最佳實務：
+ 透過模型和基準類型讓輸出路徑井然有序。
+ 維持一致的命名慣例，以便於追蹤。
+ 將擷取的結果儲存在安全的位置。
+ 監控 TensorBoard 同步狀態以成功載入資料。

您可以在 CloudWatch 日誌群組 中找到 SageMaker HyperPod 任務錯誤日誌`/aws/sagemaker/Clusters/cluster-id`。

## 日誌機率輸出格式
<a name="nova-hp-access-results-logprobs"></a>

在推論設定中設定 `top_logprobs` 時，評估輸出會在 parquet 檔案中包含字符層級日誌機率。每個字符位置都包含最佳候選字符的字典，其日誌機率位於下列結構中：

```
{
"Ġint": {"logprob_value": -17.8125, "decoded_value": " int"},
"Ġthe": {"logprob_value": -2.345, "decoded_value": " the"}
}
```

每個字符項目都包含：
+ `logprob_value`：字符的日誌機率值
+ `decoded_value`：字符的人類可讀取解碼字串表示

原始字符化器字符用作字典索引鍵，以確保唯一性，同時`decoded_value`提供可讀取的解釋。

# RFT 評估
<a name="nova-hp-evaluate-rft"></a>

**注意**  
只有在您是 Amazon Nova Forge 客戶時，才能在您自己的 AWS 環境中透過遠端獎勵函數進行評估。

**重要**  
`rl_env` 組態欄位僅用於評估，而非訓練。在訓練期間，您可以使用 `reward_lambda_arn`（單迴轉） 或 BYOO 基礎設施搭配 `rollout.delegate: true`（多迴轉） 來設定獎勵函數。

**什麼是 RFT 評估？**  
RFT 評估可讓您在強化學習訓練之前、期間或之後，使用自訂獎勵函數評估模型的效能。與使用預先定義指標的標準評估不同，RFT 評估可讓您透過 Lambda 函數定義自己的成功條件，該函數會根據您的特定需求對模型輸出進行評分。

**為什麼使用 RFT 評估 ？**  
評估對於判斷 RL 微調程序是否具有下列項目至關重要：
+ 改善模型與特定使用案例和人力值的一致性
+ 維護或改善關鍵任務的模型功能
+ 避免意外的副作用，例如降低事實性、增加詳細程度，或降低其他任務的效能
+ 符合獎勵函數定義的自訂成功條件

**何時使用 RFT 評估**  
在這些案例中使用 RFT 評估：
+ RFT 訓練之前：在您的評估資料集上建立基準指標
+ 在 RFT 訓練期間：使用中繼檢查點監控訓練進度
+ RFT 訓練後：驗證最終模型是否符合您的需求
+ 比較模型：使用一致的獎勵條件評估多個模型版本

**注意**  
當您需要自訂的網域特定指標時，請使用 RFT 評估。對於一般用途評估 （準確性、複雜度、BLEU)，請使用標準評估方法。

**Topics**
+ [資料格式要求](#nova-hp-evaluate-rft-data-format)
+ [準備您的評估配方](#nova-hp-evaluate-rft-recipe)
+ [預設獎勵函數](#nova-hp-evaluate-rft-preset)
+ [建立獎勵函數](#nova-hp-evaluate-rft-create-function)
+ [IAM 許可](#nova-hp-evaluate-rft-iam)
+ [執行評估任務](#nova-hp-evaluate-rft-execution)
+ [了解評估結果](#nova-hp-evaluate-rft-results)

## 資料格式要求
<a name="nova-hp-evaluate-rft-data-format"></a>

**輸入資料結構**  
RFT 評估輸入資料必須遵循 OpenAI 強化微調格式。每個範例都是 JSON 物件，其中包含：
+ `messages`：具有 `system`和 `user`角色的對話轉場陣列
+ 選用的其他中繼資料，例如 reference\$1answer

**資料格式範例**  
下列範例顯示所需的格式：

```
{
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Solve for x. Return only JSON like {\"x\": <number>}. Equation: 2x + 5 = 13"
        }
      ]
    }
  ],
  "reference_answer": {
    "x": 4
  }
}
```

**目前限制**  
下列限制適用於 RFT 評估：
+ 僅限文字：不支援多模態輸入 （影像、音訊、視訊）
+ 單轉對話：僅支援單一使用者訊息 （無多轉對話）
+ JSON 格式：輸入資料必須是 JSONL 格式 （每行一個 JSON 物件）
+ 模型輸出：在從指定模型產生的完成時執行評估

## 準備您的評估配方
<a name="nova-hp-evaluate-rft-recipe"></a>

**範例配方組態**  
下列範例顯示完整的 RFT 評估配方：

```
run:
  name: nova-lite-rft-eval-job
  model_type: amazon.nova-lite-v1:0:300k
  model_name_or_path: s3://escrow_bucket/model_location    # [MODIFIABLE] S3 path to your model or model identifier
  replicas: 1                                             # [MODIFIABLE] For SageMaker Training jobs only; fixed for  SageMaker HyperPod  jobs
  data_s3_path: ""                                        # [REQUIRED FOR HYPERPOD] Leave empty for SageMaker Training jobs
  output_s3_path: ""                                      # [REQUIRED] Output artifact S3 path for evaluation results

evaluation:
  task: rft_eval                                          # [FIXED] Do not modify
  strategy: rft_eval                                      # [FIXED] Do not modify
  metric: all                                             # [FIXED] Do not modify

# Inference Configuration
inference:
  max_new_tokens: 8196                                    # [MODIFIABLE] Maximum tokens to generate
  top_k: -1                                               # [MODIFIABLE] Top-k sampling parameter
  top_p: 1.0                                              # [MODIFIABLE] Nucleus sampling parameter
  temperature: 0                                          # [MODIFIABLE] Sampling temperature (0 = deterministic)
  top_logprobs: 0

# Evaluation Environment Configuration (NOT used in training)
rl_env:
  reward_lambda_arn: arn:aws:lambda:<region>:<account_id>:function:<reward-function-name>
```

## 預設獎勵函數
<a name="nova-hp-evaluate-rft-preset"></a>

兩個預設獎勵函數 (`prime_code` 和 `prime_math`) 可作為 Lambda 層使用，以便與您的 RFT Lambda 函數輕鬆整合。

**概觀**  
這些預設集函數提供out-of-the-box評估功能：
+ **prime\$1code**：程式碼產生和正確性評估
+ **prime\$1math**：數學推理和問題解決評估

**快速設定**  
若要使用預設獎勵函數：

1. 從 [nova-custom-eval-sdk 版本](https://github.com/aws/nova-custom-eval-sdk/releases)下載 Lambda layer

1. 使用 CLI 發佈 Lambda AWS 層：

   ```
   aws lambda publish-layer-version \
       --layer-name preset-function-layer \
       --description "Preset reward function layer with dependencies" \
       --zip-file fileb://universal_reward_layer.zip \
       --compatible-runtimes python3.9 python3.10 python3.11 python3.12 \
       --compatible-architectures x86_64 arm64
   ```

1. 在 AWS 主控台中將 layer 新增至 Lambda 函數 （從自訂 layer 選取 preset-function-layer，並針對凹凸相依性新增 AWSSDKPandas-Python312)

1. 在 Lambda 程式碼中匯入和使用 ：

   ```
   from prime_code import compute_score  # For code evaluation
   from prime_math import compute_score  # For math evaluation
   ```

**prime\$1code 函數**  
**目的**：針對測試案例執行程式碼並測量正確性，藉此評估 Python 程式碼產生任務。

**來自評估的範例輸入資料集格式**：

```
{"messages":[{"role":"user","content":"Write a function that returns the sum of two numbers."}],"reference_answer":{"inputs":["3\n5","10\n-2","0\n0"],"outputs":["8","8","0"]}}
{"messages":[{"role":"user","content":"Write a function to check if a number is even."}],"reference_answer":{"inputs":["4","7","0","-2"],"outputs":["True","False","True","True"]}}
```

**主要功能**：
+ 從 Markdown 程式碼區塊自動擷取程式碼
+ 函數偵測和以呼叫為基礎的測試
+ 具有逾時保護的測試案例執行
+ 語法驗證和編譯檢查
+ 使用追蹤傳回的詳細錯誤報告

**prime\$1math 函數**  
**目的**：使用符號數學支援評估數學推理和問題解決功能。

**輸入格式**：

```
{"messages":[{"role":"user","content":"What is the derivative of x^2 + 3x?."}],"reference_answer":"2*x + 3"}
```

**主要功能**：
+ 使用 SymPy 的符號數學評估
+ 多重答案格式 (LaTeX、純文字、符號）
+ 數學相等性檢查
+ 表達式標準化和簡化

**最佳實務**  
使用預設獎勵函數時，請遵循下列最佳實務：
+ 在測試案例中使用適當的資料類型 （整數與字串、布林值與 "True")
+ 在程式碼問題中提供明確的函數簽章
+ 在測試輸入中包含邊緣案例 （零、負數、空輸入）
+ 在參考答案中一致地格式化數學表達式
+ 在部署之前，使用範例資料測試獎勵函數

## 建立獎勵函數
<a name="nova-hp-evaluate-rft-create-function"></a>

**Lambda ARN**  
您必須參考 Lambda ARN 的下列格式：

```
"arn:aws:lambda:*:*:function:*SageMaker*"
```

如果 Lambda 沒有此命名機制，任務會失敗並出現此錯誤：

```
[ERROR] Unexpected error: lambda_arn must contain one of: ['SageMaker', 'sagemaker', 'Sagemaker'] when running on SMHP platform (Key: lambda_arn)
```

**Lambda 函數結構**  
您的 Lambda 函數會接收批次模型輸出並傳回獎勵分數。以下是範例實作：

```
from typing import List, Any
import json
import re
from dataclasses import asdict, dataclass


@dataclass
class MetricResult:
    """Individual metric result."""
    name: str
    value: float
    type: str


@dataclass
class RewardOutput:
    """Reward service output."""
    id: str
    aggregate_reward_score: float
    metrics_list: List[MetricResult]


def lambda_handler(event, context):
    """ Main lambda handler """
    return lambda_grader(event)


def lambda_grader(samples: list[dict]) -> list[dict]:
    """ Core grader function """
    scores: List[RewardOutput] = []

    for sample in samples:
        print("Sample: ", json.dumps(sample, indent=2))

        # Extract components
        idx = sample.get("id", "no id")
        if not idx or idx == "no id":
            print(f"ID is None/empty for sample: {sample}")

        ground_truth = sample.get("reference_answer")

        if "messages" not in sample:
            print(f"Messages is None/empty for id: {idx}")
            continue

        if ground_truth is None:
            print(f"No answer found in ground truth for id: {idx}")
            continue

        # Get model's response (last turn is assistant turn)
        last_message = sample["messages"][-1]

        if last_message["role"] != "nova_assistant":
            print(f"Last message is not from assistant for id: {idx}")
            continue

        if "content" not in last_message:
            print(f"Completion text is empty for id: {idx}")
            continue

        model_text = last_message["content"]

        # --- Actual scoring logic (lexical overlap) ---
        ground_truth_text = _extract_ground_truth_text(ground_truth)

        # Calculate main score and individual metrics
        overlap_score = _lexical_overlap_score(model_text, ground_truth_text)

        # Create two separate metrics as in the first implementation
        accuracy_score = overlap_score  # Use overlap as accuracy
        fluency_score = _calculate_fluency(model_text)  # New function for fluency

        # Create individual metrics
        metrics_list = [
            MetricResult(name="accuracy", value=accuracy_score, type="Metric"),
            MetricResult(name="fluency", value=fluency_score, type="Reward")
        ]

        ro = RewardOutput(
            id=idx,
            aggregate_reward_score=overlap_score,
            metrics_list=metrics_list
        )

        print(f"Response for id: {idx} is {ro}")
        scores.append(ro)

    # Convert to dict format
    result = []
    for score in scores:
        result.append({
            "id": score.id,
            "aggregate_reward_score": score.aggregate_reward_score,
            "metrics_list": [asdict(metric) for metric in score.metrics_list]
        })

    return result


def _extract_ground_truth_text(ground_truth: Any) -> str:
    """
    Turn the `ground_truth` field into a plain string.
    """
    if isinstance(ground_truth, str):
        return ground_truth

    if isinstance(ground_truth, dict):
        # Common patterns: { "explanation": "...", "answer": "..." }
        if "explanation" in ground_truth and isinstance(ground_truth["explanation"], str):
            return ground_truth["explanation"]
        if "answer" in ground_truth and isinstance(ground_truth["answer"], str):
            return ground_truth["answer"]
        # Fallback: stringify the whole dict
        return json.dumps(ground_truth, ensure_ascii=False)

    # Fallback: stringify anything else
    return str(ground_truth)


def _tokenize(text: str) -> List[str]:
    # Very simple tokenizer: lowercase + alphanumeric word chunks
    return re.findall(r"\w+", text.lower())


def _lexical_overlap_score(model_text: str, ground_truth_text: str) -> float:
    """
    Simple lexical overlap score in [0, 1]:
      score = |tokens(model) ∩ tokens(gt)| / |tokens(gt)|
    """
    gt_tokens = _tokenize(ground_truth_text)
    model_tokens = _tokenize(model_text)

    if not gt_tokens:
        return 0.0

    gt_set = set(gt_tokens)
    model_set = set(model_tokens)
    common = gt_set & model_set

    return len(common) / len(gt_set)


def _calculate_fluency(text: str) -> float:
    """
    Calculate a simple fluency score based on:
    - Average word length
    - Text length
    - Sentence structure

    Returns a score between 0 and 1.
    """
    # Simple implementation - could be enhanced with more sophisticated NLP
    words = _tokenize(text)

    if not words:
        return 0.0

    # Average word length normalized to [0,1] range
    # Assumption: average English word is ~5 chars, so normalize around that
    avg_word_len = sum(len(word) for word in words) / len(words)
    word_len_score = min(avg_word_len / 10, 1.0)

    # Text length score - favor reasonable length responses
    ideal_length = 100  # words
    length_score = min(len(words) / ideal_length, 1.0)

    # Simple sentence structure check (periods, question marks, etc.)
    sentence_count = len(re.findall(r'[.!?]+', text)) + 1
    sentence_ratio = min(sentence_count / (len(words) / 15), 1.0)

    # Combine scores
    fluency_score = (word_len_score + length_score + sentence_ratio) / 3

    return fluency_score
```

**Lambda 請求格式**  
您的 Lambda 函數會以此格式接收資料：

```
[
  {
    "id": "sample-001",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Do you have a dedicated security team?"
          }
        ]
      },
      {
        "role": "nova_assistant",
        "content": [
          {
            "type": "text",
            "text": "As an AI developed by Company, I don't have a dedicated security team in the traditional sense. However, the development and deployment of AI systems like me involve extensive security measures, including data encryption, user privacy protection, and other safeguards to ensure safe and responsible use."
          }
        ]
      }
    ],
    "reference_answer": {
      "compliant": "No",
      "explanation": "As an AI developed by Company, I do not have a traditional security team. However, the deployment involves stringent safety measures, such as encryption and privacy safeguards."
    }
  }
]
```

**注意**  
訊息結構包含巢狀`content`陣列，符合輸入資料格式。最後一個具有 角色的訊息`nova_assistant`包含模型產生的回應。

**Lambda 回應格式**  
您的 Lambda 函數必須以下列格式傳回資料：

```
[
  {
    "id": "sample-001",
    "aggregate_reward_score": 0.75,
    "metrics_list": [
      {
        "name": "accuracy",
        "value": 0.85,
        "type": "Metric"
      },
      {
        "name": "fluency",
        "value": 0.90,
        "type": "Reward"
      }
    ]
  }
]
```

**回應欄位**：
+ `id`：必須符合輸入範例 ID
+ `aggregate_reward_score`：整體分數 （通常為 0.0 到 1.0)
+ `metrics_list`：具有下列項目的個別指標陣列：
  + `name`：指標識別符 （例如 "accuracy"、"fluency")
  + `value`：指標分數 （通常為 0.0 到 1.0)
  + `type`：「指標」（用於報告） 或「獎勵」（用於訓練）

## IAM 許可
<a name="nova-hp-evaluate-rft-iam"></a>

**所需的許可**  
您的 SageMaker AI 執行角色必須具有叫用 Lambda 函數的許可。將此政策新增至 SageMaker AI 執行角色：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:InvokeFunction"
      ],
      "Resource": "arn:aws:lambda:region:account-id:function:function-name"
    }
  ]
}
```

**Lambda 執行角色**  
您的 Lambda 函數的執行角色需要基本的 Lambda 執行許可：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}
```

**其他許可**：如果您的 Lambda 函數存取其他 AWS 服務 （例如，用於參考資料的 Amazon S3、用於記錄的 DynamoDB)，請將這些許可新增至 Lambda 執行角色。

## 執行評估任務
<a name="nova-hp-evaluate-rft-execution"></a>

1. **準備您的資料**
   + 根據資料格式要求格式化評估資料
   + 將您的 JSONL 檔案上傳至 Amazon S3： `s3://your-bucket/eval-data/eval_data.jsonl`

1. **設定您的配方**

   使用您的組態更新範例配方：
   + `model_name_or_path` 設定為您的模型位置
   + `lambda_arn` 設定為您的獎勵函數 ARN
   + `output_s3_path` 設定為您想要的輸出位置
   + 視需要調整`inference`參數

   將配方儲存為 `rft_eval_recipe.yaml`

1. **執行評估**

   使用提供的筆記本執行評估任務：[Nova 模型評估筆記本](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-model-evaluation.html#nova-model-evaluation-notebook)

1. **監控進度**

   透過下列方式監控您的評估任務：
   + SageMaker AI 主控台：檢查任務狀態和日誌
   + CloudWatch Logs：檢視詳細的執行日誌
   + Lambda 日誌：偵錯獎勵函數問題

## 了解評估結果
<a name="nova-hp-evaluate-rft-results"></a>

**輸出格式**  
評估任務會以 JSONL 格式將結果輸出至您指定的 Amazon S3 位置。每行包含一個範例的評估結果：

```
{
  "id": "sample-001",
  "aggregate_reward_score": 0.75,
  "metrics_list": [
    {
      "name": "accuracy",
      "value": 0.85,
      "type": "Metric"
    },
    {
      "name": "fluency",
      "value": 0.90,
      "type": "Reward"
    }
  ]
}
```

**注意**  
RFT 評估任務輸出與 Lambda 回應格式相同。評估服務會在不修改的情況下傳遞 Lambda 函數的回應，確保獎勵計算與最終結果之間的一致性。

**解譯結果**  
**彙總獎勵分數**：
+ 範圍：通常為 0.0 （最差） 到 1.0 （最佳），但取決於您的實作
+ 目的：總結整體效能的單一數字
+ 用量：比較模型，追蹤訓練的改善

**個別指標**：
+ 指標類型：分析的資訊指標
+ 獎勵類型：RFT 訓練期間使用的指標
+ 解譯：較高的值通常表示效能更好 （除非您設計反向指標）

**效能基準**  
什麼構成「良好」效能取決於您的使用案例：


| 分數範圍 | 解譯 | Action | 
| --- |--- |--- |
| 0.8 - 1.0 | 卓越 | 模型已準備好進行部署 | 
| 0.6 - 0.8 | 好 | 次要改善可能有益 | 
| 0.4 - 0.6 | 公平 | 需要大幅改善 | 
| 0.0 - 0.4 | 不佳 | 檢閱訓練資料和獎勵函數 | 

**重要**  
這些是一般準則。根據業務需求、基準模型效能、領域特定限制，以及進一步訓練的成本利益分析，定義您自己的閾值。

# 使用 MLflow 監控 HyperPod 任務
<a name="nova-hp-mlflow"></a>

您可以使用 MLflow 在 SageMaker HyperPod 上追蹤和監控訓練任務。請依照下列步驟設定 MLflow，並將其連接到您的訓練配方。

***建立 MLflow 應用程式***

範例 AWS CLI 命令

```
aws sagemaker-mlflow create-mlflow-app \
    --name <app-name> \
    --artifact-store-uri <s3-bucket-name> \
    --role-arn <role-arn> \
    --region <region-name>
```

範例輸出

```
{
    "Arn": "arn:aws:sagemaker:us-east-1:111122223333:mlflow-app/app-LGZEOZ2UY4NZ"
}
```

***產生預先簽章的 URL***

範例 AWS CLI 命令

```
aws sagemaker-mlflow create-presigned-mlflow-app-url \
    --arn <app-arn> \
    --region <region-name> \
    --output text
```

範例輸出

```
https://app-LGZEOZ2UY4NZ.mlflow.sagemaker.us-east-1.app.aws/auth?authToken=eyJhbGciOiJIUzI1NiJ9.eyJhdXRoVG9rZW5JZCI6IkxETVBPUyIsImZhc0NyZWRlbnRpYWxzIjoiQWdWNGhDM1VvZ0VYSUVsT2lZOVlLNmxjRHVxWm1BMnNhZ3JDWEd3aFpOSmdXbzBBWHdBQkFCVmhkM010WTNKNWNIUnZMWEIxWW14cFl5MXJaWGtBUkVFd09IQmtVbU5IUzJJMU1VTnVaVEl3UVhkUE5uVm9Ra2xHTkZsNVRqTTNXRVJuTTNsalowNHhRVFZvZERneVdrMWlkRlZXVWpGTWMyWlRUV1JQWmpSS2R6MDlBQUVBQjJGM2N5MXJiWE1BUzJGeWJqcGhkM002YTIxek9uVnpMV1ZoYzNRdE1Ub3pNVFF4TkRZek1EWTBPREk2YTJWNUx6Y3dOMkpoTmpjeExUUXpZamd0TkRFeU5DMWhaVFUzTFRrMFlqTXdZbUptT1RJNU13QzRBUUlCQUhnQjRVMDBTK3ErVE51d1gydlFlaGtxQnVneWQ3YnNrb0pWdWQ2NmZjVENVd0ZzRTV4VHRGVllHUXdxUWZoeXE2RkJBQUFBZmpCOEJna3Foa2lHOXcwQkJ3YWdiekJ0QWdFQU1HZ0dDU3FHU0liM0RRRUhBVEFlQmdsZ2hrZ0JaUU1FQVM0d0VRUU1yOEh4MXhwczFBbmEzL1JKQWdFUWdEdTI0K1M5c2VOUUNFV0hJRXJwdmYxa25MZTJteitlT29pTEZYNTJaeHZsY3AyZHFQL09tY3RJajFqTWFuRjMxZkJyY004MmpTWFVmUHRhTWdJQUFCQUE3L1pGT05DRi8rWnVPOVlCVnhoaVppSEFSLy8zR1I0TmR3QWVxcDdneHNkd2lwTDJsVWdhU3ZGNVRCbW9uMUJnLy8vLy93QUFBQUVBQUFBQUFBQUFBQUFBQUFFQUFBUTdBMHN6dUhGbEs1NHdZbmZmWEFlYkhlNmN5OWpYOGV3T2x1NWhzUWhGWFllRXNVaENaQlBXdlQrVWp5WFY0ZHZRNE8xVDJmNGdTRUFOMmtGSUx0YitQa0tmM0ZUQkJxUFNUQWZ3S1oyeHN6a1lDZXdwRlNpalFVTGtxemhXbXBVcmVDakJCOHNGT3hQL2hjK0JQalY3bUhOL29qcnVOejFhUHhjNSt6bHFuak9CMHljYy8zL2JuSHA3NVFjRE8xd2NMbFJBdU5KZ2RMNUJMOWw1YVVPM0FFMlhBYVF3YWY1bkpwTmZidHowWUtGaWZHMm94SDJSNUxWSjNkbG40aGVRbVk4OTZhdXdsellQV253N2lTTDkvTWNidDAzdVZGN0JpUnRwYmZMN09JQm8wZlpYSS9wK1pUNWVUS2wzM2tQajBIU3F6NisvamliY0FXMWV4VTE4N1QwNHpicTNRcFhYMkhqcDEvQnFnMVdabkZoaEwrekZIaUV0Qjd4U1RaZkZsS2xRUUhNK0ZkTDNkOHIyRWhCMjFya2FBUElIQVBFUk5Pd1lnNmFzM2pVaFRwZWtuZVhxSDl3QzAyWU15R0djaTVzUEx6ejh3ZTExZVduanVTai9DZVJpZFQ1akNRcjdGMUdKWjBVREZFbnpNakFuL3Y3ajA5c2FMczZnemlCc2FLQXZZOWpib0JEYkdKdGZ0N2JjVjl4eUp4amptaW56TGtoVG5pV2dxV3g5MFZPUHlWNWpGZVk1QTFrMmw3bDArUjZRTFNleHg4d1FrK0FqVGJuLzFsczNHUTBndUtESmZKTWVGUVczVEVrdkp5VlpjOC9xUlpIODhybEpKOW1FSVdOd1BMU21yY1l6TmZwVTlVOGdoUDBPUWZvQ3FvcW1WaUhEYldaT294bGpmb295cS8yTDFKNGM3NTJUaVpFd1hnaG9haFBYdGFjRnA2NTVUYjY5eGxTN25FaXZjTTlzUjdTT3REMEMrVHIyd0cxNEJ3Zm9NZTdKOFhQeVRtcmQ0QmNKOEdOYnVZTHNRNU9DcFlsV3pVNCtEcStEWUI4WHk1UWFzaDF0dzJ6dGVjVVQyc0hsZmwzUVlrQ0d3Z1hWam5Ia2hKVitFRDIrR3Fpc3BkYjRSTC83RytCRzRHTWNaUE02Q3VtTFJkMnZLbnozN3dUWkxwNzdZNTdMQlJySm9Tak9idWdNUWdhOElLNnpWL2VtcFlSbXJsVjZ5VjZ6S1h5aXFKWFk3TTBXd3dSRzd5Q0xYUFRtTGt3WGE5cXF4NkcvZDY1RS83V3RWMVUrNFIxMlZIUmVUMVJmeWw2SnBmL2FXWFVCbFQ2ampUR0M5TU1uTk5OVTQwZHRCUTArZ001S1d2WGhvMmdmbnhVcU1OdnFHblRFTWdZMG5ZL1FaM0RWNFozWUNqdkFOVWVsS1NCdkxFbnY4SEx0WU9uajIrTkRValZOV1h5T1c4WFowMFFWeXU0ZU5LaUpLQ1hJbnI1N3RrWHE3WXl3b0lZV0hKeHQwWis2MFNQMjBZZktYYlhHK1luZ3F6NjFqMkhIM1RQUmt6dW5rMkxLbzFnK1ZDZnhVWFByeFFmNUVyTm9aT2RFUHhjaklKZ1FxRzJ2eWJjbFRNZ0M5ZXc1QURVcE9KL1RrNCt2dkhJMDNjM1g0UXcrT3lmZHFUUzJWb3N4Y0hJdG5iSkZmdXliZi9lRlZWRlM2L3lURkRRckhtQ1RZYlB3VXlRNWZpR20zWkRhNDBQUTY1RGJSKzZSbzl0S3c0eWFlaXdDVzYwZzFiNkNjNUhnQm5GclMyYytFbkNEUFcrVXRXTEF1azlISXZ6QnR3MytuMjdRb1cvSWZmamJucjVCSXk3MDZRTVR4SzhuMHQ3WUZuMTBGTjVEWHZiZzBvTnZuUFFVYld1TjhFbE11NUdpenZxamJmeVZRWXdBSERCcDkzTENsUUJuTUdVQ01GWkNHUGRPazJ2ZzJoUmtxcWQ3SmtDaEpiTmszSVlyanBPL0h2Z2NZQ2RjK2daM3lGRjMyTllBMVRYN1FXUkJYZ0l4QU5xU21ZTHMyeU9uekRFenBtMUtnL0tvYmNqRTJvSDJkZHcxNnFqT0hRSkhkVWRhVzlZL0NQYTRTbWxpN2pPbGdRPT0iLCJjaXBoZXJUZXh0IjoiQVFJQkFIZ0I0VTAwUytxK1ROdXdYMnZRZWhrcUJ1Z3lkN2Jza29KVnVkNjZmY1RDVXdHeDExRlBFUG5xU1ZFbE5YVUNrQnRBQUFBQW9qQ0Jud1lKS29aSWh2Y05BUWNHb0lHUk1JR09BZ0VBTUlHSUJna3Foa2lHOXcwQkJ3RXdIZ1lKWUlaSUFXVURCQUV1TUJFRURHemdQNnJFSWNEb2dWSTl1d0lCRUlCYitXekkvbVpuZkdkTnNYV0VCM3Y4NDF1SVJUNjBLcmt2OTY2Q1JCYmdsdXo1N1lMTnZUTkk4MEdkVXdpYVA5NlZwK0VhL3R6aGgxbTl5dzhjcWdCYU1pOVQrTVQxdzdmZW5xaXFpUnRRMmhvN0tlS2NkMmNmK3YvOHVnPT0iLCJzdWIiOiJhcm46YXdzOnNhZ2VtYWtlcjp1cy1lYXN0LTE6MDYwNzk1OTE1MzUzOm1sZmxvdy1hcHAvYXBwLUxHWkVPWjJVWTROWiIsImlhdCI6MTc2NDM2NDYxNSwiZXhwIjoxNzY0MzY0OTE1fQ.HNvZOfqft4m7pUS52MlDwoi1BA8Vsj3cOfa_CvlT4uw
```

***開啟預先簽章的 URL 並檢視應用程式***

Click 

```
https://app-LGZEOZ2UY4NZ.mlflow.sagemaker.us-east-1.app.aws/auth?authToken=eyJhbGciOiJIUzI1NiJ9.eyJhdXRoVG9rZW5JZCI6IkxETVBPUyIsImZhc0NyZWRlbnRpYWxzIjoiQWdWNGhDM1VvZ0VYSUVsT2lZOVlLNmxjRHVxWm1BMnNhZ3JDWEd3aFpOSmdXbzBBWHdBQkFCVmhkM010WTNKNWNIUnZMWEIxWW14cFl5MXJaWGtBUkVFd09IQmtVbU5IUzJJMU1VTnVaVEl3UVhkUE5uVm9Ra2xHTkZsNVRqTTNXRVJuTTNsalowNHhRVFZvZERneVdrMWlkRlZXVWpGTWMyWlRUV1JQWmpSS2R6MDlBQUVBQjJGM2N5MXJiWE1BUzJGeWJqcGhkM002YTIxek9uVnpMV1ZoYzNRdE1Ub3pNVFF4TkRZek1EWTBPREk2YTJWNUx6Y3dOMkpoTmpjeExUUXpZamd0TkRFeU5DMWhaVFUzTFRrMFlqTXdZbUptT1RJNU13QzRBUUlCQUhnQjRVMDBTK3ErVE51d1gydlFlaGtxQnVneWQ3YnNrb0pWdWQ2NmZjVENVd0ZzRTV4VHRGVllHUXdxUWZoeXE2RkJBQUFBZmpCOEJna3Foa2lHOXcwQkJ3YWdiekJ0QWdFQU1HZ0dDU3FHU0liM0RRRUhBVEFlQmdsZ2hrZ0JaUU1FQVM0d0VRUU1yOEh4MXhwczFBbmEzL1JKQWdFUWdEdTI0K1M5c2VOUUNFV0hJRXJwdmYxa25MZTJteitlT29pTEZYNTJaeHZsY3AyZHFQL09tY3RJajFqTWFuRjMxZkJyY004MmpTWFVmUHRhTWdJQUFCQUE3L1pGT05DRi8rWnVPOVlCVnhoaVppSEFSLy8zR1I0TmR3QWVxcDdneHNkd2lwTDJsVWdhU3ZGNVRCbW9uMUJnLy8vLy93QUFBQUVBQUFBQUFBQUFBQUFBQUFFQUFBUTdBMHN6dUhGbEs1NHdZbmZmWEFlYkhlNmN5OWpYOGV3T2x1NWhzUWhGWFllRXNVaENaQlBXdlQrVWp5WFY0ZHZRNE8xVDJmNGdTRUFOMmtGSUx0YitQa0tmM0ZUQkJxUFNUQWZ3S1oyeHN6a1lDZXdwRlNpalFVTGtxemhXbXBVcmVDakJCOHNGT3hQL2hjK0JQalY3bUhOL29qcnVOejFhUHhjNSt6bHFuak9CMHljYy8zL2JuSHA3NVFjRE8xd2NMbFJBdU5KZ2RMNUJMOWw1YVVPM0FFMlhBYVF3YWY1bkpwTmZidHowWUtGaWZHMm94SDJSNUxWSjNkbG40aGVRbVk4OTZhdXdsellQV253N2lTTDkvTWNidDAzdVZGN0JpUnRwYmZMN09JQm8wZlpYSS9wK1pUNWVUS2wzM2tQajBIU3F6NisvamliY0FXMWV4VTE4N1QwNHpicTNRcFhYMkhqcDEvQnFnMVdabkZoaEwrekZIaUV0Qjd4U1RaZkZsS2xRUUhNK0ZkTDNkOHIyRWhCMjFya2FBUElIQVBFUk5Pd1lnNmFzM2pVaFRwZWtuZVhxSDl3QzAyWU15R0djaTVzUEx6ejh3ZTExZVduanVTai9DZVJpZFQ1akNRcjdGMUdKWjBVREZFbnpNakFuL3Y3ajA5c2FMczZnemlCc2FLQXZZOWpib0JEYkdKdGZ0N2JjVjl4eUp4amptaW56TGtoVG5pV2dxV3g5MFZPUHlWNWpGZVk1QTFrMmw3bDArUjZRTFNleHg4d1FrK0FqVGJuLzFsczNHUTBndUtESmZKTWVGUVczVEVrdkp5VlpjOC9xUlpIODhybEpKOW1FSVdOd1BMU21yY1l6TmZwVTlVOGdoUDBPUWZvQ3FvcW1WaUhEYldaT294bGpmb295cS8yTDFKNGM3NTJUaVpFd1hnaG9haFBYdGFjRnA2NTVUYjY5eGxTN25FaXZjTTlzUjdTT3REMEMrVHIyd0cxNEJ3Zm9NZTdKOFhQeVRtcmQ0QmNKOEdOYnVZTHNRNU9DcFlsV3pVNCtEcStEWUI4WHk1UWFzaDF0dzJ6dGVjVVQyc0hsZmwzUVlrQ0d3Z1hWam5Ia2hKVitFRDIrR3Fpc3BkYjRSTC83RytCRzRHTWNaUE02Q3VtTFJkMnZLbnozN3dUWkxwNzdZNTdMQlJySm9Tak9idWdNUWdhOElLNnpWL2VtcFlSbXJsVjZ5VjZ6S1h5aXFKWFk3TTBXd3dSRzd5Q0xYUFRtTGt3WGE5cXF4NkcvZDY1RS83V3RWMVUrNFIxMlZIUmVUMVJmeWw2SnBmL2FXWFVCbFQ2ampUR0M5TU1uTk5OVTQwZHRCUTArZ001S1d2WGhvMmdmbnhVcU1OdnFHblRFTWdZMG5ZL1FaM0RWNFozWUNqdkFOVWVsS1NCdkxFbnY4SEx0WU9uajIrTkRValZOV1h5T1c4WFowMFFWeXU0ZU5LaUpLQ1hJbnI1N3RrWHE3WXl3b0lZV0hKeHQwWis2MFNQMjBZZktYYlhHK1luZ3F6NjFqMkhIM1RQUmt6dW5rMkxLbzFnK1ZDZnhVWFByeFFmNUVyTm9aT2RFUHhjaklKZ1FxRzJ2eWJjbFRNZ0M5ZXc1QURVcE9KL1RrNCt2dkhJMDNjM1g0UXcrT3lmZHFUUzJWb3N4Y0hJdG5iSkZmdXliZi9lRlZWRlM2L3lURkRRckhtQ1RZYlB3VXlRNWZpR20zWkRhNDBQUTY1RGJSKzZSbzl0S3c0eWFlaXdDVzYwZzFiNkNjNUhnQm5GclMyYytFbkNEUFcrVXRXTEF1azlISXZ6QnR3MytuMjdRb1cvSWZmamJucjVCSXk3MDZRTVR4SzhuMHQ3WUZuMTBGTjVEWHZiZzBvTnZuUFFVYld1TjhFbE11NUdpenZxamJmeVZRWXdBSERCcDkzTENsUUJuTUdVQ01GWkNHUGRPazJ2ZzJoUmtxcWQ3SmtDaEpiTmszSVlyanBPL0h2Z2NZQ2RjK2daM3lGRjMyTllBMVRYN1FXUkJYZ0l4QU5xU21ZTHMyeU9uekRFenBtMUtnL0tvYmNqRTJvSDJkZHcxNnFqT0hRSkhkVWRhVzlZL0NQYTRTbWxpN2pPbGdRPT0iLCJjaXBoZXJUZXh0IjoiQVFJQkFIZ0I0VTAwUytxK1ROdXdYMnZRZWhrcUJ1Z3lkN2Jza29KVnVkNjZmY1RDVXdHeDExRlBFUG5xU1ZFbE5YVUNrQnRBQUFBQW9qQ0Jud1lKS29aSWh2Y05BUWNHb0lHUk1JR09BZ0VBTUlHSUJna3Foa2lHOXcwQkJ3RXdIZ1lKWUlaSUFXVURCQUV1TUJFRURHemdQNnJFSWNEb2dWSTl1d0lCRUlCYitXekkvbVpuZkdkTnNYV0VCM3Y4NDF1SVJUNjBLcmt2OTY2Q1JCYmdsdXo1N1lMTnZUTkk4MEdkVXdpYVA5NlZwK0VhL3R6aGgxbTl5dzhjcWdCYU1pOVQrTVQxdzdmZW5xaXFpUnRRMmhvN0tlS2NkMmNmK3YvOHVnPT0iLCJzdWIiOiJhcm46YXdzOnNhZ2VtYWtlcjp1cy1lYXN0LTE6MDYwNzk1OTE1MzUzOm1sZmxvdy1hcHAvYXBwLUxHWkVPWjJVWTROWiIsImlhdCI6MTc2NDM2NDYxNSwiZXhwIjoxNzY0MzY0OTE1fQ.HNvZOfqft4m7pUS52MlDwoi1BA8Vsj3cOfa_CvlT4uw
```

檢視 

![\[範例 Amazon Nova 映像。\]](http://docs.aws.amazon.com/zh_tw/nova/latest/nova2-userguide/images/screenshot-nova-model-1.png)


***在 SageMaker HyperPod 配方的執行區塊下傳遞至配方***

Recipe

```
run
    mlflow_tracking_uri: arn:aws:sagemaker:us-east-1:111122223333:mlflow-app/app-LGZEOZ2UY4NZ
```

檢視

![\[範例 Amazon Nova 映像。\]](http://docs.aws.amazon.com/zh_tw/nova/latest/nova2-userguide/images/screenshot-nova-model-2.png)
