Transformers 4.37 中文文档(十九)(3)https://developer.aliyun.com/article/1564924
Seq2SeqTrainingArguments
class transformers.Seq2SeqTrainingArguments
( 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 sortish_sampler: bool = False predict_with_generate: bool = False generation_max_length: Optional = None generation_num_beams: Optional = None generation_config: Union = 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
, 可选) — 在将结果移动到 CPU 之前,累积输出张量的预测步数。如果未设置,整个预测将在 GPU/NPU/TPU 上累积后再移动到 CPU(更快但需要更多内存)。eval_delay
(float
, 可选) — 在进行第一次评估之前等待的周期数或步数,具体取决于 evaluation_strategy。learning_rate
(float
, 可选, 默认为 5e-5) — AdamW 优化器的初始学习率。weight_decay
(float
, 可选, 默认为 0) — 要应用的权重衰减(如果不为零)到所有层,除了 AdamW 优化器中的所有偏置和 LayerNorm 权重。adam_beta1
(float
, 可选, 默认为 0.9) — AdamW 优化器的 beta1 超参数。adam_beta2
(float
, 可选, 默认为 0.999) — AdamW 优化器的 beta2 超参数。adam_epsilon
(float
, 可选, 默认为 1e-8) — AdamW 优化器的 epsilon 超参数。max_grad_norm
(float
, 可选, 默认为 1.0) — 最大梯度范数(用于梯度裁剪)。num_train_epochs(float,
可选, 默认为 3.0) — 要执行的总训练周期数(如果不是整数,则在停止训练之前执行最后一个周期的小数部分百分比)。max_steps
(int
, 可选, 默认为 -1) — 如果设置为正数,则执行的总训练步数。覆盖num_train_epochs
。对于有限的数据集,如果所有数据都用完,则通过数据集重新进行训练,直到达到max_steps
。lr_scheduler_type
(str
或 SchedulerType, 可选, 默认为"linear"
) — 要使用的调度器类型。查看 SchedulerType 的文档以获取所有可能的值。lr_scheduler_kwargs
(‘dict’, 可选, 默认为 {}) — lr_scheduler 的额外参数。查看每个调度器的文档以获取可能的值。warmup_ratio
(float
, 可选, 默认为 0.0) — 用于从 0 到learning_rate
进行线性预热的总训练步数的比率。warmup_steps
(int
, 可选, 默认为 0) — 用于从 0 到learning_rate
进行线性预热的步数。覆盖任何warmup_ratio
的效果。log_level
(str
, 可选, 默认为passive
) — 要在主进程上使用的记录器日志级别。可能的选择是字符串形式的日志级别:‘debug’、‘info’、"warning"
、‘error’ 和 ‘critical’,以及一个passive
级别,它不设置任何内容并保持 Transformers 库的当前日志级别(默认为"warning"
)。log_level_replica
(str
, 可选, 默认为"warning"
) — 用于副本的记录器日志级别。与log_level
相同的选择”log_on_each_node
(bool
, 可选, 默认为True
) — 在多节点分布式训练中,是否每个节点使用log_level
进行记录,或仅在主节点上进行记录。logging_dir
(str
, 可选) — TensorBoard 日志目录。将默认为 output_dir/runs/CURRENT_DATETIME_HOSTNAME。logging_strategy
(str
或 IntervalStrategy,可选,默认为"steps"
) — 训练过程中采用的日志记录策略。可能的取值有:
"no"
: 训练过程中不进行日志记录。"epoch"
: 每个时代结束时进行日志记录。"steps"
: 每logging_steps
步进行日志记录。
logging_first_step
(bool
,可选,默认为False
) — 是否记录和评估第一个global_step
。logging_steps
(int
或float
,可选,默认为 500) — 如果logging_strategy="steps"
,则在两次日志之间的更新步数。应为整数或范围为0,1)
的浮点数。如果小于 1,则将被解释为总训练步数的比率。logging_nan_inf_filter
(bool
,可选,默认为True
) — 是否过滤用于记录的nan
和inf
损失。如果设置为True
,则会过滤每个步骤的损失值为nan
或inf
,并取当前日志窗口的平均损失值。logging_nan_inf_filter
仅影响损失值的记录,不会改变梯度的计算或应用于模型的行为。save_strategy
(str
或 [IntervalStrategy,可选,默认为"steps"
) — 训练过程中采用的检查点保存策略。可能的取值有:
"no"
: 训练过程中不进行保存。"epoch"
: 每个时代结束时保存。"steps"
: 每save_steps
步保存一次。
save_steps
(int
或float
,可选,默认为 500) — 如果save_strategy="steps"
,则在两次检查点保存之间的更新步数。应为整数或范围为[0,1)
的浮点数。如果小于 1,则将被解释为总训练步数的比率。save_total_limit
(int
,可选) — 如果传递了一个值,将限制检查点的总量。删除output_dir
中的旧检查点。当启用load_best_model_at_end
时,“最佳”检查点始终会保留,而且还会保留最近的检查点。例如,对于save_total_limit=5
和load_best_model_at_end
,最后四个检查点将始终与最佳模型一起保留。当save_total_limit=1
和load_best_model_at_end
时,可能保存两个检查点:最后一个和最佳一个(如果它们不同)。save_safetensors
(bool
,可选,默认为True
) — 使用 safetensors 保存和加载状态字典,而不是默认的torch.load
和torch.save
。save_on_each_node
(bool
,可选,默认为False
) — 在进行多节点分布式训练时,是否在每个节点上保存模型和检查点,还是仅在主节点上保存。
当不同节点使用相同存储时,不应激活此选项,因为文件将以相同名称保存在每个节点上。save_only_model
(bool
,可选,默认为False
) — 在检查点时,是否仅保存模型,还是同时保存优化器、调度器和 RNG 状态。请注意,当此选项为真时,您将无法从检查点恢复训练。这样可以通过不存储优化器、调度器和 RNG 状态来节省存储空间。您只能使用from_pretrained
加载模型,并将此选项设置为True
。use_cpu
(bool
,可选,默认为False
) — 是否使用 CPU。如果设置为 False,将使用 cuda 或 mps 设备(如果可用)。seed
(int
,可选,默认为 42) — 在训练开始时设置的随机种子。为了确保跨运行的可重现性,请使用~Trainer.model_init
函数来实例化模型,如果模型具有一些随机初始化的参数。data_seed
(int
, optional) — 用于数据采样的随机种子。如果未设置,数据采样的随机生成器将使用与seed
相同的种子。这可用于确保数据采样的可重现性,与模型种子无关。jit_mode_eval
(bool
, optional, defaults toFalse
) — 是否使用 PyTorch jit 跟踪进行推断。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 模式,适用于 Ampere 和更新的 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]
, optional) — 您的输入字典中对应于标签的键列表。
最终将默认为模型接受的参数名称列表,其中包含单词“label”,除非使用的模型是XxxForQuestionAnswering
之一,在这种情况下还将包括["start_positions", "end_positions"]
键。load_best_model_at_end
(bool
, optional, defaults toFalse
) — 是否在训练结束时加载训练过程中找到的最佳模型。启用此选项时,最佳检查点将始终被保存。更多信息请参见save_total_limit
。
设置为True
时,参数save_strategy
需要与evaluation_strategy
相同,如果是“steps”,则save_steps
必须是eval_steps
的整数倍。metric_for_best_model
(str
, optional) — 与load_best_model_at_end
一起使用,指定用于比较两个不同模型的度量标准。必须是评估返回的度量的名称,带有或不带有前缀"eval_"
。如果未指定且load_best_model_at_end=True
(使用评估损失),将默认为"loss"
。
如果设置了此值,greater_is_better
将默认为True
。如果您的度量标准较低时更好,请不要忘记将其设置为False
。greater_is_better
(bool
, optional) — 与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
, optional, defaults toFalse
) — 恢复训练时,是否跳过批次和轮次以使数据加载与先前训练的阶段相同。如果设置为True
,训练将更快开始(因为跳过步骤可能需要很长时间),但不会产生与中断训练相同的结果。fsdp
(bool
,str
or list ofFSDPOption
, optional, defaults to''
) — 使用 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
ordict
, optional) — 用于 fsdp(Pytorch 分布式并行训练)的配置。该值可以是 fsdp json 配置文件的位置(例如,fsdp_config.json
)或已加载的 json 文件作为dict
。配置及其选项列表:
- min_num_params (
int
, optional, defaults to0
): 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 会在前向传递中显式预取下一个即将到来的 all-gather。 - 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
,这意味着支持交替冻结和可训练参数。在参数高效微调等情况下非常有用。请参考此[博客](dev-discuss.pytorch.org/t/rethinking-pytorch-fully-sharded-data-parallel-fsdp-from-first-principles/1019
- 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
ortraining_args.OptimizerNames
, optional, defaults to"adamw_torch"
) — 要使用的优化器:adamw_hf、adamw_torch、adamw_torch_fused、adamw_apex_fused、adamw_anyprecision 或 adafactor。optim_args
(str
, optional) — 提供给 AnyPrecisionAdamW 的可选参数。group_by_length
(bool
, optional, defaults toFalse
) — 是否在训练数据集中将大致相同长度的样本分组在一起(以最小化填充并提高效率)。仅在应用动态填充时有用。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,则数据加载器在数据集被消耗一次后不会关闭工作进程。这允许保持工作人员数据集实例的活动状态。可能会加快训练速度,但会增加 RAM 使用量。默认为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
或HubStrategy
, optional, 默认为"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
,可选,默认为"last"
)— 在使用 Ray 进行超参数搜索时要使用的范围。默认情况下,将使用"last"
。然后,Ray 将使用所有试验的最后一个检查点,进行比较并选择最佳的一个。但也有其他选项可用。查看Ray 文档以获取更多选项。ddp_timeout
(int
,可选,默认为 1800)—torch.distributed.init_process_group
调用的超时时间,用于避免在分布式运行中执行缓慢操作时发生 GPU 套接字超时。请参考 PyTorch 文档)以获取更多信息。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 噪声嵌入。这可以极大地提高指导微调的模型性能。查看原始论文和原始代码。支持 transformers 的PreTrainedModel
和 peft 的PeftModel
。sortish_sampler
(bool
,可选,默认为False
)— 是否使用sortish sampler。目前仅在底层数据集为Seq2SeqDataset时才可能,但将在不久的将来普遍可用。
根据长度对输入进行排序,以最小化填充大小,并在训练集中加入一些随机性。predict_with_generate
(bool
,可选,默认为False
)— 是否使用生成来计算生成指标(ROUGE,BLEU)。generation_max_length
(int
, optional) — 在predict_with_generate=True
时,在每个评估循环中使用的max_length
。将默认为模型配置的max_length
值。generation_num_beams
(int
, optional) — 在predict_with_generate=True
时,在每个评估循环中使用的num_beams
。将默认为模型配置的num_beams
值。generation_config
(str
或Path
或 GenerationConfig, optional) — 允许从from_pretrained
方法加载一个 GenerationConfig。这可以是:
- 一个字符串,预训练模型配置的模型 id,托管在 huggingface.co 上的模型存储库内。有效的模型 id 可以位于根级别,如
bert-base-uncased
,或者在用户或组织名称下命名空间化,如dbmdz/bert-base-german-cased
。 - 一个目录的路径,其中包含使用 save_pretrained()方法保存的配置文件,例如,
./my_model_directory/
。 - 一个 GenerationConfig 对象。
TrainingArguments 是我们在示例脚本中使用的与训练循环本身相关的参数的子集。
使用 HfArgumentParser,我们可以将这个类转换为可以在命令行上指定的argparse参数。
to_dict
( )
将此实例序列化,将Enum
替换为它们的值,将GenerationConfig
替换为字典(用于 JSON 序列化支持)。通过删除其值来混淆标记值。
DeepSpeed 集成
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/main_classes/deepspeed
DeepSpeed 实现了 ZeRO 论文 中描述的所有内容。目前,它完全支持:
- 优化器状态分区(ZeRO 阶段 1)
- 梯度分区(ZeRO 阶段 2)
- 参数分区(ZeRO 阶段 3)
- 自定义混合精度训练处理
- 一系列基于快速 CUDA 扩展的优化器
- ZeRO-Offload 到 CPU 和 NVMe
ZeRO-Offload 有自己的专用论文:ZeRO-Offload: Democratizing Billion-Scale Model Training。NVMe 支持在论文 ZeRO-Infinity: Breaking the GPU Memory Wall for Extreme Scale Deep Learning 中有描述。
DeepSpeed ZeRO-2 主要仅用于训练,因为其特性对推断无用。
DeepSpeed ZeRO-3 也可以用于推断,因为它允许将庞大的模型加载到多个 GPU 上,这在单个 GPU 上是不可能的。
🤗 Transformers 通过 2 个选项集成了 DeepSpeed:
- 通过 Trainer 集成核心 DeepSpeed 功能。这是一种一切都为您完成的集成方式 - 只需提供您的自定义配置文件或使用我们的模板,您就无需做其他事情。本文档的大部分内容都集中在这个功能上。
- 如果您不使用 Trainer 并希望使用自己集成了 DeepSpeed 的 Trainer,核心功能函数如
from_pretrained
和from_config
包括 DeepSpeed 的关键部分集成,如 ZeRO 阶段 3 及更高版本的zero.Init
。要使用此功能,请阅读关于 非 Trainer DeepSpeed 集成 的文档。
集成内容:
训练:
- DeepSpeed ZeRO 训练支持完整的 ZeRO 阶段 1、2 和 3,带有 ZeRO-Infinity(CPU 和 NVME 卸载)。
推断:
- DeepSpeed ZeRO 推断支持带有 ZeRO-Infinity 的 ZeRO 阶段 3。它使用与训练相同的 ZeRO 协议,但不使用优化器和学习率调度器,只有阶段 3 与推断相关。有关更多详细信息,请参阅:zero-inference。
还有 DeepSpeed 推断 - 这是一种完全不同的技术,它使用张量并行而不是 ZeRO(即将推出)。
Transformers 4.37 中文文档(十九)(5)https://developer.aliyun.com/article/1564926