本文介绍一种大语言模型微调的方法,使用的工具是我最近在用的 Text Generation WebUI,它提供了一个训练LoRA的功能。
LoRA是什么
LoRA之于大语言模型,就像设计模式中的装饰器模式:装饰器模式允许向一个对象添加新的功能,而不改变其结构。具体来说,装饰器模式会创建一个装饰类,用来包装原有的类,并在保持原有类方法签名完整性的前提下,提供额外的功能。
LoRA,全称为Low-Rank Adaptation,是一种微调大型语言模型的技术。LoRA通过向大型语言模型添加一层额外的、低秩的可训练权重,来增强或调整模型的功能,而不需要改变原有模型的结构或重新训练整个模型。这就像是用装饰器包装了一个对象,增强了其功能,但没有改变原有对象的本质。
LoRA的关键思想是在模型的某些部分(通常是Transfomer注意力机制的权重矩阵)中引入低秩矩阵(低秩就是矩阵的行和列相对大模型的矩阵比较少)。在前向传播和反向传播过程中,这些低秩矩阵与大模型的权重矩阵相结合,从而实现对模型的微调。
相比完整的训练,LoRA训练具备两个明显的优势:
-
高效:微调过程中需要的计算资源和存储空间相对很少,如果训练数据只是几千条对话数据,我们可以在分钟级的时间内完成微调。
-
灵活:因为引入的参数数量相对较少,可以在一定程度上避免过拟合问题,使得模型更容易适应新任务。
因此,研究人员和开发者使用LoRA,可以在不牺牲模型性能的前提下,以较低的成本对模型进行有效的定制和优化。
工具安装
Text Generation WebUI 是一个开源项目,提供了一个Web界面方便大家做模型的推理和训练,大家可以在Github上下载到这个程序:
https://github.com/oobabooga/text-generation-webui
安装比较简单,如果遇到问题,欢迎留言讨论。
为了方便测试,我在云环境也创建了一个镜像,相关的环境都配置好了,可以直接使用几个国内开源的大语言模型,比如清华智谱的ChatGLM3-6B、零一万物的Yi-34B,还有最近阿里云开源的Qwen1.5-32B。
镜像使用方法:
1、访问AutoDL(https://www.autodl.com),注册个账号,充上几个米,金额要大于所租用服务器的小时单价。
2、GPU型号:最好选择 3090 或者 4090。因为大模型需要的显存一般都不低,6B、7B的模型做推理都需要15G左右的显存。GPU数量选择1个就够了。
3、镜像:选择“社区镜像”,输入 yinghuoai-text-generation-webui ,即可选择到我分享的镜像。
4、服务器开机后,点击“JupyterLab”进入一个可编程的Web交互环境。
5、镜像内置了一个“启动器”,点击其中的启动按钮可以直接启动WebUI。
程序默认加载的是阿里开源的 Qwen1.5-7B-Chat 模型,你也可以更换别的模型,只需要去掉命令前边的“#”,注意同时只能加载一个模型,其它模型不使用时,请使用“#”注释掉。
6、在下方的日志中看到类似输出的时候,就代表启动成功了。其中的 https://xxx.gradio.live 就是WebUI的链接,点击就可以在浏览器打开它的使用界面。