以下是关于高效微调技术 - LoRA 全量微调与少量参数微调的相关信息:
LoRA 微调:
全量参数微调:
此外,关于微调还有以下补充信息:
目前除了传统的全量训练和 freeze 冻结某些层方式,还发展出了很多种高效的微调方法,如 LoRA、Prefix Tuning、P-Tuning、Prompt Tuning、AdaLoRA、(IA)3、MultiTask Prompt Tuning 等。本篇主要采用 LoRA 方式,主要思路是训练一个参数量较小的分支,然后再与底模合并,从而在模型中注入新的知识。
LoRA微调脚本见:[train/sft/finetune_lora.sh](https://github.com/LlamaFamily/Llama-Chinese/blob/main/requirements.txt),关于LoRA微调的具体实现代码见[train/sft/finetune_clm_lora.py](https://github.com/LlamaFamily/Llama-Chinese/blob/main/train/sft/finetune_clm_lora.py),单机多卡的微调可以通过修改脚本中的--include localhost:0来实现。[heading6]全量参数微调[content]全量参数微调脚本见:[train/sft/finetune.sh](https://github.com/LlamaFamily/Llama-Chinese/blob/main/train/sft/finetune.sh),关于全量参数微调的具体实现代码见[train/sft/finetune_clm.py](https://github.com/LlamaFamily/Llama-Chinese/blob/main/train/sft/finetune_clm.py)。[heading5]Step4:加载微调模型[heading6]LoRA微调[content]基于LoRA微调的模型参数见:基于Llama2的中文微调模型,LoRA参数需要和基础模型参数结合使用。通过[PEFT](https://github.com/huggingface/peft)加载预训练模型参数和微调模型参数,以下示例代码中,base_model_name_or_path为预训练模型参数保存路径,finetune_model_path为微调模型参数保存路径。[heading6]全量参数微调[content]对于全量参数微调的模型,调用方式同模型调用代码示例,只需要修改其中的模型名称或者保存路径即可。
我还想说几句关于微调的话题。你可以通过提示工程取得很大进展,但也可以考虑微调你的模型。现在,微调模型意味着你实际上要改变模型的权重。在实践中做到这一点变得越来越容易,这是因为最近开发了许多技术,并为这些技术建立了代码库。例如,像LoRA这样的参数高效微调技术确保你只训练模型的小部分稀疏片段。模型的大部分被保持在基础模型的状态,只有一部分被允许改变。实际上,这仍然效果相当好,使得只调整模型的小部分变得成本更低。此外,由于你的模型大部分是固定的,你可以用非常低的精度来计算那些部分,因为它们不会被梯度下降法更新。这也使得整个过程更为高效。此外,我们有许多开源的高质量基础模型,就像我刚才提到的。我认为LLaMA很好,虽然我认为现在它还没有获得商业许可。需要记住的一点是,基本上,微调技术上更为复杂。它需要更多的技术专业知识才能做对。它需要人工数据合同承包商的数据集(和/或)可能相当复杂的合成数据流程。这肯定会大大减慢你的迭代周期。我想从高层次上说,SFT(有监督的微调)是可行的,因为你正在继续语言模型任务,这相对简单明了。但是,我会说RLHF(基于人类反馈的强化学习)是非常研究性的领域,甚至更难使之有效工作。因此,我可能不建议有人试图自己制作RLHF实现。这些东西非常不稳定,非常难以训练,目前我认为不是很适合初学者。并且,它也可能仍然在快速变化。
累积了足够的“专业”数据以后,我们就不满足于只采用prompt方式来提取信息,进而可以打造自己的虚拟助手了。目前有两种主流的实现方案,用向量数据库作为仓库,大模型整合信息输出;另一种直接微调训练自己的模型。(不过微调的算力要求比prompt要高很多)除了传统的全量训练和freeze冻结某些层方式以外,最近发展出了很多种高效的微调方法:1.LoRA:LORA:LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS2.Prefix Tuning:Prefix-Tuning:Optimizing Continuous Prompts for Generation,P-Tuning v2:Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks3.P-Tuning:GPT Understands,Too4.Prompt Tuning:The Power of Scale for Parameter-Efficient Prompt Tuning5.AdaLoRA:Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning6.(IA)3:Few-Shot Parameter-Efficient Fine-Tuning is Better and Cheaper than In-Context Learning7.MultiTask Prompt Tuning:Multitask Prompt Tuning Enables Parameter-Efficient Transfer Learning本篇主要采用LoRA方式,主要思路就是训练一个参数量较小的分支,然后再与底模合并,从而在模型中注入新的知识。