Files
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

124 lines
4.0 KiB
Python

# Copyright (c) ModelScope Contributors. All rights reserved.
import trl
from dataclasses import dataclass
from packaging import version
from transformers.utils.versions import require_version
if version.parse(trl.__version__) <= version.parse('0.28'):
from trl import CPOConfig as HfCPOConfig
from trl import GKDConfig as HfGKDConfig
from trl import ORPOConfig as HfORPOConfig
from trl import PPOConfig as HfPPOConfig
else:
from trl.experimental.cpo import CPOConfig as HfCPOConfig
from trl.experimental.gkd import GKDConfig as HfGKDConfig
from trl.experimental.orpo import ORPOConfig as HfORPOConfig
from trl.experimental.ppo import PPOConfig as HfPPOConfig
from trl import DPOConfig as HfDPOConfig
from trl import GRPOConfig as HfGRPOConfig
from trl import KTOConfig as HfKTOConfig
from trl import RewardConfig as HfRewardConfig
from typing import Optional
from swift.trainers import TrainArgumentsMixin
from .args_mixin import GRPOArgumentsMixin, RolloutTrainerArgumentsMixin
@dataclass
class DPOConfig(TrainArgumentsMixin, HfDPOConfig):
ld_alpha: Optional[float] = None # compat trl==0.15
# Fields removed in trl 0.29, kept here for backward compatibility
rpo_alpha: Optional[float] = None
ref_adapter_name: Optional[str] = None
reference_free: Optional[bool] = None
def __post_init__(self):
TrainArgumentsMixin.__post_init__(self)
HfDPOConfig.__post_init__(self)
@dataclass
class CPOConfig(TrainArgumentsMixin, HfCPOConfig):
def __post_init__(self):
TrainArgumentsMixin.__post_init__(self)
HfCPOConfig.__post_init__(self)
@dataclass
class ORPOConfig(TrainArgumentsMixin, HfORPOConfig):
def __post_init__(self):
TrainArgumentsMixin.__post_init__(self)
HfORPOConfig.__post_init__(self)
@dataclass
class KTOConfig(TrainArgumentsMixin, HfKTOConfig):
def __post_init__(self):
TrainArgumentsMixin.__post_init__(self)
HfKTOConfig.__post_init__(self)
@dataclass
class RewardConfig(TrainArgumentsMixin, HfRewardConfig):
def __post_init__(self):
TrainArgumentsMixin.__post_init__(self)
HfRewardConfig.__post_init__(self)
@dataclass
class PPOConfig(TrainArgumentsMixin, HfPPOConfig):
def __post_init__(self):
TrainArgumentsMixin.__post_init__(self)
HfPPOConfig.__post_init__(self)
@dataclass
class GKDConfig(RolloutTrainerArgumentsMixin, TrainArgumentsMixin, HfGKDConfig):
sft_alpha: float = 0
offload_teacher_model: bool = False
max_completion_length: int = 512
log_completions: bool = False
def __post_init__(self):
RolloutTrainerArgumentsMixin.__post_init__(self)
TrainArgumentsMixin.__post_init__(self)
HfGKDConfig.__post_init__(self)
self._init_generation_batch_params()
@dataclass
class GRPOConfig(GRPOArgumentsMixin, TrainArgumentsMixin, HfGRPOConfig):
offload_teacher_model: bool = False
def __post_init__(self):
require_version('trl>=0.26')
GRPOArgumentsMixin.__post_init__(self)
TrainArgumentsMixin.__post_init__(self)
# Skip trl GRPOConfig.__post_init__ (hard-requires num_generations>=2); keep TrainingArguments init.
super(HfGRPOConfig, self).__post_init__()
if self.vllm_reasoning_parser is not None:
raise ValueError('vllm_reasoning_parser is not supported for GRPO Training, please unset it.')
if self.cosine_max_len is None:
self.cosine_max_len = self.max_completion_length
if self.deepspeed and 'zero_optimization' in self.deepspeed and self.deepspeed['zero_optimization'][
'stage'] == 3:
# https://github.com/modelscope/ms-swift/issues/3237
self.deepspeed['zero_optimization']['stage3_prefetch_bucket_size'] = 0
self.deepspeed_plugin.hf_ds_config.config['zero_optimization']['stage3_prefetch_bucket_size'] = 0
# https://github.com/modelscope/ms-swift/issues/3863
self.dataloader_drop_last = True
self._init_generation_batch_params()