使用直接偏好优化在AI平台定制Nova模型
在某中心纽约峰会上,推出了针对Nova基础模型的全面模型定制能力套件。这些能力作为即用型配方在AI训练平台上提供,可用于在整个模型训练生命周期中适配Nova Micro、Nova Lite和Nova Pro模型,包括预训练、监督微调和对齐。
在这个多篇系列文章中,将探索这些定制配方并提供逐步实施指南。从直接偏好优化(DPO)开始,这是一种对齐技术,提供了直接根据偏好调整模型输出的方法。DPO使用配对的两个响应(一个优于另一个)的提示来引导模型产生更好反映所需语调、风格或指南的输出。可以根据数据量和成本考虑,使用参数高效或完整模型DPO来实现此技术。定制模型可以部署到AI推理平台使用预配置吞吐量进行推理。参数高效版本支持按需推理。Nova定制配方在训练作业和分布式训练集群中提供,为选择最适合基础设施和规模要求的环境提供了灵活性。
解决方案概述
使用Nova配方与训练作业的工作流程包括以下步骤:
- 用户选择特定的Nova定制配方,该配方提供全面配置来控制训练参数、模型设置和分布式训练策略
- 用户向AI控制平面提交API请求,传递Nova配方配置
- 平台使用训练作业启动脚本在托管计算集群上运行Nova配方
- 根据所选配方,平台配置所需基础设施,协调分布式训练,并在完成后自动解除集群
这种简化架构提供了完全托管的用户体验,可以快速定义训练参数并使用简单配方选择首选基础设施,同时平台处理端到端的基础设施管理。
业务用例实施演练
重点介绍如何使Nova Micro模型适应优化结构化函数调用,以支持特定应用的智能体工作流。演示了这种方法如何通过F1分数提高81%和ROUGE指标提高42%来优化领域特定用例的Nova模型。
方法使用DPO通过向模型呈现配对响应(一个由人工标注者偏好,另一个不太偏好)来对齐Nova模型与人类偏好。模型使用nvidia/When2Call数据集进行训练,以增加与业务目标一致的tool_call响应的可能性。
实施步骤
先决条件
在运行Nova Micro模型微调笔记本之前,必须完成以下先决条件:
- 为AI训练平台申请配额增加
- 创建具有适当权限的IAM角色
- 克隆包含部署资产的GitHub仓库
准备数据集
加载nvidia/When2Call数据集,该数据集提供合成生成的用户查询、工具选项和基于真实场景的标注偏好:
1
2
|
from datasets import load_dataset
dataset = load_dataset("nvidia/When2Call", "train_pref", split="train")
|
DPO技术需要包含以下内容的数据集:
- 用户提示(例如"写一封要求加薪的专业邮件")
- 优选输出(理想响应)
- 非优选输出(不良响应)
DPO训练使用训练作业
使用PyTorch Estimator类通过配方微调模型:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
from sagemaker.pytorch import PyTorch
recipe_overrides = {
"training_config": {
"trainer": {"max_epochs": 1},
"model": {
"dpo_cfg": {"beta": 0.1},
"peft": {
"peft_scheme": "lora",
"lora_tuning": {
"loraplus_lr_ratio": 16.0,
"alpha": 128,
"adapter_dropout": 0.01,
},
},
},
},
}
estimator = PyTorch(
output_path=f"s3://{bucket_name}/{job_name}",
base_job_name=job_name,
role=role,
instance_count=instance_count,
instance_type=instance_type,
training_recipe=recipe,
recipe_overrides=recipe_overrides,
max_run=18000,
sagemaker_session=sess,
image_uri=image_uri,
disable_profiler=True,
debugger_hook_config=False,
)
|
评估微调模型
使用评估配方评估模型性能,支持gen_qa和llm_judge等任务:
选项A:评估gen_qa任务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
run:
name: nova-micro-gen_qa-eval-job
model_type: amazon.nova-micro-v1:0:128k
model_name_or_path: {model_path}
replicas: 1
data_s3_path: {val_dataset_s3_path}
evaluation:
task: gen_qa
strategy: gen_qa
metric: all
inference:
max_new_tokens: 4096
top_p: 0.9
temperature: 0.1
|
选项B:评估llm_judge任务
1
2
3
4
|
evaluation:
task: llm_judge
strategy: judge
metric: all
|
评估结果摘要
微调模型在工具调用任务上实现了显著改进,在所有关键评估指标上都优于基础模型:
- F1分数提高81%
- F1 Quasi分数提高35%
- ROUGE-1分数提高39%
- ROUGE-2分数提高42%
- llm_judge评估中微调模型输出在66.2%的情况下优于基准真值输出
部署模型
使用创建自定义模型API部署微调模型:
1
2
3
4
5
6
7
8
9
10
11
|
model_path = "<ESCROW_S3_PATH_MODEL_CHECKPOINTS>"
imported_model_name = "nova-micro-sagemaker-dpo-peft"
request_params = {
"modelName": imported_model_name,
"modelSourceConfig": {"s3DataSource": {"s3Uri": model_path}},
"roleArn": role,
"clientRequestToken": "NovaRecipeSageMaker",
}
response = bedrock.create_custom_model(**request_params)
|
运行模型推理
通过SDK运行模型推理:
1
2
3
4
5
6
7
8
9
10
|
response = client.converse(
modelId=model_arn,
messages=messages,
system=["text": system_prompt],
inferenceConfig={
"temperature": temperature,
"maxTokens": max_tokens,
"topP": top_p
},
)
|
清理资源
为避免产生额外费用,请清理以下资源:
- 删除未使用的Studio资源
- 验证训练作业是否已停止运行
- 删除自定义模型部署
结论
展示了如何使用DPO配方在训练作业上定制Nova理解模型。针对优化工具调用能力的详细演练展示了显著的性能改进,微调模型在使用约8k条记录的训练数据集时,比基础模型实现了高达81%的F1分数提升。
完全托管的训练作业和优化配方简化了定制过程,使组织能够为领域特定用例适配Nova模型。这种集成代表了使高级AI定制对各行业组织可访问和实用的重要一步。