训练平台

Nvida 4090 24G

为什么选择llama2-7b

主要是因为显存大小限制,llama2-7b半精度,推理13G,实际使用会增加到17G,量化后会压缩。微调Lora时根据参数调节有时候会超过24G用到共享内存。

用什么平台训练

05 ‐ Training Tab · oobabooga/text-generation-webui Wiki · GitHub
LoRA Training | oobabooga/text-generation-webui | DeepWiki

训练过程

  • 数据集准备,特定格式

{

    "instruction,output": "User: %instruction%\nAssistant: %output%",

    "instruction,input,output": "User: %instruction%: %input%\nAssistant: %output%"

}
  • 训练参数

    • dataset:用于训练的数据集名称。

    • format:数据的格式,为"alpaca-chatbot-format"。

    • cutoff_len:截断长度,为512。影响显存

    • overlap_len:重叠长度,为128。

    • hard_cut_string:硬截断字符串,为"\n\n\n"。

    • lora_name:表示LoRA的名称。

    • lora_rank:LoRA的rank值,为16。尽量2的指数。秩的大小决定了模型的大小

    • lora_alpha:LoRA的alpha值,为32。权重缩放参数,lora_alpha/lora_rank得到一个系数,通常秩的两倍,模型收敛慢就适当加大,如果过拟合就适当减小。

    • batch_size:每个批次的样本数,为128。决定梯度稳定性,越大收敛越稳定,但需更多显存或梯度累积

    • micro_batch_size:每个微批次的大小,为4。用时间换显存‌。梯度累计步数=batch_size/micro_batch_size

    • always_override:如果为true,则始终覆盖现有的保存点或模型。

    • save_steps:每隔多少步保存一次模型。值为0.0表示不保存。

    • epochs:总共要训练的轮数(epoch),为3.0。整个训练数据集被完整遍历的次数。总步数=epochs*数据集样本数量/micro_batch_size

    • learning_rate:学习率,为3e-4。每次训练权重变化的幅度

    • lr_scheduler_type:学习率调度器的类型,这里使用的是线性学习率调度器。

    • warmup_steps:预热步数,为100.0。

    • stop_at_loss:当损失达到特定值时停止训练。

    • lora_dropout:LoRA的dropout率,为0.05。

    • eval_dataset:用于评估的数据集名称,为"school_math_val"。

    • eval_steps:每隔多少步进行一次评估,为100.0。

    • raw_text_file:原始文本文件的路径,这里为"None"。

    • newline_favor_len:新行优先长度,为128。

    • higher_rank_limit:是否有更高的rank限制,这里为false。

    • optimizer:使用的优化器,为"adamw_torch"。

    • train_only_after:仅在特定条件后开始训练,这里为空字符串。

    • add_eos_token:是否在每个序列的末尾添加EOS(End of Sequence)标记,这里为false。

    • min_chars:最小字符数,为0.0。

    • report_to:报告的目的地,这里为"None"。

用到了哪些技术框架?

transformers、torch、PEFT(Parameter-Efficient Fine-Tuning)

transformers初始化模型

peft注入Lora参数

torch开始训练

lr_scheduler_type 学习率调度器

恒定、线性衰减、余弦衰减

再结合warmup,达到稳定训练

warmup_steps 预热步数

缓解训练初期的不稳定性,学习率逐步加载到设置的值

总步数的1%慢慢加,直到一个合适的参数

怎么判断拟合程度?

training loss 稳步下降后趋于稳定,如果一直卡在高位比如说2就欠拟合,如果损失值骤降活很低0.1结合生成效果差过拟合

validation loss 停止下降开始上升表示过拟合

数据集怎么处理?

人工标注,处理成固定格式

文本截断加上重叠文本会影响样本数量,在资源充足的情况下,尽量不要截断,保留完整的上下文

训练一次时间是多久?

控制总步数,预热步数,秩的大小,梯度累积,整体在4小时左右,保证半个工作日能出结果。

LoRA作用域是在哪?

LoRA(Low-Rank Adaptation)主要作用于Transformer层 (Layer 0 - N),融合到权重矩阵,特别是对 注意力机制(Attention) 和 前馈网络(FFN) 起作用。 维度d*d变成 d*r r*d

还有什么推理框架?

llamafactory 专门训练模型的,提供了跟多的fine-tuning方式

有哪些微调方法?

Lora以及其变种作用于权重比较通用(文字,图片),平衡效率和性能

P-tuning v2,有时候prompt的构造效果也会影响下游的效果,将prompt进行微调,而且对每一层都添加入,适合文本生成

总结

深刻理解了什么叫 调参(算法)工程师

不断训练、验证和试错,犹如炼丹,获取金丹是个概率性事件,而且还是不能复现

所以训练框架的训练和验证速度才是王道