🚧模型微调
模型微调(Fine-Tuning) 是指在一个预训练的基础模型上,使用特定领域或特定任务的数据进行进一步训练,以使模型能够在特定任务上表现得更好。例如对计算机科学的名词翻译进行微调,可以提高翻译的准确性。
基础知识
微调有三种方法:LoRA 微调、冻结层微调、全量微调。
以微调一个 14B 参数的大型语言模型为例,以下是对三种常见微调方法的硬件需求和大致时间的估算:
LoRA 微调
硬件需求:
- 显存:~24GB显存以上即可(如 NVIDIA RTX 3090 或 A100)。LoRA主要通过冻结大部分模型参数,仅在少量层中插入低秩适配模块,因此显存需求较低。
- GPU 数量:单卡或 2 卡即可应付中等规模的微调任务。
时间估算:
- 小规模数据(如数十万条数据,100k steps以内):几个小时到 1 天。
- 大规模数据(如百万条数据,300k steps):2-3 天。
优点:
- 高效,显存需求低,适合个人开发者或中小型实验室。
- 微调后的模型参数(LoRA 插件)仅几百 MB,方便存储和共享。
冻结层微调(Freeze)
硬件需求:
- 显存:需要 48GB 以上显存(如 A6000 或 80GB A100)。冻结大部分模型参数,微调后几层或部分特定模块。
- GPU 数量:1-4 张高性能 GPU。
时间估算:
- 小规模数据:1-2 天。
- 大规模数据:3-5 天。
优点:
- 显存需求较低,性能适中。
- 微调时间比全量微调短,但仍需较多资源。
全量微调(Full Fine-tuning)
硬件需求:
- 显存:需 80GB 显存以上的高性能 GPU(如 NVIDIA A100 或 H100)。14B 参数模型通常需要 4 卡或更多 GPU 的分布式训练。
- GPU 数量:4-8 张 A100(或等效)GPU。对于超大模型,可能需要更多。
时间估算:
- 小规模数据:2-3 天。
- 大规模数据:5 天到 1 周甚至更长。
优点:
- 微调灵活性最高,可以针对特定任务完全优化模型。
- 模型质量可能略高于 LoRA 和冻结层微调。
缺点:
- 显存需求高,成本昂贵。
- 微调后模型体积巨大,通常需要数百 GB 存储。
有些框架可以以时间换空间,例如使用梯度检查点:在显存不足时保存中间计算结果,降低瞬时显存需求。或者以精度换空间,例如使用混合精度训练:可以显著减少显存需求和训练时间。有兴趣可以自行搜索。
LLaMA-Factory
LLaMA-Factory 是基于 LLaMA 的模型微调框架,支 持 LoRA 微调、冻结层微调、全量微调。既可以通过 WebUI 微调,也可以通过命令行微调。
项目地址:https://github.com/hiyouga/LLaMA-Factory
安装
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install --no-deps -e .
启动WebUI
llamafactory-cli webui