aws/nova-forge-sdk
GitHub: aws/nova-forge-sdk
Amazon Nova Forge SDK 是一个用于在 AWS 基础设施上微调、评估和部署 Amazon Nova 基础模型的综合性 Python SDK。
Stars: 14 | Forks: 7
# Amazon Nova Forge SDK
一个用于 fine-tuning 和定制 Amazon Nova 模型的综合性 Python SDK。该 SDK 提供了一个统一的接口,用于跨 SageMaker Training Jobs 和 SageMaker HyperPod 进行 Nova 模型的训练、评估、部署和监控。
## 目录
- [安装](#installation)
- [设置](#setup)
- [支持的模型和训练方法](#supported-models-and-training-methods)
- [数据准备](#data-preparation)
- [核心模块概览](#core-modules-overview)
- [附加功能](#additional-features)
- [遥测](#telemetry)
- [入门指南](#getting-started)
- [SDK 用户安全最佳实践](#security-best-practices-for-sdk-users)
## 安装
```
pip install amzn-nova-forge
```
* 该 SDK 需要 [sagemaker](https://pypi.org/project/sagemaker/),这将由 pip 自动设置。
## 设置
在大多数情况下,如果环境缺少运行 Nova 定制作业所需的设置,SDK 会通知您。
以下是一些常见的要求,您可以在尝试运行作业之前提前进行设置。
### 支持的 Python 版本
Nova Forge SDK 已在以下环境测试:
* Python 3.12
### IAM 角色/策略
* 您需要拥有足够权限的 IAM 角色才能使用 Nova Forge SDK。您可以在 `docs/user-guides/iam_setup.md` 文件中找到这些权限的列表。
### 实例
Nova 定制作业还需要访问足够数量的合适实例类型才能运行:
- 请求的实例类型和数量应与所请求的作业兼容。SDK 会为您验证实例配置。
- 用于训练作业 (SMTJ) 或 HyperPod 集群 (SMHP) 的 [SageMaker 账户配额](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html) 应允许请求的实例数量。
- (针对 SMHP) 选定的 HyperPod 集群应具有一个包含足够数量的合适实例的 [受限实例组](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-hp-cluster.html),以运行请求的作业。SDK 会验证您的集群是否包含有效的实例组。
- 您可以在 `docs/user-guides/instance_type_spec.md` 文件中查看特定作业和方法的各种实例类型及组合。
### HyperPod CLI
对于基于 HyperPod 的定制作业,SDK 使用 [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli/) 来连接到 HyperPod 集群并启动作业。
#### 前置条件(Forge 和非 Forge 客户均需执行)
1. **安装 Helm 3。** 通过 `helm version` 进行验证。如果未安装:
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
2. 如果您使用的是 Python 虚拟环境,请在安装 CLI 之前激活它:
source /bin/activate
#### 针对 Forge 客户
1. 从 S3 下载支持 Forge 功能的最新 HyperPod CLI 仓库:
aws s3 cp s3://nova-forge-c7363-206080352451-us-east-1/v1/ ./ --recursive
mkdir -p src/hyperpod_cli/sagemaker_hyperpod_recipes/launcher/nemo
git clone https://github.com/NVIDIA/NeMo-Framework-Launcher.git src/hyperpod_cli/sagemaker_hyperpod_recipes/launcher/nemo/nemo_framework_launcher --recursive
pip install -e .
2. 验证安装:
hyperpod --help
#### 针对非 Forge 客户
1. 克隆 HyperPod CLI 的 `release_v2` 分支:
git clone -b release_v2 https://github.com/aws/sagemaker-hyperpod-cli.git
2. 安装 CLI:
cd sagemaker-hyperpod-cli
pip install .
3. 验证安装:
hyperpod --help
## 支持的模型和训练方法
### 模型
| 模型 | 版本 | 模型类型 | 上下文长度 |
| ------------- | ------- | ------------------------------- | -------------- |
| `NOVA_MICRO` | 1.0 | `amazon.nova-micro-v1:0:128k` | 128k tokens |
| `NOVA_LITE` | 1.0 | `amazon.nova-lite-v1:0:300k` | 300k tokens |
| `NOVA_LITE_2` | 2.0 | `amazon.nova-2-lite-v1:0:256k` | 256k tokens |
| `NOVA_PRO` | 1.0 | `amazon.nova-pro-v1:0:300k` | 300k tokens |
### 训练方法
| 方法 | 描述 | 支持的模型 |
|--------------|------------------------------------------|------------------------|
| `CPT` | 持续预训练 | 所有模型 (仅限 SMHP) |
| `DPO_LORA` | 基于 LoRA 的直接偏好优化 | Nova 1.0 模型 |
| `DPO_FULL` | 全秩直接偏好优化 | Nova 1.0 模型 |
| `SFT_LORA` | 基于 LoRA 的监督微调 | 所有模型 |
| `SFT_FULL` | 全秩监督微调 | 所有模型 |
| `RFT_LORA` | 基于 LoRA 的强化微调 | Nova 2.0 模型 |
| `RFT_FULL` | 全量强化微调 | Nova 2.0 模型 |
| `RFT_MULTITURN_LORA` | 基于 LoRA 的多轮 RFT | Nova 2.0 模型 |
| `RFT_MULTITURN_FULL` | 全量多轮 RFT | Nova 2.0 模型 |
| `EVALUATION` | 模型评估 | 所有模型 |
### 平台支持
| 平台 | 描述 | 支持的模型 | 支持的方法 |
| ----------------- | ------------------------------------------ | ---------------- | ---------------------------------------- |
| `SMTJ` | SageMaker Training Jobs | 所有模型 | 所有方法 |
| `SMTJServerless` | SageMaker 无服务器训练 (无基础设施) | 所有模型 | SFT, DPO, RFT_LORA, EVALUATION |
| `SMHP` | SageMaker HyperPod | 所有模型 | 所有方法 |
| `BEDROCK` | Amazon Bedrock (托管服务) | 所有模型 | SFT, DPO, RFT |
## 数据准备
在启动训练作业之前,您的数据必须采用正确的格式。SDK 的 dataset 模块负责处理训练数据的加载、转换、验证、过滤和保存 — 支持从本地文件或 S3 加载 JSONL、JSON、CSV、Parquet 和 Arrow 格式。
典型的数据准备工作流:
```
from amzn_nova_forge.dataset import JSONLDatasetLoader
from amzn_nova_forge.model import TrainingMethod, Model, TransformMethod, ValidateMethod
loader = JSONLDatasetLoader()
loader.load("s3://my-bucket/raw-data.jsonl")
loader.transform(method=TransformMethod.SCHEMA, training_method=TrainingMethod.SFT_LORA, model=Model.NOVA_LITE_2)
loader.validate(method=ValidateMethod.INVALID_RECORDS, training_method=TrainingMethod.SFT_LORA, model=Model.NOVA_LITE_2)
loader.save("s3://my-bucket/prepared-data.jsonl")
```
有关完整的指南 — 包括列映射、数据集拆分、过滤、链式操作以及端到端示例 — 请参阅 **[数据准备指南](docs/user-guides/data_prep.md)**。
有关实战 notebook 演练,请参阅 [`samples/dataprep_quickstart.ipynb`](samples/dataprep_quickstart.ipynb)。
## 核心模块概览
Nova Forge SDK 由以下模块组成:
| 模块 | 用途 | 关键组件 |
| ------------------ | --------------------------------------------- | ---------------------------------------------------------------- |
| **Dataset** | 数据加载、转换、过滤和准备 | `JSONLDatasetLoader`, `JSONDatasetLoader`, `CSVDatasetLoader` |
| **Manager** | 运行时基础设施管理 | `SMTJRuntimeManager`, `SMTJServerlessRuntimeManager`, `SMHPRuntimeManager`, `BedrockRuntimeManager` |
| **Model** | 主 SDK 入口点和编排 | `NovaModelCustomizer` |
| **Monitor** | 作业监控和日志记录 | `CloudWatchLogMonitor`, `MLflowMonitor` |
| **RFT Multiturn** | 强化微调基础设施 | `RFTMultiturnInfrastructure` |
* 详细的 API 文档:请参阅 [`docs/spec/`](docs/spec/index.md)
* 用法示例:请参阅 [`samples/nova_quickstart.ipynb`](samples/nova_quickstart.ipynb)
* RFT 单轮示例:请参阅 [`samples/rft_singleturn_quickstart.ipynb`](samples/rft_singleturn_quickstart.ipynb)
* RFT 多轮文档:请参阅 [`docs/user-guides/rft_multiturn.md`](docs/user-guides/rft_multiturn.md)
* RFT 多轮示例:请参阅 [`samples/rft_multiturn_quickstart.ipynb`](samples/rft_multiturn_quickstart.ipynb)
### 服务类(推荐)
从 v1.4.0 开始,SDK 提供了模块化的服务类来替代 `NovaModelCustomizer`。我们建议在所有新工作中使用这些类:
| 类 | 用途 |
|-------|---------|
| `ForgeTrainer` | 训练作业 |
| `ForgeEvaluator` | 评估作业 (MMLU, GEN_QA, LLM_JUDGE 等) |
| `ForgeDeployer` | 部署到 SageMaker 或 Bedrock |
| `ForgeInference` | 实时和批量推理 |
每个类在其构造函数中接收各自的配置。诸如 `output_s3_path` 和 `mlflow_monitor` 之类的共享设置通过 `ForgeConfig` 对象传递。
**示例 — 使用服务类进行训练和部署:**
```
from amzn_nova_forge import (
ForgeTrainer, ForgeEvaluator, ForgeDeployer, ForgeInference,
ForgeConfig, Model, TrainingMethod, DeployPlatform,
SMTJRuntimeManager,
)
# 配置基础设施
runtime = SMTJRuntimeManager(
instance_type="ml.p5.48xlarge",
instance_count=4,
)
# 训练
trainer = ForgeTrainer(
model=Model.NOVA_LITE_2,
method=TrainingMethod.SFT_LORA,
infra=runtime,
training_data_s3_path="s3://bucket/train.jsonl",
config=ForgeConfig(output_s3_path="s3://bucket/output"),
)
training_result = trainer.train(job_name="my-sft-job")
# 部署
deployer = ForgeDeployer(model=Model.NOVA_LITE_2)
deployment_result = deployer.deploy(
model_artifact_path=training_result.model_artifacts.checkpoint_s3_path,
deploy_platform=DeployPlatform.SAGEMAKER,
unit_count=1,
endpoint_name="my-nova-endpoint",
)
# 调用
inference = ForgeInference()
result = inference.invoke(
endpoint_arn=deployment_result.endpoint.endpoint_arn,
request_body={
"messages": [{"role": "user", "content": "Hello!"}],
"max_tokens": 100,
},
)
result.show()
```
有关使用旧版 `NovaModelCustomizer` 的等效工作流,请参阅下方的 [Model 模块](#model-module-deprecated) 部分。
有关所有服务类的详细 API 文档,请参阅 [`docs/spec/`](docs/spec/service-classes.md)。
### Dataset 模块
处理训练数据集的数据加载、转换、验证、过滤和持久化。支持从本地文件或 S3 加载 JSONL、JSON、CSV、Parquet 和 Arrow 格式。
有关用法概览,请参阅上方的 [数据准备](#data-preparation) 部分,或完整的 **[数据准备指南](docs/user-guides/data_prep.md)** 获取详细文档。
### Manager 模块
管理用于执行训练和评估作业的运行时基础设施。
有关每种模型/方法组合允许的实例类型,请参阅 `docs/user-guides/instance_type_spec.md`。
**主要方法:**
- `execute()` - 启动训练或评估作业
- `cleanup()` - 停止并清理运行中的作业
- `scale_cluster()` - (仅限 SMHP) 扩容或缩容 HyperPod 集群实例组
- `get_instance_groups()` - (仅限 SMHP) 查看实例组和当前实例数量
**关键类:**
- `SMTJRuntimeManager` - 用于 SageMaker Training Jobs
- `SMHPRuntimeManager` - 用于 SageMaker HyperPod 集群
- `BedrockRuntimeManager` - 用于 Amazon Bedrock 托管服务
**集群扩缩容 (SMHP):**
`SMHPRuntimeManager` 提供了一个 `scale_cluster()` 方法,用于动态调整 HyperPod 集群实例组中的实例数量:
```
from amzn_nova_forge.manager import SMHPRuntimeManager
# 为您的集群创建 runtime manager
manager = SMHPRuntimeManager(
instance_type="ml.p4d.24xlarge",
instance_count=4,
cluster_name="my-hyperpod-cluster",
namespace="default"
)
# 查看可更新的可用 instance groups
available_instance_groups = manager.get_instance_groups()
# 将 worker group 从 4 个 instance 扩展到 8 个
result = manager.scale_cluster(
instance_group_name="worker-group",
target_instance_count=8
)
```
有关更多集群扩缩容文档,请参阅 [`docs/spec/runtime-managers.md`](docs/spec/runtime-managers.md)。
### Model 模块(已弃用)
提供主要的 SDK 入口点,用于编排模型定制工作流。
**主要方法:**
- `train()` - 启动训练作业
- `evaluate()` - 启动评估作业
- `deploy()` - 将训练好的模型部署到 Amazon SageMaker 或 Bedrock
- `batch_inference()` - 对训练好的模型运行批量推理
- `get_logs()` - 检索当前作业的 CloudWatch 日志
- `get_data_mixing_config()` - 获取数据混合配置
- `set_data_mixing_config()` - 设置数据混合配置
**关键类:**
- `NovaModelCustomizer` - 主编排类
### Monitor 模块
提供作业监控和实验跟踪功能。
**主要方法:**
- `show_logs()` - 显示 CloudWatch 日志
- `get_logs()` - 以列表形式检索日志
- `from_job_result()` - 从作业结果创建监控器
- `from_job_id()` - 从作业 ID 创建监控器
**关键类:**
- `CloudWatchLogMonitor` - 用于查看作业日志
- `MLflowMonitor` - 用于通过预签名 URL 生成进行实验跟踪
### RFT Multiturn 模块
管理用于多轮对话任务的强化微调基础设施。
**主要方法:**
- `setup()` - 部署 SAM 堆栈并验证平台
- `start_training_environment()` - 启动训练环境
- `start_evaluation_environment()` - 启动评估环境
- `get_logs()` - 检索环境日志
- `kill_task()` - 停止正在运行的任务
- `cleanup()` - 清理基础设施资源
- `check_all_queues()` - 检查所有队列中的消息计数
- `flush_all_queues()` - 清除队列中的所有消息
**关键类**
- `RFTMultiturnInfrastructure` - 主基础设施管理类
- `CustomEnvironment` - 用于创建自定义奖励环境
**支持的平台:**
- `LOCAL` - 本地开发环境
- `EC2` - Amazon EC2 实例
- `ECS` - Amazon ECS 集群
**内置环境:**
- `VFEnvId.WORDLE` - Wordle 游戏环境
- `VFEnvId.TERMINAL_BENCH` - 终端基准测试环境
### 迭代训练
Nova Forge SDK 支持对 Nova 模型进行迭代微调。
这是通过在前一个作业输出的 checkpoint 上逐步运行微调作业来实现的:
```
# 阶段 1:在 base model 上进行初始训练
stage1_trainer = ForgeTrainer(
model=Model.NOVA_LITE,
method=TrainingMethod.SFT_LORA,
infra=infra,
training_data_s3_path="s3://bucket/stage1-data.jsonl",
config=ForgeConfig(output_s3_path="s3://bucket/stage1-output"),
)
stage1_result = stage1_trainer.train(job_name="stage1-training")
# 等待完成...
stage1_checkpoint = stage1_result.model_artifacts.checkpoint_s3_path
# 阶段 2:从 Stage 1 checkpoint 继续训练
stage2_trainer = ForgeTrainer(
model=Model.NOVA_LITE,
method=TrainingMethod.SFT_LORA,
infra=infra,
training_data_s3_path="s3://bucket/stage2-data.jsonl",
model_s3_path=stage1_checkpoint, # Use previous checkpoint
config=ForgeConfig(output_s3_path="s3://bucket/stage2-output"),
)
stage2_result = stage2_trainer.train(job_name="stage2-training")
```
**注意:** 迭代微调要求在所有阶段中使用相同的模型和训练方法(LoRA 还是 Full-Rank)。
### 试运行
Nova Forge SDK 支持以下功能的 `dry_run` 模式:`train()`、`evaluate()` 和 `batch_inference()`。
调用上述任何功能时,您可以将 `dry_run` 参数设置为 `True`。
SDK 仍会生成您的 recipe 并验证您的输入,但不会启动作业。
当您想要测试或验证输入并且仍希望生成 recipe,而不想启动作业时,此功能非常有用。
```
# Training dry run
trainer.train(
job_name="train_dry_run",
dry_run=True,
...
)
# Evaluation dry run
evaluator.evaluate(
job_name="evaluate_dry_run",
dry_run=True,
...
)
```
### 数据混合
数据混合允许您将自定义训练数据与 Nova 的高质量精选数据集进行融合,在添加您的领域特定知识的同时,帮助维持模型的广泛能力。
**主要功能:**
- 适用于 SageMaker HyperPod 上的 Nova 1 和 Nova 2 的 CPT 和 SFT 训练(LoRA 和 Full-Rank 均可)
- 适用于 SMTJServerless 上 Nova 2 Lite 的 SFT(纯文本,LoRA 和 Full-Rank)
- 将客户数据 (0-100%) 与 Nova 的精选数据进行混合
- Nova 数据类别包括通用知识和代码
- Nova 数据百分比的总和必须为 100%
**用法示例:**
```
# 启用数据混合进行初始化 (HyperPod)
trainer = ForgeTrainer(
model=Model.NOVA_LITE_2,
method=TrainingMethod.SFT_LORA,
infra=SMHPRuntimeManager(...),
training_data_s3_path="s3://bucket/data.jsonl",
data_mixing_enabled=True,
config=ForgeConfig(output_s3_path="s3://bucket/output"),
)
# 或者使用 SMTJServerless
trainer = ForgeTrainer(
model=Model.NOVA_LITE_2,
method=TrainingMethod.SFT_LORA,
infra=SMTJServerlessRuntimeManager(...),
training_data_s3_path="s3://bucket/data.jsonl",
data_mixing_enabled=True,
config=ForgeConfig(output_s3_path="s3://bucket/output"),
)
# 配置数据混合百分比
trainer.data_mixing.set_config({
"customer_data_percent": 50, # 50% your data
"nova_code_percent": 30, # 30% Nova code data (30% of Nova's 50%)
"nova_general_percent": 70 # 70% Nova general data (70% of Nova's 50%)
})
# 或者使用 100% 客户数据(无 Nova 混合)
trainer.data_mixing.set_config({
"customer_data_percent": 100,
"nova_code_percent": 0,
"nova_general_percent": 0
})
```
**重要注意事项:**
- `dataset_catalog` 字段由系统管理,不能由用户设置
- Forge 客户可以在 SageMaker HyperPod 和 SMTJServerless 上使用数据混合。
- 请参阅 [获取 Forge 订阅]('https://docs.aws.amazon.com/sagemaker/latest/dg/nova-forge.html#nova-forge-prereq-access') 页面,在您的账户中启用 Nova 订阅以使用此功能。
### 作业通知
当您的训练作业完成、失败或停止时接收电子邮件通知。SDK 会自动设置所需的 AWS 基础设施(CloudFormation、DynamoDB、SNS、Lambda、EventBridge)来监控作业状态并发送通知。
**功能:**
- 自动化 AWS 基础设施的设置和管理
- 针对作业终止状态(已完成、失败、已停止)的电子邮件通知
- 针对陷入崩溃循环的 SMHP 主 Pod 的电子邮件通知
- 成功作业的输出产物验证
- 可选的 SNS 主题客户密钥 KMS 加密
**平台支持:**
- **SMTJ** (SageMaker Training Jobs):需要最小配置
- **SMTJServerless** (SageMaker 无服务器):无需实例类型 — SageMaker 会自动管理计算
- **SMHP** (SageMaker HyperPod):需要 kubectl Lambda 层 + 附加参数(有关更多详细信息,请参阅 [`docs/spec/runtime-managers.md`](docs/spec/runtime-managers.md))
- **Bedrock** (Amazon Bedrock):完全托管,无需配置基础设施
**快速示例:**
```
# 启动 training job
result = customizer.train(job_name="my-job")
# 启用通知 (SMTJ)
result.enable_job_notifications(
emails=["user@example.com"]
)
# 启用通知 (SMHP)
result.enable_job_notifications(
emails=["user@example.com"],
namespace="kubeflow", # Required for SMHP
kubectl_layer_arn="arn:aws:lambda::123456789012:layer:kubectl:1" # Required for SMHP
)
```
**重要注意事项:**
- 用户必须通过点击 AWS SNS 确认电子邮件中的链接来确认其邮件订阅
- SMHP 作业通知需要 kubectl Lambda 层(请参阅 [作业通知指南](docs/user-guides/job_notifications.md))
- 通知基础设施在每个区域 (SMTJ) 或每个集群 (SMHP) 中创建一次,并在作业间共享。
- 有关详细的设置说明、故障排除和高级用法,请参阅 [`docs/user-guides/job_notifications.md`](docs/user-guides/job_notifications.md)
- 有关作业通知的完整 API 文档,请参阅 [`docs/spec/notifications.md`](docs/spec/notifications.md)
### 批次样本追踪
通过识别在特定训练步骤中使用了哪些训练数据行来诊断梯度激增。在 `ForgeTrainer` 上使用 `enable_batch_sample_tracing=True` 启用,然后在作业完成后调用 `trainer.trace_batch(result, step=N)`。有关完整的 API 详细信息,请参阅 [`docs/spec/service-classes.md`](docs/spec/service-classes.md)。
## 遥测
Nova Forge SDK 已启用遥测功能,以帮助我们更好地了解用户需求、诊断问题并交付新功能。此遥测会跟踪各种 SDK 功能的使用情况。如果您希望选择退出遥测,可以通过将 `TELEMETRY_OPT_OUT` 环境变量设置为 `true` 来实现:
```
export TELEMETRY_OPT_OUT=true
```
## 入门指南
这款综合性的 SDK 支持端到端地定制 Amazon Nova 模型,并提供对多种训练方法、部署平台和监控功能的支持。每个模块都旨在无缝协同工作,同时为高级用例提供灵活性。
要开始定制 Nova 模型,请参阅以下文件:
* 包含“快速入门”示例的 Notebook,位于 `samples/nova_quickstart.ipynb`
* 包含每个模块详细信息规格文档,位于 [`docs/spec/`](docs/spec/index.md)
## SDK 用户安全最佳实践
### 1. IAM 和访问管理
**执行角色**
- 为 SageMaker 训练作业使用具有最低所需权限的专用执行角色
- 避免使用管理员角色 - 遵循最小权限原则
- 定期审计角色权限并删除未使用的策略
```
# 推荐:显式指定 execution role
runtime = SMTJRuntimeManager(
instance_type="ml.p5.48xlarge",
instance_count=2,
execution_role="arn:aws:iam::123456789012:role/SageMakerNovaTrainingRole"
)
# 避免:未经 validation 使用 default role
```
**所需权限**
SDK 需要特定的 IAM 权限。请查看 [IAM](#iam-rolespolicies) 部分,并且:
* 仅授予您的用例所需的最低权限
* 使用条件语句限制资源访问
* 定期审查和轮换访问密钥
**验证您的 IAM 设置**
SDK 在每次调用 `train()`、`evaluate()` 和 `batch_inference()` 之前会自动验证您的 IAM 权限。如果您的角色缺少所需的权限,SDK 将在尝试启动作业之前报告具体缺失的权限。
如果您想在不启动作业的情况下验证设置,请使用 `dry_run=True`。这将运行完整的验证(IAM 权限、recipe、基础设施)并报告任何问题,但不会提交作业:
```
trainer = ForgeTrainer(
model=Model.NOVA_LITE_2,
method=TrainingMethod.SFT_LORA,
infra=SMTJRuntimeManager(instance_type="ml.p5.48xlarge", instance_count=4),
training_data_s3_path="s3://bucket/train.jsonl",
config=ForgeConfig(output_s3_path="s3://bucket/output"),
)
# 在不启动 job 的情况下验证所有内容
trainer.train(job_name="verify-setup", dry_run=True)
```
验证检查包括:
- **调用方角色权限** — 使用 `iam:SimulatePrincipalPolicy` 和策略检查,验证您当前的角色是否具有所选平台所需的 IAM 操作(例如,SMTJ 的 `sagemaker:CreateTrainingJob`,Bedrock 的 `bedrock:CreateModelCustomizationJob`)。
- **执行角色** (SMTJ/SMTJServerless) — 确认执行角色存在、信任 `sagemaker.amazonaws.com`,并具有所需的 S3 权限(`s3:GetObject`、`s3:PutObject`、`s3:ListBucket`)。
- **集群访问权限** (SMHP) — 验证 HyperPod 集群存在且您的角色可以描述它。
IAM 验证需要对您的调用方角色具有 `iam:SimulatePrincipalPolicy` 和策略读取权限(例如,`iam:GetRole`、`iam:ListRolePolicies`、`iam:ListAttachedRolePolicies`)。如果您的角色缺少这些操作,验证将失败并报错,而不是静默跳过检查。
您可以禁用 IAM 验证检查,并依赖 AWS 服务在作业提交时报告权限错误:
```
from amzn_nova_forge.core import ValidationConfig
trainer = ForgeTrainer(
...
config=ForgeConfig(
validation_config=ValidationConfig(iam=False),
),
)
```
### 2. 凭证管理
**AWS 凭证**
* 切勿在代码或配置文件中硬编码凭证
* 尽可能使用 IAM 角色代替访问密钥
* 定期轮换凭证
* 使用 AWS Secrets Manager 管理应用程序密钥
* 通过 AWS Config 启用凭证监控
**MLflow 集成**
* 通过适当的身份验证保护 MLflow 跟踪 URI 的安全
* 使用加密连接连接到 MLflow 服务器
* 对实验数据实施访问控制
* 定期审计 MLflow 访问日志
### 3. 数据安全和隐私
**训练数据保护**
- 使用 KMS 密钥对 S3 中的静态数据进行加密
- 使用 S3 存储桶策略限制访问
- 在处理之前验证数据源
```
# 确保您的 S3 buckets 具有正确的加密和访问控制
customizer = NovaModelCustomizer(
model=Model.NOVA_LITE_2,
method=TrainingMethod.SFT_LORA,
infra=runtime,
data_s3_path="s3://secure-training-bucket/encrypted-data/data.jsonl",
output_s3_path="s3://secure-output-bucket/results"
)
```
### 4. 网络安全
**VPC 配置**
* 尽可能部署在私有子网中
* 使用 VPC endpoints 进行 AWS 服务访问
* 实施仅包含所需最少端口的安全组
* 启用 VPC Flow Logs 进行网络监控
### 5. 安全通信
- 始终使用 HTTPS 端点
- 切勿禁用 SSL 证书验证
- 保持 TLS 库更新
### 6. 输入验证
- 在传递给 SDK 之前始终验证用户输入
- 对将要存储或处理的数据进行清理
- 在提交作业前检查资源配额
- 清理作业名称和资源标识符
```
# 该 SDK 包含内置的 validation
loader = JSONLDatasetLoader(question="input", answer="output")
loader.load("s3://your-bucket/training-data.jsonl")
# 始终验证您的数据格式
loader.validate(method=TrainingMethod.SFT_LORA, model=Model.NOVA_LITE_2)
```
### 7. 监控与日志记录
- 启用 CloudTrail 获取 API 审计日志
- 使用 CloudWatch 进行操作监控
- 切勿记录敏感数据(token、凭证、PII)
- 通过 CloudWatch 监控作业日志
- 针对可疑活动设置警报
**安全监控**
- 监控失败的身份验证尝试
- 跟踪异常的资源访问模式
- 记录所有模型部署活动
### 8. 部署安全
**Bedrock 部署**
- 对 Bedrock 访问使用最小权限策略
- 实施 endpoint 访问控制
- 监控模型推理模式
- 在适当的时候启用请求/响应日志记录
### 9. 验证
SDK 包含内置验证:
- 在执行作业前进行 IAM 权限验证
- 对用户提供的参数进行输入清理
默认情况下启用验证。
标签:Amazon SageMaker, Apex, DLL 劫持, Python SDK, 人工智能, 大语言模型, 机器学习, 模型微调, 用户模式Hook绕过, 逆向工具