Qwen模型使用trl仓库的orpotrainer训练实战

本文介绍了ORPO算法在偏好对齐中的应用,它无需奖励模型和参考模型,通过在SFT阶段加入赔率比惩罚项实现对齐。通过代码实战展示了如何使用ORPO训练脚本训练Qwen1.5-0.5B模型,并提到了数据集hh-rlhf-trl-style的特性和模型tokenizer配置的注意事项。
摘要由CSDN通过智能技术生成


前言

大模型,特别是在人工智能领域的深度学习模型,通常具有大量的参数和复杂的结构,这使它们具有很高的表达能力和灵活性。然而,这种复杂性也带来了一些挑战,尤其是关于模型的行为与设计者或使用者的意图是否一致的问题。这就引出了“偏好对齐”(preference alignment)的概念,其核心是确保模型的行为符合人类的价值观和目标。


一、ORPO介绍

在这里插入图片描述

ORPO算法是最近提出的一种新的偏好对齐的方法,区别于传统的RLHF、PPO、DPO等方法,ORPO不需要奖励模型和额外参考模型。该算法认为在SFT过程中对不偏爱的结果加上轻微的惩罚就可以使模型对齐偏好,所以在SFT阶段加入了一个基于赔率比(odd ratio)的惩罚项,可以用让模型在SFT阶段直接进行偏好对齐。该算法咋子内存分配和计算量上较之前的算法更有优势。

二、代码实战

1.ORPO训练脚本

ORPO与传统的算法不同,所以对数据集和训练器的调用也存在一点区别(后续会更新一期,对比各个trainer的调用异同)。
本期演示代码使用官方代码使用的数据集hh-rlhf-trl-style,每条数据包括prompt、chosen、rejected三个字段,如下图所示:
在这里插入图片描述
其中chosen、rejected字段对应的值中包含了初始的query,以列表的形式展示。该数据集与传统的成对回答的PPO、DPO数据集存在一些区别。
模型使用的是Qwen1.5-0.5B。该模型的tokenizer_config.json文件中,定义了additional_special_tokens、eos_token、pad_token等特殊token,但是bos_token设置为NULL,在使用时,需要为此token赋值,否则会报错。
注意:官方演示代码在运行时会报错,本代码中做了一点点处理。


import multiprocessing
from dataclasses import dataclass, field

from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer, HfArgumentParser

from trl import ModelConfig, ORPOConfig, ORPOTrainer, get_peft_config


@dataclass
class ScriptArguments:
    dataset: str = field(
        default="/mnt/data3/liu/datas/hh-rlhf-trl-style/", metadata={
   "help": "The name of the dataset to use."}
    
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值