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绕过, 逆向工具