Transformers 4.37 中文文档(十九)(1)https://developer.aliyun.com/article/1564919
push_to_hub
( commit_message: Optional = 'End of training' blocking: bool = True **kwargs )
参数
commit_message
(str
, 可选, 默认为"End of training"
) — 推送时要提交的消息。blocking
(bool
, 可选, 默认为True
) — 函数是否应该在git push
完成后才返回。kwargs
(Dict[str, Any]
, 可选) — 传递给 create_model_card() 的额外关键字参数。
将 self.model
和 self.tokenizer
上传到 🤗 模型中心,存储库为 self.args.hub_model_id
。
remove_callback
( callback )
参数
回调
(类型
或 TrainerCallback) — 一个 TrainerCallback 类或一个 TrainerCallback 的实例。在第一种情况下,将删除在回调列表中找到的该类的第一个成员。
从当前的 TrainerCallback 列表中删除一个回调。
save_metrics
( split metrics combined = True )
参数
split
(str
) — 模式/拆分名称:train
,eval
,test
,all
中的一个metrics
(Dict[str, float]
) — 从训练/评估/预测返回的指标combined
(bool
, 可选, 默认为True
) — 通过更新all_results.json
创建组合指标,其中包括此调用的指标。
将指标保存到一个 json 文件中,例如 train_results.json
。
在分布式环境下,这仅适用于秩为 0 的进程。
要了解指标,请阅读 log_metrics() 的文档字符串。唯一的区别是原始未格式化的数字保存在当前方法中。
save_model
( output_dir: Optional = None _internal_call: bool = False )
将保存模型,因此您可以使用 from_pretrained()
重新加载它。
仅从主进程保存。
save_state
( )
保存 Trainer 状态,因为 Trainer.save_model 仅保存了模型的 tokenizer
在分布式环境下,这仅适用于秩为 0 的进程。
train
( resume_from_checkpoint: Union = None trial: Union = None ignore_keys_for_eval: Optional = None **kwargs )
参数
resume_from_checkpoint
(str
或bool
, 可选) — 如果是str
,则是由之前的 Trainer 实例保存的本地路径的检查点。如果是bool
并且等于True
,则加载由之前的 Trainer 实例保存在 args.output_dir 中的最后一个检查点。如果存在,训练将从此处加载的模型/优化器/调度器状态恢复。trial
(optuna.Trial
或Dict[str, Any]
, 可选) — 运行试验或用于超参数搜索的超参数字典。ignore_keys_for_eval
(List[str]
, 可选) — 您的模型输出中应在评估期间忽略的键的列表(如果它是一个字典)。kwargs
(Dict[str, Any]
, 可选) — 用于隐藏已弃用参数的附加关键字参数
主要训练入口。
training_step
( model: Module inputs: Dict ) → export const metadata = 'undefined';torch.Tensor
参数
model
(nn.Module
) — 要训练的模型。inputs
(Dict[str, Union[torch.Tensor, Any]]
) — 模型的输入和目标。
字典将在馈送到模型之前解包。大多数模型期望目标在参数labels
下。检查您模型的文档以获取所有接受的参数。
返回
torch.Tensor
这批次的训练损失的张量。
对一批输入执行训练步骤。
子类和覆盖以注入自定义行为。
Seq2SeqTrainer
class transformers.Seq2SeqTrainer
( model: Union = None args: TrainingArguments = 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 )
evaluate
( eval_dataset: Optional = None ignore_keys: Optional = None metric_key_prefix: str = 'eval' **gen_kwargs )
参数
eval_dataset
(Dataset
, 可选) — 如果要覆盖self.eval_dataset
,请传递一个数据集。如果它是一个Dataset,则不被model.forward()
方法接受的列将自动删除。它必须实现__len__
方法。ignore_keys
(List[str]
, 可选) — 您的模型输出中应在收集预测时忽略的键的列表。metric_key_prefix
(str
, 可选, 默认为"eval"
) — 用作指标键前缀的可选前缀。例如,如果前缀是"eval"
(默认),则指标“bleu”将被命名为“eval_bleu”。max_length
(int
, 可选) — 在使用generate
方法进行预测时使用的最大目标长度。num_beams
(int
, 可选) — 在使用generate
方法进行预测时将用于束搜索的束数。1 表示没有束搜索。gen_kwargs — 附加的generate
特定 kwargs。
运行评估并返回指标。
调用脚本将负责提供计算指标的方法,因为它们是任务相关的(将其传递给 init compute_metrics
参数)。
您还可以子类化并覆盖此方法以注入自定义行为。
predict
( test_dataset: Dataset ignore_keys: Optional = None metric_key_prefix: str = 'test' **gen_kwargs )
参数
test_dataset
(Dataset
) — 要在其上运行预测的数据集。如果它是一个Dataset,则不被model.forward()
方法接受的列将自动删除。必须实现__len__
方法ignore_keys
(List[str]
, 可选) — 您的模型输出中应在收集预测时忽略的键的列表。metric_key_prefix
(str
, 可选, 默认为"eval"
) — 用作指标键前缀的可选前缀。例如,如果前缀是"eval"
(默认),则指标“bleu”将被命名为“eval_bleu”。max_length
(int
, 可选) — 在使用generate
方法进行预测时使用的最大目标长度。num_beams
(int
, 可选) — 在使用generate
方法进行预测时将用于束搜索的束数。1 表示没有束搜索。gen_kwargs — 附加的generate
特定 kwargs。
运行预测并返回预测和潜在指标。
根据数据集和您的用例,您的测试数据集可能包含标签。在这种情况下,此方法还将返回指标,就像在evaluate()
中一样。
如果您的预测或标签具有不同的序列长度(例如,因为您在标记分类任务中进行动态填充),则预测将被填充(在右侧)以允许连接成一个数组。填充索引为 -100。
返回: NamedTuple 具有以下键的命名元组:
- predictions (
np.ndarray
): 在test_dataset
上的预测。 - label_ids (
np.ndarray
, optional): 标签(如果数据集包含标签)。 - metrics (
Dict[str, float]
, optional): 潜在的指标字典(如果数据集包含标签)。
TrainingArguments
class transformers.TrainingArguments
( output_dir: str overwrite_output_dir: bool = False do_train: bool = False do_eval: bool = False do_predict: bool = False evaluation_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 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: Optional = <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 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 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: Optional = None fsdp_transformer_layer_cls_to_wrap: Optional = None deepspeed: Optional = 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: Optional = 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: Optional = None include_inputs_for_metrics: bool = False fp16_backend: str = 'auto' 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 = False include_tokens_per_second: Optional = False include_num_input_tokens_seen: Optional = False neftune_noise_alpha: float = None )
参数
output_dir
(str
) — 模型预测和检查点将被写入的输出目录。overwrite_output_dir
(bool
, optional, 默认为False
) — 如果为True
,则覆盖输出目录的内容。使用此选项继续训练,如果output_dir
指向检查点目录。do_train
(bool
, optional, 默认为False
) — 是否运行训练。此参数不会直接被 Trainer 使用,而是用于您的训练/评估脚本。查看 示例脚本 获取更多详细信息。do_eval
(bool
, optional) — 是否在验证集上运行评估。如果evaluation_strategy
与"no"
不同,则将设置为True
。此参数不会直接被 Trainer 使用,而是用于您的训练/评估脚本。查看 示例脚本 获取更多详细信息。do_predict
(bool
, optional, 默认为False
) — 是否在测试集上运行预测。此参数不会直接被 Trainer 使用,而是用于您的训练/评估脚本。查看 示例脚本 获取更多详细信息。evaluation_strategy
(str
或 IntervalStrategy, optional, 默认为"no"
) — 训练期间采用的评估策略。可能的值为:
"no"
: 训练期间不进行评估。"steps"
: 每eval_steps
次进行评估(并记录日志)。"epoch"
: 每个时期结束时进行评估。
prediction_loss_only
(bool
, optional, 默认为False
) — 在进行评估和生成预测时,仅返回损失。per_device_train_batch_size
(int
, optional, 默认为 8) — 用于训练的每个 GPU/XPU/TPU/MPS/NPU 核心/CPU 的批处理大小。per_device_eval_batch_size
(int
, optional, 默认为 8) — 用于评估的每个 GPU/XPU/TPU/MPS/NPU 核心/CPU 的批处理大小。gradient_accumulation_steps
(int
, optional, 默认为 1) — 累积梯度的更新步数,然后执行反向/更新传递。
使用梯度累积时,一个步骤被计为一个带有反向传递的步骤。因此,每gradient_accumulation_steps * xxx_step
训练示例将进行日志记录、评估和保存。eval_accumulation_steps
(int
, optional) — 在将结果移动到 CPU 之前,累积输出张量的预测步数。如果未设置,整个预测将在 GPU/NPU/TPU 上累积后再移动到 CPU(速度更快但需要更多内存)。eval_delay
(float
, optional) — 在进行第一次评估之前等待的时期或步数,取决于evaluation_strategy
。learning_rate
(float
, optional, defaults to 5e-5) — AdamW 优化器的初始学习率。weight_decay
(float
, optional, defaults to 0) — 应用的权重衰减(如果不为零)到 AdamW 优化器中的所有层,除了所有偏置和 LayerNorm 权重。adam_beta1
(float
, optional, defaults to 0.9) — AdamW 优化器的 beta1 超参数。adam_beta2
(float
, optional, defaults to 0.999) — AdamW 优化器的 beta2 超参数。adam_epsilon
(float
, optional, defaults to 1e-8) — AdamW 优化器的 epsilon 超参数。max_grad_norm
(float
, optional, defaults to 1.0) — 最大梯度范数(用于梯度裁剪)。num_train_epochs(float,
optional, defaults to 3.0) — 执行的总训练时代数(如果不是整数,则在停止训练之前执行最后一个时代的小数部分百分比)。max_steps
(int
, optional, defaults to -1) — 如果设置为正数,则执行的总训练步数。覆盖num_train_epochs
。对于有限的数据集,训练通过数据集(如果所有数据都用完)重复进行,直到达到max_steps
。lr_scheduler_type
(str
or SchedulerType, optional, defaults to"linear"
) — 要使用的调度器类型。查看 SchedulerType 的文档以获取所有可能的值。lr_scheduler_kwargs
(‘dict’, optional, defaults to {}) — lr_scheduler 的额外参数。查看每个调度器的文档以获取可能的值。warmup_ratio
(float
, optional, defaults to 0.0) — 用于从 0 线性预热到learning_rate
的总训练步数的比率。warmup_steps
(int
, optional, defaults to 0) — 用于从 0 线性预热到learning_rate
的步骤数。覆盖warmup_ratio
的任何效果。log_level
(str
, optional, defaults topassive
) — 主进程使用的记录器日志级别。可能的选择是字符串形式的日志级别:‘debug’、‘info’、‘warning’、‘error’和’critical’,以及一个’passive’级别,它不设置任何内容,并保持 Transformers 库的当前日志级别(默认为"warning"
)。log_level_replica
(str
, optional, defaults to"warning"
) — 副本使用的记录器日志级别。与log_level
相同的选择。log_on_each_node
(bool
, optional, defaults toTrue
) — 在多节点分布式训练中,是否每个节点使用log_level
进行日志记录,还是仅在主节点上进行。logging_dir
(str
, optional) — TensorBoard 日志目录。默认为 output_dir/runs/CURRENT_DATETIME_HOSTNAME。logging_strategy
(str
or IntervalStrategy, optional, defaults to"steps"
) — 训练期间采用的日志记录策略。可能的值有:
"no"
: 训练期间不进行日志记录。"epoch"
: 每个时代结束时进行日志记录。"steps"
: 每logging_steps
进行日志记录。
logging_first_step
(bool
, optional, defaults toFalse
) — 是否记录和评估第一个global_step
。logging_steps
(int
orfloat
, optional, defaults to 500) — 如果logging_strategy="steps"
,则在两个日志之间的更新步骤数。应为整数或范围为0,1)
的浮点数。如果小于 1,将被解释为总训练步骤的比率。logging_nan_inf_filter
(bool
, optional, defaults toTrue
) — 是否过滤用于记录的nan
和inf
损失。如果设置为True
,则会过滤每个步骤的损失,如果为nan
或inf
,则取当前日志窗口的平均损失。logging_nan_inf_filter
仅影响损失值的记录,不会改变梯度的计算或应用于模型的行为。save_strategy
(str
or [IntervalStrategy, optional, defaults to"steps"
) — 训练期间采用的检查点保存策略。可能的值有:
"no"
: 训练期间不进行保存。"epoch"
: 在每个时期结束时保存。"steps"
: 每save_steps
保存一次。
save_steps
(int
orfloat
, optional, defaults to 500) — 如果save_strategy="steps"
,在两次检查点保存之前的更新步骤数。应为整数或范围为[0,1)
的浮点数。如果小于 1,将被解释为总训练步骤的比率。save_total_limit
(int
, optional) — 如果传递了一个值,将限制检查点的总量。删除output_dir
中的旧检查点。当启用load_best_model_at_end
时,根据metric_for_best_model
的“最佳”检查点将始终保留在最近的检查点之外。例如,对于save_total_limit=5
和load_best_model_at_end
,最后四个检查点将始终与最佳模型一起保留。当save_total_limit=1
和load_best_model_at_end
时,可能保存两个检查点:最后一个和最佳一个(如果它们不同)。save_safetensors
(bool
, optional, defaults toTrue
) — 使用 safetensors 保存和加载状态字典,而不是默认的torch.load
和torch.save
。save_on_each_node
(bool
, optional, defaults toFalse
) — 在进行多节点分布式训练时,是否在每个节点上保存模型和检查点,还是只在主节点上保存。
当不同节点使用相同存储时,不应激活此选项,因为文件将以相同名称保存在每个节点上。save_only_model
(bool
, optional, defaults toFalse
) — 在进行检查点时,是否仅保存模型,还是同时保存优化器、调度器和 rng 状态。请注意,当此选项为 true 时,您将无法从检查点恢复训练。这样可以通过不存储优化器、调度器和 rng 状态来节省存储空间。您只能使用from_pretrained
加载模型,并将此选项设置为True
。use_cpu
(bool
, optional, defaults toFalse
) — 是否使用 cpu。如果设置为 False,将使用 cuda 或 mps 设备(如果可用)。seed
(int
, optional, defaults to 42) — 在训练开始时设置的随机种子。为了确保多次运行的可重现性,请使用~Trainer.model_init
函数来实例化模型,如果模型具有一些随机初始化的参数。data_seed
(int
, optional) — 用于数据采样器的随机种子。如果未设置,用于数据采样的随机生成器将使用与seed
相同的种子。这可用于确保数据采样的可重现性,独立于模型种子。jit_mode_eval
(bool
, optional, defaults toFalse
) — 是否使用 PyTorch jit trace 进行推断。use_ipex
(bool
, optional, defaults toFalse
) — 在可用时使用 PyTorch 的 Intel 扩展。IPEX 安装。bf16
(bool
, optional, defaults toFalse
) — 是否使用 bf16 16 位(混合)精度训练,而不是 32 位训练。需要安培或更高的 NVIDIA 架构,或者使用 CPU(use_cpu)或 Ascend NPU。这是一个实验性 API,可能会更改。fp16
(bool
, optional, defaults toFalse
) — 是否使用 fp16 16 位(混合)精度训练,而不是 32 位训练。fp16_opt_level
(str
, optional, defaults to ‘O1’) — 对于fp16
训练,选择在[‘O0’, ‘O1’, ‘O2’, 和 ‘O3’]中的 Apex AMP 优化级别。有关详细信息,请参阅Apex 文档。fp16_backend
(str
, optional, defaults to"auto"
) — 此参数已弃用。请改用half_precision_backend
。half_precision_backend
(str
, optional, defaults to"auto"
) — 用于混合精度训练的后端。必须是"auto", "apex", "cpu_amp"
之一。"auto"
将根据检测到的 PyTorch 版本使用 CPU/CUDA AMP 或 APEX,而其他选择将强制使用请求的后端。bf16_full_eval
(bool
, optional, defaults toFalse
) — 是否使用完整的 bfloat16 评估,而不是 32 位。这将更快,节省内存,但可能会损害指标值。这是一个实验性 API,可能会更改。fp16_full_eval
(bool
, optional, defaults toFalse
) — 是否使用完整的 float16 评估,而不是 32 位。这将更快,节省内存,但可能会损害指标值。tf32
(bool
, optional) — 是否启用 TF32 模式,适用于安培和更新的 GPU 架构。默认值取决于 PyTorch 版本的torch.backends.cuda.matmul.allow_tf32
默认值。有关更多详细信息,请参阅TF32文档。这是一个实验性 API,可能会更改。local_rank
(int
, optional, defaults to -1`) — 分布式训练过程中进程的排名。ddp_backend
(str
, optional) — 用于分布式训练的后端。必须是"nccl"
,"mpi"
,"ccl"
,"gloo"
,"hccl"
之一。tpu_num_cores
(int
, optional) — 在 TPU 上训练时,TPU 核心的数量(由启动脚本自动传递)。dataloader_drop_last
(bool
, optional, defaults toFalse
) — 是否丢弃最后一个不完整的批次(如果数据集的长度不是批次大小的整数倍)。eval_steps
(int
orfloat
, optional) — 如果evaluation_strategy="steps"
,则两次评估之间的更新步数。如果未设置,将默认为与logging_steps
相同的值。应为范围为0,1)
的整数或浮点数。如果小于 1,则将解释为总训练步数的比率。dataloader_num_workers
(int
, optional, defaults to 0) — 用于数据加载的子进程数(仅适用于 PyTorch)。0 表示数据将在主进程中加载。past_index
(int
, optional, defaults to -1) — 一些模型(如[TransformerXL 或 XLNet)可以利用过去的隐藏状态进行预测。如果将此参数设置为正整数,则
Trainer将使用相应的输出(通常为索引 2)作为过去状态,并在下一个训练步骤中将其作为关键字参数
mems`提供给模型。run_name
(str
, optional) — 运行的描述符。通常用于wandb和mlflow日志记录。disable_tqdm
(bool
, optional) — 是否禁用 Jupyter 笔记本中由~notebook.NotebookTrainingTracker
生成的 tqdm 进度条和指标表。如果日志级别设置为 warn 或更低(默认值),则默认为True
,否则为False
。remove_unused_columns
(bool
, optional, defaults toTrue
) — 是否自动删除模型前向方法未使用的列。label_names
(List[str]
, 可选) — 您的输入字典中与标签对应的键列表。
最终将默认为模型接受的参数名称列表,其中包含单词“label”,除非使用的模型是XxxForQuestionAnswering
之一,那么还将包括["start_positions", "end_positions"]
键。load_best_model_at_end
(bool
, 可选, 默认为False
) — 是否在训练结束时加载找到的最佳模型。启用此选项时,将始终保存最佳检查点。有关更多信息,请参阅save_total_limit
。
当设置为True
时,参数save_strategy
需要与evaluation_strategy
相同,并且在其为 “steps” 的情况下,save_steps
必须是eval_steps
的整数倍。metric_for_best_model
(str
, 可选) — 与load_best_model_at_end
结合使用,指定用于比较两个不同模型的指标。必须是评估返回的指标的名称,带有或不带有前缀"eval_"
。如果未指定且load_best_model_at_end=True
,将默认为"loss"
(使用评估损失)。
如果设置了此值,greater_is_better
将默认为True
。不要忘记,如果您的指标在较低时更好,则将其设置为False
。greater_is_better
(bool
, 可选) — 与load_best_model_at_end
和metric_for_best_model
结合使用,指定更好的模型是否应具有更大的指标。默认为:
- 如果
metric_for_best_model
设置为不是"loss"
或"eval_loss"
的值,则为True
。 - 如果未设置
metric_for_best_model
,或设置为"loss"
或"eval_loss"
,则为False
。
ignore_data_skip
(bool
, 可选, 默认为False
) — 在恢复训练时,是否跳过批次以使数据加载与先前训练中的阶段相同。如果设置为True
,训练将更快开始(因为跳过步骤可能需要很长时间),但不会产生与中断训练相同的结果。fsdp
(bool
,str
或FSDPOption
列表, 可选, 默认为''
) — 使用 PyTorch 分布式并行训练(仅在分布式训练中)。以下是一系列选项:
"full_shard"
: 分片参数、梯度和优化器状态。"shard_grad_op"
: 分片优化器状态和梯度。"hybrid_shard"
: 在节点内应用FULL_SHARD
,并在节点之间复制参数。"hybrid_shard_zero2"
: 在节点内应用SHARD_GRAD_OP
,并在节点之间复制参数。"offload"
: 将参数和梯度卸载到 CPU(仅与"full_shard"
和"shard_grad_op"
兼容)。"auto_wrap"
: 使用default_auto_wrap_policy
自动递归包装层与 FSDP。
fsdp_config
(str
或dict
, 可选) — 用于 fsdp(Pytorch 分布式并行训练)的配置。该值可以是 fsdp json 配置文件的位置(例如,fsdp_config.json
)或已加载的 json 文件作为dict
。配置及其选项列表:
- min_num_params (
int
, 可选, 默认为0
): FSDP 默认自动包装的参数最小数量。 (仅在传递fsdp
字段时有用)。 - transformer_layer_cls_to_wrap (
List[str]
, 可选): 要包装的 transformer 层类名称列表(区分大小写),例如,BertLayer
、GPTJBlock
、T5Block
…(仅在传递fsdp
标志时有用)。 - backward_prefetch (
str
, 可选) FSDP 的后向预取模式。控制何时预取下一组参数(仅在传递fsdp
字段时有用)。以下是一系列选项:
"backward_pre"
: 在当前参数的梯度计算之前,预取下一组参数。"backward_post"
: 在当前参数的梯度计算之后,预取下一组参数。
- forward_prefetch(
bool
,可选,默认为False
)FSDP 的前向预取模式(仅在传递fsdp
字段时有用)。如果为"True"
,则 FSDP 在执行前向传递时明确预取下一个即将到来的全聚集。 - limit_all_gathers(
bool
,可选,默认为False
)FSDP 的 limit_all_gathers(仅在传递fsdp
字段时有用)。如果为"True"
,FSDP 明确同步 CPU 线程,以防止太多的 in-flight all-gathers。 - use_orig_params(
bool
,可选,默认为True
)如果为"True"
,允许在初始化期间使用非均匀的requires_grad
,这意味着支持交替冻结和可训练的参数。在参数高效微调等情况下很有用。请参考这个博客 - sync_module_states(
bool
,可选,默认为True
)如果为"True"
,每个单独包装的 FSDP 单元将从 rank 0 广播模块参数,以确保它们在初始化后在所有 rank 中是相同的 - activation_checkpointing(
bool
,可选,默认为False
):如果为"True"
,激活检查点是一种通过清除某些层的激活并在向后传递期间重新计算它们来减少内存使用的技术。实际上,这是以额外的计算时间换取减少内存使用。 - xla(
bool
,可选,默认为False
):是否使用 PyTorch/XLA 完全分片数据并行训练。这是一个实验性功能,其 API 可能会在未来发生变化。 - xla_fsdp_settings(
dict
,可选)该值是一个存储 XLA FSDP 包装参数的字典。
有关完整的选项列表,请参见这里。 - xla_fsdp_grad_ckpt(
bool
,可选,默认为False
):将在每个嵌套的 XLA FSDP 包装层上使用梯度检查点。此设置仅在将 xla 标志设置为 true 并通过 fsdp_min_num_params 或 fsdp_transformer_layer_cls_to_wrap 指定自动包装策略时才能使用。
deepspeed
(str
或dict
,可选)— 使用Deepspeed。这是一个实验性功能,其 API 可能会在未来发生变化。该值可以是 DeepSpeed json 配置文件的位置(例如,ds_config.json
)或已加载的 json 文件作为dict
”label_smoothing_factor
(float
,可选,默认为 0.0)— 要使用的标签平滑因子。零表示不进行标签平滑,否则底层的 onehot 编码标签将从 0 和 1 更改为label_smoothing_factor/num_labels
和1 - label_smoothing_factor + label_smoothing_factor/num_labels
。debug
(str
或DebugOption
列表,可选,默认为""
)— 启用一个或多个调试功能。这是一个实验性功能。可能的选项包括:
"underflow_overflow"
:检测模型输入/输出中的溢出并报告导致事件的最后帧"tpu_metrics_debug"
:在 TPU 上打印调试指标
- 选项应该用空格分隔。
optim
(str
或training_args.OptimizerNames
,可选,默认为"adamw_torch"
)— 要使用的优化器:adamw_hf、adamw_torch、adamw_torch_fused、adamw_apex_fused、adamw_anyprecision 或 adafactor。optim_args
(str
,可选)— 供 AnyPrecisionAdamW 提供的可选参数。group_by_length
(bool
,可选,默认为False
)— 是否在训练数据集中将大致相同长度的样本分组在一起(以最小化应用的填充并提高效率)。仅在应用动态填充时有用。length_column_name
(str
, optional, defaults to"length"
) — 预先计算长度的列名。如果该列存在,按长度分组将使用这些值而不是在训练启动时计算它们。仅在group_by_length
为True
且数据集是Dataset
的实例时才会被忽略。report_to
(str
orList[str]
, optional, defaults to"all"
) — 报告结果和日志的集成列表。支持的平台有"azure_ml"
、"clearml"
、"codecarbon"
、"comet_ml"
、"dagshub"
、"dvclive"
、"flyte"
、"mlflow"
、"neptune"
、"tensorboard"
和"wandb"
。使用"all"
报告到所有已安装的集成,使用"none"
不报告到任何集成。ddp_find_unused_parameters
(bool
, optional) — 在使用分布式训练时,传递给DistributedDataParallel
的find_unused_parameters
标志的值。如果使用了梯度检查点,则默认为False
,否则为True
。ddp_bucket_cap_mb
(int
, optional) — 在使用分布式训练时,传递给DistributedDataParallel
的bucket_cap_mb
标志的值。ddp_broadcast_buffers
(bool
, optional) — 在使用分布式训练时,传递给DistributedDataParallel
的broadcast_buffers
标志的值。如果使用了梯度检查点,则默认为False
,否则为True
。dataloader_pin_memory
(bool
, optional, defaults toTrue
) — 是否要在数据加载器中固定内存。默认为True
。dataloader_persistent_workers
(bool
, optional, defaults toFalse
) — 如果为 True,则数据加载器在数据集被消耗一次后不会关闭工作进程。这允许保持工作进程的数据集实例处于活动状态。可能会加快训练速度,但会增加内存使用量。默认为False
。skip_memory_metrics
(bool
, optional, defaults toTrue
) — 是否跳过将内存分析器报告添加到指标中。默认情况下会跳过这一步,因为它会减慢训练和评估速度。push_to_hub
(bool
, optional, defaults toFalse
) — 是否在每次保存模型时将模型推送到 Hub。如果激活了此选项,output_dir
将开始一个与仓库同步的 git 目录(由hub_model_id
确定),并且每次触发保存时都会推送内容(取决于您的save_strategy
)。调用 save_model() 也会触发推送。
如果output_dir
存在,则它需要是将 Trainer 将要推送到的仓库的本地克隆。resume_from_checkpoint
(str
, optional) — 您的模型的有效检查点所在文件夹的路径。这个参数不会直接被 Trainer 使用,而是打算由您的训练/评估脚本使用。查看 示例脚本 以获取更多详细信息。hub_model_id
(str
, optional) — 要与本地 output_dir 保持同步的仓库名称。它可以是一个简单的模型 ID,此时模型将被推送到您的命名空间。否则,它应该是整个仓库名称,例如"user_name/model"
,这样您就可以推送到您所属的组织,如"organization_name/model"
。默认为user_name/output_dir_name
,其中 output_dir_name 是output_dir
的名称。
默认为output_dir
的名称。hub_strategy
(str
orHubStrategy
, optional, defaults to"every_save"
) — 定义推送到 Hub 的范围和时间。可能的值有:
"end"
: 当调用 save_model() 方法时,会推送模型、其配置、分词器(如果传递给 Trainer)以及模型卡的草稿。"every_save"
: 每次保存模型时,都会推送模型、其配置、分词器(如果传递给 Trainer)以及模型卡的草稿。推送是异步的,以避免阻塞训练,如果保存非常频繁,则只有在上一个推送完成后才会尝试新的推送。在训练结束时,会使用最终模型进行最后一次推送。"checkpoint"
: 类似于"every_save"
,但最新的检查点也会被推送到名为 last-checkpoint 的子文件夹中,使您可以通过trainer.train(resume_from_checkpoint="last-checkpoint")
轻松恢复训练。"all_checkpoints"
: 类似于"checkpoint"
,但所有检查点都像它们出现在输出文件夹中一样被推送(因此您将在最终存储库中获得一个检查点文件夹)。
hub_token
(str
, optional) — 用于将模型推送到 Hub 的令牌。将默认使用通过huggingface-cli login
获取的缓存文件夹中的令牌。hub_private_repo
(bool
, optional, 默认为False
) — 如果为 True,则 Hub 存储库将设置为私有。hub_always_push
(bool
, optional, 默认为False
) — 除非为True
,否则当上一个推送未完成时,Trainer
将跳过推送检查点。gradient_checkpointing
(bool
, optional, 默认为False
) — 如果为 True,则使用梯度检查点来节省内存,但会导致反向传播速度变慢。gradient_checkpointing_kwargs
(dict
, optional, 默认为None
) — 要传递给gradient_checkpointing_enable
方法的关键字参数。include_inputs_for_metrics
(bool
, optional, 默认为False
) — 是否将输入传递给compute_metrics
函数。这适用于需要输入、预测和参考值进行评分计算的指标类。auto_find_batch_size
(bool
, optional, 默认为False
) — 是否通过指数衰减自动找到适合内存的批处理大小,避免 CUDA 内存不足错误。需要安装 accelerate (pip install accelerate
)。full_determinism
(bool
, optional, 默认为False
) — 如果为True
,将调用 enable_full_determinism() 而不是 set_seed() 以确保在分布式训练中获得可重现的结果。重要提示:这将对性能产生负面影响,因此仅用于调试目的。torchdynamo
(str
, optional) — 如果设置,TorchDynamo 的后端编译器。可能的选择包括"eager"
,"aot_eager"
,"inductor"
,"nvfuser"
,"aot_nvfuser"
,"aot_cudagraphs"
,"ofi"
,"fx2trt"
,"onnxrt"
和"ipex"
。ray_scope
(str
, optional, 默认为"last"
) — 在使用 Ray 进行超参数搜索时要使用的范围。默认情况下,将使用"last"
。然后,Ray 将使用所有试验的最后一个检查点,比较它们,并选择最佳的一个。但是,也有其他选项可用。有关更多选项,请参阅 Ray 文档。ddp_timeout
(int
, 可选, 默认为 1800) —torch.distributed.init_process_group
调用的超时时间,用于避免在分布式运行中执行缓慢操作时出现 GPU 套接字超时。请参考[PyTorch 文档] (pytorch.org/docs/stable/distributed.html#torch.distributed.init_process_group
) 获取更多信息。use_mps_device
(bool
, 可选, 默认为False
) — 此参数已弃用。如果可用,将使用mps
设备,类似于cuda
设备。torch_compile
(bool
, 可选, 默认为False
) — 是否使用 PyTorch 2.0torch.compile
编译模型。
这将使用torch.compile
API的最佳默认值。您可以使用参数torch_compile_backend
和torch_compile_mode
自定义默认值,但我们不能保证它们中的任何一个会起作用,因为支持逐渐在 PyTorch 中推出。
这个标志和整个编译 API 是实验性的,并可能在未来版本中发生变化。torch_compile_backend
(str
, 可选) — 在torch.compile
中使用的后端。如果设置为任何值,torch_compile
将设置为True
。
请参考 PyTorch 文档以获取可能的值,并注意它们可能会随着 PyTorch 版本的变化而改变。
这个标志是实验性的,并可能在未来版本中发生变化。torch_compile_mode
(str
, 可选) — 在torch.compile
中使用的模式。如果设置为任何值,torch_compile
将设置为True
。
请参考 PyTorch 文档以获取可能的值,并注意它们可能会随着 PyTorch 版本的变化而改变。
这个标志是实验性的,并可能在未来版本中发生变化。split_batches
(bool
, 可选) — 是否加速器在分布式训练期间应该将数据加载器产生的批次分配到设备上。如果
设置为True
,实际使用的批量大小将在任何类型的分布式进程上相同,但必须是
将使用您正在使用的进程数量的倍数(例如 GPU)进行四舍五入。include_tokens_per_second
(bool
, 可选) — 是否计算每个设备每秒的标记数以获取训练速度指标。
这将在事先迭代整个训练数据加载器一次,
并且会减慢整个过程。include_num_input_tokens_seen
(bool
, 可选) — 是否跟踪整个训练过程中看到的输入标记数。
在分布式训练中可能会较慢,因为必须调用 gather 操作。neftune_noise_alpha
(Optional[float]
) — 如果不是None
,这将激活 NEFTune 噪声嵌入。这可以极大地提高指令微调的模型性能。查看原始论文和原始代码。支持 transformersPreTrainedModel
和PeftModel
。
TrainingArguments 是我们在示例脚本中使用的与训练循环本身相关的参数的子集。
使用 HfArgumentParser,我们可以将这个类转换为可以在命令行上指定的argparse参数。
Transformers 4.37 中文文档(十九)(3)https://developer.aliyun.com/article/1564924