项目文件夹

文件
wehub-resource-sync a203934033
Lint test / lint (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:34:58 +08:00

40 行
1.6 KiB
Python

# Copyright (c) ModelScope Contributors. All rights reserved.
import torch.nn as nn
import trl
import warnings
from packaging import version
from transformers import PreTrainedModel
from typing import Optional, Union
from swift.trainers import SwiftMixin
from .rlhf_mixin import RLHFTrainerMixin
if version.parse(trl.__version__) >= version.parse('0.26.0'):
from trl.experimental.cpo import CPOTrainer as HFCPOTrainer
else:
from trl import CPOTrainer as HFCPOTrainer
del HFCPOTrainer.__init__
class CPOTrainer(RLHFTrainerMixin, SwiftMixin, HFCPOTrainer):
def __init__(self, model: Optional[Union[PreTrainedModel, nn.Module, str]] = None, *_args, **kwargs):
ref_model = kwargs.get('ref_model')
assert ref_model is None, 'CPO/SimPO does not require a ref_model.'
args = kwargs['args']
self.label_smoothing = args.label_smoothing
self.loss_type = args.loss_type
self.cpo_alpha = args.cpo_alpha
self.alpha = getattr(args, 'alpha', 0.0)
if args.loss_type == 'simpo':
self.simpo_gamma = args.simpo_gamma
if self.cpo_alpha > 0:
warnings.warn('You are using CPO-SimPO method because you set a non-zero cpo_alpha. '
'This will result in the CPO-SimPO method '
'(https://github.com/fe1ixxu/CPO_SIMPO/tree/main). '
'If you want to use a pure SimPO method, please set cpo_alpha to 0.')
super().__init__(model, *_args, **kwargs)
self.pad_token_id = self.tokenizer.pad_token_id