← 返回首页
第一阶段:基础理论

模块 00 — AI 与大模型概述

⭐ 入门 | 预计学习时间:60 分钟

一、AI 发展史:从符号主义到大模型

理解大模型,首先要理解 AI 的三次范式转移。范式转移(Paradigm Shift)指的是:整个领域看待问题、解决问题的方式发生了根本性的变化——不是小修小补,而是「换了一套打法」。

timeline title AI 发展史关键里程碑 1956 : 达特茅斯会议
符号主义诞生 1986 : Rumelhart反向传播算法
连接主义复兴 1997 : LSTM提出
解决序列长依赖 2012 : AlexNet
深度学习革命 2017 : Transformer
"Attention is All You Need" 2018 : GPT-1 / BERT
预训练范式确立 2020 : GPT-3 (175B)
涌现能力出现 2022 : ChatGPT
RLHF引爆公众认知 2023 : GPT-4 / LLaMA
多模态+开源双线 2024 : DeepSeek V3 / Claude 3.5
推理能力突破 2025-2026 : Agent时代
从对话到行动

📌 时间线里的术语速查:图中提到的 RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)是指:人类标注员给模型的多个回答打分(哪个好、哪个差),模型根据这些打分信号学习产生高分回答。这是 ChatGPT 能「说人话」的关键技术——它让模型从「能接龙」变成「会回答得让人类满意」。后面「训练成本」和「对齐」相关章节会展开讲 SFT + RLHF 的完整流程。

三次范式转移的核心区别

符号主义 (1956-1980s)

  • 人工编写规则 + 知识库
  • 代表:专家系统、Prolog
  • 瓶颈:知识获取瓶颈、组合爆炸
  • 类比:像写 if-else 到无穷

统计学习 (1990s-2010)

  • 从数据中学习统计规律
  • 代表:SVM、随机森林、HMM
  • 瓶颈:特征工程、浅层模型
  • 类比:教计算机"数数"而非"理解"

深度学习+大模型 (2012-至今)

  • 端到端学习:输入原始数据(如图片像素),输出最终结果(如分类标签),中间不需要人工设计特征,模型自己学会从原始数据到结果的全部映射
  • 代表:CNN/RNN/Transformer/LLM
  • 突破:算力(GPU) + 数据(互联网) + 架构(Transformer)
  • 类比:从"教规则"到"喂数据让模型自己学"
💡 直觉理解: 三次范式转移就像教小孩认猫的三种方法。符号主义是写一本「猫的特征手册」(尖耳朵、有胡须、会喵喵叫),但总有例外(无毛猫算不算?);统计学习是给小孩看一堆照片,让他自己数「耳朵尖的占80%、有胡须的占90%」之类的统计规律,但还是需要大人帮忙提取「耳朵形状」这种特征;深度学习是直接把一万张猫的照片丢给小孩,让他自己琢磨出怎么分辨——不再需要大人帮忙提取特征,模型自己学会了「看」。关键转折是:当模型足够大、数据足够多时,它自己「悟」出了规律,这就是大模型的起点。

二、什么是"大"模型?——三个维度

大模型的"大"不只是参数量,而是三个维度的同步放大。在解释之前,先快速建立两个最基础的概念:参数token,因为接下来的所有讨论都离不开它们。

📌 先记住两个术语,后面会反复用到:

参数(Parameter):模型中可学习的权重数量,类似大脑中突触连接的数量。一个 GPT-3 有 175B(1750 亿)个参数,意味着它有 1750 亿个可调节的「旋钮」。后面会专门用一节展开。

token:大模型处理文本的最小单位,大约 3/4 个英文单词或 1-2 个汉字为一个 token。模型不是按「字」也不是按「词」读文本,而是按 token 读。后面也会专门展开。

现在来看"大"的三个维度。注意表格中传统 ML 的训练数据只有 KB-MB(几 KB 到几 MB),而大模型要 TB-PB(万亿 Token),差距是天文数字:

维度传统ML深度学习大模型(LLM)
参数量1K-1M1M-1B1B-1T+
训练数据KB-MBMB-GBTB-PB(万亿Token)
训练算力CPU 小时级单GPU 天级数千GPU 月级
训练成本$0$100-$10K$1M-$100M+
💡 直觉理解: 把大模型想象成一个学生参数量是「脑容量」——脑容量越大,能记住和理解的模式越多;训练数据是「读过的书」——读得越多,知识面越广;训练算力是「学习时间」——用更好的GPU就像用更聪明的方法学习,单位时间学得更多。三者缺一不可:脑容量大但没读过书(参数多数据少)是「空有大脑子」;读了很多书但脑容量小(数据多参数少)是「记不下」。2020年GPT-3的突破在于:第一次把脑容量(175B参数)和阅读量(300B token)同时推到前所未有的规模,于是「涌现」出了没人预料到的能力。

三、什么是 Token?——模型读字的「最小颗粒」

前面提到大模型训练数据是「万亿 Token」,但到底什么是 token?为什么不用「字」或「词」来计量?这一节专门讲清楚,因为 token 会贯穿你学习大模型的整个过程。

Token(词元):大模型处理文本的最小单位。模型在读取或生成文字时,不是逐字、也不是逐词,而是把文本切成一段段「token」来处理。一个 token 可能是一个完整的词、一个词的一部分、一个汉字,甚至是标点符号。

具体例子:同一句话在不同模型里切成几个 token?

原文大约 token 数说明
"我喜欢学习人工智能"6-8 个中文在 LLaMA 系列里通常 1 个汉字 ≈ 2-3 个 token(因为 LLaMA 的词表对中文不友好)
"我喜欢学习人工智能"(Qwen/DeepSeek)5-6 个国产模型优化了中文词表,1 个汉字 ≈ 1-1.5 个 token,效率更高
"I love learning AI"5 个英文:每个常见单词基本是 1 个 token,"AI" 也是 1 个 token
"unbelievable"2-3 个长词会被拆成 "un" + "believ" + "able",模型按子词切分

为什么 token 这么重要?

💡 直觉理解: token 就像是模型读字的「最小颗粒」。想象你在读一篇外文文章:如果你每个字母都单独认(像 LLaMA 读中文,1 个字拆成好几个 token),读起来又慢又费劲;如果你整词整词地认(像 Qwen 读中文,1 个字就是 1 个 token),就读得又快又省力。模型的「阅读速度」和「能记住多少内容」,本质上都受 token 切分方式影响。这也是为什么后面讲上下文窗口、API 计费、训练成本时,单位永远是 token 而不是字或词。

四、什么是参数?——模型的「脑容量」

接下来讲 Scaling Laws(缩放定律)之前,必须先把「参数」这个概念讲透,因为 Scaling Laws 的核心就是研究「参数量翻倍,性能怎么变」。

参数(Parameter):模型中可学习的权重数量,类似大脑中突触连接的数量。每一个参数都是一个可以调节的数值(一个小数),模型训练的过程就是不断调整这几十亿、几百亿个参数的值,让模型的输出越来越接近正确答案。

用类比理解参数

参数量的规模感

参数量到底有多大?给几个参照物:

模型参数量参照物
GPT-1117M(1.17 亿)≈ 一本中等厚度的小说的字数
GPT-21.5B(15 亿)≈ 维基百科全部英文条目的字数
GPT-3175B(1750 亿)如果把每个参数当成一个数字打印出来,相当于 350 本《红楼梦》的篇幅
DeepSeek V3671B(6710 亿)≈ 1340 本《红楼梦》,但每次推理只激活 37B(约 74 本《红楼梦》的工作量)
GPT-4(估算)~1.8T(1.8 万亿)≈ 3600 本《红楼梦》
💡 直觉理解: 参数不是越多越好,关键是「参数」和「数据」要匹配。就像一个学生脑容量大(参数多),但如果读的书太少(数据少),大脑就空着浪费;反过来,书读得很多但脑容量小(参数少),记不下也白搭。下一节的 Scaling Laws 和 Chinchilla 定律,研究的就是「多少参数配多少数据最划算」这个问题。

五、参数量演进时间线

了解了「参数」和「token」的含义,现在可以看懂下面这张参数量演进表了。注意「关键突破」一栏里的术语,我都在首次出现时给出白话定义:

模型发布年份参数量关键突破
GPT-12018117M预训练+微调范式:先在海量文本上无监督「预训练」学语言,再用少量标注数据「微调」学具体任务
BERT2018340M双向编码器:同时从左到右和从右到左阅读文本,理解上下文双向关系(GPT 只能从左到右)。适合「理解」任务(分类、问答),不适合「生成」任务
GPT-220191.5BZero-shot 能力初现:不给任何示例,直接让模型完成任务。比如直接问「翻译成英文:你好」,模型就能做对
GPT-32020175BFew-shot 涌现:给模型几个示例,让它照着做。比如给 2-3 个翻译例子,模型就能学会翻译风格。这是「涌现能力」开始出现的规模
PaLM2022540BChain-of-Thought (CoT):让模型「一步一步想」,展示推理过程而非直接给答案。比如做数学题时先写「第一步...第二步...」,准确率大幅提升
LLaMA 2202370B开源 SFT 对齐:SFT(Supervised Fine-Tuning,监督微调)= 用人工写的高质量问答对训练模型,让模型回答更符合人类偏好
GPT-42023~1.8T (MoE)多模态+推理:能看图、能推理。MoE 架构让 1.8T 参数的模型推理成本可控
LLaMA 3.12024405B开源追赶闭源:开源模型首次在多数 benchmark 上接近 GPT-4 水平
DeepSeek V32024671B (MoE, 37B激活)训练成本仅 $5.5M:用 MoE + 工程优化,把训练成本压到同级别模型的 1/100
DeepSeek R12025671BRL 推理能力:RL(Reinforcement Learning,强化学习)= 让模型通过试错和奖励信号自我提升。R1 用纯强化学习训练出了强大的推理能力,不需要人工标注推理过程
GPT-5 / Claude 42025未公开Agent+长推理:模型能自主调用工具、规划多步骤任务,从「对话」进化到「行动」

关于 MoE 和密集模型:2024年后,MoE(Mixture of Experts,混合专家)成为主流——它把模型拆成多个「专家网络」,每次推理只调用最相关的几个专家,总参数大但激活参数小,推理成本大幅降低。与之相对的是密集模型(Dense Model):每次推理使用全部参数的模型(对比 MoE 只用一部分)。DeepSeek V3 总参数671B但每次推理只激活37B,性能媲美70B密集模型但推理速度快数倍。

💡 直觉理解: MoE(混合专家)就像一家大医院。医院有671名医生(总参数671B),但你看病时不需要所有医生都来会诊——前台根据你的症状,只挂最合适的37名医生的号(激活37B参数)。结果是:医院储备了海量专业知识(总参数大=能力强),但每次看病只占用少量医生时间(激活参数小=推理快、成本低)。对比「密集模型」就像全科医生,每次看病都要动用全部脑力,虽然也厉害但效率低。这就是为什么 DeepSeek V3 能用 1/10 的成本达到接近 GPT-4 的性能——它不是「更聪明」,而是「更会分工」。

六、主流大模型对比(2025-2026)

模型厂商开源MMLUHumanEvalGSM8KMATH上下文
GPT-4oOpenAI88.790.295.876.6128K
Claude 3.5 SonnetAnthropic88.792.096.478.3200K
Gemini 1.5 ProGoogle85.984.191.767.71M+
LLaMA 3.1 405BMeta88.689.096.873.8128K
DeepSeek V3DeepSeek88.582.689.361.6128K
Qwen 2.5 72B阿里86.186.691.575.5128K
GLM-4智谱81.578.187.047.9128K

Benchmark 说明(先看官方定义,再看白话版):

🎯 白话版(这才是你应该记住的):

💡 直觉理解: Benchmark 分数就像高考成绩——能反映一定能力,但不能代表全部。MMLU 是「综合卷」(考57个学科,看知识广度);HumanEval 是「编程上机考」(写代码能不能跑通);GSM8K 是「小学数学」(看会不会做应用题);MATH 是「奥数」(竞赛级数学,区分顶尖模型)。注意:分数差1-2分(如88.5 vs 88.7)在统计上几乎无差异,不要迷信排行榜。真正重要的是:模型在你自己的业务场景上表现如何——这正是后面会讲的「Eval」要做的事。

七、Scaling Laws——为什么"大"有用

2020年 OpenAI 发表的 Scaling Laws(缩放定律,Kaplan et al.)揭示了一个核心规律:模型性能与参数量(N)、数据量(D)、算力(C)呈幂律关系。这条定律是大模型时代最重要的发现,值得花时间彻底理解。

💡 直觉理解: Scaling Law 说的是一件非常反直觉的事:「大」就是有用,而且是可预测的有用。想象你在调音量旋钮——每转一格,声音就大一档,而且是平滑可预测的。Scaling Law 告诉我们:模型能力也像这个旋钮,参数翻倍、数据翻倍、算力翻倍,Loss 就按固定比例下降。这意味着:不用赌运气,只要砸钱砸卡砸数据,效果就会稳步提升。这是整个大模型行业敢于投入百亿美金的核心信念——「大力出奇迹」不是口号,是数学规律。

第一步:先搞懂「Loss」是什么

在讲公式之前,必须先理解 Loss(损失)这个概念,因为 Scaling Laws 衡量的就是 Loss 怎么变化。

Loss(损失):模型预测与正确答案的差距,Loss 越小说明模型越准。具体来说,模型每预测下一个 token 时会给出一个概率分布(比如「下一个词是"猫"的概率 0.7,是"狗"的概率 0.2,是"鱼"的概率 0.1」),如果正确答案真的是"猫",Loss 就比较低;如果正确答案是"鱼",Loss 就比较高。训练的目标就是让 Loss 尽可能低。

用生活类比:Loss 就像考试扣分。模型预测对了,Loss 接近 0(没扣分);预测错了,Loss 很高(扣很多分)。整个训练过程就是不断调整参数,让 Loss 持续下降——就像学生不断做题订正,让扣分越来越少。Loss 从 4.0 降到 3.0,听起来降得不多,但对应到「考试得分」上可能是从 30 分涨到 80 分的质变。

第二步:读懂公式

现在可以看公式了。核心公式(简化版):

L(N) = (Nc / N)^α_N    其中 Nc ≈ 8.8×10¹³, α_N ≈ 0.076

L(D) = (Dc / D)^α_D    其中 Dc ≈ 5.4×10¹³, α_D ≈ 0.095

L(C) = (Cc / C)^α_C    其中 Cc ≈ 3.3×10¹⁶, α_C ≈ 0.050

别被符号吓到,逐个翻译成大白话:

用最直白的一句话总结这个公式:参数量每翻 10 倍,Loss 大约降低 15%。

第三步:走个数字例子

假设当前参数量 N₁ = 10B 时 Loss = 4.0。如果把参数量翻 10 倍到 N₂ = 100B,按公式:

L(N₂) = L(N₁) × (N₁ / N₂)^0.076
     = 4.0 × (10B / 100B)^0.076
     = 4.0 × (0.1)^0.076
     = 4.0 × 0.826
     ≈ 3.30

参数量翻了10倍,Loss 从 4.0 降到 3.30——看起来降得不多,但在对数坐标上这是稳定线性下降,对应到实际能力上是质的飞跃(从「胡言乱语」到「能写代码」)。这就是为什么 Scaling Laws 让整个行业疯狂:虽然每次投入 10 倍只换来 15% 的 Loss 下降,但这 15% 在能力曲线上可能恰好跨过了「涌现」的门槛。

第四步:Chinchilla 修正——参数和数据要同步放大

2022年 DeepMind 的 Chinchilla 论文修正了这一结论:最优训练需要参数和数据同步放大,比例约为 20 tokens/参数。即一个 70B 模型最优训练需要 ~1.4T tokens。换句话说,光堆参数不堆数据是不够的——每增加 1 个参数,要配 20 个 token 的训练数据才「划算」。

模型参数量训练Token数Tokens/参数是否接近Chinchilla最优
GPT-3175B300B1.7❌ 严重欠训练(数据太少,参数浪费了)
Chinchilla70B1.4T20✅ 最优(理论上的最佳配比)
LLaMA 2 70B70B2T28.6✅ 过训练(故意多喂数据,降推理成本)
LLaMA 3.1 405B405B15T37✅ 大幅过训练
DeepSeek V3671B14.8T22✅ 接近最优
💡 直觉理解: Chinchilla 最优就像「最佳的师生比」——一个老师(参数)配20个学生(token)最有效率。GPT-3 的问题是「1个老师带1.7个学生」——老师太多、学生太少,老师没东西可教(欠训练)。但 LLaMA 故意「过训练」(1个老师带37个学生),为什么?因为训练是一次性开支,推理是持续开支。就像你愿意花更多时间培养一个更聪明的小团队,也不愿养一群平庸的大团队——小团队每次干活都更省钱。这就是为什么 LLaMA 3.1 8B 这种小模型,过训练后性能能打过比它大几倍但欠训练的模型,而且推理成本低得多。

关键洞察:LLaMA 系列故意"过训练"(用更多数据训练更小的模型),牺牲训练成本换推理成本降低——因为推理是持续开销,训练是一次性的。

八、大模型能力边界

✅ 大模型擅长的

❌ 大模型不擅长的

💡 直觉理解: 理解大模型能力边界,关键是记住它的本质:它是一个「超级文字接龙机器」。它擅长「文字游戏」——写文章、翻译、编代码(因为代码也是文字),因为这些任务「预测下一个词」就能做好。它不擅长精确计算,因为它不是在「算」而是在「猜下一个数字长什么样」——就像一个人背过九九乘法表但没背过 1234×5678,他会「编」一个看起来像答案的数字。所谓幻觉(Hallucination),就是它「自信地编了一个错的」——因为它不知道自己不知道,它只是在做概率最高的文字接龙。这也是为什么需要 RAG(检索增强)和工具调用:把「记忆」和「计算」外包给真正靠谱的系统。

九、训练成本深度分析

大模型训练成本由三部分组成:

成本项占比说明优化策略
GPU 算力~70%H100/A100 集群,数千卡并行混合精度(FP16/BF16)、梯度累积、MoE
数据准备~15%数据采集、清洗、标注、质量过滤自动化清洗流水线、去重
人力+实验~15%研究员、工程师、超参搜索Scaling Laws 预测、消融实验

真实训练成本案例

模型GPU训练时长估算成本说明
GPT-3 (175B)V100 × 数千~34天~$4.6M2020年,V100价格高
LLaMA 3 405BH100 16K~54天~$500M+Meta官方未公布,业界估算
DeepSeek V3 (671B)H800 × 2048~2个月~$5.5M极致工程优化,成本震惊业界
GPT-4 (1.8T MoE)未公开未公开~$100M+Semafor报道,OpenAI未确认

DeepSeek V3 为什么便宜?下面每一项技术名词都给出白话解释:

💡 直觉理解: 为什么 DeepSeek V3 用 671B 参数只花了 $5.5M,而 LLaMA 3 405B 花了 $500M?关键在「单位算力的效率」。打个比方:同样从北京到上海,你可以打车(贵、但不用动脑)也可以精打细算坐高铁+地铁(便宜、但要会规划)。DeepSeek 做了几件事:① MoE——不让所有「员工」同时干活,按需调用;② FP8 精度——用「小数点后少几位」的精度算,省一半显存,精度损失可接受;③ DualPipe——让GPU「边算边传」,不闲着等数据;④ 砍掉张量并行——张量并行需要GPU间频繁同步,砍掉后通信量大减。这套组合拳让 GPU 利用率拉满,单卡产出最大化。这说明:大模型竞争已经从「谁钱多」变成「谁工程强」

十、动手代码:加载和使用大模型

下面两段代码演示如何加载和使用开源大模型。每行关键参数都加了详细注释,解释「这是什么、为什么要这样设」。

# 方法1:使用 HuggingFace transformers 加载开源模型
# transformers 是 HuggingFace 出品的模型加载/推理库,是最基础的入门工具
from transformers import AutoModelForCausalLM, AutoTokenizer

# 指定要加载的模型名(HuggingFace Hub 上的仓库 ID)
# 这里用 DeepSeek 的 7B 对话模型,适合单卡 16GB 显存运行
model_name = "deepseek-ai/deepseek-llm-7b-chat"

# 加载 tokenizer:tokenizer 负责 把文本切成 token(数字ID)
# trust_remote_code=True 表示允许执行模型仓库里的自定义代码(DeepSeek/Qwen 等国产模型需要)
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)

# 加载模型本体(即那几十亿个参数)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",          # 自动选择精度:模型仓库存什么精度就用什么(通常是 FP16/BF16)
                                  # FP16 = 16位浮点数,比默认的 32位省一半显存,精度足够
    device_map="auto",            # 自动把模型不同层分配到不同 GPU 上(多卡时用)
                                  # 单卡时会全部放到一张卡上
    trust_remote_code=True        # 同上,允许执行自定义代码
)

# 构造对话输入:用 chat 格式(role=user 表示用户提问)
messages = [{"role": "user", "content": "解释什么是Transformer架构"}]

# 用 tokenizer 把对话转成模型能理解的数字 ID 序列
# return_tensors="pt" 表示返回 PyTorch 张量格式
# .to(model.device) 表示把数据搬到模型所在的 GPU 上
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)

# 调用 model.generate 生成回答
outputs = model.generate(
    input_ids,
    max_new_tokens=512,          # 最多生成 512 个新 token(不是 512 个字!)
                                  # 512 token 大约能写 400-600 个汉字,够解释一个概念了
    temperature=0.7,             # 温度:控制生成的随机性
                                  # temperature=0 → 永远选概率最高的词(确定性,但枯燥、重复)
                                  # temperature=1  → 完全按概率分布采样(随机,有创意但可能跑偏)
                                  # temperature=0.7 → 折中:有一定随机性但不太离谱(对话常用值)
    top_p=0.9,                   # 核采样(Nucleus Sampling):只从「累计概率前 90%」的词里采样
                                  # 作用:屏蔽那些概率极低的离谱词(比如问"今天天气"时排除"原子弹")
                                  # top_p=0.9 表示把候选词按概率从高到低排,累加到 90% 就停,只在这批里选
    do_sample=True               # 开启采样模式(配合 temperature/top_p 使用)
                                  # 如果 do_sample=False,则忽略 temperature/top_p,永远贪心选最高概率词
)

# 把模型输出的数字 ID 序列解码回人类可读的文字
# outputs[0] 是第一组生成结果,[len(input_ids[0]):] 表示只取「新生成」的部分(去掉输入部分)
# skip_special_tokens=True 表示去掉模型内部的特殊标记(如 <|endoftext|> 结束符)
response = tokenizer.decode(outputs[0][len(input_ids[0]):], skip_special_tokens=True)
print(response)

# ---- 输出示例 ----
# Transformer是一种基于自注意力机制的神经网络架构...
# 它由编码器和解码器组成,核心思想是通过注意力机制...
# 方法2:使用 vLLM 高性能推理(生产环境推荐)
# vLLM 是一个高性能推理引擎,比 HuggingFace 快 ~100 倍
# 适合需要处理大量并发请求的生产场景(如客服、API 服务)
from vllm import LLM, SamplingParams

# 初始化 vLLM 引擎(会自动加载模型并优化显存布局)
llm = LLM(
    model="deepseek-ai/deepseek-llm-7b-chat",
    tensor_parallel_size=1,          # 张量并行大小 = 使用的 GPU 数量
                                      # tensor_parallel_size=1 表示单卡运行
                                      # 多卡时设为卡数(如 2、4),vLLM 会自动切分模型
    max_model_len=4096,              # 模型支持的最大上下文长度(单位:token)
                                      # 设太小会截断长输入,设太大会浪费显存(预分配 KV Cache)
                                      # 4096 对大多数对话场景够用
    gpu_memory_utilization=0.9,      # GPU 显存使用率上限
                                      # 0.9 = 允许 vLLM 最多占用 90% 显存
                                      # 留 10% 给系统和其它进程,避免 OOM(显存溢出)
    trust_remote_code=True           # 同上,允许执行自定义代码
)

# 设置采样参数(对应 HuggingFace 的 temperature/top_p/max_new_tokens)
sampling_params = SamplingParams(
    temperature=0.7,                 # 同上,控制随机性
    top_p=0.9,                       # 同上,核采样
    max_tokens=512                   # 最多生成 512 个 token(vLLM 里叫 max_tokens,HF 里叫 max_new_tokens)
)

# vLLM 支持批量推理:一次传入多个 prompt,内部用 Continuous Batching 高效调度
prompts = ["解释什么是Transformer架构", "写一个快速排序的Python实现"]
outputs = llm.generate(prompts, sampling_params)

# 遍历输出结果
for output in outputs:
    print(output.outputs[0].text)    # 每个输出对象的 outputs[0].text 就是生成的文本
    print("---")

# vLLM vs HuggingFace 性能对比(7B模型, A10 GPU):
# HuggingFace generate:  ~15 tokens/s        (一对一服务,慢但简单)
# vLLM generate:         ~2000+ tokens/s      (高并发流水线,快 100 倍以上)
# 速度差异主要来自两个技术:PagedAttention + Continuous Batching
💡 直觉理解: 为什么 vLLM 比 HuggingFace 快100倍?核心是两个技术:

PagedAttention:像操作系统管理虚拟内存一样管理 KV CacheKV Cache = 推理时缓存的 Key-Value 矩阵,避免重复计算已处理 token 的注意力。传统做法给每个请求预分配一大块连续显存,请求长短不一时大量浪费、还会产生碎片;PagedAttention 把显存切成固定大小的「页」,按需分配,几乎没有浪费,能同时处理更多请求。

Continuous Batching:动态组批,一个请求完成立即放入新请求,不等整批完成。传统方法是「等一批请求都完成再处理下一批」(像公交车等满人才发车),vLLM 是「谁好了谁先走,新来的随时上车」(像地铁,持续流动)。

打个比方:HuggingFace 是「一对一 VIP 服务」(贴心但慢),vLLM 是「高吞吐流水线」(牺牲一点单次延迟换海量并发)。生产环境几乎一定用 vLLM 或类似的推理框架(TGI、TensorRT-LLM)。

十一、⚠️ 踩坑指南

常见陷阱与解决方案

  1. OOM(显存不足):7B FP16 模型需要 ~14GB 显存。如果 GPU 只有 8GB,改用 4-bit 量化:load_in_4bit=True。4-bit 量化会把每个参数从 16 位压缩到 4 位,显存占用降到原来的 1/4,精度损失通常可接受
  2. tokenizer 陷阱:不同模型用不同 tokenizer,不能混用。LLaMA 用 SentencePiece,GPT 用 BPE,混用会输出乱码。这是因为不同 tokenizer 的「词表」(token 到数字 ID 的映射表)完全不同,用错就等于用错误的密码本解码
  3. trust_remote_code 风险:部分模型(如 Qwen、DeepSeek)需要 trust_remote_code=True,会执行模型仓库中的 Python 代码。生产环境应审核代码后再使用,防止恶意代码
  4. 温度参数误区temperature=0 不等于完全确定性(浮点精度仍有微小差异)。需要完全确定性时用 greedy=True 或固定 seed
  5. 上下文窗口:模型标称 128K 上下文,但实际有效注意力随长度衰减。超过 32K 后信息检索准确率显著下降("Lost in the Middle" 问题)——开头和结尾的信息记得牢,中间的容易被忽略
  6. 中文token效率:LLaMA 系列原生 tokenizer 中文效率低(1个汉字≈2-3 token),Qwen/DeepSeek 优化了中文(1个汉字≈1-1.5 token),同样上下文窗口能处理更多中文内容。这也是前面 token 小节强调的重点

十二、决策框架:如何选择大模型

选型决策树

需求是什么?
├── 通用对话/问答
│   ├── 追求最强能力 → GPT-4o / Claude 3.5 Sonnet (API)
│   ├── 追求性价比 → DeepSeek V3 (API, ~1/10 GPT-4 价格)
│   └── 需要本地部署 → LLaMA 3.1 8B / Qwen 2.5 7B (单卡)
├── 代码生成
│   ├── 最强 → Claude 3.5 Sonnet (HumanEval 92%)
│   ├── 开源 → DeepSeek-Coder V2 / Qwen 2.5 Coder
│   └── 本地 → CodeLlama 7B/13B
├── 中文场景
│   ├── 最强中文 → Qwen 2.5 / GLM-4 / DeepSeek
│   └── 英文为主 → LLaMA / GPT / Claude
├── 推理密集(数学/逻辑)
│   ├── 最强 → DeepSeek R1 / OpenAI o3
│   └── 开源 → DeepSeek R1 蒸馏版 (1.5B-70B)
├── 长上下文 (>128K)
│   ├── 最长 → Gemini 1.5 Pro (1M+)
│   └── 开源 → Yarn-LLaMA / Qwen 2.5 (256K)
└── 多模态(图+文)
    ├── 最强 → GPT-4o / Gemini 1.5 Pro
    └── 开源 → LLaVA / Qwen-VL

📚 推荐学习资源

🎬
3Blue1Brown「But what is a neural network?」
最经典的神经网络可视化讲解,用动画让你直观理解AI如何"看"数字
🎬
Karpathy「Intro to Large Language Models」
OpenAI前研究员的1小时入门讲座,把LLM从原理到应用讲得透透的
🎬
Andrej Karpathy「Let's build GPT: from scratch」
从零手写一个GPT,跟着敲一遍代码胜过读十篇论文

📝 知识检测

1. 大模型"涌现能力"(Emergent Abilities)通常在多少参数量开始出现?

A. 100M
B. 1B
C. 10B-70B(取决于任务)
D. 1T

2. Chinchilla Scaling Laws 建议的最优训练 tokens/参数 比率是多少?

A. 5 tokens/参数
B. 20 tokens/参数
C. 100 tokens/参数
D. 越多越好

3. DeepSeek V3 训练成本仅 $5.5M 的关键原因不包括以下哪项?

A. MoE架构,每次只激活37B参数
B. FP8混合精度训练
C. 使用了更小的模型(671B→7B)
D. DualPipe流水线并行减少通信

4. vLLM 相比 HuggingFace generate 快多少倍?

A. ~100倍
B. ~2倍
C. ~10倍
D. 速度相同

5. "Lost in the Middle" 问题指的是什么?

A. 模型训练过程中loss突然飙升
B. 长上下文中,中间位置的信息检索准确率下降
C. Transformer中间层梯度消失
D. MoE模型中间专家不被激活