View a markdown version of this page

使用 SageMaker Python SDK 进行自定义 - Amazon Nova

使用 SageMaker Python SDK 进行自定义

SageMaker Python SDK v3.0 引入了一种现代化的模块化 API,用于在 SageMaker 上训练、微调、部署和管理模型。该 SDK 支持多种训练方法,包括持续预训练(CPT)、监督式微调(SFT)、直接偏好优化(DPO)、强化微调(RFT)和多轮强化学习(MTRL)。您可以在 SageMaker Training Jobs 和 SageMaker HyperPod 上运行训练作业。

按照以下步骤完成从安装到您的第一个训练作业的过程:

优势

  • 一款模块化 SDK,适用于从训练到部署与监控的完整模型自定义生命周期。

  • 为 SageMaker 训练作业和 SageMaker HyperPod 提供多平台支持,并实现自动资源管理和基础设施配置。

  • 无需再为训练方法查找适配的配方或容器 URI。

  • 支持自备训练配方,也可使用默认值并覆盖参数。

  • 该 SDK 会依据支持的模型与实例组合对配置进行校验,从而在训练启动前规避错误。

  • 支持多种训练方法,包括继续预训练(CPT)、监督式微调(SFT)、直接偏好优化(DPO)、强化微调(RFT)和多轮强化学习(MTRL),同时支持 LoRA 与全秩方式。

  • 集成 Amazon CloudWatch 监控功能,支持实时追踪训练进度。

  • 集成 MLflow,可通过 SageMaker AI MLflow 跟踪服务器追踪训练实验。

要求

支持的 Python 版本

SageMaker Python SDK 支持 Python 3.10 及更高版本。

安装

要安装 SageMaker Python SDK,请运行以下命令:

pip install "sagemaker>=3.19.0"

支持的模型与技术

该 SDK 支持 Amazon Nova 系列中的以下模型与技术:

方法 支持的模型
继续预训练 所有 Nova 模型(仅限 SMHP)
监督式微调 LoRA 所有 Nova 模型
全秩监督式微调 所有 Nova 模型
直接偏好优化 LoRA Nova 1.0 模型
全秩直接偏好优化 Nova 1.0 模型
强化微调 LoRA Nova Lite 2.0
全秩强化微调 Nova Lite 2.0
多轮强化微调 LoRA Nova Lite 2.0
全秩多轮强化微调 Nova Lite 2.0

多轮强化学习输出

受限模型包(RMP)是一种 SageMaker AI 模型包,它将专有模型构件封装在由平台托管的托管存储中。RMP 让您可以通过 IAM 策略授权和控制这些模型的使用,而无需授予对底层构件的直接访问权限。无法直接下载、导出或查看模型数据。该数据仅可在授权的 AWS 服务中使用。RMP 位于标记为“StorageType: "Restricted"”的模型包组中。

当您在 SageMaker Training Jobs Serverless 中使用多轮强化学习 (MTRL) 训练模型时,输出结果将以 RMP ARN 的形式存储在模型包组中,而非 S3 路径中。这与其他训练方法(如 SFT、DPO 或 RFT)不同,后者的输出结果是模型检查点的 S3 路径。

要使用 MTRL,请使用 MultiTurnRLTrainer 类。在 SageMaker 训练作业(无服务器)上训练时,您可以选择指定 output_model_package_group 来控制输出 RMP 的注册位置。如果省略,SDK 会自动为您创建一个模型包组。有关更多信息和代码示例,请参阅受限模型包

开始使用

1. 配置基础设施

SDK 支持三种计算平台。将适当的配置传递给训练器的 compute 参数。

SageMaker HyperPod

from sagemaker.core.training.configs import HyperPodCompute compute = HyperPodCompute( cluster_name="my-hyperpod-cluster", instance_type="ml.p5.48xlarge", node_count=4, )

SageMaker 训练作业(有服务器)

from sagemaker.core.training.configs import TrainingJobCompute compute = TrainingJobCompute( instance_type="ml.p5.48xlarge", instance_count=2, )

SageMaker 训练作业(无服务器)

完全托管,无需计算配置。省略 compute 参数,SDK 将默认使用无服务器模式:

# No compute parameter needed as serverless is the default trainer = SFTTrainer( model="nova-textgeneration-lite", training_dataset="s3://my-bucket/sft-data.jsonl", s3_output_path="s3://my-bucket/output/", )

2. 训练

使用 SFTTrainer 类开始监督式微调。提供您的模型、计算配置、训练数据集和输出路径。

from sagemaker.train import SFTTrainer from sagemaker.core.training.configs import HyperPodCompute compute = HyperPodCompute( cluster_name="my-hyperpod-cluster", instance_type="ml.p5.48xlarge", node_count=4, ) trainer = SFTTrainer( model="nova-textgeneration-lite", compute=compute, training_dataset="s3://my-bucket/sft-data.jsonl", s3_output_path="s3://my-bucket/output/", ) job = trainer.train(wait=False)

SDK 还提供 CPTTrainer(用于持续预训练)、DPOTrainer(用于直接偏好优化)、RLVRTrainer(用于强化微调)和 MultiTurnRLTrainer(用于多轮强化学习)。它们均遵循相同的模式:提供模型、计算配置、训练数据集和输出路径。

3. 监控

您可直接通过 SDK 追踪训练进度。使用 stream_logs() 实时流式传输 Amazon CloudWatch 日志,或使用 show_metrics() 在作业完成后绘制训练指标(例如损失和学习率)。

# Stream CloudWatch logs in real-time (blocks until job completes) trainer.stream_logs(poll=5) # Or stream only the last N lines trainer.stream_logs(tail_lines=50) # Plot training metrics (training_loss, lr, reward_score) df = trainer.show_metrics()

4. 评估

使用 BenchMarkEvaluator 类,对照内置基准测试任务评估训练好的模型。支持的基准测试包括 MMLU(大规模多任务语言理解)、BBH(高级推理任务)和 GPQA(研究生级是反谷歌问答)。有关其他评估选项,请参阅评估器

from sagemaker.train.evaluate import BenchMarkEvaluator, get_benchmarks # Get the trained model s3 path from the completed training job s3_path = job.model_artifacts.s3_model_artifacts Benchmark = get_benchmarks() evaluator = BenchMarkEvaluator( benchmark=Benchmark.MMLU, model=s3_path, s3_output_path="s3://my-bucket/eval-output/", ) execution = evaluator.evaluate()

5. 部署

训练后,将您的自定义模型部署到生产环境中。使用 SageMaker Python SDK,您可以部署到 SageMaker 实时推理端点和 Amazon Bedrock 按需推理。选择最适合您的延迟、吞吐量和成本要求的部署选项。

SageMaker 实时推理端

部署到 SageMaker 实时推理端点,以完全控制实例类型、扩缩策略和端点配置。使用 ModelBuilder 创建和部署 SageMaker 端点:

from sagemaker.serve import ModelBuilder # Get the trained model checkpoint path s3_path = job.model_artifacts.s3_model_artifacts # Deploy to SageMaker Real-time Inference endpoint builder = ModelBuilder( model=s3_path, instance_type="ml.p5.48xlarge", env_vars={ "CONTEXT_LENGTH": "8000", "MAX_CONCURRENCY": "2", }, ) builder.build().deploy() # Build the model and deploy to an endpoint

Bedrock 按需推理

按需推理提供按使用量付费的定价,无需预置容量。此选项适用于基于 LoRA 的自定义。当您的流量模式可变或不可预测时,请使用按需推理:

from sagemaker.serve import BedrockModelBuilder # Deploy with Bedrock On-Demand builder = BedrockModelBuilder( model=s3_path, throughput_type="on-demand", ) deployment = builder.deploy()

关键功能

配方覆盖优先级

SageMaker Python SDK 将分层配置系统用于训练配方。启动训练作业时,参数按以下优先顺序(从高到低)进行解析:

  1. 参数覆盖:直接通过训练器构造函数中的 overrides 字典传递的值。这些参数的优先级最高,会覆盖配方 YAML 或 Hub 默认值中任何冲突的值。

  2. 配方 YAML:您提供的配方 YAML 文件(S3 路径或本地文件)。这定义了完整的训练配置,但可以被 overrides 字典选择性地覆盖。

  3. Hub 默认值:默认配方根据您的模型和训练方法从 SageMaker 模型中心自动解析。当未指定自定义配方或覆盖时,它们提供合理的起始配置。

例如,要在对所有其他参数使用 Hub 默认值时覆盖最大训练步数和学习率:

from sagemaker.train import SFTTrainer from sagemaker.core.training.configs import HyperPodCompute compute = HyperPodCompute( cluster_name="my-hyperpod-cluster", instance_type="ml.p5.48xlarge", node_count=2, ) trainer = SFTTrainer( model="nova-textgeneration-lite", training_dataset="s3://my-bucket/sft-data.jsonl", s3_output_path="s3://my-bucket/output/", base_job_name="my-sft-training-job", overrides={ "training_config.trainer.max_epochs": 1, "training_config.model.optim.lr": 1e-5, }, ) job = trainer.train(wait=False)

在此示例中,max_epochsoptim.lr 通过覆盖显式设置。所有其他训练参数(批次大小、预热步骤、模型并行等)均回退到 nova-textgeneration-lite 模型的 Hub 默认配方。

企业级基础设施支持

SDK 支持多个计算平台,可自动管理基础设施配置、验证和作业编排:

  • SageMaker 训练作业:完全托管的训练,支持自动预置和释放实例。同时支持按需模式和无服务器模式。

  • SageMaker HyperPod:用于大规模分布式训练的持久集群,内置容错能力和自动节点恢复。

在所有平台上,SDK 均会在提交作业之前验证实例类型、配方配置和数据集格式,从而在工作流早期防止错误发生。

全面评测

基于标准基准评测自定义模型。该 SDK 提供以下评估器:

  • BenchMarkEvaluator:运行标准化性能基准测试,例如 MMLU、BBH 和 GPQA

  • LLMAsJudgeEvaluator:使用大型语言模型评测模型输出

  • InspectAIEvaluator:运行 InspectAI 或自定义基准测试任务

  • CustomScorerEvaluator:应用自定义评估器函数

  • MultiTurnRLEvaluator:使用基于推出的指标评估多轮代理模型

生产环境部署

使用 SageMaker Python SDK,您可以通过多种部署选项部署自定义模型:

  • SageMaker 实时推理:完全控制实例类型、扩缩策略和端点配置,以满足自定义托管需求。

  • Bedrock 按需推理:按使用量付费,无需预置容量。适用于基于 LoRA 的自定义。

使用 ModelBuilderBedrockModelBuilder 类来部署经过训练的模型。

数据混合

注意

数据混合仅适用于 Nova Forge 订阅用户。

SageMaker Python SDK 提供了 DataMixingConfig 类,用于配置数据混合。

DataMixingConfig 与您的训练器配合使用,以指定客户数据的百分比及其在 Nova 数据类别中的分布情况:

from sagemaker.train import SFTTrainer from sagemaker.train.data_mixing_config import DataMixingConfig from sagemaker.core.training.configs import HyperPodCompute data_mixing = DataMixingConfig( customer_data_percent=70.0, nova_data_percentages={ "code": 40.0, "reasoning": 30.0, "instruction-following": 30.0, }, ) trainer = SFTTrainer( model="nova-textgeneration-lite", compute=HyperPodCompute( cluster_name="my-cluster", instance_type="ml.p5.48xlarge", node_count=4, ), training_dataset="s3://my-bucket/sft-data.jsonl", s3_output_path="s3://my-bucket/output/", data_mixing_config=data_mixing, ) job = trainer.train(wait=False)

了解更多

准备好开始使用 SageMaker Python SDK 自定义 Nova 模型了吗? 有关详细指南、API 参考及更多示例,请参阅 GitHub 上的 sagemaker-python-sdk