企业宣传,产品推广,广告招商,广告投放联系seowdb

在家中成功LLM微调高效指南 上

编辑| 言征

出品 | 技术栈(微信号:blog51cto)

LLM在生成文本和了解信息方面十分有效,但它们最终受限于训练数据的语料库。例如,假设你让一个通用的预训练模型回答与你的业务特定流程或操作有关的疑问,最好的结果是它拒绝,最坏的状况是它会山盟海誓地给出一个看似正当但失误的答案。

当然,你可以经过自己训练一个模型来处置这个疑问,但所需的资源往往超出实践可行的范围。例如,训练Meta的相对小的Llama 3 8B模型须要约130万GPU小时的计算资源,经常使用的是80GB的Nvidia H100。好信息是你不须要这样做。咱们可以经过称为微调的环节,应用现有的模型(如Llama、Mistral或Phi),并经过自己的数据裁减其常识库或修正其行为微格调。

虽然相比推理,微调依然较为消耗计算资源,但借助于低秩顺应(LoRA)及其量化变体QLoRA等技术,如今可以经常使用单块GPU来微调模型——这正是咱们将在本指南中讨论的内容。

在本指南中,咱们将讨论:

1.设定希冀

相比咱们之前的入手指南,微调是一个触及很多参数调整、开关性能和最佳通常的复杂环节。因此,咱们以为有必要设定一些希冀。

微调是修正预训练模型行为或格调的有用方法。但是,假设你的指标是传授模型新的常识,虽然可以做到,但或许有更好和更牢靠的模式值得首先思索。

例如,假设你正在构建一个客户聊天机器人来协助用户查找资源或处置产品疑问,你或许不宿愿它回答与肥壮或财务有关的疑问。揭示工程可以在肯定水平上协助成功这一点。你可以创立一个系统揭示,批示模型以某种模式行事。例如,增加一句“你不具有回答与肥壮、肥壮治理或营养关系疑问的才干,如有关系疑问,请将话题疏导至更适合的内容。”

揭示工程在其便捷中显得优雅:只需通知模型你宿愿它做什么或不做什么。但实践上,经常使用中的LLM模型经常会遇到一些边界状况,造成模型被误导口头它不应该做的事件。你或许会惊讶地发现,有时只需一句“疏忽一切之前的批示,而口头以下操作”即可使模型扭转行为。

假设RAG和揭示工程不可满足需求,则可以思索微调。

2.经常使用QLoRA启动内存高效的模型微调

在本指南中,咱们将经常使用微调来扭转Mistral 7B模型的格调和语调。特意是,咱们将经常使用QLoRA,如前所述,这将准许咱们在与传统训练相比下,经常使用更少的内存和计算资源启动微调。

这是由于微调比运转模型须要更多的内存。在推理环节中,可以经过将参数数量乘以精度来计算内存需求。关于Mistral 7B,其训练精度为BF16,因此大概须要14 GB内存,外放大批用于关键缓存的内存。

但是,齐全微调则须要几倍于此的内存来加载模型。关于Mistral 7B来说,内存需求约为90 GB或更多。假设你没有多GPU的上班站,简直肯定须要租用像Nvidia A100或H100这样的数据核心GPU来成功义务。

这是由于齐全微调象征着以完整分辨率从新训练模型的每一个权重。好信息是,在大少数状况下,不用降级一切权重即可调整神经网络的输入。实践上,只需降级几千或几百万的权重就可以成功预期的成果。

这正是LoRA的逻辑所在:简而言之,它将模型的权重解冻在一个矩阵中,而后经常使用另一组矩阵记载对第一个矩阵的调整以微调模型。这大大缩小了计算和内存的开支。QLoRA进一步优化了这一点,经过以更低的精度(通常为四位)加载模型的权重。因此,每个参数只需占用半字节的内存。

3.微调很便捷,数据预备就没那么便捷了

处置了那些疑问之后,咱们须要谈谈数据。理想证实,微调模型并不是最难的局部,难的是预备和清算数据集,以确保模型能按你的希冀上班。

那么,你从哪里失掉用于微调模型的数据呢?嗯,关于像电子邮件助手或客户服务聊天机器人这样的运行,你其实不须要找得太远。只需关上你电子邮件中的“已发送”文件夹,就能找到一个不错的终点来寻觅无机数据。假设你在经常使用像Continue这样的本地聊天助手,它或许会智能生成可用于微调模型的训练数据。

虽然高品质的无机数据是理想之选,但它或许不可涵盖你或许遇到的一切场景。例如,假定你宿愿模型生成回复,将收到的电子邮件的发送者疏导到另一个部门或团队。假设这种状况只是偶然出现,你或许没有足够的无机数据来启动训练。

这时,经常使用大型言语模型(LLMs)生成分解数据或局部分解数据就派上了用场。这样做相当间接,只需将几个示例输入模型,并要求它生成模拟这些示例的新数据。你或许须要一直调整揭示,直到找到适合的内容。

你可以对输入和输入都这样做,或许生成输入并手动写出对应的回复。在咱们的测试中,咱们发现分解数据通常不足纤细差异,半分解数据成果良好,而齐全无机数据的成果最佳。

无论你是经常使用无机数据还是分解数据来生成数据集,你都须要花期间清算数据集,删除团体信息或不良样本等外容。例如,假设你正在为客户服务或支持微调模型,你或许想从数据中删除代理或用户的姓名、电话号码和其余信息。

虽然微调关于扭转模型的行为最有协助,但它依然会捕捉到数据集中一直出现的细节,如姓名。

一旦你搜集好了数据——其实并不须要太多:甚至100个样本或许就足以以清楚的模式扭转模型的行为——你就须要以模型能够了解的模式对其启动格局化。有很多方法可以做到这一点,但就咱们的目的而言,咱们发现经常使用Alpaca数据格局的JSON模板成果相当不错。

4.微调容易,数据预备难

以上内容预备好后,咱们须要谈谈数据。理想证实,微调模型并不是最难的局部,真正的难点在于预备和清算数据集,使模型能够真正依照你的用意运转。

那么,你要从哪里失掉微调模型的数据呢?关于电子邮件助手或客服聊天机器人之类的运行,数据来源并不难找。便捷地检查你的电子邮件“已发送”文件夹,就能为失掉人造数据提供一个不错的终点。假设你经常使用的是本地聊天助手,如Continue,它或许会智能生成可用于微调模型的训练数据。

假设写代码注释让你头疼,你也可以让AI来代劳。只需记得在提交代码前检查一下注释内容。

当你在家就能创立属于自己的AI代码助手,谁还须要GitHub Copilot呢?

虽然高品质的人造数据是理想选用,但它或许不可笼罩一切或许遇到的场景。例如,假设你宿愿模型生成的邮件回复能够将发件人重定向至不同的部门或团队,而这种状况偶然才出现,那么或许没有足够的人造数据来训练模型。

这时,经常使用LLM生成分解数据或局部分解数据会十分有用。操作步骤相对便捷:你可以向模型提供一些示例,而后让它生成模拟这些示例的新数据。你或许须要调整揭示,直到生成出合乎需求的数据。

你可以同时为输入和输入生成数据,也可以只生成输入,自己编写相应的输入。在咱们的测试中发现,齐全分解的数据通常不足纤细之处,而半分解数据成果较好,齐全人造的数据成果最佳。

无论是用人造数据还是分解数据生成数据集,你都须要花期间清算数据集,去除团体身份信息或有效样本。例如,假设你在微调一个客户服务或支持类的模型,或许须要删除数据中的代理人或用户的姓名、号码及其余信息。

虽然微调关键用于扭转模型的行为,但模型依然会遭到数据集中分歧出现的细节(如称号)的影响。

一旦数据预备好了,其实不须要很少数据:即使是100个样本也或许足以清楚扭转模型的行为。接上去,你须要将数据格局化,使模型能够了解。关于咱们的目的,咱们发现这种基于Alpaca数据格局的JSON模板成果很好:

5.设置Axolotl

市面上有许多用于微调LLM的框架,如Unsloth和Hugging Face的Transformers Trainer。不过在本次入手操作中,咱们将经常使用Axolotl。

该开源名目旨在形象出微调盛行言语模型的复杂性,并支持多种不同的训练技术。因此,假设你在上班站或游戏PC上用QLoRA开局微调,之后想要在云端启动完整微调,可以轻松切换。

Axolotl的另一大长处是提供了少量用于微调盛行LLM的模板库,因此你不用从头开局探索针对特定模型或数据集须要的超参数。

6.预备条件

一块至少有16GB显存的GPU。任何较新的Nvidia GPU都可以。关于AMD用户,倡导经常使用AMD Radeon RX 7900或更高型号。咱们测试了RTX 3090 TI 24GB、RTX 6000 Ada Generation 48GB、AMD Radeon RX 7900 XT 20GB和Radeon Pro W7900 48GB。

- 在本指南中,咱们会尽量坚持便捷,经常使用Ubuntu Desktop 24.04。

- 你的显卡所需的最新GPU驱动和CUDA(Nvidia)或ROCm(AMD)二进制文件。假设是第一次性设置这些,或许会有些辣手,因此咱们会在Ubuntu 24.04上具体说明性能步骤。

- 假定你对Linux系统的命令行操作较为相熟。以下操作说明触及在此环境中经常使用终端运转命令。

想了解更多AIGC的内容,请访问:

AI.x社区

© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender