使用直接偏好优化在AI平台定制Nova模型

本文详细介绍了如何使用直接偏好优化(DPO)技术在AI训练平台上定制Nova基础模型,包括数据准备、参数配置、训练作业部署和模型评估的全流程实现方法,展示了在工具调用任务上F1分数提升81%的显著效果。

使用直接偏好优化在AI平台定制Nova模型

在某中心纽约峰会上,推出了针对Nova基础模型的全面模型定制能力套件。这些能力作为即用型配方在AI训练平台上提供,可用于在整个模型训练生命周期中适配Nova Micro、Nova Lite和Nova Pro模型,包括预训练、监督微调和对齐。

在这个多篇系列文章中,将探索这些定制配方并提供逐步实施指南。从直接偏好优化(DPO)开始,这是一种对齐技术,提供了直接根据偏好调整模型输出的方法。DPO使用配对的两个响应(一个优于另一个)的提示来引导模型产生更好反映所需语调、风格或指南的输出。可以根据数据量和成本考虑,使用参数高效或完整模型DPO来实现此技术。定制模型可以部署到AI推理平台使用预配置吞吐量进行推理。参数高效版本支持按需推理。Nova定制配方在训练作业和分布式训练集群中提供,为选择最适合基础设施和规模要求的环境提供了灵活性。

解决方案概述

使用Nova配方与训练作业的工作流程包括以下步骤:

  1. 用户选择特定的Nova定制配方,该配方提供全面配置来控制训练参数、模型设置和分布式训练策略
  2. 用户向AI控制平面提交API请求,传递Nova配方配置
  3. 平台使用训练作业启动脚本在托管计算集群上运行Nova配方
  4. 根据所选配方,平台配置所需基础设施,协调分布式训练,并在完成后自动解除集群

这种简化架构提供了完全托管的用户体验,可以快速定义训练参数并使用简单配方选择首选基础设施,同时平台处理端到端的基础设施管理。

业务用例实施演练

重点介绍如何使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定制对各行业组织可访问和实用的重要一步。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计