AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


研究篇| 一款深入浅出的微调框架
发布日期:2024-05-27 07:28:10 浏览次数: 2493 来源:程序猿阿三



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.gitcd LLaMA-Factorypip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"pip install --no-deps xformers<0.0.26pip install .[torch,bitsandbytes] # 根据实际需要, 具体可以看setup.py的extra_require变量,可选的额外依赖项:torch、metrics、deepspeed、bitsandbytes、vllm、galore、badam、gptq、awq、aqlm、qwen、modelscope、qualityexport USE_MODELSCOPE_HUB=1 #一般国内无法直接下载hugging face的模型,可以使用魔塔方式

3.2 LLaMA Board 可视化微调

LLama factory 为很多初学者提供webui 微调, 大大降低了使用门槛, 不过这种方式只能使用单GPU训练, 分布式训练还是必须用命令行, 这种方式对于初学者足够用了。
pip install --upgrade huggingface_hubhuggingface-cli loginGRADIO_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是一款深入浅出的微调框架, 如果不想了解过多微调原理,可以方便快速上手, 如果想深入,可以看一下框架的实现代码,参考相关论文(注:下图来源于网络)



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询