训练参数¶
SentenceTransformerTrainingArguments¶
- class sentence_transformers.training_args.SentenceTransformerTrainingArguments(output_dir: str, overwrite_output_dir: bool = False, do_train: bool = False, do_eval: bool = False, do_predict: bool = False, eval_strategy: ~transformers.trainer_utils.IntervalStrategy | str = '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: int | None = None, per_gpu_eval_batch_size: int | None = None, gradient_accumulation_steps: int = 1, eval_accumulation_steps: int | None = None, eval_delay: float | None = 0, torch_empty_cache_steps: int | None = 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: ~transformers.trainer_utils.SchedulerType | str = 'linear', lr_scheduler_kwargs: dict | str | None = <factory>, warmup_ratio: float = 0.0, warmup_steps: int = 0, log_level: str | None = 'passive', log_level_replica: str | None = 'warning', log_on_each_node: bool = True, logging_dir: str | None = None, logging_strategy: ~transformers.trainer_utils.IntervalStrategy | str = 'steps', logging_first_step: bool = False, logging_steps: float = 500, logging_nan_inf_filter: bool = True, save_strategy: ~transformers.trainer_utils.IntervalStrategy | str = 'steps', save_steps: float = 500, save_total_limit: int | None = None, save_safetensors: bool | None = 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: int | None = 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: bool | None = None, local_rank: int = -1, ddp_backend: str | None = None, tpu_num_cores: int | None = None, tpu_metrics_debug: bool = False, debug: str | ~typing.List[~transformers.debug_utils.DebugOption] = '', dataloader_drop_last: bool = False, eval_steps: float | None = None, dataloader_num_workers: int = 0, dataloader_prefetch_factor: int | None = None, past_index: int = -1, run_name: str | None = None, disable_tqdm: bool | None = None, remove_unused_columns: bool | None = True, label_names: ~typing.List[str] | None = None, load_best_model_at_end: bool | None = False, metric_for_best_model: str | None = None, greater_is_better: bool | None = None, ignore_data_skip: bool = False, fsdp: ~typing.List[~transformers.trainer_utils.FSDPOption] | str | None = '', fsdp_min_num_params: int = 0, fsdp_config: dict | str | None = None, fsdp_transformer_layer_cls_to_wrap: str | None = None, accelerator_config: dict | str | None = None, deepspeed: dict | str | None = None, label_smoothing_factor: float = 0.0, optim: ~transformers.training_args.OptimizerNames | str = 'adamw_torch', optim_args: str | None = None, adafactor: bool = False, group_by_length: bool = False, length_column_name: str | None = 'length', report_to: None | str | ~typing.List[str] = None, ddp_find_unused_parameters: bool | None = None, ddp_bucket_cap_mb: int | None = None, ddp_broadcast_buffers: bool | None = 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: str | None = None, hub_model_id: str | None = None, hub_strategy: ~transformers.trainer_utils.HubStrategy | str = 'every_save', hub_token: str | None = None, hub_private_repo: bool = False, hub_always_push: bool = False, gradient_checkpointing: bool = False, gradient_checkpointing_kwargs: dict | str | None = None, include_inputs_for_metrics: bool = False, eval_do_concat_batches: bool = True, fp16_backend: str = 'auto', evaluation_strategy: ~transformers.trainer_utils.IntervalStrategy | str | None = None, push_to_hub_model_id: str | None = None, push_to_hub_organization: str | None = None, push_to_hub_token: str | None = None, mp_parameters: str = '', auto_find_batch_size: bool = False, full_determinism: bool = False, torchdynamo: str | None = None, ray_scope: str | None = 'last', ddp_timeout: int | None = 1800, torch_compile: bool = False, torch_compile_backend: str | None = None, torch_compile_mode: str | None = None, dispatch_batches: bool | None = None, split_batches: bool | None = None, include_tokens_per_second: bool | None = False, include_num_input_tokens_seen: bool | None = False, neftune_noise_alpha: float | None = None, optim_target_modules: None | str | ~typing.List[str] = None, batch_eval_metrics: bool = False, eval_on_start: bool = False, use_liger_kernel: bool | None = False, eval_use_gather_object: bool | None = False, batch_sampler: ~sentence_transformers.training_args.BatchSamplers | str = BatchSamplers.BATCH_SAMPLER, multi_dataset_batch_sampler: ~sentence_transformers.training_args.MultiDatasetBatchSamplers | str = MultiDatasetBatchSamplers.PROPORTIONAL)[源代码][源代码]¶
SentenceTransformerTrainingArguments 扩展了 :class:
~transformers.TrainingArguments
,增加了特定于 Sentence Transformers 的额外参数。有关可用参数的完整列表,请参阅 :class:~transformers.TrainingArguments
。- 参数:
output_dir (str) -- 模型检查点将被写入的输出目录。
batch_sampler (Union[
BatchSamplers
, str], optional) -- 要使用的批量采样器。有关有效选项,请参阅 :class:~sentence_transformers.training_args.BatchSamplers
。默认为BatchSamplers.BATCH_SAMPLER
。multi_dataset_batch_sampler (Union[
MultiDatasetBatchSamplers
, str], optional) -- 要使用的多数据集批量采样器。有关有效选项,请参见 :class:~sentence_transformers.training_args.MultiDatasetBatchSamplers
。默认为MultiDatasetBatchSamplers.PROPORTIONAL
。
- property ddp_timeout_delta: timedelta¶
torch.distributed.init_process_group 的实际超时时间,因为它期望一个 timedelta 变量。
- property eval_batch_size: int¶
实际的评估批量大小(在分布式训练中可能与
per_gpu_eval_batch_size
不同)。
- get_process_log_level()¶
根据此进程是否是节点0的主进程、非0节点的主进程或非主进程,返回要使用的日志级别。
对于主进程,日志级别默认设置为所设置的日志级别(如果你没有做任何设置,则为
logging.WARNING
),除非被log_level
参数覆盖。对于副本进程,日志级别默认为
logging.WARNING
,除非被log_level_replica
参数覆盖。主进程和副本进程设置之间的选择是根据
should_log
的返回值来决定的。
- get_warmup_steps(num_training_steps: int)¶
获取用于线性预热的步数。
- property local_process_index¶
使用的本地进程的索引。
- main_process_first(local=True, desc='work')¶
一个用于 torch 分布式环境的上下文管理器,其中需要在主进程上执行某些操作,同时阻塞副本,并在完成后释放副本。
其中一个用途是用于
datasets
的map
功能,为了提高效率,应该在主进程上运行一次,完成后保存结果的缓存版本,然后副本会自动加载该缓存。- 参数:
local (bool, optional, defaults to True) -- 如果
True
,首先意味着每个节点的秩为0的进程;如果False
,首先意味着节点秩为0的秩为0的进程。在多节点环境中使用共享文件系统时,您很可能希望使用local=False
,以便只有第一个节点的主进程进行处理。然而,如果文件系统不是共享的,那么每个节点的主进程都需要进行处理,这是默认行为。desc (str, optional, defaults to "work") -- 用于调试日志的工作描述
- property n_gpu¶
此进程使用的GPU数量。
备注
当有多个GPU可用但未使用分布式训练时,这才会大于1。对于分布式训练,它将始终为1。
- property parallel_mode¶
当前用于并行性的模式,如果有多块GPU/TPU核心可用。以下之一:
ParallelMode.NOT_PARALLEL
: 无并行性(CPU 或单个 GPU)。ParallelMode.NOT_DISTRIBUTED
: 单个进程中的多个GPU(使用torch.nn.DataParallel
)。ParallelMode.DISTRIBUTED
: 多个GPU,每个GPU都有自己的进程(使用torch.nn.DistributedDataParallel
)。ParallelMode.TPU
: 多个 TPU 核心。
- property place_model_on_device¶
可以被继承和重写以进行一些特定的集成。
- property process_index¶
当前进程使用的索引。
- set_dataloader(train_batch_size: int = 8, eval_batch_size: int = 8, drop_last: bool = False, num_workers: int = 0, pin_memory: bool = True, persistent_workers: bool = False, prefetch_factor: int | None = None, auto_find_batch_size: bool = False, ignore_data_skip: bool = False, sampler_seed: int | None = None)¶
一个重新分组所有与数据加载器创建相关参数的方法。
- 参数:
drop_last (bool, optional, defaults to False) -- 是否丢弃最后一个不完整的批次(如果数据集的长度不能被批次大小整除)。
num_workers (int, optional, defaults to 0) -- 用于数据加载的子进程数量(仅限 PyTorch)。0 表示数据将在主进程中加载。
pin_memory (bool, optional, defaults to True) -- 无论你是否想在数据加载器中固定内存。默认为
True
。persistent_workers (bool, optional, defaults to False) -- 如果为 True,数据加载器在数据集被消费一次后不会关闭工作进程。这允许保持工作进程的数据集实例存活。可能会加快训练速度,但会增加 RAM 使用量。默认值为
False
。prefetch_factor (int, optional) -- 每个工作线程预加载的批次数量。2 表示所有工作线程总共会预取 2 * num_workers 个批次。
auto_find_batch_size (bool, optional, defaults to False) -- 是否通过指数衰减自动找到适合内存的批量大小,以避免 CUDA 内存不足错误。需要安装 accelerate (
pip install accelerate
)。ignore_data_skip (bool, optional, defaults to False) -- 恢复训练时,是否跳过轮次和批次以使数据加载处于与之前训练相同的阶段。如果设置为
True
,训练将更快开始(因为跳过步骤可能需要很长时间),但不会产生与中断训练相同的结果。sampler_seed (int, optional) -- 用于数据采样器的随机种子。如果未设置,数据采样的随机生成器将使用与
self.seed
相同的种子。这可以用于确保数据采样的可重复性,与模型种子无关。
示例:
```py >>> from transformers import TrainingArguments
>>> args = TrainingArguments("working_dir") >>> args = args.set_dataloader(train_batch_size=16, eval_batch_size=64) >>> args.per_device_train_batch_size 16 ```
- set_evaluate(strategy: str | IntervalStrategy = 'no', steps: int = 500, batch_size: int = 8, accumulation_steps: int | None = None, delay: float | None = None, loss_only: bool = False, jit_mode: bool = False)¶
一个重新组合所有与评估相关参数的方法。
- 参数:
strategy (str or [~trainer_utils.IntervalStrategy], optional, defaults to "no") -- 训练期间采用的评估策略。可能的值有: -
"no"
:训练期间不进行评估。 -"steps"
:每steps
进行一次评估(并记录)。 -"epoch"
:每个 epoch 结束时进行评估。 设置strategy
不同于"no"
将把self.do_eval
设置为True
。steps (int, optional, defaults to 500) -- 如果
strategy="steps"
,则在两次评估之间更新的步数。batch_size (int optional, defaults to 8) -- 用于评估的每个设备(GPU/TPU 核心/CPU...)的批量大小。
accumulation_steps (int, optional) -- 在将输出张量结果转移到CPU之前,累积预测步骤的数量。如果未设置,整个预测结果将在转移到CPU之前在GPU/TPU上累积(速度更快但需要更多内存)。
delay (float, optional) -- 根据 eval_strategy,在执行第一次评估之前需要等待的 epoch 数或步数。
loss_only (bool, optional, defaults to False) -- 忽略所有输出,除了损失。
jit_mode (bool, optional) -- 是否在推理时使用 PyTorch jit 跟踪。
示例:
```py >>> from transformers import TrainingArguments
>>> args = TrainingArguments("working_dir") >>> args = args.set_evaluate(strategy="steps", steps=100) >>> args.eval_steps 100 ```
- set_logging(strategy: str | IntervalStrategy = 'steps', steps: int = 500, report_to: str | List[str] = 'none', level: str = 'passive', first_step: bool = False, nan_inf_filter: bool = False, on_each_node: bool = False, replica_level: str = 'passive')¶
一个重新分组所有与日志记录相关参数的方法。
- 参数:
strategy (str or [~trainer_utils.IntervalStrategy], optional, defaults to "steps") -- 训练期间采用的日志记录策略。可能的值有: -
"no"
:训练期间不进行日志记录。 -"epoch"
:在每个epoch结束时进行日志记录。 -"steps"
:每logging_steps
进行一次日志记录。steps (int, optional, defaults to 500) -- 如果
strategy="steps"
,两次日志之间的更新步骤数。level (str, optional, defaults to "passive") -- 主进程使用的日志级别。可能的选择是字符串形式的日志级别:
"debug"
、"info"
、"warning"
、"error"
和"critical"
,以及一个"passive"
级别,它不设置任何内容,让应用程序设置级别。report_to (str or List[str], optional, defaults to "all") -- 报告结果和日志的集成列表。支持的平台有
"azure_ml"
、"clearml"
、"codecarbon"
、"comet_ml"
、"dagshub"
、"dvclive"
、"flyte"
、"mlflow"
、"neptune"
、"tensorboard"
和"wandb"
。使用"all"
报告所有已安装的集成,使用"none"
不进行任何集成。first_step (bool, optional, defaults to False) -- 是否记录并评估第一个
global_step
。nan_inf_filter (bool, optional, defaults to True) -- 是否过滤日志中的
nan
和inf
损失。如果设置为True
,则过滤掉每个步骤中为nan
或inf
的损失,并取当前日志窗口的平均损失代替。nan_inf_filter
仅影响损失值的日志记录,它不会改变梯度计算或应用于模型的行为。on_each_node (bool, optional, defaults to True) -- 在多节点分布式训练中,是否每个节点都使用
log_level
进行日志记录,还是仅在主节点上进行。replica_level (str, optional, defaults to "passive") -- 副本上使用的日志记录级别。与
log_level
相同的选项。
示例:
```py >>> from transformers import TrainingArguments
>>> args = TrainingArguments("working_dir") >>> args = args.set_logging(strategy="steps", steps=100) >>> args.logging_steps 100 ```
- set_lr_scheduler(name: str | SchedulerType = 'linear', num_epochs: float = 3.0, max_steps: int = -1, warmup_ratio: float = 0, warmup_steps: int = 0)¶
一个重新组合所有与学习率调度器及其超参数相关的参数的方法。
- 参数:
name (str or [SchedulerType], optional, defaults to "linear") -- 要使用的调度器类型。查看 [
SchedulerType
] 的文档以获取所有可能的值。num_epochs (float, optional, defaults to 3.0) -- 要执行的训练总周期数(如果不是整数,将在停止训练前执行最后一个周期的百分比部分)。
max_steps (int, optional, defaults to -1) -- 如果设置为一个正数,表示要执行的总训练步数。覆盖
num_train_epochs
。对于有限的数据集,训练会在数据集上重复进行(如果所有数据都被耗尽),直到达到max_steps
。warmup_ratio (float, optional, defaults to 0.0) -- 从0到
learning_rate
的线性预热所使用的总训练步数的比例。warmup_steps (int, optional, defaults to 0) -- 用于从0线性预热到
learning_rate
的步数。覆盖warmup_ratio
的任何效果。
示例:
```py >>> from transformers import TrainingArguments
>>> args = TrainingArguments("working_dir") >>> args = args.set_lr_scheduler(name="cosine", warmup_ratio=0.05) >>> args.warmup_ratio 0.05 ```
- set_optimizer(name: str | OptimizerNames = 'adamw_torch', learning_rate: float = 5e-05, weight_decay: float = 0, beta1: float = 0.9, beta2: float = 0.999, epsilon: float = 1e-08, args: str | None = None)¶
一个重组与优化器及其超参数相关所有参数的方法。
- 参数:
name (str or [training_args.OptimizerNames], optional, defaults to "adamw_torch") -- 要使用的优化器:
"adamw_hf"
、"adamw_torch"
、"adamw_torch_fused"
、"adamw_apex_fused"
、"adamw_anyprecision"
或"adafactor"
。learning_rate (float, optional, defaults to 5e-5) -- 初始学习率。
weight_decay (float, optional, defaults to 0) -- 应用于所有层(除所有偏置和LayerNorm权重外)的权重衰减(如果不为零)。
beta1 (float, optional, defaults to 0.9) -- adam优化器或其变体的beta1超参数。
beta2 (float, optional, defaults to 0.999) -- adam优化器或其变体的beta2超参数。
epsilon (float, optional, defaults to 1e-8) -- adam优化器或其变体的epsilon超参数。
args (str, optional) -- 可选参数,提供给AnyPrecisionAdamW(仅在
optim="adamw_anyprecision"
时有效)。
示例:
```py >>> from transformers import TrainingArguments
>>> args = TrainingArguments("working_dir") >>> args = args.set_optimizer(name="adamw_torch", beta1=0.8) >>> args.optim 'adamw_torch' ```
- set_push_to_hub(model_id: str, strategy: str | HubStrategy = 'every_save', token: str | None = None, private_repo: bool = False, always_push: bool = False)¶
一个重新分组所有与同步检查点与Hub相关的参数的方法。
<Tip>
调用此方法将设置
self.push_to_hub
为True
,这意味着output_dir
将开始与仓库(由model_id
决定)同步的 git 目录,并且每次触发保存时内容将被推送(取决于你的self.save_strategy
)。调用 [~Trainer.save_model
] 也会触发推送。</Tip>
- 参数:
model_id (str) -- 用于与本地 output_dir 保持同步的仓库名称。它可以是一个简单的模型ID,在这种情况下,模型将被推送到您的命名空间。否则,它应该是完整的仓库名称,例如
"user_name/model"
,这允许您将模型推送到您所属的组织,例如"organization_name/model"
。strategy (str or [~trainer_utils.HubStrategy], optional, defaults to "every_save") -- 定义了推送到Hub的内容和时间范围。可能的值有: -
"end"
:当调用[~Trainer.save_model
]方法时,推送模型、其配置、分词器(如果传递给[Trainer
])和模型卡的草稿。 -"every_save"
:每次保存模型时,推送模型、其配置、分词器(如果传递给[Trainer
])和模型卡的草稿。推送是异步的,以避免阻塞训练,如果保存非常频繁,只有在之前的推送完成后才会尝试新的推送。训练结束时,会用最终模型进行最后一次推送。 -"checkpoint"
:类似于"every_save"
,但最新的检查点也会被推送到名为last-checkpoint的子文件夹中,允许你使用trainer.train(resume_from_checkpoint="last-checkpoint")
轻松恢复训练。 -"all_checkpoints"
:类似于"checkpoint"
,但所有检查点都会像它们在输出文件夹中出现的那样被推送(因此你将在最终仓库中得到每个文件夹对应一个检查点文件夹)。token (str, optional) -- 用于将模型推送到 Hub 的令牌。默认使用通过
huggingface-cli login
获取的缓存文件夹中的令牌。private_repo (bool, optional, defaults to False) -- 如果为 True,Hub 仓库将被设置为私有。
always_push (bool, optional, defaults to False) -- 除非这是
True
,否则Trainer
会在上一次推送未完成时跳过推送检查点。
示例:
```py >>> from transformers import TrainingArguments
>>> args = TrainingArguments("working_dir") >>> args = args.set_push_to_hub("me/awesome-model") >>> args.hub_model_id 'me/awesome-model' ```
- set_save(strategy: str | IntervalStrategy = 'steps', steps: int = 500, total_limit: int | None = None, on_each_node: bool = False)¶
一个重新分组所有与检查点保存相关参数的方法。
- 参数:
strategy (str or [~trainer_utils.IntervalStrategy], optional, defaults to "steps") -- 训练期间采用的检查点保存策略。可能的值有: -
"no"
:训练期间不保存。 -"epoch"
:每个epoch结束时保存。 -"steps"
:每save_steps
保存一次。steps (int, optional, defaults to 500) -- 如果
strategy="steps"
,则在两次检查点保存之前的更新步骤数。total_limit (int, optional) -- 如果传递了一个值,将限制检查点的总数。删除
output_dir
中较旧的检查点。on_each_node (bool, optional, defaults to False) -- 在进行多节点分布式训练时,是否在每个节点上保存模型和检查点,还是仅在主节点上保存。当不同节点使用相同的存储时,不应激活此功能,因为每个节点将使用相同的名称保存文件。
示例:
```py >>> from transformers import TrainingArguments
>>> args = TrainingArguments("working_dir") >>> args = args.set_save(strategy="steps", steps=100) >>> args.save_steps 100 ```
- set_testing(batch_size: int = 8, loss_only: bool = False, jit_mode: bool = False)¶
一种重新组合与在保留数据集上测试相关的所有基本参数的方法。
<Tip>
调用此方法将自动将
self.do_predict
设置为True
。</Tip>
- 参数:
batch_size (int optional, defaults to 8) -- 用于测试的每个设备(GPU/TPU 核心/CPU...)的批量大小。
loss_only (bool, optional, defaults to False) -- 忽略所有输出,除了损失。
jit_mode (bool, optional) -- 是否在推理时使用 PyTorch jit 跟踪。
示例:
```py >>> from transformers import TrainingArguments
>>> args = TrainingArguments("working_dir") >>> args = args.set_testing(batch_size=32) >>> args.per_device_eval_batch_size 32 ```
- set_training(learning_rate: float = 5e-05, batch_size: int = 8, weight_decay: float = 0, num_epochs: float = 3, max_steps: int = -1, gradient_accumulation_steps: int = 1, seed: int = 42, gradient_checkpointing: bool = False)¶
一个重新组合所有与训练相关基本参数的方法。
<Tip>
调用此方法将自动将
self.do_train
设置为True
。</Tip>
- 参数:
learning_rate (float, optional, defaults to 5e-5) -- 优化器的初始学习率。
batch_size (int optional, defaults to 8) -- 用于训练的每个设备(GPU/TPU 核心/CPU...)的批量大小。
weight_decay (float, optional, defaults to 0) -- 在优化器中,对所有层(除了所有偏置和LayerNorm权重)应用的权重衰减(如果不为零)。
num_train_epochs (float, optional, defaults to 3.0) -- 要执行的训练总周期数(如果不是整数,将在停止训练前执行最后一个周期的百分比部分)。
max_steps (int, optional, defaults to -1) -- 如果设置为一个正数,表示要执行的总训练步数。覆盖
num_train_epochs
。对于有限的数据集,训练会在数据集上重复进行(如果所有数据都被耗尽),直到达到max_steps
。gradient_accumulation_steps (int, optional, defaults to 1) -- 在执行反向/更新传递之前,累积梯度的更新步骤数。
当使用梯度累积时,一步被计为一次反向传递的一步。因此,日志记录、评估、保存将在每 gradient_accumulation_steps * xxx_step
训练样本后进行。seed (int, optional, defaults to 42) -- 将在训练开始时设置的随机种子。为了确保跨运行的一致性,如果模型有一些随机初始化的参数,请使用 [
~Trainer.model_init
] 函数来实例化模型。gradient_checkpointing (bool, optional, defaults to False) -- 如果为真,使用梯度检查点来节省内存,但会以较慢的反向传递为代价。
示例:
```py >>> from transformers import TrainingArguments
>>> args = TrainingArguments("working_dir") >>> args = args.set_training(learning_rate=1e-4, batch_size=32) >>> args.learning_rate 1e-4 ```
- property should_log¶
当前进程是否应生成日志。
- property should_save¶
当前进程是否应该写入磁盘,例如,保存模型和检查点。
- to_dict()¶
序列化此实例,同时将
Enum
替换为其值(以支持 JSON 序列化)。它通过移除其值来混淆令牌值。
- to_json_string()¶
将此实例序列化为 JSON 字符串。
- to_sanitized_dict() Dict[str, Any] ¶
用于 TensorBoard 的 hparams 的净化序列化
- property train_batch_size: int¶
实际的训练批次大小(在分布式训练中可能与
per_gpu_train_batch_size
不同)。
- property world_size¶
并行使用的进程数。