目录
- 一、什么是模型微调
- 二、怎样微调模型
- 三、使用 LLaMa Factory 微调模型
- 四、在 Ollama 中运行微调模型
本文来源:极客时间vip课程笔记
一、什么是模型微调
- 模型微调,顾名思义,就是对模型微微做一些调整。为什么要做微调呢?如果可以的话,每个公司都想拥有一个属于自己的大模型。但是,现实比较残酷,训练一个大模型需要花太多的钱。按照一些大公司的说法,一个千亿参数的大模型,训练一次的成本大约需要几百万美元。这显然就超过一个普通公司承受的范围。虽然我们无法训练一个属于自己的大模型,但一个好消息是,我们可以做模型微调。
- 大模型是构建于神经网络基础之上的,神经网络可以理解成一个一个的神经元构建的网络。训练模型,就是在调整神经元之间的连接方式。一次完整的训练就相当于把所有的神经元连接都调整一遍,这个计算规模相当之大,是我们无法承受的。
- 所谓微调,就是把一个训练好的模型中的一部分连接重新调整。因为只做了一部分的调整,所以,规模就要小得多,训练成本也就要小得多。
- 前面说过,RAG 和模型微调可以解决同样的问题,从本质上说,就是把核心业务数据放在提示词里,还是放在模型里。
- 两种做法各有优劣。放到提示词里,优势就是做法比较简单,但其问题的关键在于能否取到恰当的数据。如果不能取到恰当的数据,就可能会出现“幻觉”问题,也就是大模型会一本正经地胡说八道。放到模型里,优势是数据准确性会提高,但前提条件是在训练的时候,要准备高质量的数据,否则就是“垃圾进,垃圾出”了,而微调好一个模型,并不是一件很容易的事情。
- 在工程实践中,二者往往是结合使用的。模型微调不是时刻在进行,所以,一些团队的做法是,用 RAG 的方式提取新的业务数据,积累到一定阶段,用这些数据进行模型微调,把这些数据内置到模型中,再把新模型替换到业务系统中。这样一来,既保证数据的新鲜,又保证了基本的服务质量。
二、怎样微调模型
模型微调,需要我们先选定一个模型。如果选定的模型是像 OpenAI 这样的闭源模型,就需要使用其对应的模型微调服务。不过,使用这种服务也就意味着要把数据提供出去。所以,很多团队的实际做法是,基于开源模型的微调。
具体的模型微调通常分成几个步骤:
准备训练数据
训练模型
评估结果
使用模型
这其中最耗时耗力的,应该是准备数据了。首先,微调大模型需要多准备一些数据,数据量过少,可能看上去完全不起作用。毕竟大模型那么多参数,如果只改动几个,占比太低,就和没改动效果差不多。其次,数据也要精心挑选一下,还是那句话:垃圾进,垃圾出。所以,这个过程不是技术活,而是一个体力活。什么数据是好数据?最好由一个懂业务的人说了算。
顺便说一下,因为准备数据耗时耗力,有人把一些整理好的数据开源了出来,Hugging Face 上有大量这种数据集。如果站在学习的角度,我们可以把这些数据集拿过来直接用。
我们知道了要准备数据,但数据格式是什么样的呢?这取决于模型微调的具体方式,比如,OpenAI 的模型微调需要把数据准备成下面这样:
{"messages":[{"role":"system","content":"Marv is a factual chatbot that is also sarcastic."},{"role":"user","content":"What's the capital of France?"},{"role":"assistant","content":"Paris, as if everyone doe