首页 A1训练模型 大模型训练增量预训练参数说明

大模型训练增量预训练参数说明

标题:大模型训练之增量预训练参数说明

在增量预训练过程中,通常需要设置三类或四类参数,模型参数、数据参数、训练参数和附加参数。

下面分别介绍这四个参数。

模型参数model_type 模型类型,如bloom、llama、baichuan、qwen等。

model_name_or_path 模型名称或路径。

tokenizer_name_or_path 分词器名称或路径。如果进行词汇扩展或剪枝,则tokenizer_name_or_path 和model_name_or_path 不同。

load_in_8bit 是否以8bit加载模型。

load_in_4bit 是否以4bit加载模型。

use_fast_tokenizer 是否使用快速分词器。

torch_dtype 张量数值类型

device_map设置指定设备(即在哪个显卡上)

数据参数dataset_name为数据集名称,使用数据集库中的数据。

dataset_config_name 数据集的配置名称,对应dataset_name参数。

train_file_dir 训练文件目录(本地)。

validation_file_dir 验证文件目录(本地)。

max_train_samples训练样本的最大数量。

6.max_eval_samples

评估样本的最大数量。

Streaming 设置是否为流输出模式。

block_size 块大小

overwrite_cache是否覆盖缓存

validation_split_percentage 验证分割比率。如果没有指定验证集,则需要从训练集中划分出来。

preprocessing_num_workers 预处理线程的数量。

keep_linebreaks是否保留换行符。

额外参数额外参数是需要使用不同的高效微调方法进行调整的参数。

use_peft 是否使用peft。

target_modules训练的目标模块。

lora_ranklora 方法中的Rank。

lora_dropoutlora 方法中的dropout 参数。

lora_alphalora 方法中的缩放因子。

module_to_save 已保存其他模块。主要在词汇扩展后使用,设置为\’embed_tokens,lm_head\’。

peft_pathlora 包的路径。

qlora是否使用qlora微调方法。

训练参数训练参数来自transformers.TrainingArguments。训练参数很多,下面一一介绍。

output_dir (str): 模型预测和检查点输出的目录

overwrite_output_dir (bool, 可选,默认为False) 如果此参数为True,则输出目录output_dir 将被删除并重新创建(如果已存在)。默认值为False

do_train (bool, 可选, 默认为False) 是否进行训练。

do_eval (bool, 可选) 是否评估验证集。

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

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) : 在执行后向/更新过程之前用于累积梯度的更新步骤数。

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

eval_delay (float, 可选) : 执行第一次评估之前要等待的时期或步骤,具体取决于评估策略。

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

weight_decay (float, 可选, 默认为0) : 在AdamW 优化器中,除了偏差和LayerNorm 权重之外,如果weight_decay不为零,则应用于所有层。

adam_beta1 (float, 可选, 默认为0.9): AdamW 优化器的Beta1 超级参数。

adam_beta2 (float, 可选, 默认为0.999) : AdamW 优化器的Beta2 超级参数。

adam_epsilon (浮点数,可选,默认为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\’\’cosine\’\’cosine_with_restarts\’\’polynomial\’\’constant\’\’constant_with_warmup\’warmup_ratio (float,可选,默认为0.0) : 当线性warmup从0达到learning_rate时每一步的学习率增长率。

Warmup_steps (int,可选,默认为0): 当线性warmup从0达到learning_rate时,warmup阶段的步数,这将覆盖warmup_ratio的设置。

log_level (str,可选,默认为被动): 设置主进程上使用的日志级别。可选值:

\’debug\’\’info\’\’warning\’\’error\’\’ritic\’\’passive\’log_level_replica (str,可选,默认为passive) : 控制训练过程中副本节点的日志级别。设置参数与log_level相同。

log_on_each_node (bool, 可选,默认为True) : 在多节点分布式训练中,是否使用“log_level”为每个节点记录一次,还是仅在主节点上记录一次。

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

logging_strategy (str 或[~trainer_utils.IntervalStrategy],可选,默认为\’steps\’): 训练期间使用的日志记录策略。可选值为:

\’no\’:训练期间不记录日志\’steps\’:在每个logging_steps阶段后记录日志\’epoch\’:在每个epoch后记录日志logging_first_step(bool,可选,默认为False) :global_step表示训练的全局步骤数。训练开始时,global_step 初始化为0,并在每次模型更新时自动递增。是否打印日志并评估第一个global_step。

logging_steps (int,可选,默认为500):如果logging_strategy=\’steps\’,则两个日志中的更新步骤数。

logging_nan_inf_filter (bool, 可选, 默认为True): 是否过滤掉日志中的nan和inf损失。如果设置为True,则每一步的loss如果是nan或者inf都会被过滤掉,平均loss会记录在日志中。

save_strategy (str 或[~trainer_utils.IntervalStrategy], 可选, 默认为\’steps\’) : 训练过程中,检查点保存策略,可选值为:

\’no\’:在训练过程中,不保存检查点。 \’epoch\’:每个epoch 完成后保存检查点。 \’steps\’:每个save_steps完成后保存检查点。 save_steps (int, 可选, 默认为500) : 如果save_strategy=\’steps\’, 则两个检查点保存的更新步骤数

save_total_limit (int, 可选) : 如果设置该值,检查点总数将受到限制,超过output_dir中数量的旧检查点将被删除。

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

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

37.seed(int,可选,默认为42):

训练开始时设置的随机种子。为了确保整个运行过程中的可重复性,可以使用~Trainer.model_init 函数来初始化模型的随机初始化参数。

data_seed (int, 可选) : 数据采样器的随机种子,它将用于数据采样器的再现性,独立于模型种子。

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

use_ipex (bool, 可选, 默认为False): 当intel 扩展可用时是否使用PyTorch。

bf16 (bool,可选,默认为False): 是否使用bf16 16 位(混合)精度训练而不是32 位训练。需要Ampere或更高的NVIDIA架构,或者使用CPU训练。

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

fp16_opt_level (str, 可选, 默认为\’O1\’):fp16 训练时,Apex AMP 优化级别选择,可选值为:[\’O0\’, \’O1\’, \’O2\’, \’O3\’]Apex 由NVIDIA 开发混合精度训练和优化工具库,主要用于加速深度学习模型的训练过程。

fp16_backend (str, 可选, 默认为\’auto\’): 该参数已被废弃,使用half_ precision_backend 代替。

half_ precision_backend (str, 可选, 默认为\’auto\’): 半精度计算的后端实现必须是这些值:

\’auto\’:是否使用CPU/CUDA AMP或APEX取决于PyTorch版本检测\’cuda_amp\’\’apex\’\’cpu_amp\’bf16_full_eval(bool,可选,默认为False):是否使用完整的bfloat16评估而不是32位。这会更快并节省内存,但可能会导致指示器损坏。

fp16_full_eval (bool, 可选, 默认为False) : 是否使用完整的float16 评估而不是32 位。这会更快并节省内存,但可能会导致指示器损坏。

tf32 (bool, 可选) : 是否启用TF32 模式,可用于Ampere 及较新的GPU 架构。默认值取决于PyTorch的torch.backends.cuda.matmul.allow_tf32的默认值。

local_rank (int,可选,默认为-1): 分布式训练中的进程数。在分布式训练中,每个进程(一般对应支持多线程的GPU卡)都会有一个特定的local_rank,用于标识该进程对应的GPU编号。 local_rank的起始编号为0,后续编号依次递增。

xpu_backend (str, 可选): xpu 分布式训练中的后端只能是\’mpi\’ 或\’ccl\’ 之一。

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表示数据由主进程加载

55.过去索引(int,可选,默认为-1):

某些模型(例如[TransformerXL](./model_doc/transformerxl) 或[XLNet](./model_doc/xlnet))使用过去的隐藏状态进行预测。如果这个参数设置为正数,Trainer使用相应的输出(通常是索引2)作为过去的状态,并将其作为mems参数提供给模型的下一个训练步骤。

run_name (str, 可选): 运行描述符。通常用于[wandb](https://www.wandb.com/) 和[mlflow](https://www.mlflow.org/) 日志记录。

disable_tqdm (bool, 可选) : 是否禁用Jupyter Notebooks 中~notebook.NotebookTrainingTracker 生成的tqdm 进度条和指示表。如果日志级别设置为警告或更低,则默认值为True,否则为False。

remove_unused_columns (bool, 可选, 默认为True): 是否自动删除模型前向方法未使用的列(TFTrainer 尚未实现此功能)。

label_names (List[str], 可选): 与我们输入字典的key列表一致的标签最终会默认为[\’labels\’],除非使用XxxForQuestionAnswering系列模型,最终会默认为[\’start_positions\’, \’ end_positions\’]。

load_best_model_at_end (bool, 可选, 默认为False) : 是否在训练结束时加载训练期间找到的最佳模型。当设置为“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 一起使用,指示良好的模型是否应该具有更好的指标值。

默认值:True:如果设置了metric_for_best_model,并且该值不是loss或eval_loss;否则,False:如果未设置metric_for_best_model,或者值为\’loss\’ 或\’eval_loss\’。

ignore_data_skip (bool, 可选, 默认为False): 恢复训练时,是否跳过之前训练时epoch和batch加载的数据。如果设置为True,训练将开始得更快,但不会导致或中断训练。产生相同的结果。

64. sharded_ddp(bool、str 或[~trainer_utils.ShardedDDPOption] 列表,可选,默认为False):

是否启用Sharded Distributed Data Parallel(简称ShardedDDP)以加快训练速度并提高效率。选项有:

\’simple\’:\’zero_dp_2\’\’zero_dp_3\’\’offload\’如果输入参数是字符串,则会以空格分隔。如果输入参数是bool,它将被转换为空的“False”列表和[\’simple\’] 的“True”列表。

fsdp (bool、str 或[~trainer_utils.FSDPOption] 列表,可选,默认为False) : 使用PyTorch 分布式并行训练(仅用于分布式训练)。选项:

full_shardshard_grad_opoffloadauto_wrap:使用default_auto_wrap_policy自动递归fsdp_min_num_params (int,可选,默认为0) :用于指定使用完全分片数据并行(FSDP)时可以分片的最小参数数量。 (仅在传递“fsdp”字段时有用)

deepspeed(str 或dict,可选): 使用Deepspeed。这是一个实验性功能,其API 可能会在未来发展。该值可以是DeepSpeed JSON 配置文件(例如ds_config.json)的位置或加载的JSON 文件(作为字典)。

label_smoothing_factor (浮点数,可选,默认为0.0): 要使用的标签平滑因子。它的取值范围在0到1之间。当label_smoothing_factor的值为0时,表示不使用标签平滑技术。此时,模型收到完整的one-hot 标签。当label_smoothing_factor的值大于0时,表示使用了标签平滑技术。这时,真正的标签将是加权平均。 value,其中每个标签的概率等于(1-label_smoothing_factor)/num_classes,其中num_classes表示标签的数量。

debug(str 或[~debug_utils.DebugOption] 列表,可选,默认为\’\’) : 启用一项或多项调试功能。这是一个实验性功能。选项有:

underflow_overflow: 检测模型输入/输出中的溢出并报告导致事件的最后一帧tpu_metrics_debug:在TPU 上打印指标这些选项以空格分隔。 optim(str 或[training_args.OptimizerNames],可选,默认为\’adamw_hf\’): 可以使用的优化器:

adamw_hfadamw_torchadamw_apex_fusedadafactoradafactor (bool,可选,默认为False): 该参数已被弃用,请使用–optim adafactor 代替

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\’、 \’tensorboard\’ 和\’wandb\’ 。使用“all”报告所有已安装的集成,将其配置为“none”以报告没有集成。

ddp_find_unused_parameters (bool, 可选) : 使用分布式训练时,通过find_unused_parameters 将此值传递给DistributedDataParallel。如果使用梯度检查点,则默认为false,否则为true。

ddp_bucket_cap_mb(int,可选

):使用分布式训练时,传递给“DistributedDataParallel”的标志“bucket_cap_mb”的值。
dataloader_pin_memory (bool, optional, defaults to True):当设置为True 时,在数据加载过程中,batch 数据会被放入 CUDA 中固定的固定内存,从而避免了从主内存到 GPU 内存的冗余拷贝开销,提升了数据读取的效率。
skip_memory_metrics (bool, optional, defaults to True):是否跳过将内存探查器报告添加到度量中。默认情况下会跳过此操作,因为它会降低训练和评估速度。
push_to_hub (bool, optional, defaults to False):每次当模型保存的时候,是否把模型推送到Hub。
80、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的值.
hub_strategy (str or [~trainer_utils.HubStrategy], optional, defaults to \”every_save\”):定义推送到hub的内容的范围以及何时推送到hub,可能的值有:
end:当~Trainer.save_model方法被调用的时候,会推送模型,推送它的配置、tokenizer(如果传给了Trainer)和model card 的草稿。every_save:在每次模型保存的时候,都会推送,推送它的配置、tokenizer(如果传给了Trainer)和model card 的草稿。推送是异步的,不会影响模型的训练,如果模型保存的非常频繁,则新的推送只会在旧的推送完成之后进行推送,最后的一个推送是在模型训练完成之后checkpoint:类似于 \”every_save\”,只是最后一个 checkpoint会被推送到名字为 last-checkpoint的子目录,它将方便我们使用 trainer.train(resume_from_checkpoint=\”last-checkpoint\”)重新开始训练。all_checkpoints: 类似于 \”checkpoint\” ,只是所有的checkpoints都推送,就像它们出现在输出目录一样 (这样你就可以在最终的仓库里面获取每一个checkpoint)hub_token (str, optional):用于将模型推送到Hub的token。默认将使用huggingface-cli login获得的缓存文件夹中的令牌。
hub_private_repo (bool, optional, defaults to False):如果为True, Hub repo将会被设置为私有的。
gradient_checkpointing (bool, optional, defaults to False):如果为True,则使用梯度检查点以节省内存为代价降低向后传递速度。
include_inputs_for_metrics (bool, optional, defaults to False):是否将输入传递给“compute_metrics”函数。这适用于需要在Metric类中进行评分计算的输入、预测和参考的度量。
auto_find_batch_size (bool, optional, defaults to False)是否通过指数衰减自动找到适合内存的batch size,避免CUDA内存不足错误.需要安装 accelerate (pip install accelerate)。
full_determinism (bool, optional, defaults to False)如果为 True,则使用enable_full_determinism替代set_seed来确保在分布式训练下获得可重复的结果。
torchdynamo (str, optional):用于设置TorchDynamo后端编译器的token。可能的选择是[“eager”,“nvfuser]。这是一个实验性API,可能会更改。
ray_scope (str, optional, defaults to \”last\”):Ray Tune 是一个开元的分布式超参数优化库,可以用于自动搜索最佳的超参数配置,以及并行化训练作业。使用Ray进行超参搜索的范围。
常用参数model_typemodel_name_or_pathtrain_file_dirvalidation_file_dirper_device_train_batch_sizeper_device_eval_batch_sizedo_traindo_evalmodules_to_savedeepspeeduse_peftqlorapeft_pathresume_from_checkpointload_in_8bitload_in_4bitseedfp16max_train_samplesmax_eval_samplesnum_train_epochslearning_ratewarmup_ratioweight_decaylogging_strategylogging_stepseval_stepsevaluation_strategysave_stepssave_strategysave_total_limitgradient_accumulation_stepspreprocessing_num_workersblock_sizeoutput_diroverwrite_output_dirddp_timeoutlogging_first_steptarget_moduleslora_ranklora_alphalora_dropouttorch_dtypedevice_mapreport_toddp_find_unused_parametersgradient_checkpointingcache_dir参考[1] https://github.com/huggingface/transformers/blob/06343b06335a1f8417bd32d3ffc7cf2cca9a24ac/src/transformers/training_args.py
[2] https://github.com/shibing624/MedicalGPT/tree/main
[3] https://blog.csdn.net/duzm200542901104/article/details/132762582

热门文章