AI大模型的"三板斧"
一、大模型训练(Pre-training)
这是从零开始"创造"一个基础模型的过程,也是成本最高、技术最复杂的环节。
1. 概念
- 定义:在海量、广泛、无标注的互联网数据(如网页、书籍、代码、论文)上,通过自监督学习,让模型学习语言的通用规律、语法、知识、推理能力和世界常识。
- 核心目标 :得到一个具有强大"通用能力"的基座模型(Foundation Model),如 GPT-4、LLaMA、文心一言的底层。
2. 操作方式
- 数据准备:清洗、去重、过滤低质量/有害内容,构建PB级(1PB=1024TB)的高质量文本语料库。
- 模型架构 :通常采用Transformer架构(Decoder-only为主),设定参数规模(如70亿、1300亿、1.8万亿)。
- 训练任务 :最经典的是下一个词预测(Next Token Prediction)。模型根据上文预测下一个最可能的词,然后与真实词对比,计算损失,反向传播更新参数。
- 基础设施:需要数千甚至上万张GPU(如NVIDIA H100/A100),搭建高性能计算集群,训练时间从数周到数月,耗电惊人(成本数千万至上亿美元)。
3. 技术解决的痛点
- 知识匮乏:传统模型依赖人工标注,知识量有限且昂贵。
- 泛化能力差:传统模型只能处理特定任务,换一个场景就失效。
- 语义理解浅层:无法理解复杂上下文、隐喻、常识推理。
4. 价值
- 通用智能底座:提供了一个"通才",具备强大的语言理解和生成能力,是所有下游应用的起点。
- 零样本/少样本能力:训练好的模型无需额外数据,就能直接回答常识问题、写作文、翻译、编程。
5. 使用场景
- 构建基础大模型:如OpenAI训练GPT-4,Meta训练LLaMA。
- 作为通用AI引擎:提供给内部或外部进行后续微调。
- 直接对话:如ChatGPT的初始版本。
二、大模型微调(Fine-tuning)
在预训练模型的基础上,用特定数据"调教"模型,使其适应特定任务或领域。
1. 概念
- 定义 :在已训练好的基座模型上,使用少量、高质量、有标注的特定领域数据(如法律问答、医疗对话、客服对话),继续训练模型,调整其参数,使其在特定任务上表现更优。
- 核心目标:将"通才"变成"专才"。
2. 操作方式
- 全量微调(Full Fine-tuning):更新模型的所有参数。效果好,但计算成本高(需要大量GPU),且每个任务会得到一个独立的大模型副本。
- 高效微调(PEFT,如LoRA、Adapter) :目前最主流的方式 。
- LoRA(Low-Rank Adaptation):冻结原始模型的绝大部分参数,只在模型的关键层(如Attention层)旁插入少量可训练的低秩矩阵。训练时只更新这些微小矩阵。
- 优势:显存占用降低80%以上,训练速度快,模型文件小(仅几MB到几十MB),可以快速切换不同任务。
3. 技术解决的痛点
- 领域知识缺失:基座模型对专业术语、行业规则、特定格式(如法律文书、病历)不熟悉。
- 输出风格不符:基座模型回答可能过于通用、冗长或不符合企业要求的语气(如客服的礼貌、老师的耐心)。
- 指令遵循能力弱:基座模型可能不理解复杂的指令格式(如"用JSON格式输出")。
4. 价值
- 低成本定制:用很少的数据和算力,就能让模型适配企业私有业务。
- 性能飞跃:在特定任务上,微调后的模型效果远超通用基座模型。
- 数据隐私:企业可以在自己的服务器上,用私有数据微调模型,无需将数据上传到云端。
5. 使用场景
- 垂直领域模型:医疗问诊助手、法律合同审查、金融风控报告生成。
- 企业客服机器人:微调后能准确回答产品问题、处理退换货流程。
- 个性化AI助手:模仿特定作家的写作风格、特定角色的对话风格。
- 指令遵循优化:让模型学会严格遵循"系统提示词"中的格式要求。
三、大模型蒸馏(Knowledge Distillation)
将一个大而强的"教师模型"的知识,迁移到一个更小、更快的"学生模型"中。
1. 概念
- 定义 :训练一个小的"学生模型",去模仿一个大的"教师模型"的输出行为(通常是概率分布,即软标签)。学生模型的目标不是学习原始数据,而是学习教师模型的"思考方式"和"知识映射"。
- 核心目标 :在尽可能保持性能 的前提下,大幅缩小模型体积、降低推理延迟、减少部署成本。
2. 操作方式
- 数据生成 :使用教师模型(如GPT-4)对大量无标签数据(或特定任务数据)进行推理,生成"输入-输出"对,以及教师模型输出的概率分布(软标签,包含对每个候选词的置信度)。
- 训练学生模型 :训练一个小模型(如7B参数的学生模型,模仿70B的教师模型)。损失函数通常包含两部分:
- 蒸馏损失:学生模型的输出概率分布与教师模型的软标签之间的差异(如KL散度)。
- 真实标签损失:学生模型的输出与真实硬标签之间的差异(如交叉熵)。
- 迭代优化:通过调整蒸馏温度等超参数,让学生模型更好地捕捉教师模型的"暗知识"(如词与词之间的相似性、模糊边界)。
3. 技术解决的痛点
- 推理成本高:大模型(如GPT-4)推理慢、显存占用大、API调用费用高,无法用于高并发、低延迟场景(如实时聊天、边缘设备)。
- 部署困难:大模型无法部署在手机、IoT设备等资源受限的硬件上。
- 模型冗余:大模型包含大量参数,但很多参数对特定任务并非必要。
4. 价值
- 极致性价比:用1/10甚至1/100的算力,获得接近大模型90%以上的性能。
- 实时性:小模型推理速度极快(毫秒级),适合在线服务。
- 隐私与离线:可以部署在本地设备上,无需联网,保护用户隐私。
5. 使用场景
- 移动端AI:手机上的智能助手、实时翻译、图像描述。
- 边缘计算:智能摄像头、物联网设备上的语音识别与处理。
- 高并发API服务:电商、社交平台的实时内容审核、智能推荐。
- 模型压缩:将开源大模型(如LLaMA-70B)蒸馏成可本地运行的7B/13B模型。
四、当前行业现状
1. 预训练(即「训练」)
就是从 0 到 1 底座大模型:用万亿级文本、海量算力、顶级算法团队堆出来。
-
门槛:千亿 / 万亿显存算力集群、巨额电费、海量高质量语料、顶尖算法研究员团队
-
谁能玩:
-
只有顶级大厂
-
OpenAI、字节、阿里、DeepSeek、腾讯、百度这类。
-
-
小厂 / 个人:完全碰不起,算力、资金、数据、人才全卡死。
2. 模型蒸馏
把超大底座模型压缩成小模型:大模型学知识→教给小模型,保留能力、减小体量、降推理成本。
- 门槛:要有原始大模型、懂蒸馏算法、依然需要中大型算力
- 谁能玩:还是大厂 / 头部 AI 公司主导
- 小厂 / 个人:基本没法自己做完整蒸馏,最多用别人蒸馏好的开源小模型,不能自研蒸馏流程。
3. 微调(SFT / 有监督微调、LoRA、QLoRA)
在现成开源底座模型 基础上,用自己的行业数据、业务话术做定向适配。
-
门槛极低:
-
不用万亿算力,普通单机、甚至消费级显卡(3090/4090)就能跑;
-
不用顶尖算法团队,有教程、开源框架就能上手;
-
数据只要自己行业的几十条、几百条就能微调。
-
-
谁能玩:中小公司、创业团队、个人开发者、行业从业者全都能做。
总结对比表
| 维度 | 大模型训练 | 大模型微调 | 大模型蒸馏 |
|---|---|---|---|
| 核心目标 | 创造通用智能底座 | 适配特定任务/领域 | 压缩模型,提升效率 |
| 数据需求 | 海量(PB级)无标注数据 | 少量(千/万级)有标注数据 | 大量无标注数据 + 教师模型输出 |
| 计算成本 | 极高(千万-亿美元级) | 中等(全量高,LoRA低) | 中等(训练学生模型) |
| 模型大小 | 极大(70B-1.8T参数) | 与基座模型相同 | 远小于教师模型 |
| 核心价值 | 通用知识、零样本能力 | 领域专精、低成本定制 | 低成本、高速度、易部署 |
| 典型场景 | 构建GPT-4、LLaMA | 医疗助手、客服机器人 | 手机AI、边缘计算 |
一句话总结:
- 训练 :花大钱,造一个全能的博士。
- 微调 :花小钱,让博士专攻法律或医学。
- 蒸馏 :把博士的知识浓缩 成一本小册子,让一个聪明的高中生能快速执行博士的大部分工作。
附录:微调简易落地方案
1. 选底座模型(直接用开源现成的,不用自己训)
优先选适合微调、对消费级显卡友好的:
- 通用均衡:Llama3、Qwen 通义千问、DeepSeek-MoE 小参数量版
- 中文极强:Qwen-7B/14B、Llama3 中文微调版、百川、智谱开源版
- 显卡显存小(16G/24G)优先:7B 参数量 模型,QLoRA4bit 量化就能跑
2. 准备自己的微调数据
格式极简,就问答对就行,不用复杂标注:
plaintext
问:怎么申请公司报销?
答:1.整理发票 2.填写报销单 3.部门签字 4.提交财务审核
几十条就能出效果,几百条效果很稳,上千条就是行业专属模型。
3. 用最简方案微调(不用懂底层算法)
主流方案:QLoRA 低秩微调
特点:
- 单张 4090 24G 可跑 7B 模型 4bit 量化
- 训练不冻原模型权重,只训少量 LoRA 参数
- 耗时短:几十条数据几十分钟跑完
工具直接用现成开源栈:
Transformers + PEFT + TRL + AutoGPTQ
网上有一键启动脚本,改下数据路径、模型路径就能跑。
4. 合并模型 + 本地部署
- 微调完把 LoRA 适配器和原模型合并
- 用 Ollama、Text Generation WebUI 一键本地部署
- 可做成企业知识库、客服机器人、行业问答助手、私域 AI
5. 微调实践
适配:单张3090/4090/3060 消费级显卡,7B 模型 4bit 量化微调,个人 / 小厂直接用,改两行就能跑。
5.1 安装依赖
bash
pip install torch transformers datasets peft accelerate bitsandbytes scipy sentencepiece
5.2 完整微调代码
python
import torch
from datasets import Dataset
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig,
TrainingArguments,
pipeline
)
from peft import LoraConfig, PeftModel, get_peft_model, prepare_model_for_kbit_training
from trl import SFTTrainer
# ===================== 只需要改这3个配置 =====================
# 1. 选择开源底座模型(本地路径或HuggingFace地址)
MODEL_NAME = "Qwen/Qwen2-7B-Instruct"
# 2. 微调后LoRA保存路径
LORA_SAVE_PATH = "./qwen2-7b-lora-finetune"
# 3. 自己的问答训练数据
train_data = [
{"instruction": "公司怎么请假?", "output": "先在OA提交请假申请,直属领导审批后抄送人事即可。"},
{"instruction": "工资几号发?", "output": "每月10号统一发放上月薪资,遇节假日提前一天。"},
# 在这里无限加你的行业问答,格式照搬就行
]
# ============================================================
# 4bit 量化配置
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
# LoRA 配置
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
# 加载模型和分词器
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
quantization_config=bnb_config,
device_map="auto",
trust_remote_code=True
)
model = prepare_model_for_kbit_training(model)
model = get_peft_model(model, lora_config)
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"
# 构造数据集
ds = Dataset.from_list(train_data)
# 训练参数
train_args = TrainingArguments(
output_dir=LORA_SAVE_PATH,
per_device_train_batch_size=4,
gradient_accumulation_steps=2,
learning_rate=2e-4,
num_train_epochs=3,
logging_steps=10,
save_strategy="epoch",
fp16=True,
optim="paged_adamw_8bit",
report_to="none"
)
# 格式模板
def format_prompt(sample):
return f"用户:{sample['instruction']}\n助手:{sample['output']}"
# 启动训练
trainer = SFTTrainer(
model=model,
train_dataset=ds,
peft_config=lora_config,
dataset_text_field="instruction",
formatting_func=format_prompt,
max_seq_length=512,
tokenizer=tokenizer,
args=train_args,
)
if __name__ == "__main__":
trainer.train()
trainer.save_model(LORA_SAVE_PATH)
print("✅ LoRA 微调完成,已保存!")
5.3 使用方法
-
把
MODEL_NAME换成你想的开源模型:- 中文首选:
Qwen/Qwen2-7B-Instruct、DeepSeek-R1-Distill-Qwen-7B - 通用:
Llama-3-7B-Instruct
- 中文首选:
-
在
train_data里批量加你的行业问答、企业话术、专属知识 -
直接运行:
bash
python train.py
5.4 微调测试方法
新建infer.py:
python
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
MODEL_NAME = "Qwen/Qwen2-7B-Instruct"
LORA_PATH = "./qwen2-7b-lora-finetune"
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME, quantization_config=bnb_config, device_map="auto", trust_remote_code=True
)
model = PeftModel.from_pretrained(model, LORA_PATH)
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True)
def ask(query):
prompt = f"用户:{query}\n助手:"
inputs = tokenizer(prompt, return_tensors="pt").cuda()
outputs = model.generate(**inputs, max_new_tokens=200, temperature=0.7)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# 测试你的专属模型
print(ask("公司怎么请假?"))
模型微调虽然操作简单,但是微调出的模型是不是真正的适合你的公司、企业或者个人的需求,还需要微调人员进一步投入研究和不断地尝试;紧跟时下最新的微调实践方案,不懈的尝试和评估,才能将AI一点点变成我们的真正"好帮手"。