之前利用MedicalGPT跑过了《微调实操一: 增量预训练(Pretraining)》、《微调实操二: 有监督微调(Supervised Finetuning)》、《微调实操三:人类反馈对语言模型进行强化学习(RLHF)》、《微调实操四:直接偏好优化方法-DPO》等微调大模型实战, 其中MedicalGPT代码相对还是比较乱, 今天介绍一款开源star20K+的微调框架, 它是中国人开发, 代码结构相对MedicalGPT可阅读性强, 并且可扩展性也相对好很多, 这款框架的名称是LLaMA Factory.
01 为什么要微调
从计算资源成本上看, 之前在《【小白入门篇6】常识|怎么计算模型需要的资源》中介绍了模型训练需要大量的计算资源,一般情况下,个人和企业是无法承担的成本,所以微调的方案就出来, 关于微调的方式也很多,大部分微调方式都是固定模型参数(freeze model), 可以降低计算梯度等内存空间, 从而实现小参数撬动大模型, 关于更多的微调方法可以查看《微调入门篇:大模型微调的理论学习》文章, 目前微调方法也是日新月异, 请大家保持积极学习的心态.
从应用视角看, 微调是将通用模型专门化,使其更适合特定任务。通过微调,模型能够处理更多数据并从中学习,提高准确性和一致性, 从而提高模型场景应用效率。微调还能减少模型的误差和幻觉,提供更专业的回答.
从程序员找工作看,微调是一个可以深入模型开发, 有一定技术门槛, 相对之前说过智能体、RAG应用来看, 在程序员转型大模型来说, 更有项目亮点, 更难拿到心仪的offer.
从实际使用场景来看, Rag方向虽然能够解决大模型在垂直领域知识的扩充,但是在召回知识量和准确性而言, 不一定让使用者满意,此时有些团队就想从微调方向来改进模型的表现
.......
02 LLaMA Factory简介
LLaMA factory 框架是基于 LoRA 微调方法开发的, Lora微调是一种非常高效的微调方法,它不会改变预训练模型的原始权重参数。
LoRA在需要微调的层上引入了一对小的可训练矩阵,称为低秩矩阵。在前向过程中,模型会对原始权重张量和LoRA低秩矩阵进行相乘运算,得到改变后的权重用于计算。而在反向传播时,只需要计算和更新这对小矩阵的梯度, 相比ChatGLM提供的P-Tuning方法,有 3.7 倍的加速比.结合量化技术(Qlora) 可以进一步完成GPU显存的消耗.
除此之外, LLamaFactory 项目还引入计算型技术进一步优化显存使用,比如低精度存储(FP16)、闪电注意力(Flash Attention)注意力层进行优化的新算法、Unsloth优化LoRA层反向传播机制,降低了梯度计算所需的浮点运算数,加速了LoRA训练过等, 总之LLama Factory为我们封装了很多微调算法以及优化技术, 用户无需关心技术细节,只需选择期望的内存占用和性能, 以下是LLama Factory项目的特色:
-
多种模型:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。
-
集成方法:(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练和 ORPO 训练。
-
多种精度:32 比特全参数微调、16 比特冻结微调、16 比特 LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8 的 2/4/8 比特 QLoRA 微调。
-
先进算法:GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 Agent 微调。
-
实用技巧:FlashAttention-2、Unsloth、RoPE scaling、NEFTune 和 rsLoRA。
-
实验监控:LlamaBoard、TensorBoard、Wandb、MLflow 等等。
-
极速推理:基于 vLLM 的 OpenAI 风格 API、浏览器界面和命令行接口。
-
无需魔法: 实现了hugging face和魔塔方式下载模型和数据集,大大方便了很多开发者。
03 LLaMA Factory部署
3.1 基础依赖安装
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install --no-deps xformers<0.0.26
pip install .[torch,bitsandbytes] # 根据实际需要, 具体可以看setup.py的extra_require变量,可选的额外依赖项:torch、metrics、deepspeed、bitsandbytes、vllm、galore、badam、gptq、awq、aqlm、qwen、modelscope、quality
export USE_MODELSCOPE_HUB=1 #一般国内无法直接下载hugging face的模型,可以使用魔塔方式
3.2 LLaMA Board 可视化微调
LLama factory 为很多初学者提供webui 微调, 大大降低了使用门槛, 不过这种方式只能使用单GPU训练, 分布式****训练还是必须用命令行, 这种方式对于初学者足够用了。
pip install --upgrade huggingface_hub
huggingface-cli login
GRADIO_SHARE=1 llamafactory-cli webui
3.3 LLaMA CLI 微调
如果想要多卡训练,并且对微调参数比较熟悉的经验者,可以考虑这种方式, 修改模型配置更加灵活.
# 以sft训练为例
CUDA_VISIBLE_DEVICES=0,1 llamafactory-cli train examples/lora_single_gpu/llama3_lora_sft.yaml
04 LLaMA Factory实际场景
LLaMA Factory已经有很多实际场景落地,经过群众实践检验:
-
StarWhisper: 天文大模型 StarWhisper,基于 ChatGLM2-6B 和 Qwen-14B 在天文数据上微调而得。
-
DISC-LawLLM: 中文法律领域大模型 DISC-LawLLM,基于 Baichuan-13B 微调而得,具有法律推理和知识检索能力。
-
Sunsimiao: 孙思邈中文医疗大模型 Sumsimiao,基于 Baichuan-7B 和 ChatGLM-6B 在中文医疗数据上微调而得。
-
CareGPT: 医疗大模型项目 CareGPT,基于 LLaMA2-7B 和 Baichuan-13B 在中文医疗数据上微调而得。
-
MachineMindset:MBTI性格大模型项目,根据数据集与训练方式让任意 LLM 拥有 16 个不同的性格类型。
-
Luminia-13B-v3:一个用于生成 Stable Diffusion 提示词的大型语言模型。[🤗Demo]
-
Chinese-LLaVA-Med:中文多模态医学大模型,基于 LLaVA-1.5-7B 在中文多模态医疗数据上微调而得
......还有一些论文等
05 LLaMA Factory项目结构
LLama项目结构还是相对我之前微调参考MedicalGPT的代码更加清楚,主要可以分为应用层(User Interface)、模型加载器(Model Loader)、数据处理器(Data Worker)、训练器(Trainer)和模型评估(eval)。
-
应用层: web端、cli端、丰富参数配置以及完备的训练场景监控, 包括api方式保留,用户可以自定义前端
-
模型加载器:支持hugging face和魔塔下载, 支持量化、适配等操作
-
数据处理器: 支持hugging face和魔塔下载,支持对齐、补齐等操作
-
训练器: 主要支持lora方式微调, 支持 (增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练和 ORPO 训练方法。
06 总结
在人工智能领域,大型语言模型(LLM)微调(Fine-Tuning)是当下最热门的话题之一。虽然LLaMA Factory不是唯一的微调框架, 比如还有star30+的DeepSpeed等, 目前LLaMA Factory也已经集成了这个框架, 同时它有完善中文文档,和中国生态,总体来说LLaMA Factory 是一个非常优质的工具,在LLM微调中帮助中国用户节省了大量的精力。LLaMA Factory是一款深入浅出的微调框架, 如果不想了解过多微调原理,可以方便快速上手, 如果想深入,可以看一下框架的实现代码,参考相关论文(注:下图来源于网络)
LLaMA Factory 免费web端体验地址:
推荐阅读:
微调实操二: 有监督微调(Supervised Finetuning)
更多合集文章请关注我的公众号,一起学习一起进步:
本文使用 文章同步助手 同步