230人参与 • 2024-07-28 • rust
llm(大语言模型)微调一直都是老大难问题,不仅因为微调需要大量的计算资源,而且微调的方法也很多,要去尝试每种方法的效果,需要安装大量的第三方库和依赖,甚至要接入一些框架,可能在还没开始微调就已经因为环境配置而放弃了。
今天我们分享一个开源项目可以快速进行 llm 微调,它不单运行效率高,而且还可以在微调过程中进行可视化,非常方便,它就是:llama factory。
微调大型语言模型需要付出巨大的计算代价,因此高效微调技术应运而生。这些技术可分为两大类:优化型和计算型。
优化型技术:
冻结微调(freeze-tuning)是一种常见的高效微调方法,它将大部分参数固定不变,只微调解码器的少数几层。这种方式可以大幅降低训练成本,但也可能导致模型性能下降。
梯度低秩投影(galore)的做法是将梯度投影到一个低维空间,从而达到全参数学习的效果,但内存使用量大幅降低。这种方法在大模型上表现较好,因为大模型往往存在较多冗余,投影后损失不大。
低秩适配(lora)是一种非常高效的微调方法,它不会改变预训练模型的原始权重参数。相反,lora在需要微调的层上引入了一对小的可训练矩阵,称为低秩矩阵。在前向过程中,模型会对原始权重张量和lora低秩矩阵进行相乘运算,得到改变后的权重用于计算。而在反向传播时,只需要计算和更新这对小矩阵的梯度。
这种做法的优势是,可以在不存储新权重的情况下实现模型的微调,从而极大节省内存。对于大型语言模型,权重参数往往占用大部分显存,lora能让训练过程只需少量额外显存即可进行。
当结合量化(quantization)技术时,lora的内存优势就更加明显了。量化是将原本占用较多字节的float32/float16类型权重压缩为int8/int4等低比特类型表示,从而降低存储需求。量化后的qlora(quantized lora)能将参数内存占用从每个参数18字节降至仅0.6字节,是一种极高效的微调方案。
实验表明,lora和qlora在较小模型上的效果最为出众,能以最小的内存overhead获得与全量精调相当的性能。其中当结合量化技术时(qlora),内存占用会进一步降低。
另一种被称为分解权重低秩适配(dora)的方法,在lora的基础上进行了改进。dora将预训练权重矩阵分解为量级分量和方向分量两部分。它只对方向分量部分应用lora,而量级分量保持不变。
这样做的可能性是,预训练权重中的方向分量可能包含了更多任务相关的知识,而量级分量则更多地控制输出的数值范围。因此,只对方向部分进行低秩微调,可能会获得更好的效果。
dora相比lora的优势在于,使用相同内存开销时,往往能取得更高的性能。但它也增加了计算量,需要预先对权重进行分解。因此在不同场景下,lora和dora都有可能是更优选择。
lora、qlora和dora等优化型方法极大降低了llm微调的内存需求,是高效微调中不可或缺的重要技术。llamafactory框架对这些技术进行了很好的统一实现,大大简化了用户的使用流程。
llamafactory采用了模块化设计,可以灵活插入和切换上述各种优化技术。用户无需coding,只需在llamaboard界面上勾选所需方法即可。
计算型技术:
混合精度训练和激活重计算是最常见的两种节省计算量的方法。前者使用低精度(如fp16)来存储激活值和权重;后者则通过重新计算激活值来节省存储,从而降低内存占用。
闪电注意力(flash attention)是一种对注意力层进行优化的新算法,它以硬件友好的方式重新安排计算过程,大幅提高性能。s2注意力(s2 attention)则致力于解决长文本注意力计算时的内存开销问题。
此外,各种量化技术如llm.int8和qlora,能将权重和激活值压缩至低精度表示,从而节省大量内存。不过量化模型只能使用基于适配器的微调方法(如lora)。
unsloth则是针对lora层的反向传播进行了优化,降低了梯度计算所需的浮点运算数,加速了lora训练过程。
llamafactory将上述技术进行了整合,自动识别模型结构来决定启用哪些优化手段。用户无需关心技术细节,只需选择期望的内存占用和性能要求即可。同时,llamafactory还支持分布式训练加速等功能。但分布式训练要在cli上进行。国内很多大模型都是用这个技术微调的,这些数据来自作者的github的readme文档:
如果你也想尽快推出自己的大模型,这个框架肯定是你学习成本最小的方式。
llama-factory是一个统一的框架,集成了一套先进的高效训练方法。它允许用户通过内置的web ui灵活定制100多个llms的微调,而无需编写代码。
项目具有以下的特色:
与 chatglm 官方的 p-tuning 微调相比,llama factory 的 lora 微调提供了 3.7 倍的加速比,同时在广告文案生成任务上取得了更高的 rouge 分数。结合 4 比特量化技术,llama factory 的 qlora 微调进一步降低了 gpu 显存消耗。
llama factory 的部署安装非常简单,只需要按照官方仓库中的步骤执行即可,执行命令如下:
# 克隆仓库
git clone <https://github.com/hiyouga/llama-factory.git>
# 创建虚拟环境
conda create -n llama_factory python=3.10
# 激活虚拟环境
conda activate llama_factory
# 安装依赖
cd llama-factory
pip install -r requirements.txt
接下来是下载 llm,可以选择自己常用的 llm,包括 chatglm,baichuan,qwen,llama 等,这里我们下载 baichuan 模型进行演示:
# 方法一:开启 git lfs 后直接 git clone 仓库
git lfs install
git clone <https://huggingface.co/baichuan-inc/baichuan2-13b-chat>
# 方法二:先下载仓库基本信息,不下载大文件,然后再通过 huggingface 上的文件链接下载大文件
git_lfs_skip_smudge=1 git clone <https://huggingface.co/baichuan-inc/baichuan2-13b-chat>
cd baichuan2-13b-chat
wget "<https://huggingface.co/baichuan-inc/baichuan2-13b-chat/resolve/main/pytorch_model-00001-of-00003.bin>"
方法一的方式会将仓库中的 git 记录一并下载,导致下载下来的文件比较大,建议是采用方法二的方式,速度更快整体文件更小。
启动 llama factory 的 webui 页面,执行命令如下:
cuda_visible_devices=0 python src/train_web.py
启动后的界面如下:
界面分上下两部分,上半部分是模型训练的基本配置,有如下参数:
下半部分是一个页签窗口,分为train、evaluate、chat、export四个页签,微调先看train界面,有如下参数:
参数设置完后点击预览命令按钮可以查看本次微调的命令,确认无误后点击开始按钮就开始微调了,因为数据量比较少,大概几分钟微调就完成了(具体时间还要视机器配置而定,笔者使用的是 a40 48g gpu),在界面的右下方还可以看到微调过程中损失函数曲线,损失函数的值越低,模型的预测效果通常越好。
进入chat页签对微调模型进行试用。首先点击页面上的刷新断点按钮,然后选择我们最近微调的断点名称,再点击加载模型按钮,等待加载完成后就可以进行对话了,输入微调数据集中的问题,然后来看看微调后的 llm 的回答吧。
llama-factory由三个主要模块组成:模型加载器(model loader)、数据处理器(data worker)和训练器(trainer)。
在人工智能领域,大型语言模型(llm)微调(fine-tuning)是当下最热门的话题之一。总体来说llama factory 是一个非常优质的工具,在llm微调中帮助用户节省了大量的精力。
这些模型拥有惊人的语言理解和生成能力,但要微调和部署它们以适应特定任务,往往需要大量计算资源和专业知识,代码调试还得有深厚的技术功底。
如何学习ai大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的ai大模型资料包括ai大模型入门学习思维导图、精品ai大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云pai平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以langchain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以sd多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据ai应用开发,实现大模型理论、掌握gpu算力、硬件、langchain开发框架和项目实战技能, 学会fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论