【大模型】理论基础(4):通识扫盲,一文搞清楚大模型的分类、训练、微调、部署
摘要:本文系统介绍了大模型开发的核心流程和关键技术。首先阐述了预训练(获取基础能力)、微调(增强专项能力)和部署(模型服务化)的概念及相互关系。其次详细说明了基于HuggingFace标准的模型训练方法,包括代码库和可视化平台两种途径。然后列举了SFT、RLHF、DPO等主流微调技术,以及LORA、RAG等增强手段。最后对模型进行了系统分类,涵盖文本理解、生成、多模态等8大类典型任务,并指出虽然应

目录
想入门大模型,但是感到迷茫?本文一文理清楚大模型的整个脉络
1.什么是预训练、微调、部署
预训练:
模型一开始只是一个神经网络,预训练是指第一阶段的训练,第一阶段的训练会喂给模型第一波数据,模型会基于这些数据具有一些基础能力。比如在文本生成类的模型的预训练阶段,喂给模型海量的一些基础知识,模型就拥有了基于这些基础知识的一个文本生成能力,也就是对话能力。预训练出来的模型叫做基础模型(base model),市面上大量的文本生成类的基础模型在预训练阶段都会喂海量的基础通识类的数据,所以我们下载下来的基础模型,基本都可以进行一些通识类的对话。
微调:
经过预训练阶段后,诞生base model,模型已经有了通用的基本能力。通过微调让模型拥有某一方面的垂直能力或者横向的扩展能力。
部署:
模型预训练+微调后,会打包成一个可执行文件,交给推理引擎来执行,常用的推理引擎有vllm、Ollama,推理引擎和web server有点相似:
-
它们都是运行环境/容器,负责管理、调度和执行打包好的内容。
-
Tomcat加载Jar包(Web应用),监听HTTP端口,管理线程池,处理并发请求,并将请求路由到正确的Servlet。
-
推理引擎加载模型文件,监听API端口(如HTTP),管理计算资源(GPU),处理并发的推理请求,并高效地执行模型计算。
-
模型的调用遵循OpenAI标准,这是行业标准。
以上说的这些都是传统的模型部署平台,其实现在的训练平台llama factory、model scope等都是集成了训练和部署的全套能力。
2.如何去预训练、微调、部署
训练模型无非就是反复去调整模型的核心参数,让模型呈现出最终想要的效果。想调整这些参数的核心前提是模型把这些参数暴露出来,如果每个模型暴露核心参数的方式都不同的话,训练模型的代码就要根据模型来定制化编写。但是如果模型暴露参数的方式能够有一个统一的封装标准,那么就可以封装出一个工具库甚至说图形化的界面来对模型进行统一的操作。业内暂时是没有强制性的格式标准的,但标准这东西本身就是谁强大谁就能制定标准,目前最大的开源大模型集成平台是hugging face,可以将hugging face理解为AI 界的 GitHub。hugging face定义了一套模型的封装标准,可以把模型类比为一个"类",hugging face定义了:
-
模型的核心参数的变量名分别是什么?通过这些变量名就可以去调整核心参数
-
必须有一个启动方法
-
必须有一个初始化方法,初始化的时候可以给核心参数赋值
hugging face推出这套标准后,顺手也推出了一整套的python库来对满足这套标准的模型进行操作和训练。这就是大名鼎鼎的hugging face的transformers、dataset、tokenizer等一系列的库。
后来除了这些代码库外,还延伸了很多可视化的训练平台,诸如llama factory、model scope等,他们也是沿用了hugging face提出的一套模型封装标准,可以说目前所有的模型的统一训练、部署平台基本上都是沿用hugging face这套模型封装标准,所以也可以把hugging face这套标准看做就是大模型的封装标准。
于是我们可以总结出来,训练、部署模型有两种手段:
用hugging face的库来写代码训练和部署,或者用可视化的平台来训练和部署。
但是这一切的前提是:
模型必须满足hugging face的封装格式。
其实也可以简单粗暴的总结为:
不把模型按照hugging face的格式封装,就用不了开源的库和可视化工具来进行训练和微调,至于怎么将模型封装成hugging face的格式,查一下即可,很简单。
3.微调有哪些手段
在整个预训练、微调、部署的流程里面,其实应用侧的大模型工程师,一般只需要关注微调和部署,预训练一般是AI团队在开发的时候就预训练好了的。常用的微调手段如下:
-
SFT,监督微调
-
RLHF,强化学习
-
DPO,直接偏好优化
当然除了常用的手段之外为了模型用起来更好,还有两种增强手段:
-
LORA,加速微调
-
RAG,检索增强生成
这两种手段能让模型更快、更具有实时性。
4.模型的分类
AI模型不只有我们现在常听到的大语言模型,根据其完成的不同工作(说人话就是输出的东西不同),可以分为几个一级分类和二级分类:
-
文本理解类模型
-
文本分类(Text Classification)
-
命名实体识别(NER)
-
问答系统(Question Answering)
-
-
文本生成类模型
-
因果语言建模(Causal LM)
-
序列到序列生成 (Seq2Seq)
-
-
多模态模型
-
视觉问答
-
图像描述生成
-
文档理解
-
-
语言处理模型
-
语言识别
-
语言合成
-
音频分类
-
-
嵌入模型
-
文本嵌入、词嵌入
-
-
代码模型
-
代码生成
-
| 任务类别 | 主要模型类 | 典型任务 | 示例模型 |
|---|---|---|---|
| 文本分类 | SequenceClassification |
情感分析、主题分类 | bert-base-uncased |
| 命名实体识别 | TokenClassification |
实体抽取、词性标注 | dslim/bert-base-NER |
| 问答系统 | QuestionAnswering |
阅读理解、抽取问答 | deepset/roberta-base-squad2 |
| 文本生成 | CausalLM |
创作、对话、续写 | gpt2, llama-2 |
| 翻译摘要 | Seq2SeqLM |
机器翻译、文本摘要 | t5-small, facebook/bart-large |
| 语音识别 | SpeechSeq2Seq |
语音转文字 | openai/whisper-small |
| 图像理解 | VisualQuestionAnswering |
视觉问答 | dandelin/vilt-b32-finetuned-vqa |
| 文本嵌入 | AutoModel |
语义搜索、相似度 | sentence-transformers/all-mpnet-base-v2 |
| 代码生成 | CausalLM |
代码补全、生成 | Salesforce/codegen-350M-mono |
这个地方很容易把问答模型和文本生成模型搞混,问答模型是问答,文本生成模型是续写文本,这个要根据实际需求分开。
虽然模型的分类很多,但是大家又根本不用怕,因为现在模型的基座基本上都是transformer的架构的,只是输入和输出不同而已,但核心原理都是transformer那一套。所以不用惊慌,基本上大多数模型的训练方法都是通用的,都是用数据集结合工具去进行统一的训练、微调工作。甚至整个代码过程都是几乎一样的,只是输入输出不同!博主已经为大家准备好了完整的笔记:

我们后面基于这份笔记会给大家聊明白整个模型的微调过程。
更多推荐

所有评论(0)