TRL 文档

训练器

Hugging Face's logo
加入Hugging Face社区

并获得增强文档体验

以开始使用

训练器

在TRL中,我们支持使用了类似于D. Ziegler等人论文“From Human Preferences to Fine-tuning Language Models”提出的结构的PPO(近端策略优化)实现方式。[论文, 代码] 训练器和模型类主要受transformers.Trainertransformers.AutoModel类的启发,并针对强化学习进行了适配。我们还支持一个可用来训练奖励模型的RewardTrainer

CPOConfig

trl.CPOConfig

< >

( output_dir: str overwrite_output_dir: bool = False do_train: bool = False do_eval: bool = False do_predict: bool = False eval_strategy: Union = 'no' prediction_loss_only: bool = False per_device_train_batch_size: int = 8 per_device_eval_batch_size: int = 8 per_gpu_train_batch_size: Optional = None per_gpu_eval_batch_size: Optional = None gradient_accumulation_steps: int = 1 eval_accumulation_steps: Optional = None eval_delay: Optional = 0 torch_empty_cache_steps: Optional = None learning_rate: float = 5e-05 weight_decay: float = 0.0 adam_beta1: float = 0.9 adam_beta2: float = 0.999 adam_epsilon: float = 1e-08 max_grad_norm: float = 1.0 num_train_epochs: float = 3.0 max_steps: int = -1 lr_scheduler_type: Union = 'linear' lr_scheduler_kwargs: Union = <factory> warmup_ratio: float = 0.0 warmup_steps: int = 0 log_level: Optional = 'passive' log_level_replica: Optional = 'warning' log_on_each_node: bool = True logging_dir: Optional = None logging_strategy: Union = 'steps' logging_first_step: bool = False logging_steps: float = 500 logging_nan_inf_filter: bool = True save_strategy: Union = 'steps' save_steps: float = 500 save_total_limit: Optional = None save_safetensors: Optional = True save_on_each_node: bool = False save_only_model: bool = False restore_callback_states_from_checkpoint: bool = False no_cuda: bool = False use_cpu: bool = False use_mps_device: bool = False seed: int = 42 data_seed: Optional = None jit_mode_eval: bool = False use_ipex: bool = False bf16: bool = False fp16: bool = False fp16_opt_level: str = 'O1' half_precision_backend: str = 'auto' bf16_full_eval: bool = False fp16_full_eval: bool = False tf32: Optional = None local_rank: int = -1 ddp_backend: Optional = None tpu_num_cores: Optional = None tpu_metrics_debug: bool = False debug: Union = '' dataloader_drop_last: bool = False eval_steps: Optional = None dataloader_num_workers: int = 0 dataloader_prefetch_factor: Optional = None past_index: int = -1 run_name: Optional = None disable_tqdm: Optional = None remove_unused_columns: Optional = True label_names: Optional = None load_best_model_at_end: Optional = False metric_for_best_model: Optional = None greater_is_better: Optional = None ignore_data_skip: bool = False fsdp: Union = '' fsdp_min_num_params: int = 0 fsdp_config: Union = None fsdp_transformer_layer_cls_to_wrap: Optional = None accelerator_config: Union = None deepspeed: Union = None label_smoothing_factor: float = 0.0 optim: Union = 'adamw_torch' optim_args: Optional = None adafactor: bool = False group_by_length: bool = False length_column_name: Optional = 'length' report_to: Union = None ddp_find_unused_parameters: Optional = None ddp_bucket_cap_mb: Optional = None ddp_broadcast_buffers: Optional = None dataloader_pin_memory: bool = True dataloader_persistent_workers: bool = False skip_memory_metrics: bool = True use_legacy_prediction_loop: bool = False push_to_hub: bool = False resume_from_checkpoint: Optional = None hub_model_id: Optional = None hub_strategy: Union = 'every_save' hub_token: Optional = None hub_private_repo: bool = False hub_always_push: bool = False gradient_checkpointing: bool = False gradient_checkpointing_kwargs: Union = None include_inputs_for_metrics: bool = False eval_do_concat_batches: bool = True fp16_backend: str = 'auto' evaluation_strategy: Union = None push_to_hub_model_id: Optional = None push_to_hub_organization: Optional = None push_to_hub_token: Optional = None mp_parameters: str = '' auto_find_batch_size: bool = False full_determinism: bool = False torchdynamo: Optional = None ray_scope: Optional = 'last' ddp_timeout: Optional = 1800 torch_compile: bool = False torch_compile_backend: Optional = None torch_compile_mode: Optional = None dispatch_batches: Optional = None split_batches: Optional = None include_tokens_per_second: Optional = False include_num_input_tokens_seen: Optional = False neftune_noise_alpha: Optional = None optim_target_modules: Union = None batch_eval_metrics: bool = False eval_on_start: bool = False eval_use_gather_object: Optional = False max_length: Optional = None max_prompt_length: Optional = None max_completion_length: Optional = None max_target_length: Optional = None beta: float = 0.1 label_smoothing: float = 0 loss_type: Literal = 'sigmoid' disable_dropout: bool = True cpo_alpha: float = 1.0 simpo_gamma: float = 0.5 label_pad_token_id: int = -100 padding_value: int = None truncation_mode: str = 'keep_end' generate_during_eval: bool = False is_encoder_decoder: Optional = None model_init_kwargs: Optional = None dataset_num_proc: Optional = None )

参数

  • max_length (int, 默认值 None) — 批次中序列的最大长度。如果您想使用默认数据合并器,则此参数是必需的。
  • max_prompt_length (int, 默认值 None) — 提示的最大长度。如果您想使用默认数据合并器,则此参数是必需的。
  • max_target_length (int, 默认值 None) — 目标的最大长度。如果您想使用默认数据合并器且您的模型是编码器-解码器类型,则此参数是必需的。
  • beta (float, 默认值 0.1) — CPO 损失函数中的 beta 因子。
  • label_smoothing (float,默认值为 0) — 标签平滑系数。如果想要使用默认的数据调度器,则必须此参数。
  • loss_type (str,默认值为 sigmoid) — 使用的损失类型。如果想要使用默认的数据调度器,则必须此参数。
  • label_pad_token_id (int,默认值为 -100) — 标签填充token ID。如果想要使用默认的数据调度器,则必须此参数。
  • cpo_alpha (float,默认值为 1.0) — 控制CPO训练中BC正则化器强度的超参数。
  • simpo_gamma (float,默认为0.5) —— SimPO损失的期望奖励边际,仅在启用“simpo”选项时使用。
  • padding_value (int,默认为None) —— 如果与分词器的pad_token_id不同,则为填充值。
  • truncation_mode (str,默认为keep_end) —— 要使用的截断模式,可以是keep_endkeep_start。如果您想使用默认的数据复列器,则需要此参数。
  • generate_during_evalbool,默认为 False)— 在评估步骤期间是否采样和记录生成。
  • is_encoder_decoderOptional[bool]可选,默认为 None)—如果不提供模型,我们需要知道 model_init 返回的是编码器-解码器模型。
  • disable_dropoutbool,默认为 True)— 是否在 model 中禁用 dropout。
  • model_init_kwargsOptional[Dict]可选)— 实例化模型时需传递的附加参数的字典。
  • dataset_num_proc (Optional[int], 可选) — 用于对数据进行分词的工作者数量。默认为 None。

CPOConfig收集与类 CPOTrainer 相关的所有训练参数。

使用 HfArgumentParser,我们可以将这个类转换为 argparse 参数,这些参数可以在命令行中指定。

CPOTrainer

trl.CPOTrainer

< >

( model: 联合体 = Noneargs: 可选 = Nonedata_collator: 可选 = Nonetrain_dataset: 可选 = Noneeval_dataset: 联合体 = Nonetokenizer: 可选 = Nonemodel_init: 可选 = Nonecallbacks: 可选 = Noneoptimizers: 元组 = (None, None)preprocess_logits_for_metrics: 可选 = Nonepeft_config: 可选 = Nonecompute_metrics: 可选 = None )

参数

  • model (transformers.PreTrainedModel) — 要训练的模型,最好是一个 AutoModelForSequenceClassification
  • args (CPOConfig) — 用于训练的 CPO 配置参数。
  • data_collator (transformers.DataCollator) — 用于训练的数据合并器。如果未指定,将使用默认数据合并器 (DPODataCollatorWithPadding),它会将序列填充到批次中序列的最大长度,给定成对序列的数据集。
  • train_dataset (datasets.Dataset) — 使用于训练的数据集。
  • eval_dataset (datasets.Dataset) — 使用于评估的数据集。
  • tokenizer (transformers.PreTrainedTokenizerBase) — 用于训练的标记化器。如果想要使用默认的数据拼接器,则需要指定此参数。
  • model_init (Callable[[], transformers.PreTrainedModel]) — 用于训练的模型初始化器。如果没有指定,将使用默认的模型初始化器。
  • callbacks (List[transformers.TrainerCallback]) — 用于训练的回调函数。
  • optimizers (Tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — 用于训练的优化器和调度器。
  • preprocess_logits_for_metrics (Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — 用于在计算指标之前预处理 logits 的函数。
  • peft_config (Dict, 默认值 None) — 用于训练的 PEFT 配置。如果您传递一个 PEFT 配置,模型将被包装在一个 PEFT 模型中。
  • compute_metrics (Callable[[EvalPrediction], Dict], 可选) — 用于计算指标的函数。必须接受一个 EvalPrediction 并返回一个字符串到指标值的字典。

初始化 CPOTrainer。

构建分词答案

< >

( prompt answer )

lama分词器满足enc(a + b) = enc(a) + enc(b)。它还确保enc(a + b) = enc(a) + enc(a + b)[len(enc(a)):]。参考:https://github.com/EleutherAI/lm-evaluation-harness/pull/531#issuecomment-1595586257

concatenated_forward

< >

( model: 模块 batch: 字典 )

在给定的输入批次上运行指定的模型,将选择的和拒绝的输入一起拼接。

我们这样做是为了避免进行两次正向传递,因为对FSDP来说更快。

concatenated_inputs

< >

( batch: 字典 is_encoder_decoder: 布尔 = False label_pad_token_id: 整数 = -100 padding_value: 整数 = 0 device: 可选 = None )

将选中和拒绝的输入连接成一个单一生成器。

cpo_loss

< >

( policy_chosen_logps: FloatTensor policy_rejected_logps: FloatTensor ) 三个张量元组

返回

三个张量元组

(losses, chosen_rewards, rejected_rewards)。losses张量包含批次中每个示例的CPO损失。chosen_rewards和rejected_rewards张量包含选中和拒绝的响应的奖励。

计算一批策略和参考模型对数概率的CPO损失。

evaluation_loop

< >

( dataloader: DataLoader description: str prediction_loss_only: Optional = None ignore_keys: Optional = None metric_key_prefix: str = 'eval' )

覆盖内置评估循环以存储每个批次的指标。预测/评估循环,由Trainer.evaluate()Trainer.predict()共享。

支持有或没有标签的情况。

get_batch_logps

< >

( logits: FloatTensor labels: LongTensor average_log_prob: bool = False label_pad_token_id: int = -100 is_encoder_decoder: bool = False )

计算在给定logits下给定标签的对数概率。

get_batch_loss_metrics

< >

( model batch: Dict train_eval: Literal = 'train' )

计算给定训练或测试批次输入的CPN损失和其他指标。

get_batch_samples

< >

( model batch: Dict )

从给定的输入批次生成模型和参考模型的样本。

日志

< >

( logs: Dict )

参数

  • logs (Dict[str, float]) — 要记录的值。

在监控训练的各个对象上记录 logs,包括存储的指标。

tokenize_row

< >

( feature model: Union = None )

单行从CPO特定数据集中进行标记化。

在此阶段,我们还没有将其转换为PyTorch张量;我们只是处理了截断的情况,如果提示 + 选择或提示 + 拒绝的响应过长。首先我们截断提示;如果我们仍然太长,我们将截断选择的/拒绝的。

我们还创建了选择/拒绝的响应的标签,其长度等于提示和选择的/拒绝的响应长度的总和,提示标记的_id用于提示标记。

DDPOConfig

trl.DDPOConfig

< >

( exp_name: str = 'doc-buil' run_name: Optional = '' seed: int = 0 log_with: Optional = None tracker_kwargs: dict = <factory> accelerator_kwargs: dict = <factory> project_kwargs: dict = <factory> tracker_project_name: str = 'trl' logdir: str = 'logs' num_epochs: int = 100 save_freq: int = 1 num_checkpoint_limit: int = 5 mixed_precision: str = 'fp16' allow_tf32: bool = True resume_from: Optional = '' sample_num_steps: int = 50 sample_eta: float = 1.0 sample_guidance_scale: float = 5.0 sample_batch_size: int = 1 sample_num_batches_per_epoch: int = 2 train_batch_size: int = 1 train_use_8bit_adam: bool = False train_learning_rate: float = 0.0003 train_adam_beta1: float = 0.9 train_adam_beta2: float = 0.999 train_adam_weight_decay: float = 0.0001 train_adam_epsilon: float = 1e-08 train_gradient_accumulation_steps: int = 1 train_max_grad_norm: float = 1.0 train_num_inner_epochs: int = 1 train_cfg: bool = True train_adv_clip_max: float = 5 train_clip_range: float = 0.0001 train_timestep_fraction: float = 1.0 per_prompt_stat_tracking: bool = False per_prompt_stat_tracking_buffer_size: int = 16 per_prompt_stat_tracking_min_count: int = 16 async_reward_computation: bool = False max_workers: int = 2 negative_prompts: Optional = '' )

DDPOTrainer配置类

DDPOTrainer

trl.DDPOTrainer

< >

( config: DDPOConfig reward_function: Callable prompt_function: Callable sd_pipeline: DDPOStableDiffusionPipeline image_samples_hook: Optional = None )

参数

  • **config** (DDPOConfig) — DDPOTrainer 的配置对象。有关更多信息,请检查 PPOConfig 的文档。
  • **reward_function** (Callable[[torch.Tensor, Tuple[str], Tuple[Any]], torch.Tensor]) — 要使用的奖励函数 —
  • **prompt_function** (Callable[[], Tuple[str, Any]]) — 生成指导模型的提示的函数 —
  • **sd_pipeline** (DDPOStableDiffusionPipeline) — 用于训练的Stable Diffusion管道。 —
  • **image_samples_hook** (Optional[Callable[[Any, Any, Any], Any]]) — 调用以记录图像的钩子 —

DDPOTrainer使用了深度扩散策略优化来优化扩散模型。请注意,此训练器深受以下工作的启发:[链接](https://github.com/kvablack/ddpo-pytorch)。目前仅支持基于Stable Diffusion的管道。

calculate_loss

< >

( 隐含变量 时间步 下一个隐含变量 对数概率 优势 嵌入 )

参数

  • 隐含变量 (torch.Tensor) — 从扩散模型采样的隐含变量,形状:[batch_size, num_channels_latents, height, width]
  • 时间步 (torch.Tensor) — 从扩散模型采样的时间步,形状:[batch_size]
  • next_latents (torch.Tensor) — 从扩散模型中采样的下一个潜在的值,形状:[batch_size, num_channels_latents, height, width]
  • log_probs (torch.Tensor) — 潜在值的对数概率,形状:[batch_size]
  • advantages (torch.Tensor) — 潜在的优势,形状:[batch_size]
  • embeds (torch.Tensor) — 提示的嵌入,形状:[2*batch_size or batch_size, …] 注:这里的“或”是因为如果train_cfg是True,预期的负提示将连接到embeds

计算一组未打包样本的损失

创建模型卡片

< >

( path: str model_name: Optional = 'TRL DDPO Model' )

参数

  • path (str) — 保存模型卡片的路径。
  • model_name (str, 可选) — 模型名称,默认为 TRL DDPO Model

创建并保存 TRL 模型的模型卡片。

步骤

< >

( epoch: int global_step: int ) global_step (int)

参数

  • epoch (int) — 当前轮次。
  • global_step (int) — 当前全局步数。

返回

global_step (int)

更新后的全局步数。

执行一次训练步骤。

副作用

  • 模型权重更新
  • 将统计数据记录到加速器追踪器中。
  • 如果 `self.image_samples_callback` 不为 None,则将使用提示图像对、全局步数和加速器追踪器调用它。

train

< >

( epochs: 可选 = None )

训练模型给定的epoch数量

DPOTrainer

trl.DPOTrainer

< >

( model: Union = None ref_model: Union = None beta: float = 0.1 label_smoothing: float = 0 loss_type: Literal = 'sigmoid' args: Optional = None data_collator: Optional = None label_pad_token_id: int = -100 padding_value: Optional = None truncation_mode: str = 'keep_end' train_dataset: Optional = None eval_dataset: Union = None tokenizer: Optional = None model_init: Optional = None callbacks: Optional = None optimizers: Tuple = (None, None) preprocess_logits_for_metrics: Optional = None max_length: Optional = None max_prompt_length: Optional = None max_target_length: Optional = None peft_config: Optional = None is_encoder_decoder: Optional = None disable_dropout: bool = True generate_during_eval: bool = False compute_metrics: Optional = None precompute_ref_log_probs: bool = False dataset_num_proc: Optional = None model_init_kwargs: Optional = None ref_model_init_kwargs: Optional = None model_adapter_name: Optional = None ref_adapter_name: Optional = None reference_free: bool = False force_use_ref_model: bool = False )

参数

  • model (transformers.PreTrainedModel) — 要训练的模型,最好是一个 AutoModelForSequenceClassification 模型。
  • ref_model (PreTrainedModelWrapper) — 具有休闲语言建模头部的 Hugging Face transformer 模型。用于隐式奖励计算和损失。如果没有提供参考模型,则训练器将创建一个与要优化的模型具有相同架构的参考模型。
  • args (DPOConfig) — 用于训练的 DPO 配置参数。
  • data_collator (transformers.DataCollator) — 用于训练的数据合并器。如果没有指定,将使用默认的数据合并器(DPODataCollatorWithPadding),它会将序列填充到批次中序列的最大长度。
  • train_dataset (datasets.Dataset) — 用于训练的数据集。
  • eval_dataset (datasets.Dataset) — 用于评估的数据集。
  • tokenizer (transformers.PreTrainedTokenizerBase) — 用于训练的分词器。如果你想使用默认的数据合并器,则必须指定此参数。
  • model_init (Callable[[], transformers.PreTrainedModel]) — 用于训练的模型初始化器。如果没有指定,将使用默认模型初始化器。
  • callbacks (List[transformers.TrainerCallback]) — 用于训练的回调函数。
  • optimizers (Tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — 用于训练的优化器和学习率调度器。
  • preprocess_logits_for_metrics (Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — 在计算指标前预处理的 logits 的函数。
  • peft_config (Dict, 默认为 None) — 用于训练的PEFT配置。如果传递PEFT配置,模型将被包装在PEFT模型中。
  • compute_metrics (Callable[[EvalPrediction], Dict], 可选) — 用于计算指标的功能。必须接受一个代码块,并将一个字典从字符串值 作为指标值返回。

初始化DPOTrainer。

构建分词答案

< >

( prompt answer images = None )

lama分词器满足enc(a + b) = enc(a) + enc(b)。它还确保enc(a + b) = enc(a) + enc(a + b)[len(enc(a)):]。参考:https://github.com/EleutherAI/lm-evaluation-harness/pull/531#issuecomment-1595586257

compute_reference_log_probs

< >

( padded_batch: Dict )

计算单个填充批次DPO特定数据集的参考模型的对数概率。

concatenated_forward

< >

( model: 模块 batch: 字典 )

在给定的输入批次上运行指定的模型,将选择的和拒绝的输入一起拼接。

我们这样做是为了避免进行两次正向传递,因为对FSDP来说更快。

concatenated_inputs

< >

( batch: 字典 is_encoder_decoder: 布尔值 = False is_vision_model: 布尔值 = False label_pad_token_id: 整数 = -100 padding_value: 整数 = 0 device: 可选 = None )

将选中和拒绝的输入连接成一个单一生成器。

dpo_loss

< >

( policy_chosen_logps: 浮点张量 policy_rejected_logps: 浮点张量 reference_chosen_logps: 浮点张量 reference_rejected_logps: 浮点张量 ) 三个张量的元组

返回

三个张量元组

(losses,选择的奖励,拒绝的奖励)。损失张量包含批次中每个示例的 DPO 损失。选择的奖励和拒绝的奖励张量分别包含选择的和拒绝的响应的奖励。

计算策略和参考模型日志概率批次的 DPO 损失。

evaluation_loop

< >

( dataloader: DataLoader description: str prediction_loss_only: Optional = None ignore_keys: Optional = None metric_key_prefix: str = 'eval' )

覆盖内置评估循环以存储每个批次的指标。预测/评估循环,由Trainer.evaluate()Trainer.predict()共享。

支持有或没有标签的情况。

get_batch_logps

< >

( logits: FloatTensor labels: LongTensor label_pad_token_id: int = -100 is_encoder_decoder: bool = False )

计算在给定logits下给定标签的对数概率。

get_batch_loss_metrics

< >

( model batch: Dict train_eval: Literal = 'train' )

根据给定的输入批次计算训练或测试的DPO损失和其他指标。

get_batch_samples

< >

( model batch: Dict )

从给定的输入批次生成模型和参考模型的样本。

get_eval_dataloader

< >

( eval_dataset: 可选 = None )

参数

  • eval_dataset (torch.utils.data.Dataset, 可选) — 如提供,将覆盖 self.eval_dataset。如果它是一个 Dataset,则自动删除不被 model.forward() 方法接受的列。它必须实现 __len__

返回评估 ~torch.utils.data.DataLoader

是 transformers.src.transformers.trainer.get_eval_dataloader 的子类,用于预先计算 ref_log_probs

get_train_dataloader

< >

( )

返回训练 ~torch.utils.data.DataLoader

是 transformers.src.transformers.trainer.get_train_dataloader 的子类,用于预先计算 ref_log_probs

日志

< >

( logs: Dict )

参数

  • logs (Dict[str, float]) — 记录的值。

在监控训练的各个对象上记录 logs,包括存储的指标。

null_ref_context

< >

( )

处理 null 引用模型的上下文管理器(即 peft 适配器操作)。

tokenize_row

< >

( feature model: Union = None )

将特定于 DPO 的数据集的单行进行分词。

在此阶段,我们还没有将其转换为PyTorch张量;我们只是处理了截断的情况,如果提示 + 选择或提示 + 拒绝的响应过长。首先我们截断提示;如果我们仍然太长,我们将截断选择的/拒绝的。

我们还创建了选择/拒绝的响应的标签,其长度等于提示和选择的/拒绝的响应长度的总和,提示标记的_id用于提示标记。

IterativeSFTTrainer

trl.IterativeSFTTrainer

< >

( model: 可选 = None args: 可选 = None tokenizer: 可选 = None optimizers: 元组 = (None, None) data_collator: 可选 = None eval_dataset: 联合 = None max_length: 可选 = None truncation_mode: 可选 = 'keep_end' preprocess_logits_for_metrics: 可选 = None compute_metrics: 可选 = None optimize_device_cache: 可选 = False )

参数

  • **model** (PreTrainedModel) — 需要优化的模型,可以是‘AutoModelForCausalLM’或‘AutoModelForSeq2SeqLM’。 — 更多的细节请查看PreTrainedModel的文档。
  • **args** (transformers.TrainingArguments) — — 用于训练的参数。
  • **tokenizer** (PreTrainedTokenizerBase) — 用于编码数据的分词器。更详细的文档请查看 transformers.PreTrainedTokenizertransformers.PreTrainedTokenizerFast
  • **optimizers** (Tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — — 用于训练的优化器和调度器。
  • **data_collator** (Union[DataCollatorForLanguageModeling, DataCollatorForSeq2Seq], 可选) — 用于训练和传递给数据加载器的数据合器。
  • **eval_dataset** (datasets.Dataset) — 用于评估的数据集。
  • **max_length** (int, 默认为 None) — 输入的最大长度。
  • **truncation_mode** (str, 默认为 keep_end) — 要使用的截断模式,可以是 keep_endkeep_start
  • **preprocess_logits_for_metrics** (Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) - 在计算指标之前用于预处理logits的函数。
  • **compute_metrics** (Callable[[EvalPrediction], Dict],可选) - 用于计算指标的功能。必须接受一个EvalPrediction并返回一个包含指标值的字典。
  • **optimize_device_cache** * (bool,可选,默认为False) - 优化CUDA缓存以实现更高效的内存使用。-

IterativeSFTTrainer可以用于使用需要在优化之间执行一些步骤的方法微调模型。

步骤

< >

( input_ids: Optional = None attention_mask: Optional = None labels: Optional = None texts: Optional = None texts_labels: Optional = None ) dict[str, Any]

参数

  • input_ids (Listtorch.LongTensor) — 包含input_ids的列表(如果没有提供,则使用文本)
  • attention_mask (Listtorch.LongTensor, 可选) — 包含attention_mask的列表
  • labels (Listtorch.FloatTensor, 可选) — 包含标签的张量列表(如果设为None,将默认为input_ids)
  • texts (Liststr, 可选) — 包含文本输入的字符串列表(如果未提供,将直接使用input_ids)
  • texts_labels (Liststr, 可选) — 包含文本标签的字符串列表(如果设为None,将默认为text)

返回

dict[str, 任意类型]

训练统计数据摘要

根据输入的input_ids、attention_mask和labels或在提供的text和text_labels列表上运行优化步骤。

KTOConfig

trl.KTOConfig

< >

( output_dir: str overwrite_output_dir: bool = False do_train: bool = False do_eval: bool = False do_predict: bool = False eval_strategy: Union = 'no' prediction_loss_only: bool = False per_device_train_batch_size: int = 8 per_device_eval_batch_size: int = 8 per_gpu_train_batch_size: Optional = None per_gpu_eval_batch_size: Optional = None gradient_accumulation_steps: int = 1 eval_accumulation_steps: Optional = None eval_delay: Optional = 0 torch_empty_cache_steps: Optional = None learning_rate: float = 5e-05 weight_decay: float = 0.0 adam_beta1: float = 0.9 adam_beta2: float = 0.999 adam_epsilon: float = 1e-08 max_grad_norm: float = 1.0 num_train_epochs: float = 3.0 max_steps: int = -1 lr_scheduler_type: Union = 'linear' lr_scheduler_kwargs: Union = <factory> warmup_ratio: float = 0.0 warmup_steps: int = 0 log_level: Optional = 'passive' log_level_replica: Optional = 'warning' log_on_each_node: bool = True logging_dir: Optional = None logging_strategy: Union = 'steps' logging_first_step: bool = False logging_steps: float = 500 logging_nan_inf_filter: bool = True save_strategy: Union = 'steps' save_steps: float = 500 save_total_limit: Optional = None save_safetensors: Optional = True save_on_each_node: bool = False save_only_model: bool = False restore_callback_states_from_checkpoint: bool = False no_cuda: bool = False use_cpu: bool = False use_mps_device: bool = False seed: int = 42 data_seed: Optional = None jit_mode_eval: bool = False use_ipex: bool = False bf16: bool = False fp16: bool = False fp16_opt_level: str = 'O1' half_precision_backend: str = 'auto' bf16_full_eval: bool = False fp16_full_eval: bool = False tf32: Optional = None local_rank: int = -1 ddp_backend: Optional = None tpu_num_cores: Optional = None tpu_metrics_debug: bool = False debug: Union = '' dataloader_drop_last: bool = False eval_steps: Optional = None dataloader_num_workers: int = 0 dataloader_prefetch_factor: Optional = None past_index: int = -1 run_name: Optional = None disable_tqdm: Optional = None remove_unused_columns: Optional = True label_names: Optional = None load_best_model_at_end: Optional = False metric_for_best_model: Optional = None greater_is_better: Optional = None ignore_data_skip: bool = False fsdp: Union = '' fsdp_min_num_params: int = 0 fsdp_config: Union = None fsdp_transformer_layer_cls_to_wrap: Optional = None accelerator_config: Union = None deepspeed: Union = None label_smoothing_factor: float = 0.0 optim: Union = 'adamw_torch' optim_args: Optional = None adafactor: bool = False group_by_length: bool = False length_column_name: Optional = 'length' report_to: Union = None ddp_find_unused_parameters: Optional = None ddp_bucket_cap_mb: Optional = None ddp_broadcast_buffers: Optional = None dataloader_pin_memory: bool = True dataloader_persistent_workers: bool = False skip_memory_metrics: bool = True use_legacy_prediction_loop: bool = False push_to_hub: bool = False resume_from_checkpoint: Optional = None hub_model_id: Optional = None hub_strategy: Union = 'every_save' hub_token: Optional = None hub_private_repo: bool = False hub_always_push: bool = False gradient_checkpointing: bool = False gradient_checkpointing_kwargs: Union = None include_inputs_for_metrics: bool = False eval_do_concat_batches: bool = True fp16_backend: str = 'auto' evaluation_strategy: Union = None push_to_hub_model_id: Optional = None push_to_hub_organization: Optional = None push_to_hub_token: Optional = None mp_parameters: str = '' auto_find_batch_size: bool = False full_determinism: bool = False torchdynamo: Optional = None ray_scope: Optional = 'last' ddp_timeout: Optional = 1800 torch_compile: bool = False torch_compile_backend: Optional = None torch_compile_mode: Optional = None dispatch_batches: Optional = None split_batches: Optional = None include_tokens_per_second: Optional = False include_num_input_tokens_seen: Optional = False neftune_noise_alpha: Optional = None optim_target_modules: Union = None batch_eval_metrics: bool = False eval_on_start: bool = False eval_use_gather_object: Optional = False max_length: Optional = None max_prompt_length: Optional = None max_completion_length: Optional = None beta: float = 0.1 desirable_weight: Optional = 1.0 undesirable_weight: Optional = 1.0 label_pad_token_id: int = -100 padding_value: int = None truncation_mode: str = 'keep_end' generate_during_eval: bool = False is_encoder_decoder: Optional = None precompute_ref_log_probs: bool = False model_init_kwargs: Optional = None ref_model_init_kwargs: Optional = None dataset_num_proc: Optional = None loss_type: Literal = 'kto' prompt_sample_size: int = 1024 min_density_ratio: float = 0.5 max_density_ratio: float = 10.0 )

参数

  • max_length (int, 可选, 默认为 None) — 批量中序列的最大长度。如果想要使用默认数据合并器,则需要此参数。
  • max_prompt_length (int, 可选, 默认为 None) — 提示的最大长度。如果想要使用默认数据合并器,则需要此参数。
  • max_completion_length (int, 可选, 默认为 None) — 目标的最大长度。如果想要使用默认的数据合并器并且您的模型是编码器-解码器,则此参数是必需的。
  • beta (float, 默认为 0.1) — KTO损失中的beta因子。较高的beta值意味着更少的与初始策略的偏差。
  • desirable_weight (float, 可选, 默认为 1.0) — 通过此因子对期望的损失进行加权,以平衡期望和不可接受的 对的数量。
  • undesirable_weight (浮点数,可选,默认为 1.0)— 否定损失的加权因子,以抵消理想和不理想配对数量不等的情况。
  • label_pad_token_id (整数,默认为 -100)— 标签填充token ID。如果您想使用默认数据合并程序,则需要此参数。
  • padding_value (整数,默认为 0)— 当与分词器的 pad_token_id 不同时,使用的填充值。
  • truncation_mode (字符串,默认为 keep_end)— 使用裁剪模式,可以是 keep_end 或 keep_start。如果您想使用默认数据合并程序,则需要此参数。
  • generate_during_eval (bool,默认为False) — 是否在评估步骤中对生成进行采样和记录。
  • is_encoder_decoder (Optional[bool]可选,默认为None) — 如果没有提供模型,我们需要知道model_init返回的是编码器-解码器。
  • precompute_ref_log_probs (bool,默认为False) — 用于预计算训练和评估数据集中参考模型对数概率的标志。如果您想在不使用参考模型的训练中减少总GPU内存,这很有用。model_init_kwargs —(Optional[Dict]可选):字符串实例化模型时传递的可选kwargs字典。ref_model_init_kwargs —(《code>Optional[Dict],可选):从字符串实例化参考模型时传递的可选kwargs字典。dataset_num_proc — 《code>Optional[int],可选,默认为《code>None):处理数据集时使用的过程数。loss_type —(《code>Literal["kto", "bco"],可选):要使用的损失类型。默认为KTO损失,或从BCO论文中的损失。prompt_sample_size —(《code>int,默认为1024):提供给密度比分类器的提示数量。min_density_ratio —(《code>float,默认为0.5):密度比的最小值。估计的密度比将夹抓紧这个值。max_density_ratio —(《code>float,默认为10.0):密度比的最大值。估计的密度比将夹抓紧这个值。

KTOConfig收集与KTOTrainer类相关的所有训练参数。

使用 HfArgumentParser,我们可以将这个类转换为 argparse 参数,这些参数可以在命令行中指定。

KTOTrainer

trl.KTOTrainer

< >

( model: 联合体 = None ref_model: 联合体 = None args: KTOConfig = None train_dataset: 可选 = None eval_dataset: 联合体 = None tokenizer: 可选 = None data_collator: 可选 = None model_init: 可选 = None callbacks: 可选 = None optimizers: 元组 = (None, None) preprocess_logits_for_metrics: 可选 = None peft_config: 可选 = None compute_metrics: 可选 = None model_adapter_name: 可选 = None ref_adapter_name: 可选 = None embedding_func: 可选 = None embedding_tokenizer: 可选 = None )

参数

  • model (transformers.PreTrainedModel) — 要训练的模型,最好是 AutoModelForSequenceClassification
  • ref_model (PreTrainedModelWrapper) — Hugging Face Transformer 模型,具有休闲语言建模头部。用于隐式奖励计算和损失。如果没有提供参考模型,训练器将创建与要优化的模型具有相同架构的参考模型。
  • args (KTOConfig) — 用于训练的参数。
  • train_dataset (datasets.Dataset) — 用于训练的数据集。
  • eval_dataset (datasets.Dataset) — 用于评估的数据集。
  • tokenizer (transformers.PreTrainedTokenizerBase) — 用于训练的标记器。如果想要使用默认的数据整理器,此参数是必需的。
  • data_collator (transformers.DataCollator, 可选, 默认为 None) — 用于训练的数据整理器。如果指定为 None,将使用默认的数据整理器(DPODataCollatorWithPadding),它将在给定成对序列的数据集的情况下,将序列填充到批序列的最大长度。
  • model_init (Callable[[], transformers.PreTrainedModel]) — 用于训练的模型初始化器。如果没有指定,将使用默认的模型初始化器。
  • callbacks (List[transformers.TrainerCallback]) — 用于训练的回调函数。
  • optimizers (Tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — 用于训练的优化器和学习率调度器。
  • preprocess_logits_for_metrics (Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — 预处理预测值以用于计算指标的功能。
  • peft_config (Dict, 默认值None) — 用于训练的PEFT配置。如果您传入PEFT配置,则模型将包裹在一个PEFT模型中。
  • disable_dropout (bool, 默认为 True) — 是否在 modelref_model 中禁用dropouts。
  • compute_metrics (Callable[[EvalPrediction], Dict], 可选) — 使用此函数来计算指标。必须接收一个 EvalPrediction 并返回一个包含字符串到指标值的字典。
  • model_adapter_name (str, 默认为 None) — 当使用多个适配器时,LoRA的训练目标PEFT适配器的名称。
  • ref_adapter_name (str, 默认为 None) — 使用 LoRA 与多个适配器时,参考 PEFT 适配器的名称。

初始化 KTOTrainer。

bco_loss

< >

( policy_chosen_logps: FloatTensor policy_rejected_logps: FloatTensor reference_chosen_logps: FloatTensor reference_rejected_logps: FloatTensor chosen_embeddings: Optional rejected_embeddings: Optional ) 四个张量组成的元组

返回

四个张量组成的元组

(失真张量,选定奖励张量,拒绝奖励张量,KL)。损失张量包含批次中每个示例的 KTO 损失。选定奖励张量和拒绝奖励张量分别包含选定和拒绝响应的奖励。delta(变化值)包含所有隐式奖励的移动平均值。

计算策略和参考模型日志概率批次的 BCO 损失。

compute_reference_log_probs

< >

( padded_batch: Dict )

计算KTO特定数据集中单个填充批次的参考模型的日志概率。

evaluation_loop

< >

( dataloader: DataLoader description: str prediction_loss_only: Optional = None ignore_keys: Optional = None metric_key_prefix: str = 'eval' )

覆盖内置评估循环以存储每个批次的指标。预测/评估循环,由Trainer.evaluate()Trainer.predict()共享。

支持有或没有标签的情况。

get_batch_logps

< >

( logits: FloatTensor labels: LongTensor average_log_prob: bool = False label_pad_token_id: int = -100 is_encoder_decoder: bool = False )

计算在给定logits下给定标签的对数概率。

get_batch_loss_metrics

< >

( model batch: Dict )

计算给定批次的训练或测试输入的KTO损失和其他指标。

get_batch_samples

< >

( model batch: Dict )

从给定的输入批次生成模型和参考模型的样本。

get_eval_dataloader

< >

( eval_dataset: 可选 = None )

参数

  • eval_dataset (torch.utils.data.Dataset, 可选) — 如果提供,将覆盖 self.eval_dataset。如果是一个 Dataset,则自动移除不接受 model.forward() 方法的列。必须实现 __len__

返回评估 ~torch.utils.data.DataLoader

是 transformers.src.transformers.trainer.get_eval_dataloader 的子类,用于预先计算 ref_log_probs

get_train_dataloader

< >

( )

返回训练 ~torch.utils.data.DataLoader

是 transformers.src.transformers.trainer.get_train_dataloader 的子类,用于预先计算 ref_log_probs

_kto_loss

< >

( policy_chosen_logps: FloatTensor policy_rejected_logps: FloatTensor policy_KL_logps: FloatTensor reference_chosen_logps: FloatTensor reference_rejected_logps: FloatTensor reference_KL_logps: FloatTensor ) 四个张量组成的元组

返回

四个张量组成的元组

(losses, chosen_rewards, rejected_rewards, KL)。其中,losses 张量包含了批次中每个示例的 KTO 损失。chosen_rewards 和 rejected_rewards 张量分别包含所选择和所拒绝的响应的奖励。KL 张量包含了策略和参考模型之间的分离的 KL 散度估计。

计算策略和参考模型的一批日志概率的 KTO 损失。

日志

< >

( logs: Dict )

参数

  • logs (Dict[str, float]) — 需要记录的值。

在监控训练的各个对象上记录 logs,包括存储的指标。

null_ref_context

< >

( )

处理 null 引用模型的上下文管理器(即 peft 适配器操作)。

ORPOConfig

trl.ORPOConfig

< >

( output_dir: str overwrite_output_dir: bool = False do_train: bool = False do_eval: bool = False do_predict: bool = False eval_strategy: Union = 'no' prediction_loss_only: bool = False per_device_train_batch_size: int = 8 per_device_eval_batch_size: int = 8 per_gpu_train_batch_size: Optional = None per_gpu_eval_batch_size: Optional = None gradient_accumulation_steps: int = 1 eval_accumulation_steps: Optional = None eval_delay: Optional = 0 torch_empty_cache_steps: Optional = None learning_rate: float = 5e-05 weight_decay: float = 0.0 adam_beta1: float = 0.9 adam_beta2: float = 0.999 adam_epsilon: float = 1e-08 max_grad_norm: float = 1.0 num_train_epochs: float = 3.0 max_steps: int = -1 lr_scheduler_type: Union = 'linear' lr_scheduler_kwargs: Union = <factory> warmup_ratio: float = 0.0 warmup_steps: int = 0 log_level: Optional = 'passive' log_level_replica: Optional = 'warning' log_on_each_node: bool = True logging_dir: Optional = None logging_strategy: Union = 'steps' logging_first_step: bool = False logging_steps: float = 500 logging_nan_inf_filter: bool = True save_strategy: Union = 'steps' save_steps: float = 500 save_total_limit: Optional = None save_safetensors: Optional = True save_on_each_node: bool = False save_only_model: bool = False restore_callback_states_from_checkpoint: bool = False no_cuda: bool = False use_cpu: bool = False use_mps_device: bool = False seed: int = 42 data_seed: Optional = None jit_mode_eval: bool = False use_ipex: bool = False bf16: bool = False fp16: bool = False fp16_opt_level: str = 'O1' half_precision_backend: str = 'auto' bf16_full_eval: bool = False fp16_full_eval: bool = False tf32: Optional = None local_rank: int = -1 ddp_backend: Optional = None tpu_num_cores: Optional = None tpu_metrics_debug: bool = False debug: Union = '' dataloader_drop_last: bool = False eval_steps: Optional = None dataloader_num_workers: int = 0 dataloader_prefetch_factor: Optional = None past_index: int = -1 run_name: Optional = None disable_tqdm: Optional = None remove_unused_columns: Optional = True label_names: Optional = None load_best_model_at_end: Optional = False metric_for_best_model: Optional = None greater_is_better: Optional = None ignore_data_skip: bool = False fsdp: Union = '' fsdp_min_num_params: int = 0 fsdp_config: Union = None fsdp_transformer_layer_cls_to_wrap: Optional = None accelerator_config: Union = None deepspeed: Union = None label_smoothing_factor: float = 0.0 optim: Union = 'adamw_torch' optim_args: Optional = None adafactor: bool = False group_by_length: bool = False length_column_name: Optional = 'length' report_to: Union = None ddp_find_unused_parameters: Optional = None ddp_bucket_cap_mb: Optional = None ddp_broadcast_buffers: Optional = None dataloader_pin_memory: bool = True dataloader_persistent_workers: bool = False skip_memory_metrics: bool = True use_legacy_prediction_loop: bool = False push_to_hub: bool = False resume_from_checkpoint: Optional = None hub_model_id: Optional = None hub_strategy: Union = 'every_save' hub_token: Optional = None hub_private_repo: bool = False hub_always_push: bool = False gradient_checkpointing: bool = False gradient_checkpointing_kwargs: Union = None include_inputs_for_metrics: bool = False eval_do_concat_batches: bool = True fp16_backend: str = 'auto' evaluation_strategy: Union = None push_to_hub_model_id: Optional = None push_to_hub_organization: Optional = None push_to_hub_token: Optional = None mp_parameters: str = '' auto_find_batch_size: bool = False full_determinism: bool = False torchdynamo: Optional = None ray_scope: Optional = 'last' ddp_timeout: Optional = 1800 torch_compile: bool = False torch_compile_backend: Optional = None torch_compile_mode: Optional = None dispatch_batches: Optional = None split_batches: Optional = None include_tokens_per_second: Optional = False include_num_input_tokens_seen: Optional = False neftune_noise_alpha: Optional = None optim_target_modules: Union = None batch_eval_metrics: bool = False eval_on_start: bool = False eval_use_gather_object: Optional = False max_length: Optional = None max_prompt_length: Optional = None max_completion_length: Optional = None beta: float = 0.1 disable_dropout: bool = True label_pad_token_id: int = -100 padding_value: int = None truncation_mode: str = 'keep_end' generate_during_eval: bool = False is_encoder_decoder: Optional = None model_init_kwargs: Optional = None dataset_num_proc: Optional = None )

参数

  • max_length (int, 默认为 None) — 批量序列的最大长度。如果您想使用默认数据合并器,则需要此参数。
  • max_prompt_length (int, 默认为 None) — 提示的最大长度。如果您想使用默认数据合并器,则需要此参数。
  • max_completion_length (int, 默认为 None) — 完成内容的最大长度。如果您想使用默认数据合并器并且您的模型是编码器-解码器,则需要此参数。
  • beta (float, 默认为 0.1) — ORPO 损失中的 beta 因子(论文/代码中的 lambda/alpha),表示 SFT 损失中相对损失比重的权重。
  • label_pad_token_id (int, 默认为 -100) — 标签填充标记的 ID。如果您想使用默认数据聚合器,则需要此参数。
  • padding_value (int, 默认为 None) — 当与分词器的 pad_token_id 不同时,用于填充的值。
  • truncation_mode (str, 默认为 keep_end) — 要使用的截断模式,可以是 keep_endkeep_start。如果您想使用默认数据聚合器,则需要此参数。
  • generate_during_eval (布尔值,默认为False) — 在评估步骤是否进行采样和记录生成内容。
  • is_encoder_decoder (Optional[bool],可选,默认为None)— 如果未提供模型,则需要知道model_init返回的是编码器-解码器模型。
  • disable_dropout (布尔值,默认为True)— 是否在model中禁用dropout。
  • model_init_kwargs (Optional[Dict],可选)— 从字符串实例化模型时传递的可选kwargs字典
  • dataset_num_proc (Optional[int], optional) — 用于对数据进行标记的工人数量。默认值为None。

ORPOConfig收集了与ORPOTrainer类相关的所有训练参数。

使用 HfArgumentParser,我们可以将这个类转换为 argparse 参数,这些参数可以在命令行中指定。

ORPOTrainer

trl.ORPOTrainer

< >

( model: 联合体 = Noneargs: 可选 = Nonedata_collator: 可选 = Nonetrain_dataset: 可选 = Noneeval_dataset: 联合体 = Nonetokenizer: 可选 = Nonemodel_init: 可选 = Nonecallbacks: 可选 = Noneoptimizers: 元组 = (None, None)preprocess_logits_for_metrics: 可选 = Nonepeft_config: 可选 = Nonecompute_metrics: 可选 = None )

参数

  • model (transformers.PreTrainedModel) — 用于训练的模型,最好是AutoModelForSequenceClassification
  • args (ORPOConfig) — 用于训练的ORPO配置参数。
  • data_collator (transformers.DataCollator) — 用于训练的数据合器。如果没有指定,将使用默认数据合器(DPODataCollatorWithPadding),将序列填充到批次数组中序列的最大长度。
  • train_dataset (datasets.Dataset) — 用于训练的数据集。
  • eval_dataset (datasets.Dataset) — 用于评估的数据集。
  • tokenizer (transformers.PreTrainedTokenizerBase) — 用于训练的标记器。如果您想使用默认的数据收集器,则此参数是必需的。
  • model_init (Callable[[], transformers.PreTrainedModel]) — 用于训练的模型初始化器。如果指定为None,则将使用默认模型初始化器。
  • callbacks (List[transformers.TrainerCallback]) — 用于训练的回调函数。
  • optimizers (Tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — 使用于训练的优化器和调度器。
  • preprocess_logits_for_metrics (Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — 在计算指标之前对logits进行预处理的函数。
  • peft_config (Dict, 默认为 None) — 使用的 PEFT 配置。如果您传入 PEFT 配置,则将模型包裹在 PEFT 模型中。
  • compute_metrics (Callable[[EvalPrediction], Dict], 可选) — 用于计算指标的功能。必须接受一个 EvalPrediction 并返回具有计量值字符串的字典。

初始化 ORPOTrainer。

构建分词答案

< >

( prompt answer )

lama分词器满足enc(a + b) = enc(a) + enc(b)。它还确保enc(a + b) = enc(a) + enc(a + b)[len(enc(a)):]。参考:https://github.com/EleutherAI/lm-evaluation-harness/pull/531#issuecomment-1595586257

concatenated_forward

< >

( model: 模块 batch: 字典 )

在给定的输入批次上运行指定的模型,将选择的和拒绝的输入一起拼接。

我们这样做是为了避免进行两次正向传递,因为对FSDP来说更快。

concatenated_inputs

< >

( batch: 字典 is_encoder_decoder: 布尔 = False label_pad_token_id: 整数 = -100 padding_value: 整数 = 0 device: 可选 = None )

将选中和拒绝的输入连接成一个单一生成器。

evaluation_loop

< >

( dataloader: DataLoader description: str prediction_loss_only: Optional = None ignore_keys: Optional = None metric_key_prefix: str = 'eval' )

覆盖内置评估循环以存储每个批次的指标。预测/评估循环,由Trainer.evaluate()Trainer.predict()共享。

支持有或没有标签的情况。

get_batch_logps

< >

( logits: FloatTensor labels: LongTensor average_log_prob: bool = False label_pad_token_id: int = -100 is_encoder_decoder: bool = False )

计算在给定logits下给定标签的对数概率。

get_batch_loss_metrics

< >

( model batch: Dict train_eval: Literal = 'train' )

计算给定输入批次的ORPO损失和其他指标(训练或测试)。

get_batch_samples

< >

( model batch: Dict )

从给定的输入批次生成模型和参考模型的样本。

日志

< >

( logs: Dict )

参数

  • logs (Dict[str, float]) — 记录的值。

在监控训练的各个对象上记录 logs,包括存储的指标。

odds_ratio_loss

< >

( policy_chosen_logps: FloatTensor policy_rejected_logps: FloatTensor ) 三个张量元组

返回

三个张量元组

(losses, chosen_rewards, rejected_rewards)。losses 张量包含批次中每个示例的 ORPO 损失值。chosen_rewards 和 rejected_rewards 张量分别包含所选和被拒绝响应的奖励值。记录所选响应与被拒绝响应失真比率的对数。用于记录:log(sigmoid(log_odds_chosen))

为策略和参考模型的对数概率批次计算 ORPO 的概率比率 (OR) 损失。

tokenize_row

< >

( feature model: Union = None )

从 ORPO 特定数据集中提取一行进行标记化。

在此阶段,我们还没有将其转换为PyTorch张量;我们只是处理了截断的情况,如果提示 + 选择或提示 + 拒绝的响应过长。首先我们截断提示;如果我们仍然太长,我们将截断选择的/拒绝的。

我们还创建了选择/拒绝的响应的标签,其长度等于提示和选择的/拒绝的响应长度的总和,提示标记的_id用于提示标记。

PPOConfig

trl.PPOConfig

< >

( exp_name: str = 'doc-buil' seed: int = 0 log_with: Optional = None task_name: Optional = None model_name: Optional = 'gpt2' query_dataset: Optional = 'imdb' reward_model: Optional = 'sentiment-analysis:lvwerra/distilbert-imdb' remove_unused_columns: bool = True tracker_kwargs: Annotated = <factory> accelerator_kwargs: Annotated = <factory> project_kwargs: Annotated = <factory> tracker_project_name: str = 'trl' push_to_hub_if_best_kwargs: Annotated = <factory> steps: int = 20000 learning_rate: float = 1.41e-05 adap_kl_ctrl: bool = True init_kl_coef: Optional = 0.2 kl_penalty: Literal = 'kl' target: Optional = 6 horizon: Optional = 10000 gamma: float = 1 lam: float = 0.95 cliprange: float = 0.2 cliprange_value: float = 0.2 vf_coef: float = 0.1 batch_size: int = 128 forward_batch_size: Optional = None mini_batch_size: int = 128 gradient_accumulation_steps: int = 1 world_size: Annotated = None ppo_epochs: int = 4 max_grad_norm: Optional = None optimize_cuda_cache: Optional = None optimize_device_cache: Optional = False early_stopping: bool = False target_kl: float = 1 compare_steps: int = 1 ratio_threshold: float = 10.0 use_score_scaling: bool = False use_score_norm: bool = False score_clip: Optional = None whiten_rewards: bool = False gradient_checkpointing: bool = False is_encoder_decoder: Optional = None is_peft_model: Optional = None backward_batch_size: Annotated = None global_backward_batch_size: Annotated = None global_batch_size: Annotated = None )

PPOTrainer 配置类

PPOTrainer

trl.PPOTrainer

< >

( config: Optional = None model: Optional = None ref_model: Optional = None tokenizer: Optional = None dataset: Union = None optimizer: Optional = None data_collator: Optional = None num_shared_layers: Optional = None lr_scheduler: Optional = None training_data_collator: Optional = None )

参数

  • **config** (PPOConfig) — PPOTrainer 的配置对象。有关 PPOConfig 的详细信息,请参阅文档。
  • **model** (PreTrainedModelWrapper) — 待优化的模型,包含值头的Hugging Face transformer模型。— 请查看PreTrainedModelWrapper的文档获取更多详细信息。
  • **ref_model** (PreTrainedModelWrapper, 可选) — 用于KL惩罚的参考模型,Hugging Face transformer模型,带有休闲语言建模头。— 请查看PreTrainedModelWrapper的文档获取更多详细信息。如果没有提供参考模型,训练器将使用与待优化模型相同的架构创建一个参考模型,并具有共享层。
  • **tokenizer** (PreTrainedTokenizerBase) — 用于编码数据的分词器。— 请查看transformers.PreTrainedTokenizertransformers.PreTrainedTokenizerFast的文档获取更多详细信息。
  • **dataset** (Union[torch.utils.data.Dataset, datasets.Dataset], 可选) — PyTorch 数据集或 Hugging Face 数据集。用于创建 PyTorch 的数据加载器。如果不提供数据集,数据加载器必须在训练器之外创建。用户需要设计自己的数据加载器,并确保使用的批大小与配置对象中指定的批大小相同。
  • **optimizer** (torch.optim.Optimizer, 可选) — 用于训练的优化器。如果不提供优化器,训练器将使用配置对象中指定的学习率创建 Adam 优化器。
  • **data_collator** (DataCollatorForLanguageModeling, 可选) — 用于训练和传递给数据加载器的数据归一器。
  • **num_shared_layers** (int,可选) — 模型和参考模型之间要共享的层数(如果没有提供参考模型,则为模型本身)。如果没有提供数字,则所有层都将共享。
  • **lr_scheduler** (torch.optim.lr_scheduler,可选) — 用于训练的学习率调度器。

PPOTrainer使用近端策略优化(Proximal Policy Optimization)来优化语言模型。请注意,这个训练器在很大程度上受到以下开源项目的影响:[OpenAI/summarize-from-feedback](https://github.com/openai/summarize-from-feedback)

batched_forward_pass

< >

( model: PreTrainedModelWrapper queries: Tensor responses: Tensor model_inputs: dict return_logits: bool = False response_masks: Optional = None ) (tuple)

参数

  • queries (torch.LongTensor) — 包含编码查询的张量列表,形状为 (batch_size, query_length)
  • responses (torch.LongTensor) — 包含编码响应当量的列表,形状为 (batch_size, response_length)
  • return_logits (bool, optional, defaults to False) — 是否返回所有 logits。如果不需要 logits 以减少内存消耗,则设置为 False

返回

(元组)

  • all_logprobs (torch.FloatTensor):响应的对数概率,形状为 (batch_size, response_length)
  • all_ref_logprobs (torch.FloatTensor):响应的对数概率,形状为 (batch_size, response_length)
  • all_values (torch.FloatTensor):响应的值,形状为 (batch_size, response_length)

在多个批次中计算模型输出。

compute_rewards

< >

( scores: FloatTensor logprobs: FloatTensor ref_logprobs: FloatTensor masks: LongTensor ) torch.FloatTensor

参数

  • 得分 (torch.FloatTensor) — 奖励模型得出的得分,形状为 (batch_size)
  • 对数概率 (torch.FloatTensor) — 模型的对数概率,形状为 (batch_size, response_length)
  • 参考模型对数概率 (torch.FloatTensor) — 参考模型的对数概率,形状为 (batch_size, response_length)

返回

torch.FloatTensor

每段文字的奖励,形状为 (batch_size, response_length) torch.FloatTensor:非得分奖励,形状为 (batch_size, response_length) torch.FloatTensor:KL 惩罚,形状为 (batch_size, response_length)

从得分和 KL 惩罚中计算每段文字的奖励。

创建模型卡片

< >

( path: str model_name: Optional = 'TRL Model' )

参数

  • path (str) — 模型卡片保存的路径。
  • model_name (str, 可选) — 模型名称,默认为 TRL Model

创建并保存 TRL 模型的模型卡片。

gather_stats

< >

( stats ) dict[str, Any]

参数

  • stats (dict[str, Any]) —
  • a dictionary of stats to be gathered. The stats should contain torch tensors. —

返回

dict[str, 任意类型]

A dictionary of stats with the tensors gathered.

Gather stats from all processes. Useful in the context of distributed training.

generate

< >

( query_tensor: Union length_sampler: Optional = None batch_size: int = 4 return_prompt: bool = True generate_ref_response: bool = False **generation_kwargs ) torch.LongTensor

参数

  • query_tensor (torch.LongTensor) — 包含查询标记的形状为 (seq_len) 的张量或 shape 为 (seq_len) 的张量列表。
  • length_sampler (Callable, 可选) — 返回新生成标记数量的可调用对象。
  • batch_size (int, *可选) — 生成时使用的批量大小,默认为 4
  • return_prompt (bool, 可选) — 如果设置为 False,则不返回提示但仅返回新生成的标记,默认为 True
  • generate_ref_response (类型:布尔值,可选) — 如果设置为 True,则同时生成参考响应,默认为 False
  • generation_kwargs (类型:字典[str, Any]) — 生成时的关键字参数。

返回

torch.LongTensor

形状为(batch_sizegen_len)的响应标记张量。

给定查询张量的模型生成响应。调用模型的 generate 方法。

log_stats

< >

( stats: dict batch: dict rewards: List columns_to_log: Iterable = ('query', 'response') )

参数

  • stats (字典[str, Any]) — 训练统计的字典。
  • batch (字典[str, Any]) — 包含查询和响应的批量数据的字典。
  • rewards (列表[torch.FloatTensor]) — 奖励张量。

一个记录所有训练统计的函数。在每个epoch结束时调用它。

损失

< >

( old_logprobs: FloatTensor values: FloatTensor logits: FloatTensor vpreds: FloatTensor logprobs: FloatTensor mask: LongTensor advantages: FloatTensor returns: FloatTensor )

参数

  • old_logprobs (torch.FloatTensor) — 模型的对数概率,形状为 (batch_size, response_length)
  • values (torch.FloatTensor) — 价值头的值,形状为 (batch_size, response_length)
  • rewards (torch.FloatTensor) — 来自奖励模型的奖励,形状为 (batch_size, response_length)
  • logits (torch.FloatTensor) — 模型的logits,形状为 (batch_size, response_length, vocab_size)
  • v_pred (torch.FloatTensor) — 值头的值,形状为 (batch_size, response_length)
  • logprobs (torch.FloatTensor) — 模型的对数概率,形状为 (batch_size, response_length)

计算策略和值损失。

prepare_dataloader

< >

( 数据集: 联合 数据合并器= None ) torch.utils.data.DataLoader

参数

  • 数据集 (Union[torch.utils.data.Dataset, datasets.Dataset]) — PyTorch 数据集或 Hugging Face 数据集。如果传递 Hugging Face 数据集,将预处理数据集,移除模型不使用的列。
  • 数据合并器 (可选[函数]) — 数据合并器函数。

返回

torch.utils.data.DataLoader

PyTorch 数据加载器

为训练准备数据加载器。

记录步骤统计信息

< >

( kl_coef: float **data ) stats (dict)

参数

  • kl_coef (float) — KL 系数
  • data (dict) — 训练步骤数据字典

返回

stats (dict)

训练步骤统计数据字典

记录训练步骤统计信息。

步骤

< >

( queries: 列表 responses: 列表 scores: 列表 response_masks: 可选 = None ) dict[str, Any]

参数

  • queries (Listtorch.LongTensor) — 包含编码查询的张量列表,形状为 (query_length)
  • responses (Listtorch.LongTensor) — 包含编码响应的张量列表,形状为 (response_length)
  • scores (Listtorch.FloatTensor) — 包含得分的张量列表。
  • response_masks (Listtorch.FloatTensor, optional)) — 包含响应标记掩码的张量列表(可选)。

返回

dict[str, 任意类型]

训练统计数据摘要

根据查询列表、模型响应和奖励运行PPO优化步骤。

train_minibatch

< >

( old_logprobs: FloatTensor values: FloatTensor logprobs: FloatTensor logits: FloatTensor vpreds: FloatTensor mask: LongTensor advantages: FloatTensor returns: FloatTensor ) train_stats (dict[str, torch.Tensor])

参数

  • logprobs (torch.FloatTensor) — 模型的对数概率,形状 [mini_batch_size, response_length]
  • values (torch.FloatTensor) — 价值头部的值,形状 [mini_batch_size, response_length]
  • query (torch.LongTensor) — 编码查询,形状 [mini_batch_size, query_length]
  • response (torch.LongTensor) — 编码响应,形状 [mini_batch_size, response_length]
  • model_input (torch.LongTensor) — 查询和响应的拼接,形状 [mini_batch_size, query_length+response_length]

返回

train_stats (dict[str, torch.Tensor])

训练统计字典

训练一个PPO子批量

RewardConfig

class trl.RewardConfig

< >

( output_dir: str overwrite_output_dir: bool = False do_train: bool = False do_eval: bool = False do_predict: bool = False eval_strategy: Union = 'no' prediction_loss_only: bool = False per_device_train_batch_size: int = 8 per_device_eval_batch_size: int = 8 per_gpu_train_batch_size: Optional = None per_gpu_eval_batch_size: Optional = None gradient_accumulation_steps: int = 1 eval_accumulation_steps: Optional = None eval_delay: Optional = 0 torch_empty_cache_steps: Optional = None learning_rate: float = 5e-05 weight_decay: float = 0.0 adam_beta1: float = 0.9 adam_beta2: float = 0.999 adam_epsilon: float = 1e-08 max_grad_norm: float = 1.0 num_train_epochs: float = 3.0 max_steps: int = -1 lr_scheduler_type: Union = 'linear' lr_scheduler_kwargs: Union = <factory> warmup_ratio: float = 0.0 warmup_steps: int = 0 log_level: Optional = 'passive' log_level_replica: Optional = 'warning' log_on_each_node: bool = True logging_dir: Optional = None logging_strategy: Union = 'steps' logging_first_step: bool = False logging_steps: float = 500 logging_nan_inf_filter: bool = True save_strategy: Union = 'steps' save_steps: float = 500 save_total_limit: Optional = None save_safetensors: Optional = True save_on_each_node: bool = False save_only_model: bool = False restore_callback_states_from_checkpoint: bool = False no_cuda: bool = False use_cpu: bool = False use_mps_device: bool = False seed: int = 42 data_seed: Optional = None jit_mode_eval: bool = False use_ipex: bool = False bf16: bool = False fp16: bool = False fp16_opt_level: str = 'O1' half_precision_backend: str = 'auto' bf16_full_eval: bool = False fp16_full_eval: bool = False tf32: Optional = None local_rank: int = -1 ddp_backend: Optional = None tpu_num_cores: Optional = None tpu_metrics_debug: bool = False debug: Union = '' dataloader_drop_last: bool = False eval_steps: Optional = None dataloader_num_workers: int = 0 dataloader_prefetch_factor: Optional = None past_index: int = -1 run_name: Optional = None disable_tqdm: Optional = None remove_unused_columns: Optional = True label_names: Optional = None load_best_model_at_end: Optional = False metric_for_best_model: Optional = None greater_is_better: Optional = None ignore_data_skip: bool = False fsdp: Union = '' fsdp_min_num_params: int = 0 fsdp_config: Union = None fsdp_transformer_layer_cls_to_wrap: Optional = None accelerator_config: Union = None deepspeed: Union = None label_smoothing_factor: float = 0.0 optim: Union = 'adamw_torch' optim_args: Optional = None adafactor: bool = False group_by_length: bool = False length_column_name: Optional = 'length' report_to: Union = None ddp_find_unused_parameters: Optional = None ddp_bucket_cap_mb: Optional = None ddp_broadcast_buffers: Optional = None dataloader_pin_memory: bool = True dataloader_persistent_workers: bool = False skip_memory_metrics: bool = True use_legacy_prediction_loop: bool = False push_to_hub: bool = False resume_from_checkpoint: Optional = None hub_model_id: Optional = None hub_strategy: Union = 'every_save' hub_token: Optional = None hub_private_repo: bool = False hub_always_push: bool = False gradient_checkpointing: bool = False gradient_checkpointing_kwargs: Union = None include_inputs_for_metrics: bool = False eval_do_concat_batches: bool = True fp16_backend: str = 'auto' evaluation_strategy: Union = None push_to_hub_model_id: Optional = None push_to_hub_organization: Optional = None push_to_hub_token: Optional = None mp_parameters: str = '' auto_find_batch_size: bool = False full_determinism: bool = False torchdynamo: Optional = None ray_scope: Optional = 'last' ddp_timeout: Optional = 1800 torch_compile: bool = False torch_compile_backend: Optional = None torch_compile_mode: Optional = None dispatch_batches: Optional = None split_batches: Optional = None include_tokens_per_second: Optional = False include_num_input_tokens_seen: Optional = False neftune_noise_alpha: Optional = None optim_target_modules: Union = None batch_eval_metrics: bool = False eval_on_start: bool = False eval_use_gather_object: Optional = False max_length: Optional = None )

参数

  • max_length (int, optional, defaults to None) — The maximum length of the sequences in the batch. This argument is required if you want to use the default data collator.
  • gradient_checkpointing (bool, optional, defaults to True) — If True, use gradient checkpointing to save memory at the expense of slower backward pass.

RewardConfig收集与RewardTrainer类相关的所有训练参数。

使用 HfArgumentParser,我们可以将这个类转换为 argparse 参数,这些参数可以在命令行中指定。

RewardTrainer

trl.RewardTrainer

< >

( model: Union = None args: Optional = None data_collator: Optional = None train_dataset: Optional = None eval_dataset: Union = None tokenizer: Optional = None model_init: Optional = None compute_metrics: Optional = None callbacks: Optional = None optimizers: Tuple = (None, None) preprocess_logits_for_metrics: Optional = None max_length: Optional = None peft_config: Optional = None )

RewardTrainer可用于训练自定义奖励模型。它是transformers.Trainer类的子类,继承了其所有属性和方法。建议使用AutoModelForSequenceClassification作为奖励模型。奖励模型应在配对示例的数据集上进行训练,每个示例都是一个包含两个序列的元组。奖励模型应被训练来预测这对示例中哪一个与当前任务更相关。

奖励训练器期望数据集具有非常特定的格式。如果未使用默认的RewardDataCollatorWithPadding数据合并器,则数据集应包含至少两个条目。条目应命名为

  • input_ids_chosen
  • attention_mask_chosen
  • input_ids_rejected
  • attention_mask_rejected

可选,您还可以将margin条目传递给数据集。该条目应包含在https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/中概述的边缘,用于调节奖励模型的损失。如果不传递边缘,则不使用边缘。

可视化样本

< >

( num_print_samples: int )

参数

  • num_print_samples (int, 默认为 4) — 打印样本的数量。设置为 -1 以打印所有样本。

可视化奖励模型概率预测

SFTTrainer

trl.SFTTrainer

< >

( model: 联合 = None args: 可选 = None data_collator: 可选 = None train_dataset: 可选 = None eval_dataset: 联合 = None tokenizer: 可选 = None model_init: 可选 = None compute_metrics: 可选 = None callbacks: 可选 = None optimizers: 元组 = (None, None) preprocess_logits_for_metrics: 可选 = None peft_config: 可选 = None dataset_text_field: 可选 = None packing: 可选 = False formatting_func: 可选 = None max_seq_length: 可选 = None infinite: 可选 = None num_of_sequences: 可选 = 1024 chars_per_token: 可选 = 3.6 dataset_num_proc: 可选 = None dataset_batch_size: int = 1000 neftune_noise_alpha: 可选 = None model_init_kwargs: 可选 = None dataset_kwargs: 可选 = None eval_packing: 可选 = None )

参数

  • model (Union[transformers.PreTrainedModel, nn.Module, str]) — 训练的模型,可以是 PreTrainedModeltorch.nn.Module 或是包含模型名称的字符串,用于从缓存或下载中加载。如果向 peft_config 参数传递了 PeftConfig 对象,模型也可以转换为 PeftModel
  • args (可选SFTConfig) — 用于调整训练的参数。如果未提供,则默认为设置 output_dir 为当前目录下以 tmp_trainer 命名的目录的基本实例的 SFTConfig
  • data_collator (可选transformers.DataCollator) — 用于训练的数据合并器。
  • train_dataset(可选datasets.Dataset)—用于训练的数据集。我们建议用户使用trl.trainer.ConstantLengthDataset来创建数据集。
  • eval_dataset(可选[Union[datasets.Dataset, Dict[str, datasets.Dataset]]])—用于评估的数据集。我们建议用户使用trl.trainer.ConstantLengthDataset来创建数据集。
  • tokenizer(可选transformers.PreTrainedTokenizer)—用于训练的标记器。如果未指定,将使用与模型关联的标记器。
  • model_initCallable[[], transformers.PreTrainedModel])—用于训练的模型初始化器。如果指定为None,将使用默认模型初始化器。
  • compute_metrics (Callable[[transformers.EvalPrediction], Dict], 可选默认为None) — 评估期间计算指标的函数。它应该返回一个将指标名称映射到指标值的字典。如果没有指定,则评估期间将只计算损失。
  • callbacks (List[transformers.TrainerCallback]) — 用于训练的回调函数。
  • optimizers (Tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — 用于训练的优化器和调度器。
  • preprocess_logits_for_metrics (Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — 在计算指标之前预处理logits的函数。
  • peft_config (Optional[PeftConfig]) — 使用 PeftConfig 对象初始化 PeftModel 使用的对象。
  • formatting_func (Optional[Callable]) — 用于创建 ConstantLengthDataset 的格式化函数。

监督微调训练器(SFT 训练器)的类定义。该类是对 transformers.Trainer 类的封装,并继承了其所有属性和方法。当用户传递一个 PeftConfig 对象时,训练器将负责正确初始化 PeftModel。

set_seed

trl.set_seed

< >

seed: int

参数

  • seed (int) — 需要设置的种子。

为在 randomnumpytorch 中设置种子而设计的辅助函数,以实现可复现的行为。

< > 在 GitHub 上更新