LLM大模型训练之Trainer类和TrainerArguments类的参数

目录

前言

1、Trainer类和TrainerArguments类介绍

Trainer类

TrainerArguments类

2、Trainer类的参数

3、TrainerArguments类的参数


前言

本文主要介绍Huggingfaca的Transformer库中的Trainer类和TrainerArguments类的参数,主要参考官网的文档TrainerArguments类是为Trainer提供训练参数的类,所以参数量会更大,有99个。


今年大模型一火,应该是HuggingFace的Transformers更胜一筹,社区更活跃,很多的开源微调大模型用的也都是HuggingFace的Transformers,它也是率先支持微调LLaMa模型。不过也要吐槽一下版本太不稳定了,经常会出现你什么都没有动,只是升级了一下Transformers就会出现报错 。

Trainer 简单来说就是封装了 PyTorch 的训练过程,包括前向传播、反向传播和参数更新等等步骤,咱们只需要设计模型(copy),调参(炼丹)就行,高级点的Trainer就是加上了各种的功能,比如日志记录,断点重训,训练方式与精度,支持各种分布式训练框架像原生、Apex、Deepspeed和Fairscale,支持自定的回调函数等等。

1、Trainer类和TrainerArguments类介绍

Trainer类

Trainer 是一个训练类,用于简化 PyTorch 模型的训练和评估过程。它提供了大量内置功能,例如模型训练、验证、预测、保存模型、记录日志等。用户只需提供模型、数据集和 TrainingArguments,即可完成训练流程。同时也集成了分布式训练、混合精度训练、早停(early stopping)、学习率调度等功能。

TrainerArguments类

TrainingArguments 是一个配置类,用于定义训练的参数和配置选项。它包含了训练过程中的所有可调参数,例如批量大小、学习率、优化器类型、日志记录选项等。这些参数会作为 Trainer 的初始化输入,从而控制 Trainer 的行为。

2、Trainer类的参数

  1. model (PreTrainedModel 或 torch.nn.Module, 可选):要进行训练、评估或预测的实例化后模型,如果不提供,必须传递一个 model_init来初始化一个模型。

  2. args (TrainingArguments, 可选):训练的参数,如果不提供,就会使用默认的TrainingArguments 里面的参数,其中 output_dir 设置为当前目录中的名为 "tmp_trainer" 的目录。

  3. data_collator (DataCollator, 可选):用于从 train_dataset 或 eval_dataset 中构成batch的函数,如果未提供tokenizer,将默认使用 default_data_collator();如果提供,将使用 DataCollatorWithPadding 。

  4. train_dataset (torch.utils.data.Dataset 或 torch.utils.data.IterableDataset, 可选):用于训练的数据集,如果是torch.utils.data.Dataset,则会自动删除模型的 forward() 方法不接受的列。

  5. eval_dataset (Union[torch.utils.data.Dataset, Dict[str, torch.utils.data.Dataset]), 可选):同上,用于评估的数据集,如果是字典,将对每个数据集进行评估,并在指标名称前附加字典的键值。

  6. tokenizer (PreTrainedTokenizerBase, 可选):用于预处理数据的分词器,如果提供,将在批量输入时自动对输入进行填充到最大长度,并会保存在模型目录下中,为了重新运行中断的训练或重复微调模型时更容易进行操作。

  7. model_init (Callable[[], PreTrainedModel], 可选):用于实例化要使用的模型的函数,如果提供,每次调用 train() 时都会从此函数给出的模型的新实例开始。

  8. compute_metrics (Callable[[EvalPrediction], Dict], 可选):用于在评估时计算指标的函数,必须接受 EvalPrediction 作为入参,并返回一个字典,其中包含了不同性能指标的名称和相应的数值,一般是准确度、精确度、召回率、F1 分数等。

  9. callbacks (TrainerCallback 列表, 可选):自定义回调函数,如果要删除使用的默认回调函数,要使用 Trainer.remove_callback() 方法。

  10. optimizers (Tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR], 可选):用于指定一个包含优化器和学习率调度器的元组(Tuple),这个元组的两个元素分别是优化器
    torch.optim.Optimizer)和学习率调度器(torch.optim.lr_scheduler.LambdaLR),默认会创建一个基于AdamW优化器的实例,并使用 get_linear_schedule_with_warmup() 函数创建一个学习率调度器。

  11. preprocess_logits_for_metrics (Callable[[torch.Tensor, torch.Tensor], torch.Tensor], 可选):用于指定一个函数,这个函数在每次评估步骤(evaluation step)前,其实就是在进入compute_metrics函数前对模型的输出 logits 进行预处理。接受两个张量(tensors)作为参数,一个是模型的输出 logits,另一个是真实标签(labels)。然后返回一个经过预处理后的 logits 张量,给到compute_metrics函数作为参数。

写一段代码简单理解下每个参数:

from transformers import (Trainer, TrainingArguments, AutoModelForSequenceClassification, AutoTokenizer, EvalPrediction, DataCollatorWithPadding, TrainerCallback
)
from datasets import load_dataset
import torch
import numpy as np
from sklearn.metrics import accuracy_score, precision_recall_fscore_support# 1. 加载数据集
dataset = load_dataset("imdb")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")# 数据预处理函数
def preprocess_function(examples):return tokenizer(examples["text"], truncation=True, padding=False, max_length=128)# 对数据进行预处理
encoded_dataset = dataset.map(preprocess_function, batched=True)# 定义训练集和评估集
train_dataset = encoded_dataset["train"]
eval_dataset = encoded_dataset["test"]# 2. 定义模型初始化函数
def model_init():# 使用 BERT 作为预训练模型,并添加分类头return AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)# 3. 定义计算评估指标的函数
def compute_metrics(eval_pred: EvalPrediction):logits, labels = eval_predpredictions = np.argmax(logits, axis=-1)precision, recall, f1, _ = precision_recall_fscore_support(labels, predictions, average="binary")acc = accuracy_score(labels, predictions)return {"accuracy": acc, "precision": precision, "recall": recall, "f1": f1}# 4. 自定义回调函数
class CustomCallback(TrainerCallback):def on_log(self, args, state, control, logs=None, **kwargs):print(f"Custom Log: {logs}")# 5. 定义 `DataCollatorWithPadding`
data_collator = DataCollatorWithPadding(tokenizer)# 6. 定义优化器和学习率调度器
def custom_optimizer_and_scheduler(trainer):optimizer = torch.optim.AdamW(trainer.model.parameters(), lr=5e-5)scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=500, gamma=0.1)return optimizer, scheduler# 7. 定义 logits 的预处理函数
def preprocess_logits_for_metrics(logits, labels):# 返回 softmax 输出以供评估return torch.nn.functional.softmax(logits, dim=-1)# 8. 设置训练参数
training_args = TrainingArguments(output_dir="./results",              # 模型保存路径evaluation_strategy="epoch",        # 每个 epoch 评估一次save_strategy="epoch",              # 每个 epoch 保存一次learning_rate=5e-5,                 # 学习率per_device_train_batch_size=8,      # 训练批次大小per_device_eval_batch_size=8,       # 评估批次大小num_train_epochs=3,                 # 总训练轮数weight_decay=0.01,                  # 权重衰减logging_dir="./logs",               # 日志文件保存路径logging_steps=50,                   # 日志打印间隔load_best_model_at_end=True,        # 训练结束时加载最优模型save_total_limit=2,                 # 限制保存的模型数量seed=42,                            # 随机种子disable_tqdm=False,                 # 显示进度条
)# 9. 初始化 Trainer
trainer = Trainer(model=None,                                # 模型可设为 None,因为我们提供了 model_initmodel_init=model_init,                    # 模型初始化函数args=training_args,                       # 训练参数train_dataset=train_dataset,              # 训练数据集eval_dataset=eval_dataset,                # 评估数据集tokenizer=tokenizer,                      # 分词器data_collator=data_collator,              # 数据批处理器compute_metrics=compute_metrics,          # 指标计算函数callbacks=[CustomCallback()],             # 自定义回调函数optimizers=custom_optimizer_and_scheduler, # 自定义优化器和学习率调度器preprocess_logits_for_metrics=preprocess_logits_for_metrics # logits 预处理函数
)# 10. 开始训练
trainer.train()# 11. 评估模型
eval_results = trainer.evaluate()
print(f"Evaluation Results: {eval_results}")# 12. 模型预测
sample_texts = ["This movie was fantastic!", "Absolutely terrible. I hated it."]
inputs = tokenizer(sample_texts, return_tensors="pt", truncation=True, padding=True, max_length=128)
predictions = trainer.predict(inputs)
print(f"Predictions: {predictions}")

3、TrainerArguments类的参数

  1. output_dir (str):用于指定模型checkpoint和最终结果的输出目录。

  2. overwrite_output_dir (bool, 可选,默认为 False):如果设置为True,将覆盖输出目录中已存在的内容,在想要继续训练模型并且输出目录指向一个checkpoint目录时还是比较有用的。

  3. do_train (bool, 可选,默认为 False):是否执行训练,其实Trainer是不直接使用此参数,主要是用于我们在写脚本时,作为if的条件来判断是否执行接下来的代码。

  4. do_eval (bool, 可选):是否在验证集上进行评估,如果评估策略(evaluation_strategy)不是"no",将自动设置为True。与do_train类似,也不是直接由Trainer使用的,主要是用于我们写训练脚本。

  5. do_predict (bool, 可选,默认为 False):是否在测试集上进行预测。

  6. evaluation_strategy (str, 可选,默认为 "no"):用于指定训练期间采用的评估策略,可选值包括:
    "no":在训练期间不进行任何评估。
    "steps":每eval_steps步骤进行评估。
    "epoch":在每个训练周期结束时进行评估。

  7. prediction_loss_only (bool, 可选, 默认为 False):如果设置为True,当进行评估和预测时,只返回损失值,而不返回其他评估指标。

  8. per_device_train_batch_size (int, 可选, 默认为 8):用于指定训练的每个GPU/XPU/TPU/MPS/NPU/CPU的batch,每个训练步骤中每个硬件上的样本数量。

  9. per_device_eval_batch_size (int, 可选, 默认为 8):用于指定评估的每个GPU/XPU/TPU/MPS/NPU/CPU的batch,每个评估步骤中每个硬件上的样本数量。

  10. gradient_accumulation_steps (int, 可选, 默认为 1):用于指定在每次更新模型参数之前,梯度积累的更新步数。使得梯度积累可以在多个batch上累积梯度,然后更新模型参数,就可以在显存不够的情况下执行大batch的反向传播。
    假设我们有4张卡,每张卡的batch size为8,那么一个steps的batch size就是32,如果我们这个参数设置为4,那么相当于一个batch训练样本数量就是128。好处:显存不够增大此参数。

  11. eval_accumulation_steps (int, 可选):指定在执行评估时,模型会累积多少个预测步骤的输出张量,然后才将它们从GPU/NPU/TPU移动到CPU上,默认是整个评估的输出结果将在GPU/NPU/TPU上累积,然后一次性传输到CPU,速度更快,但占显存。

  12. eval_delay (float, 可选):指定等待执行第一次评估的轮数或步数。如果evaluation_strategy为"steps",设置此参数为10,则10个steps后才进行首次评估。

  13. learning_rate (float, 可选, 默认为 5e-5):指定AdamW优化器的初始学习率。

  14. weight_decay (float, 可选, 默认为 0):指定权重衰减的值,会应用在 AdamW 优化器的所有层上,除了偏置(bias)和 Layer Normalization 层(LayerNorm)的权重上。
    简单解释一下,权重衰减是一种正则化手段,通过向损失函数添加一个额外的项来惩罚较大的权重值,有助于防止模型过拟合训练数据。

  15. adam_beta1 (float, 可选, 默认为 0.9):指定AdamW优化器的beta1超参数,详细的解释可以看其论文。

  16. adam_beta2 (float, 可选, 默认为 0.999):指定AdamW优化器的beta2超参数,详细的解释可以看其论文。

  17. adam_epsilon (float, 可选, 默认为 1e-8):指定AdamW优化器的epsilon超参数,详细的解释可以看其论文。

  18. max_grad_norm (float, 可选, 默认为 1.0):指定梯度剪裁的最大梯度范数,可以防止梯度爆炸,一般都是1,如果某一步梯度的L2范数超过了 此参数,那么梯度将被重新缩放,确保它的大小不超过此参数。

  19. num_train_epochs (float, 可选, 默认为 3.0):训练的总epochs数。

  20. max_steps (int, 可选, 默认为 -1):如果设置为正数,就是执行的总训练步数,会覆盖num_train_epochs。注意如果使用此参数,就算没有达到这个参数值的步数,训练也会在数据跑完后停止。

  21. lr_scheduler_type (str, 可选, 默认为"linear"):用于指定学习率scheduler的类型,根据训练的进程来自动调整学习率。详细见:
    "linear":线性学习率scheduler,学习率以线性方式改变
    "cosine":余弦学习率scheduler,学习率以余弦形状的方式改变。
    "constant":常数学习率,学习率在整个训练过程中保持不变。
    "polynomial":多项式学习率scheduler,学习率按多项式函数的方式变化。
    "piecewise":分段常数学习率scheduler,每个阶段使用不同的学习率。
    "exponential":指数学习率scheduler,学习率以指数方式改变。

  22. warmup_ratio (float, 可选, 默认为0.0):用于指定线性热身占总训练步骤的比例,线性热身是一种训练策略,学习率在开始阶段从0逐渐增加到其最大值(通常是设定的学习率),然后在随后的训练中保持不变或者按照其他调度策略进行调整。如果设置为0.0,表示没有热身。

  23. warmup_steps (int,可选, 默认为0):这个是直接指定线性热身的步骤数,这个参数会覆盖warmup_ratio,如果设置了warmup_steps,将会忽略warmup_ratio。

  24. log_level (str, 可选, 默认为passive):用于指定主进程上要使用的日志级别,
    debug:最详细的日志级别。
    info:用于一般的信息性消息。
    warning:用于警告信息。
    error:用于错误信息。
    critical:用于严重错误信息。
    passive:不设置任何内容,将会使用Transformers库当前的日志级别(默认为"warning")。
    建议训练时使用info级别。

  25. log_level_replica (str, 可选, 默认为warning):副本上要使用的日志级别,与log_level相同。

  26. log_on_each_node (bool, optional, defaults to True):在多节点分布式训练中,是否在每个节点上使用log_level进行日志记录。

  27. logging_dir (str, 可选):TensorBoard日志目录。默认为output_dir/runs/CURRENT_DATETIME_HOSTNAME。

  28. logging_strategy (str, 可选, 默认为"steps"):训练过程中采用的日志记录策略。可选包括:
    "no":在训练过程中不记录任何日志。
    "epoch":在每个epoch结束时记录日志。
    "steps":根据logging_steps参数记录日志。

  29. logging_steps (int or float,可选, 默认为500):如果logging_strategy="steps",则此参数为每多少步记录一次步骤。

  30. logging_nan_inf_filter (bool, 可选, 默认为 True):是否过滤日志记录中为nan和inf的loss,如果设置为True,将过滤每个步骤的loss,如果出现nan或inf,将取当前日志窗口的平均损失值。

  31. save_strategy (str , 可选, 默认为 "steps"):训练过程中保存checkpoint的策略,包括:
    "no":在训练过程中不保存checkpoint。
    "epoch":在每个epoch束时保存checkpoint。
    "steps":根据save_steps参数保存checkpoint。

  32. save_steps (int or float, 可选, 默认为500):如果save_strategy="steps",就是指两次checkpoint保存之间的更新步骤数。如果是在[0, 1)的浮点数,则就会当做与总训练步骤数的比例。

  33. save_total_limit (int, 可选):如果给定了参数,将限制checkpoint的总数,因为checkpoint也是很占硬盘的,将会删除输出目录中旧的checkpoint。当启用load_best_model_at_end时,会根据metric_for_best_model保留最好的checkpoint,以及最近的checkpoint。
    举个例子,当save_total_limit=5和指定load_best_model_at_end时,将始终保留最近的四个checkpoint以及最好的checkpoint;当save_total_limit=1和指定load_best_model_at_end时,会保存两个checkpoint:最后一个和最好的一个(如果它们不同一个)。

  34. load_best_model_at_end (bool, 可选, 默认为False):用于指定是否在训练结束时加载在训练过程中最好的checkpoint,设置为 True 时,就是帮你找到在验证集上指标最好的checkpoint并且保存,然后还会保存最后一个checkpoint,在普通的多epoch训练中,最好设置为True,但在大模型训练中,一般是一个epoch,使用的就是最后一个checkpoint。

  35. save_safetensors (bool, 可选, 默认为False):用于指定是否在保存和加载模型参数时使用 "safetensors","safetensors" 就是更好地处理了不同 PyTorch 版本之间的模型参数加载的兼容性问题。

  36. save_on_each_node (bool, 可选, 默认为 False):在进行多节点分布式训练时,是否在每个节点上保存checkpoint,还是仅在主节点上保存。注意如果多节点使用的是同一套存储设备,比如都是外挂的铜一个nas,开启后会报错,因为文件名称都一样。

  37. use_cpu (bool, 可选, 默认为 False):是否使用CPU训练。如果设置为False,将使用CUDA或其他可用设备。

  38. seed (int, 可选, 默认为42):用于指定训练过程的随机种子,可以确保训练的可重现性,主要用于model_init,随机初始化权重参数。

  39. data_seed (int, 可选):用于指定数据采样的随机种子,如果没有设置将使用与seed相同的种子,可以确保数据采样的可重现性。

  40. jit_mode_eval (bool, 可选, 默认为False):用于指定是否在推理(inference)过程中使用 PyTorch 的 JIT(Just-In-Time)跟踪功能,PyTorch JIT 是 PyTorch 的一个功能,用于将模型的前向传播计算编译成高性能的机器代码,会加速模型的推理。

  41. use_ipex (bool, 可选, 默认为 False):用于指定是否使用英特尔扩展(Intel extension)来优化 PyTorch,需要安装IPEX,IPEX是一组用于优化深度学习框架的工具和库,可以提高训练和推理的性能,特别针对英特尔的处理器做了优化。

  42. bf16 (bool, 可选, 默认为False):用于指定是否使用bf16进行混合精度训练,而不是fp32训练,需要安培架构或者更高的NVIDIA架构,关于精度的问题可以看这篇文章:Glan格蓝:LLM大模型之精度问题(FP16,FP32,BF16)详解与实践
    在简单解释一下混合精度训练:模型训练时将模型参数和梯度存储为fp32,但在前向和后向传播计算中使用fp16,这样可以减少内存使用和计算时间,并提高训练速度,这个只是简单的解释,关于混合精度训练,这篇文章讲的比较好 点这里。

  43. fp16 (bool,** 可选, 默认为****False)**:用于指定是否使用fp16进行混合精度训练,而不是fp32训练。

  44. fp16_opt_level (str, 可选, 默认为 ''O1''):对于fp16训练,选择的Apex AMP的优化级别,可选值有 ['O0', 'O1', 'O2'和'O3']。详细信息可以看Apex文档。

  45. half_precision_backend (str, 可选, 默认为"auto"):用于指定混合精度训练(Mixed Precision Training)时要使用的后端,必须是 "auto"、"cuda_amp"、"apex"、"cpu_amp" 中的一个。"auto"将根据检测到的PyTorch版本来使用后端,而其他选项将会强制使用请求的后端。使用默认就行。

  46. bf16_full_eval (bool, 可选, 默认为 False):用于指定是否使用完全的bf16进行评估,而不是fp32。这样更快且省内存,但因为精度的问题指标可能会下降。

  47. fp16_full_eval (bool, 可选, 默认为 False):同上,不过将使用fp16.

  48. tf32 (bool, 可选):用于指定是否启用tf32精度模式,适用于安培架构或者更高的NVIDIA架构,默认值取决于PyTorch的版本torch.backends.cuda.matmul.allow_tf32的默认值。

  49. local_rank (int, 可选, 默认为 -1):用于指定在分布式训练中的当前进程(本地排名)的排名,这个不需要我们设置,使用PyTorch分布式训练时会自动设置,默认为自动设置。

  50. ddp_backend (str, 可选):用于指定处理分布式计算的后端框架,这些框架的主要用于多个计算节点协同工作以加速训练,处理模型参数和梯度的同步、通信等操作,可选值如下
    "nccl":这是 NVIDIA Collective Communications Library (NCCL) 的后端。
    "mpi":Message Passing Interface (MPI) 后端, 是一种用于不同计算节点之间通信的标准协议。
    "ccl":这是 Intel的oneCCL (oneAPI Collective Communications Library) 的后端。
    "gloo":这是Facebook开发的分布式通信后端。
    "hccl":这是Huawei Collective Communications Library (HCCL) 的后端,用于华为昇腾NPU的系统上进行分布式训练。
    默认会根据系统自动设置,一般是nccl。

  51. tpu_num_cores (int, 可选):指定在TPU上训练时,TPU核心的数量。

  52. dataloader_drop_last (bool, 可选, 默认为False):用于指定是否丢弃最后一个不完整的batch,发生在数据集的样本数量不是batch_size的整数倍的时候。

  53. eval_steps (int or float, 可选):如果evaluation_strategy="steps",就是指两次评估之间的更新步数,如果未设置,默认和设置和logging_steps相同的值,如果是在[0, 1)的浮点数,则就会当做与总评估步骤数的比例。

  54. dataloader_num_workers (int, 可选, 默认为 0):用于指定数据加载时的子进程数量(仅用于PyTorch)其实就是PyTorch的num_workers参数,0表示数据将在主进程中加载。

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

  56. run_name (str, 可选):用于指定训练运行(run)的字符串参数,与日志记录工具(例如wandb和mlflow)一起使用,不影响训练过程,就是给其他的日志记录工具开了一个接口,个人还是比较推荐wandb比较好用。

  57. disable_tqdm (bool, 可选):是否禁用Jupyter笔记本中的~notebook.NotebookTrainingTracker生成的tqdm进度条,如果日志级别设置为warn或更低,则将默认为True,否则为False。

  58. remove_unused_columns (bool, 可选, 默认为True):是否自动删除模型在训练时,没有用到的数据列,默认会删除,比如你的数据有两列分别是content和id,如果没有用到id这一列,训练时就会被删除。

  59. label_names (List[str], 可选):用于指定在模型的输入字典中对应于标签(labels)的键,默认情况下不需要显式指定。

  60. metric_for_best_model (str, 可选):与 load_best_model_at_end 结合使用,用于指定比较不同模型的度量标准,默认情况下,如果未指定,将使用验证集的 "loss" 作为度量标准,可使用accuracy、F1、loss等。

  61. greater_is_better (bool, 可选):与 load_best_model_at_end 和 metric_for_best_model 结合使用,这个和上面的那个参数是对应的,是指上面的那个指标是越大越好还是越小越好,如果是loss就是越小越好,这个参数就会被设置为False;如果是accuracy,你需要把这个值设为True。

  62. ignore_data_skip (bool, 可选,默认为False):用于指定是否断点训练,即训练终止又恢复后,是否跳过之前的训练数据。

  63. resume_from_checkpoint (str, 可选):用于指定从checkpoint恢复训练的路径。

  64. sharded_ddp (bool, str 或 ShardedDDPOption 列表, 可选, 默认为''):是否在分布式训练中使用 Sharded DDP(Sharded Data Parallelism),这是由 FairScale提供的,默认不使用,简单解释一下: FairScale 是Mate开发的一个用于高性能和大规模训练的 PyTorch 扩展库。这个库扩展了基本的 PyTorch 功能,同时引入了最新的先进规模化技术,通过可组合的模块和易于使用的API,提供了最新的分布式训练技术。详细的可以看其官网。

  65. fsdp (bool, str 或 FSDPOption 列表, 可选, 默认为''):用于指定是否要启用 PyTorch 的 FSDP(Fully Sharded Data Parallel Training),以及如何配置分布式并行训练。

  66. fsdp_config (str 或 dict, 可选):用于配置 PyTorch 的 FSDP(Fully Sharded Data Parallel Training)的配置文件

  67. deepspeed (str 或 dict, 可选):用于指定是否要启用 DeepSpeed,以及如何配置 DeepSpeed。也是目前分布式训练使用最多的框架,比上面pytorch原生分布式训练以及FairScale用的范围更广,详细的可以看其官网。

  68. label_smoothing_factor (float, 可选,默认为0.0):用于指定标签平滑的因子。

  69. debug (str 或 DebugOption 列表, 可选, 默认为''):用于启用一个或多个调试功能
    支持的选项:
    "underflow_overflow":此选项用于检测模型输入/输出中的溢出。
    "tpu_metrics_debug":此选项用于在 TPU 上打印调试指标。

  70. optim (str 或 training_args.OptimizerNames, 可选, 默认为 "adamw_torch"):指定要使用的优化器。
    可选项:
    "adamw_hf"
    "adamw_torch"
    "adamw_torch_fused"
    "adamw_apex_fused"
    "adamw_anyprecision"
    "adafactor"

  71. optim_args (str, 可选):用于向特定类型的优化器(如adamw_anyprecision)提供额外的参数或自定义配置。

  72. group_by_length (bool, 可选, 默认为 False):是否在训练数据集中对大致相同长度的样本进行分组然后放在一个batch里,目的是尽量减少在训练过程中进行的padding,提高训练效率。

  73. length_column_name (str, 可选, 默认为 "length"):当你上个参数设置为True时,你可以给你的训练数据在增加一列”长度“,就是事先计算好的,可以加快分组的速度,默认是length。

  74. report_to (str 或 str 列表, 可选, 默认为 "all"):用于指定要将训练结果和日志报告到的不同日记集成平台,有很多"azure_ml", "clearml", "codecarbon", "comet_ml", "dagshub", "flyte", "mlflow", "neptune", "tensorboard", and "wandb"。直接默认就行,都发。

  75. ddp_find_unused_parameters (bool, 可选):当你使用分布式训练时,这个参数用于控制是否查找并处理那些在计算中没有被使用的参数,如果启用了梯度检查点(gradient checkpointing),表示部分参数是惰性加载的,这时默认值为 False,因为梯度检查点本身已经考虑了未使用的参数,如果没有启用梯度检查点,默认值为 True,表示要查找并处理所有参数,以确保它们的梯度被正确传播。

  76. ddp_bucket_cap_mb (int, 可选):在分布式训练中,数据通常分成小块进行处理,这些小块称为"桶",这个参数用于指定每个桶的最大内存占用大小,一般自动分配即可。

  77. ddp_broadcast_buffers (bool, 可选):在分布式训练中,模型的某些部分可能包含缓冲区,如 Batch Normalization 层的统计信息,这个参数用于控制是否将这些缓冲区广播到所有计算设备,以确保模型在不同设备上保持同步,如果启用了梯度检查点,表示不需要广播缓冲区,因为它们不会被使用,如果没有启用梯度检查点,默认值为 True,表示要广播缓冲区,以确保模型的不同部分在所有设备上都一致。

  78. gradient_checkpointing (bool, 可选, 默认为False):是否开启梯度检查点,简单解释一下:训练大型模型时需要大量的内存,其中在反向传播过程中,需要保存前向传播的中间计算结果以计算梯度,但是这些中间结果占用大量内存,可能会导致内存不足,梯度检查点会在训练期间释放不再需要的中间结果以减小内存占用,但它会使训练变慢。

  79. dataloader_pin_memory (bool, 可选, 默认为 True):用于指定dataloader加载数据时,是否启用“pin memory”功能。“Pin memory” 用于将数据加载到GPU内存之前,将数据复制到GPU的锁页内存(pinned memory)中,锁页内存是一种特殊的内存,可以更快地传输数据到GPU,从而加速训练过程,但是会占用额外的CPU内存,会导致内存不足的问题,如果数据量特别大,百G以上建议False。

  80. skip_memory_metrics (bool, 可选, 默认为 True):用于控制是否将内存分析报告添加到性能指标中,默认情况下跳过这一步,以提高训练和评估的速度,建议打开,更能够清晰的知道每一步的内存使用。

  81. include_inputs_for_metrics (bool, 可选, 默认为 False):是否将输入传递给 compute_metrics 函数,一般计算metrics用的是用的是模型预测的结果和我们提供的标签,但是有的指标需要输入,比如cv的IoU(Intersection over Union)指标。

  82. auto_find_batch_size (bool, 可选, 默认为 False):是否使用自动寻找适合内存的batch size大小,以避免 CUDA 内存溢出错误,需要安装 accelerate(使用 pip install accelerate),这个功能还是比较NB的。

  83. full_determinism (bool, 可选, 默认为 False):如果设置为 True,将调用 enable_full_determinism() 而不是 set_seed(),训练过程将启用完全确定性(full determinism),在训练过程中,所有的随机性因素都将被消除,确保每次运行训练过程都会得到相同的结果,注意:会对性能产生负面影响,因此仅在调试时使用。

  84. torchdynamo (str, 可选):用于选择 TorchDynamo 的后端编译器,TorchDynamo 是 PyTorch 的一个库,用于提高模型性能和部署效率,可选的选择包括 "eager"、"aot_eager"、"inductor"、"nvfuser"、"aot_nvfuser"、"aot_cudagraphs"、"ofi"、"fx2trt"、"onnxrt" 和 "ipex"。默认就行,自动会选。

  85. ray_scope (str, 可选, 默认为 "last"):用于使用 Ray 进行超参数搜索时,指定要使用的范围,默认情况下,使用 "last",Ray 将使用所有试验的最后一个检查点,比较它们并选择最佳的。详细的可以看一下它的文档。

  86. ddp_timeout (int, 可选, 默认为 1800):用于 torch.distributed.init_process_group 调用的超时时间,在分布式运行中执行较慢操作时,用于避免超时,具体的可以看 PyTorch 文档 。

  87. torch_compile (bool, 可选, 默认为 False):是否使用 PyTorch 2.0 及以上的 torch.compile 编译模型,具体的可以看 PyTorch 文档 。

  88. torch_compile_backend (str, 可选):指定在 torch.compile 中使用的后端,如果设置为任何值,将启用 torch_compile。

  89. torch_compile_mode (str, 可选):指定在 torch.compile 中使用的模式,如果设置为任何值,将启用 torch_compile。

  90. include_tokens_per_second (bool, 可选):确定是否计算每个设备的每秒token数以获取训练速度指标,会在整个训练数据加载器之前进行迭代,会稍微减慢整个训练过程,建议打开。

  91. push_to_hub (bool, 可选, 默认为 False):指定是否在每次保存模型时将模型推送到Huggingface Hub。

  92. hub_model_id (str, 可选):指定要与本地 output_dir 同步的存储库的名称。

  93. hub_strategy (str 或 HubStrategy, 可选, 默认为 "every_save"):指定怎么推送到Huggingface Hub。

  94. hub_token (str, 可选):指定推送模型到Huggingface Hub 的token。

  95. hub_private_repo (bool, 可选, 默认为 False):如果设置为 True,Huggingface Hub 存储库将设置为私有。

  96. hub_always_push (bool, 可选, 默认为 False):是否每次都推送模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19774.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++ 优化,strlen 示例

目录 C/C optimization, the strlen examplehttps://hallowed-blinker-3ca.notion.site/C-C-optimization-the-strlen-example-108719425da080338d94c79add2bb372 揭开优化的神秘面纱... 让我们来谈谈 CPU 等等,SIMD 是什么? 为什么 strlen 是一个很…

性能测试

浅谈性能瓶颈之Mysql慢查询 1.开启测试环境的mysql数据库慢查询日志,然后在日志文件里自动记录这些慢查询,以及not using index的查询。数据库执行下面几个命令: set global slow_query_logon /*开启慢查询日志*/set log_queries_not_using_…

【AI+教育】一些记录@2024.11.11

《清华发布工具学习框架,让ChatGPT操控地图、股票查询,贾维斯已来?》 清华发布工具学习框架,让ChatGPT操控地图、股票查询,贾维斯已来?工具学习,清华天团让 ChatGPT 拿起专业工具https://mp.we…

图数据库 | 7、图数据库三大组件之一 之 图存储(下)

在图数据库中有三大组件——图计算、图存储以及图查询语言。上一个篇文章,老夫聊到了图存储,重点讲的是它的基础概念以及图存储引擎的架构设计中的一对重要概念——非原生图与原生图,接下来我们就聊聊关于图存储数据结构与构图的那些事儿吧。…

生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)

前言:今天演示下生产环境keepalived的部署方式,安装模式有很多,比如说主备模型和双主模型,主备分:抢占模式 和 非抢占模式。这里我会一一展开说具体怎么配置 一、双节点均部署Nginx: 第一步:上…

陶哲轩:计算机通用方法,往往比深奥的纯数学更能解决问题

刚刚,著名数学家陶哲轩在个人社交平台更新的几篇帖子,引起大家广泛的共鸣。 陶哲轩用浅显易懂的语言表达了自己对数学的理解与思考心得。 文中谈到了一个关于「度」的问题,陶哲轩表示在设计系统时,缺乏或者过度的数学分析可能都…

NewStarCTF2024-Week3-Web-WP

目录 1、Include Me 2、blindsql1 3、臭皮踩踩背 4、臭皮的计算机 5、这“照片”是你吗 1、Include Me 使用 data 协议,结合 base64 编码绕过 payload: ?iknow1&medata://text/plain;base64,PD89c3lzdGVtKCJ0YWMgL2ZsYWciKTs 拿到 flag&#…

java版询价采购系统 招投标询价竞标投标系统 招投标公告系统源码

在信息化飞速发展的今天,电子招投标采购系统已成为企业运营中的重要一环。这一系统不仅优化了传统的招投标流程,还为企业带来了诸多显著的价值。 首先,电子招投标采购系统极大地提高了工作效率。传统招投标过程中,企业需要耗费大…

小林Coding—Java「二、Java基础篇」

󠀲󠀲二 Java基础面试篇 数据类型 引用类型 类:Class接口:Interface数组:Array枚举:Enum自动装箱:int -> Integer 自动拆箱:Integer -> int // 下面代码会先自动拆箱将sum转为…

GBDT 算法

GBDT 梯度决策提升树是将一些弱分类决策树的结果加在一起,每一棵决策树对前一颗觉得树残差进行优化,从而使得总体的损失值达到最小。 GBDT 公式 Fm-1: 上一棵树的结果 α \alpha α: 学习率 hm(x): 当前树,通过训练调整结果,降低…

java~Lambda表达式

目录 Lambda和匿名内部类 语法 函数式接口 无返回值(无参、有参) 有返回值(无参、有参) 语法精简 四个基本的函数式接口 方法引用 实例方法引用 静态方法引用 特殊方法引用 构造方法引用 数组引用 集合 List、Set …

PyQt5信号与槽二

窗口数据传递 在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的;如果这个程序有多个窗口,那么还应该关心不同的窗口之间是如何传递数据的。对于多窗口的情况,一般有两种…

【java】多态

一、概念 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。 同一个事件发生在不同的对象上会产生不同的结果。 比如: public class Test {public static void main(String[] args) {Person xn…

使用Holoviews创建复杂的可视化布局

目录 一、Holoviews简介 二、安装Holoviews 三、Holoviews的基本概念 元素(Elements): 容器(Containers): 映射(Mappings): 四、基本用法 创建元素: …

Java2.1——异常

异常基本概念 一:程序出错 分类 : 编辑错误,逻辑错误,运行时错误 目的: 异常处理让程序出错了还运行,避免中止运行 二: 运行时错误 当出现编译时无法预料的问题,将运行错误报告…

2025年假期python,工作日python脚本求出 输出日期内容

# coding:utf-8 import datetime# 假设已知的节假日和调休安排 holidays [datetime.date(2025, 1, 1), # 元旦datetime.date(2025, 1, 28), # 春节datetime.date(2025, 1, 29), # 春节datetime.date(2025, 1, 30), # 春节datetime.date(2025, 1, 31), # 春节datetime.dat…

1TB! 台湾最新倾斜摄影3DTiles数据分享

之前的文章分享了546GB香港倾斜摄影3DTiles数据,主要是验证倾斜模型3DTiles转换工具的生产效率和数据显示效率,结果对比可以看出无论是数据生产速度以及成果数据显示效率上,都优于其他两种技术路线。最近使用倾斜模型3DTiles工具生产了台湾地…

ssm136公司项目管理系统设计与实现+jsp(论文+源码)_kaic

毕 业 设 计(论 文) 题目:公司项目管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本T公司项目管理系…

【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则

大家好,我是全栈小5,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言1、无法链接…

小车综合玩法--2.超声波避障

一、实验准备 通过超声波模块与小车结合,实现小车超声波避障。小车接线已安装,且安装正确 二、实验原理 通过超声波我们获取小车与障碍物的距离。当检测到小车与障碍物的距离小于我们的设置的距离时,小车左旋避开障碍物。 三、实验源码 #!…