【Hugging Face】Transformer.TrainingArguments Parameters/参数

记录

output_dir (str):
模型预测结果和检查点将被写入的输出目录。

overwrite_output_dir (bool,可选,默认为 False):
如果设置为 True,将覆盖输出目录中的内容。可以在 output_dir 指向检查点目录时使用此选项继续训练。

do_train (bool,可选,默认为 False):
是否进行训练。这个参数不是直接由 [Trainer] 使用的,而是用于您的训练/评估脚本。详见示例脚本获取更多详情。

do_eval (bool,可选):
是否在验证集上运行评估。如果 evaluation_strategy 与 "no" 不同,将被设置为 True。这个参数不是直接由 [Trainer] 使用的,而是用于您的训练/评估脚本。详见示例脚本获取更多详情。

do_predict (bool,可选,默认为 False):
是否在测试集上进行预测。这个参数不是直接由 [Trainer] 使用的,而是用于您的训练/评估脚本。详见示例脚本获取更多详情。

evaluation_strategy (str[~trainer_utils.IntervalStrategy],可选,默认为 "no"):
训练过程中采用的评估策略。可能的取值有:

	"no": 不进行评估。
	"steps": 每隔 eval_steps 进行评估。
	"epoch": 每个 epoch 结束时进行评估。
	
prediction_loss_only (bool,可选,默认为 False):
在进行评估和生成预测时,是否仅返回损失值。

per_device_train_batch_size (int,可选,默认为 8):
每个 GPU/TPU 核心/CPU 的训练批次大小。

per_device_eval_batch_size (int,可选,默认为 8):
每个 GPU/TPU 核心/CPU 的评估批次大小。

gradient_accumulation_steps (int,可选,默认为 1):
在执行反向传播/更新步骤之前,累积梯度的更新步骤数。

	<Tip warning={True}>
	
	使用梯度累积时,一个步骤被计算为具有反向传播的一步。因此,记录、评估和保存将在每个 gradient_accumulation_steps * xxx_step 训练样本上进行。
	
	</Tip>

eval_accumulation_steps (int, 可选):
在将结果移到 CPU 之前,累积输出张量的预测步骤数量。如果未设置,整个预测过程都在 GPU/TPU 上累积,然后再移动到 CPU(速度更快,但需要更多内存)。

eval_delay (float, 可选):
在进行第一次评估之前等待的 epoch 或步数数量,具体取决于 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):
要执行的总训练 epoch 数(如果不是整数,则在停止训练之前执行最后一个 epoch 的十进制部分百分比)。

max_steps (int,可选,默认为 -1):
如果设置为正数,则要执行的总训练步骤数。会覆盖 num_train_epochs。如果使用有限的可迭代数据集,在耗尽所有数据时,训练可能会在达到设置的步数之前停止。

lr_scheduler_type (str[SchedulerType],可选,默认为 "linear"):
要使用的调度程序类型。有关所有可能值,请参阅 [SchedulerType] 的文档。

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[~trainer_utils.IntervalStrategy],可选,默认为 "steps"):
在训练期间采用的日志记录策略。可能的取值有:

	"no": 不在训练过程中记录任何内容。
	"epoch": 在每个 epoch 结束时记录。
	"steps": 每隔 logging_steps 记录。
	
logging_first_step (bool,可选,默认为 False):
是否记录和评估第一个 global_step。

logging_steps (int,可选,默认为 500):
如果 logging_strategy="steps",则两次日志之间的更新步骤数。

logging_nan_inf_filter (bool, 可选, 默认为 True):
是否过滤记录时的 nan 和 inf 损失。如果设置为 True,则将过滤每个步骤中的 nan 或 inf 损失,并取当前记录窗口的平均损失。

<提示>

`logging_nan_inf_filter` 只影响损失值的记录,不会改变梯度的计算或应用于模型的行为。

</提示>
save_strategy (str[~trainer_utils.IntervalStrategy], 可选, 默认为 "steps"):
在训练期间采用的检查点保存策略。可能的值有:

    - `"no"`:训练期间不保存。
    - `"epoch"`:在每个时期结束时保存。
    - `"steps"`:在每个 `save_steps` 步之后保存一次。
save_steps (int, 可选, 默认为 500):
如果 save_strategy="steps",则在两个检查点保存之间的更新步骤数。

save_total_limit (int, 可选):
如果传递了一个值,将限制检查点的总数。删除output_dir中较旧的检查点。

save_safetensors (bool, 可选, 默认为 False):
使用 safetensors 保存和加载状态字典,而不是默认的 torch.load 和 torch.save。

save_on_each_node (bool, 可选, 默认为 False):
在进行多节点分布式训练时,是否在每个节点上保存模型和检查点,还是仅在主节点上保存。
当不同的节点使用相同的存储空间时,不应激活此选项,因为文件将以相同的名称保存在每个节点上。

no_cuda (bool, 可选, 默认为 False):
是否不使用 CUDA,即使可用。

seed (int, 可选, 默认为 42):
在训练开始时设置的随机种子。为了确保多次运行时的可重现性,如果模型具有一些随机初始化的参数,请使用 [~Trainer.model_init] 函数来实例化模型。

data_seed (int, 可选):
要与数据采样器一起使用的随机种子。如果未设置,则数据采样器的随机生成器将使用与 seed 相同的种子。这可以用于确保数据采样的可重现性,而与模型种子无关。

load_best_model_at_end(bool,可选,默认为False):
是否在训练结束时加载找到的最佳模型。

	<提示>
	
	当设置为True时,参数 save_strategy 需要与 evaluation_strategy 相同,并且在save_steps是"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 结合使用,用于指定更好的模型是否应具有更大的度量指标。设置metrics且是loss时默认为False,否则True

jit_mode_eval (bool, 可选, 默认为 False):
是否使用 PyTorch jit trace 进行推理。

use_ipex (bool, 可选, 默认为 False):
在可用时是否使用 Intel PyTorch 扩展。IPEX 安装。

bf16 (bool, 可选, 默认为 False):
是否使用 bf16 16位(混合)精度训练,而不是32位训练。需要 Ampere 或更高的 NVIDIA 架构或使用 CPU(no_cuda)。这是一个实验性的 API,可能会改变。

fp16 (bool, 可选, 默认为 False):
是否使用 fp16 16位(混合)精度训练,而不是32位训练。

fp16_opt_level (str, 可选, 默认为 'O1'):
对于 fp16 训练,在 ['O0', 'O1', 'O2','O3'] 中选择 Apex AMP 优化级别。详细信息请参阅 Apex 文档。

fp16_backend (str, 可选, 默认为 "auto"):
此参数已弃用。请改用 half_precision_backend。

half_precision_backend (str, 可选, 默认为 "auto"):
用于混合精度训练的后端。必须是 "auto", "cuda_amp", "apex", "cpu_amp" 中的一个。"auto" 将根据检测到的 PyTorch 版本使用 CPU/CUDA AMP 或 APEX,而其他选项将强制使用请求的后端。

bf16_full_eval (bool, 可选, 默认为 False):
是否使用完整的 bfloat16 评估,而不是32位。这将更快并节省内存,但可能会影响指标值。这是一个实验性的 API,可能会改变。

fp16_full_eval (bool, 可选, 默认为 False):
是否使用完整的 float16 评估,而不是32位。这将更快并节省内存,但可能会影响指标值。

tf32 (bool, 可选):
是否启用 TF32 模式,适用于 Ampere 和更新的 GPU 架构。默认值取决于 PyTorch 的版本,默认为 torch.backends.cuda.matmul.allow_tf32。有关更多详细信息,请参阅 TF32 文档。这是一个实验性的 API,可能会改变。

local_rank (int, 可选, 默认为 -1):
分布式训练过程中的进程排名。

xpu_backend (str, 可选):
用于 xpu 分布式训练的后端。必须是 "mpi""ccl""gloo" 中的一个。

tpu_num_cores (int, 可选):
当在 TPU 上训练时,TPU 核心的数量(由启动脚本自动传递)。

dataloader_drop_last (bool, 可选, 默认为 False):
是否丢弃最后一个不完整的批次(如果数据集长度不可被批次大小整除)。

eval_steps (int, 可选):
如果 evaluation_strategy="steps",则在两个评估之间的更新步骤数。如果未设置,将默认与 logging_steps 相同的值。

dataloader_num_workers (int, 可选, 默认为 0):
用于数据加载的子进程数(仅适用于 PyTorch)。0 表示在主进程中加载数据。

past_index (int, 可选, 默认为 -1):
一些模型(如 TransformerXL 或 XLNet)可以利用过去的隐藏状态进行预测。如果将此参数设置为正整数,则 Trainer 将使用对应的输出(通常为索引 2)作为过去状态,并将其作为关键字参数 mems 在下一个训练步骤中传递给模型。

run_name (str, 可选):
运行的描述符。通常用于wandb 和 mlflow 日志记录。

disable_tqdm (bool, 可选):
是否禁用在 Jupyter Notebook 中由 [~notebook.NotebookTrainingTracker] 生成的 tqdm 进度条和指标表格。如果日志级别设置为 warn 或更低(默认为) True,否则为 False。

optim (str[training_args.OptimizerNames],可选,默认为 "adamw_hf"):
要使用的优化器: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,可选,默认为 "length"):
预先计算长度的列名。如果列存在,则在训练启动时将使用这些值来进行长度分组,而不是在数据集上计算它们。仅在 group_by_length=True 且数据集是 Dataset 实例时才生效。

report_to (str 或 List[str],可选,默认为 "all"):
报告结果和日志的集成列表。支持的平台有 "azure_ml""comet_ml""mlflow""neptune""tensorboard""clearml""wandb"。使用 "all" 将报告给所有安装的集成,使用 "none" 表示不使用任何集成。

dataloader_pin_memory (bool,可选,默认为 True):
是否在数据加载器中固定内存。默认为 True。

skip_memory_metrics (bool,可选,默认为 True):
是否跳过将内存分析器报告添加到指标中。默认情况下会跳过此步骤,因为它会降低训练和评估速度。
### Transformer与DeepSpeed集成 #### 1. DeepSpeed简介及其优势 DeepSpeed 是由微软开发的一个深度学习优化库,旨在提高大规模模型训练的速度和效率。该工具包支持多种框架,特别是 PyTorch 和 Hugging Face Transformers 的无缝对接[^1]。 #### 2. 安装配置 为了使用 DeepSpeed 进行基于 Transformer 的任务,首先需要安装必要的依赖项。可以通过 pip 或 conda 来完成这些操作: ```bash pip install deepspeed transformers torch ``` 对于更复杂的环境管理需求,建议参照官方文档中的具体指导来构建适合的工作环境[^3]。 #### 3. 创建并加载预训练模型 利用HuggingFace提供的Transformers库可以轻松获取各种预训练好的Transformer架构(如BERT、RoBERTa等)。下面是一个简单的例子展示如何加载一个预训练的 BERT 模型以及相应的分词器: ```python from transformers import BertTokenizer, BertForSequenceClassification tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) ``` 这段代码初始化了一个用于序列分类的任务,并指定了两个标签类别[^2]。 #### 4. 设置DeepSpeed参数 在实际应用中,通过调整一些关键性的超参可以让整个流程更加高效稳定。比如启用混合精度训练以减少显存占用;选择合适的优化算法加快收敛速度等等。这里给出一段典型的配置样例: ```json { "train_batch_size": 8, "fp16": { "enabled": true }, "optimizer": { "type": "AdamW", "params": { "lr": 0.00005 } } } ``` 此JSON片段展示了怎样开启 FP16 浮点运算模式,并指定 AdamW 作为默认优化方法。 #### 5. 构建DeepSpeed引擎实例 一旦完成了上述准备工作之后,则可进一步创建 `DeepSpeedEngine` 对象来进行后续的操作。这一步骤通常涉及到了解耦原始PyTorch模块与新引入的功能特性之间的关系。 ```python import deepspeed engine, optimizer, _, _ = deepspeed.initialize( model=model, config_params='ds_config.json', model_parameters=[p for p in model.parameters() if p.requires_grad], dist_init_required=True ) ``` 此处假设已经存在名为 ds_config.json 文件保存着之前提到过的各项设定值。 #### 6. 编写训练逻辑 最后就是编写具体的训练循环部分,在这里面会反复迭代数据集直至达到预期效果为止。值得注意的是,由于采用了 DeepSpeed 后端的缘故,某些原本属于标准做法的地方可能有所变化——例如梯度累积机制就不再必要了因为已经被内置实现好了。 ```python for epoch in range(num_epochs): engine.train() for batch in dataloader: outputs = engine(**batch) loss = outputs.loss engine.backward(loss) engine.step() # Evaluation on validation set... ``` 以上即为完整的从零开始搭建起一套基于 Transformer 结构并通过 DeepSpeed 提升性能的整体方案概述。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值