概述
1. 技术迭代
-
注意力机制:让模型具有长距离关联/理解上下文的能力。
-
transformer架构:去除RNN依赖,让模型能够并行训练,使得模型可以学习海量数据。
-
微调:以更低的成本训练出在垂直领域性能更好的大模型。
2. 具象化
直观看,大模型就是一个文件.
-
下图的parameters文件是Meta llama-2-70b的模型文件,包含70B参数,大小约140GB;parameter文件'记录'了某个token出现在某一些token后的可能性。
-
run.c是推理程序,它从模型中'查询'结果。
现在更成熟的大模型,往往不是一个模型,比如GPT-4,就是由多个训练/微调的模型构成,不同的模型用于不同的场景/领域。
生态
生态很丰富,微软也有不少开源项目,平常用的比较多的:
1. Huggingface
Hugging Face huggingface.co/ 是自然语言处理(NLP)和机器学习平台,提供了数据、模型、应用的托管服务:
主要板块
-
Hugging Face Hub:类似于机器学习领域的 GitHub,上面有很多官方/个人训练的大模型、数据集、提示词、讨论、文章。
-
Hugging Face Spaces:这是 Hugging Face Hub 上的一项服务,提供了一个易于使用的 GUI,用于构建和部署托管的 ML 演示和应用程序。
-
Hugging Face Transformers:这是一个开源的 Python 库,提供了对数千种预训练的 Transformer 模型的访问。这些模型可用于多种任务,如文本分类、信息提取、问答、生成和翻译等。它简化了在 PyTorch、TensorFlow 和 JAX 等低级 ML 框架中训练或部署模型的复杂性。
模型与数据接入
2. Ollama
Ollama ollama.com/ 是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。它的特点是提供了一套类似于docker指令的命令行,可以很方便地向本地拉取,在本地运行并离线使用大模型。平常学习、开发的时候经常用到。
核心功能与特点
-
多种预训练语言模型支持:Ollama 提供了多种开箱即用的预训练模型,包括常见的 GPT、BERT 等大型语言模型。
-
易于集成和使用:Ollama 提供了命令行工具(CLI)和 Python SDK,简化了与其他项目和服务的集成。
-
本地部署与离线使用:Ollama 允许开发者在本地计算环境中运行模型,脱离对外部服务器的依赖。
-
支持模型微调与自定义:用户可以使用自己收集的数据对模型进行再训练。
-
性能优化:Ollama 提供了高效的推理机制,支持批量处理。
-
跨平台支持:Ollama 支持在多个操作系统上运行,包括 Windows、macOS 和 Linux。
-
开放源码与社区支持:Ollama 是开源的,拥有活跃的社区。
使用方法
ollama提供client命令行,使用方式和docker很像
-
下载和安装 Ollama:从 Ollama 官方网站下载并安装。
-
拉取模型 :使用 CLI 拉取模型,例如
ollama pull llama3:8b
。 -
运行模型 :通过
ollama run <model>
命令运行模型。 -
与模型交互:可以通过 CLI、Web UI 或 Python SDK 与模型进行交互。
3. 算力
怎么白嫖/廉价获取算力呢?
-
Kaggle: www.kaggle.com/
-
Google经营的算法Lab平台,可以在上面写文章,写代码,训练模型,免费提供每周30小时Nvida Teslar P100 / Nvida T4X2算力。
-
不提供VM操作接口,也就是在上面只能跑python程序,而不能控制操作系统。
-
-
AutoDL: www.autodl.com/home
-
可以租用4090,2元/小时
-
可以通过SSH连接到VM,你可以控制整个操作系统。
-
部署
1. 开发环境
TODO
2. 产品化
TODO
大模型相关技术
大模型领域相关的技术场景很多,预训练、微调、RAG、AI Agent、提示词工程、蒸馏、算法优化,甚至硬件。下面列举几个应用层面比较常见的。
1. 预训练
训练Base Model。需要的数据量和算力资源,个人不可能完成。
2. 模型微调(Fine Tunning)
大模型****微调(Fine-tuning) 是指在预训练的大型模型(如 GPT、BERT 等)基础上,利用特定领域或任务的数据进行进一步训练,使其适应具体应用场景的技术。预训练模型通过海量通用数据学习通用知识,而微调则通过少量领域数据调整模型参数,使其在特定任务(如文本分类、问答、生成)中表现更优。更多细节参考这篇文档Fine Tunning
常见微调方法:
-
全参数微调:更新模型所有参数,效果最佳但资源消耗大。
-
部分参数微调(PEFT):仅调整部分参数,如
-
LoRA **(低秩适配,** arxiv.org/abs/2106.09... 微软的几个中国researcher发表的论文)
-
Adapter(插入适配层)
-
Prompt Tuning(优化提示词)
等,节省计算资源。部分参数微调方法(如 LoRA)正逐渐成为主流,显著降低微调门槛。
-
主流大模型微调框架
框架名称
核心特点
适用场景
支持的微调方法
资源需求
主要优势
Hugging Face Transformers
集成主流预训练模型(如BERT、GPT、T5),支持参数高效微调(PEFT)和全参数微调
NLP任务快速实验、中小规模微调
LoRA、Adapter、Prompt Tuning、全参数
中
生态完善、易用性强、社区活跃
OpenAI API
通过API调用微调GPT系列模型,无需本地算力
生成类任务(如对话、创作),无本地算力的小规模场景
少量样本微调
低
快速部署、免维护
DeepSpeed
分布式训练框架,支持ZeRO显存优化技术
千亿参数级大模型全参数微调,多GPU/TPU集群
全参数
高
显存优化、支持超大规模模型
Colossal-AI
混合并行策略(数据/模型/流水线并行)
科研或企业级大规模训练(如百亿至万亿参数)
全参数
高
并行效率高、扩展性强
PaddlePaddle/PaddleNLP
中文生态友好,内置ERNIE等中文预训练模型
中文NLP任务(文本分类、信息抽取),国产化技术栈需求
全参数、LoRA
中
中文支持优秀、文档丰富
TensorFlow & Keras
灵活自定义模型结构,兼容TF生态系统
需要自定义模型或已有TF代码库的团队
全参数、部分参数微调
中
灵活性高、工业部署成熟
JAX/Flax
基于JAX的高性能计算,支持TPU加速
学术研究、对计算效率要求极高的任务(如强化学习+大模型)
全参数、自定义方法
高
TPU优化、计算性能极致
硬件资源
模型参数量
微调方法
GPU数量(A100 40GB)
数据集规模(参考)
备注
1B~3B
全参数微调
1~2
1M10M 样本(或 1B10B tokens)
单卡可运行,若用混合精度(FP16)和梯度检查点技术,显存占用更低。
LoRA/P-Tuning
1
100K1M 样本(或 100M1B tokens)
参数高效方法,显存需求下降 50%~70%,适合小样本任务。
7B~13B
全参数微调
2~4
10M100M 样本(或 10B100B tokens)
需 ZeRO 优化或模型并行,batch size 较小(如 4~8)。
LoRA/QLoRA
1~2
1M10M 样本(或 1B10B tokens)
QLoRA 支持 4-bit 量化,单卡可运行(如 24GB 显存)。
30B~70B
全参数微调
8~16
100M1B 样本(或 100B1T tokens)
需多卡并行(如张量并行 + DeepSpeed ZeRO-3),显存优化是关键。
LoRA/QLoRA
2~4
10M100M 样本(或 10B100B tokens)
显存需求约为全参数的 10%~30%,可降低硬件门槛。
175B+
全参数微调
32~64+
1B+ 样本(或 1T+ tokens)
需超大规模集群,企业级资源投入(如 GPT-3 微调)。
LoRA/AdaLoRA
8~16
100M500M 样本(或 100B500B tokens)
依赖分布式训练框架(如 Megatron-LM),成本仍较高。
实操:微调DeepSeek-R1-8B www.kaggle.com/code/mengli...
3. 检索增强生成(Retrieval-Augmented Generation)
通过引入外部知识库的信息,提升生成模型在问答、文本摘要等任务上的表现。 RAG 的核心流程分为三阶段:检索 → 增强 → 生成。
技术栈
组件
核心功能
关键技术
工具/模型示例
检索器
从外部知识库中检索与输入相关的文档片段
-
向量化检索(如余弦相似度)
-
稀疏检索(如BM25、TF-IDF)
-
混合检索(结合向量与关键词)
-
ChromaDB (向量化检索)
-
FAISS(高效向量搜索)
-
Milvus(分布式向量数据库)
增强器
整合检索结果与用户输入,优化上下文信息
-
上下文压缩(过滤冗余内容)
-
重排序(优化相关性)
-
多跳检索(分步细化查询)
-
LlamaIndex(节点解析)
-
Cohere Rerank
-
BAAI/bge-reranker(重排序模型)
生成器
基于增强后的上下文生成最终回答
-
大语言模型(LLM)生成
-
提示工程(Prompt设计)
-
后处理(格式校验、内容修正)
-
GPT-4、Llama 2(生成模型)
-
LangChain(流程编排)
-
Hugging Face(模型库)
基于检索增强的生成效果,很大程度上取决于检索器的能力,检索器需要准确检索出相关数据,生成器才能将这些数据生成准确可信的回答。
硬件资源
环节
是否需要 GPU
说明
检索器
通常不需要
检索依赖向量相似度计算或关键词匹配(如 Chroma/FAISS/Elasticsearch),可在 CPU 上高效运行。
增强器
可选
重排序(Reranking)或上下文压缩若使用小型模型(如 BGE 嵌入),可在 CPU 运行;大型模型需 GPU。
生成器
通常需要
大语言模型(如 GPT-4、Llama 2)生成文本时,GPU 可大幅加速推理;小模型(如 TinyLLaMA)可勉强用 CPU。
RAG vs. 微调
粗略来说,这两个技术都可以提升一个已经训练好的大模型在特定领域(往往是私有知识)的能力,但由于各自机制的不同,还是有各自更适合的场景。
方法
机制
适合场景
微调
提升模型的固有能力,无需依赖外部检索
拥有非常充足的数据
RAG
每次回答问题都需要检索知识库,回答质量很依赖于检索系统的质量。
只有少量数据,或数据经常被更新
-
少量不经常更新的知识数据:最好同时做微调和RAG;资源不足时优先做RAG。
-
经常更新的知识数据:RAG
-
大量不经常更新的知识数据:微调
-
大量经常更新的知识数据:这种场景很少见,两种方式都不适合,甚至这个也不是生成式AI擅长的领域。
4. Prompt Engineering
通过给大模型合适的prompt,让大模型更好地回答你的问题。
举例:
Manus使用的部分提示词
This content is only supported in a Feishu Docs
17岁高中生,通过提示词工程,让Claude的智能程度提升:
5. AI Agent开发
AI Agent放最后,是因为他是应用层面最复杂,但能力最强的一种应用场景,它让大模型具备执行能力。完成一个好的AI Agent往往需要集合微调、RAG、提示词工程等各种手段。Manus就是一个很好的例子,如果对Manus实现感兴趣,我们可以在github上找到一个民间大神手搓的OpenManushttps://github.com/mannaandpoem/OpenManus的源码。
应用举例:比如当我们对AI说"请帮我订一张从3月17日大约上午9点从上海出发去北京的机票,经济舱,靠后,靠走道位子的机票",我们期望它自动用我们的账号完成订票任务。ChatGPT做不到,需要在其基础上构建Agent带能完成。
实现原理:
简单说是依赖大模型的推理能力,将任务进行拆分成子任务(这个过程会是递归的,直到大模型觉得不需要再拆分,我们观察DeepSeek的思考过程,就很像这个任务拆分的过程),并根据子任务找合适的工具(需要人工告诉大模型有哪些可用工具),再执行对应的工具。
-
我们需要通过系统prompt告知大模型有哪些工具可以使用
-
当我们向大模型提出任务后,依赖大模型的推理能力,自主地将任务进行拆分,并自主匹配最合适的可用工具。
-
根据大模型返回的工具,进行调用
如果使用LangChain等框架,你可能不需要自己写prompt告诉大模型有什么工具可使用,也不需要手动去调用这些工具,LangChain框架会帮你封装这些操作。
举例:
天气查询Agent AI Agent Demo
6. 应用框架
LangChain现在看起来是应用最广的大模型应用框架www.langchain.com/
算法
1. ChatGPT训练过程
整个训练过程包括预训练、微调、强化学习。
This content is only supported in a Feishu Docs
假设你的prompt是:Explain the moon landing to a 6 year old in a few sentences. 下表是Base Model和Finetuned model给出的答复
Base Model
Explain the theory of gravity to a 6 year old.
Explain the theory of relativity to a 6 year old in a few sentences.
Explain the big bang theory to a 6 year old.
Explain evolution to a 6 year old.
Fine Tuned Model
People went to the moon, and they took pictures of what they saw, and sent them back to the earth so we could all see them.
2. Transformer
简单描述一下transformer架构,之前专门给transformer写了一篇文章,想了解更多的细节,可以看这篇文档Transformer。
下图是整个transformer的架构图,主要包含输入、Encoder、Decoder和输出四部分。对于ChatGPT来说,他只用了输入、Decoder和输出三部分。
2.1 输入模块
训练和推理时,输入的内容不太一样,但输入模块的处理方法都一样。先说处理方法,输入的序列会经历如下步骤:
-
Tokenize: 将序列转化为token
-
Embedding:大模型都有自己的词空间,即每个token都有对应的向量,所有token的向量组成了一个矩阵。transformer会根据上述token序列到词空间中寻找对应的向量组成新的矩阵,即Embedding矩阵。
-
Adding positional information:需要把所有input token的位置转化为位置矩阵,并于上述的Embedding矩阵相加,得到最终的输入矩阵。
以Google翻译任务为例:
这里用Google翻译任务为例,是因为它比较"比较标准地"使用了transformer架构;后续ChatGPT没有使用encoder,只使用了decoder,而且decoder中还去掉了"交叉注意力"模块
-
训练:
-
Encoder的输入是一串英文
-
Decoder的输入是对应的翻译过的完整中文。
-
-
推理
-
Encoder的输入是一串英文
-
Decoder的输入一开始是一个特殊的"Begin"字符,后续每次推理产生一个新字符,并加到decoder输入字符之后,再输入Decoder,直到Decoder输出特殊的'End'字符。
-
2.2 Encoder模块
将输入序列(如源语言句子)转换为富含上下文信息的中间表示,原论文中是由6个串联的子模块组成,每个子模块包含多头注意力模块、前馈神经网络和残差链接模块。输入是输入词嵌入矩阵和位置信息编码矩阵的和。
Encoder模块的简单执行流程:多头自注意力→残差连接+层归一化→前馈网络→再次归一化。
-
多头自注意力:从多个维度(即多头)捕捉长距离依赖,并行计算高效,例如"它"在句中可关联所有词。
-
残差链接+层归一化:主要用于解决深层神经网络训练中的梯度消失和模型退化问题。其核心思想是:让网络在训练过程中,能够直接传递原始输入信息,避免因层数过深导致的信息丢失。
-
前馈网络:通过非线性变换提取更抽象的特征,若自注意力层识别出"苹果"与"水果"相关,FFN可能进一步区分"苹果"是水果还是科技公司。
-
再归一化
2.3 Decoder模块
基于编码器的中间表示,逐步生成目标序列(如目标语言句子)。原论文中也是由6个相同的子模块串联而成,每个子模块包含掩码多头注意力模块、前馈网络、残差连接、交叉注意力模块、残差连接、前馈网络、归一化层组成。
执行流程和Encoder差不多,知识在归一化之后和前馈网络之前又增加了一轮"交叉多头自注意力→残差连接+层归一化",即:多头自注意力→残差连接+层归一化→交叉多头自注意力→残差连接+层归一化→前馈网络→再次归一化。
Decoder中各个子模块和Encoder差不多,唯一不同时多了"交叉多头子注意力模块",他的功能是帮助解码器动态聚焦相关输入信息,如生成法语词时关注英语原句,如回答问题时候关注原问题。
2.4 输出模块
TODO
Reference
【概述】www.51cto.com/article/809...
【FineTunning】www.bilibili.com/video/BV1hh...
【FineTunning】www.bilibili.com/video/BV13Z...
【AI Agent】www.bilibili.com/video/BV1FS...
【算法】cloud.tencent.com/developer/a...
【算法】blog.csdn.net/weixin_4247...
【算法】waylandzhang.github.io/en/transfor...
【算法】微软分布式训练框架(可训练ChatGPT)github.com/deepspeedai...
【算法】自己手搓一个transformer并训练一个"小"大模型 github.com/waylandzhan...