微调优化
- 💡如果想要在某个模型基础上做全参数微调,究竟需要多少显存?
要确定全参数微调所需的显存量,需要考虑以下几个因素:
1.模型的大小:模型的大小是指模型参数的数量。
2.批量大小:批量大小是指在每次训练迭代中一次性输入到模型中的样本数量。较大的批量大小可以提高训练的效率,但也需要更多的显存
3.训练数据的维度:训练数据的维度是指输入数据的形状。如果输入数据具有较高的维度,例如图像数据,那么所需的显存量可能会更大
4.训练设备的显存限制:最后,需要考虑训练设备的显存限制。
- 💡为什么SFT之后感觉LLM傻了
Supervised Fine-Tuning(SFT)有监督微调
1.数据偏移:SFT过程中使用的微调数据集可能与基座模型在预训练阶段接触到的数据分布有所不同。
2.过拟合:如果微调数据集相对较小,或者模型的容量(参数数量)较大,模型可能会过拟合微调数据
- 💡SFT 微调数据 如何构建?
收集原始数据=>标注数据=>划分数据集=>数据预处理=>格式转换=>模型微调=>模型评估
数据转换:为适合模型训练的格式。将数据转换为文本文件、JSON格式或其他适合模型输入的格式
- 💡进行SFT操作的时候,基座模型选用Chat还是Base?
在进行Supervised Fine-Tuning(SFT)操作时,基座模型的选择也可以根据具体情况来决定
如果监督任务是对话生成相关的,比如生成对话回复或对话情感分类等,那么选择Chat模型作为基座模型可能更合适
如果监督任务是单轮文本生成或非对话生成任务,那么选择Base模型作为基座模型可能更合适。
- 💡训练中文大模型有啥经验
1. 数据预处理:对于中文文本,常见的预处理步骤包括分词、去除停用词、词性标注、拼音转换等。分词是中文处理的基本步骤
2. 数据增强:中文数据集可能相对有限,可以考虑使用数据增强技术来扩充数据集。例如,可以使用同义词替换、随机插入或删除词语、句子重组等方法来生成新的训练样本。
3. 字词级别的表示:中文中既有字级别的表示,也有词级别的表示。对于字级别的表示,可以使用字符嵌入或者字级别的CNN、RNN等模型。对于词级别的表示,可以使用预训练的词向量,如Word2Vec、GloVe等。
4. 预训练模型:可以考虑使用已经在大规模中文语料上预训练好的模型作为初始模型,然后在目标任务上进行微调。例如,可以使用BERT、GPT等预训练语言模型。这样可以利用大规模中文语料的信息,提升模型的表达能力和泛化能力。
5. 中文特定的任务:对于一些中文特定的任务,例如中文分词、命名实体识别、情感分析等,可以使用一些中文特定的工具或者模型来辅助训练。例如,可以使用THULAC、LTP等中文NLP工具包。
6. 计算资源:训练大模型需要大量的计算资源,包括GPU、内存和存储。可以考虑使用云计算平台或者分布式训练来加速训练过程。
7. 超参数调优:对于大模型的训练,超参数的选择和调优非常重要。可以使用网格搜索、随机搜索或者基于优化算法的自动调参方法来寻找最佳的超参数组合。
- 💡LoRA(low-rank adaptation) of large language models
- 为什么需要 PEFT? 参数高效微调
PEFT(Parameter-Efficient Fine-Tuning)是一种用于微调任务的性能估计和建模方法。Transformer的 PEFT 方法
它的主要目的是帮助研究人员和从业者在微调过程中更好地理解和预测模型的性能,并进行更有效的模型选择和调优。
- PEFT(参数高效微调) 和 全量微调区别?
PEFT(Parameter-Efficient Fine-Tuning)和全量微调(Full Fine-Tuning)是两种不同的微调方法
- 有哪些微调?
Adapter Tuning、LORA、Prefix-Tuning、Prompt Tuning、P-tuning、P-tuning v2


#Adding the adapters in the layers
model = prepare_model_for_kbit_training(model)
peft_config = LoraConfig(
r=16,
lora_alpha=16,
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM",
target_modules=["q_proj", "k_proj", "v_proj", "o_proj","gate_proj"]
)
model = get_peft_model(model, peft_config)
# Hyperparamter
training_arguments = TrainingArguments(
output_dir= "./results",
num_train_epochs= 2,
per_device_train_batch_size= 8,
gradient_accumulation_steps= 2,
optim = "paged_adamw_8bit",
save_steps= 1000,
logging_steps= 30,
learning_rate= 2e-4,
weight_decay= 0.001,
fp16= False,
bf16= False,
max_grad_norm= 0.3,
max_steps= -1,
warmup_ratio= 0.3,
group_by_length= True,
lr_scheduler_type= "constant",
report_to="wandb"
)
# Setting sft parameters
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
peft_config=peft_config,
max_seq_length= None,
dataset_text_field="chat_sample",
tokenizer=tokenizer,
args=training_arguments,
packing= False,
)
# Save the fine-tuned model
trainer.model.save_pretrained(new_model)
wandb.finish()
model.config.use_cache = True
model.eval()
Reference(参考文档)
本文来自博客园,作者:喝茶看猴戏,转载请注明原文链接:https://www.cnblogs.com/zdwzdwzdw/p/19029631

浙公网安备 33010602011771号