3. 大模型基础

在部署大模型服务之前,理解模型的内在结构与发展脉络是必要的。Transformer架构自2017年提出后,已成为几乎所有大语言模型(LLM)的基石;而LLaMA、ChatGLM、Qwen等主流开源模型则是在此基础上针对不同场景优化出的代表性成果。本章将拆解Transformer的核心机制,对比三大开源模型家族的技术特点与适用边界,并给出可落地的选型决策路径。

大模型选型与架构决策路径 Transformer核心机制 多头自注意力 位置编码 前馈网络 + 残差 Decoder-only 自回归 开源模型家族 LLaMA(Meta) ChatGLM(智谱) Qwen(阿里) + 衍生微调变体 选型关键维度 ① 硬件资源(显存/算力) ② 中文/英文能力侧重 ③ 推理延迟与吞吐要求 ④ 生态与微调工具链 FastAPI 部署链路中的模型适配 模型加载 transformers / vLLM Tokenization 词表匹配 / 特殊 推理参数 max_tokens / temperature 响应封装 流式 / 非流式 JSON 选型决定部署成本与效果上限,架构理解决定调优深度

3.1 Transformer架构核心原理与工程视角

核心原理:自注意力与Decoder-only的统治地位

Transformer摒弃了循环神经网络(RNN)的时序递归,完全依赖自注意力机制(Self-Attention)建模序列内任意位置之间的依赖关系。其核心公式为 Attention(Q,K,V) = softmax(QK^T/√d_k)V,其中Q、K、V分别由输入向量与权重矩阵相乘得到。在多头注意力(Multi-Head Attention)中,模型将Q、K、V切分为多个子空间并行计算,使不同头关注不同的语义关系(如语法、指代、主题)。

当前主流大模型几乎全部采用Decoder-only架构,即仅保留Transformer的解码器部分,通过掩码自注意力(Masked Self-Attention)实现从左到右的自回归生成。相比Encoder-Decoder架构(如T5),Decoder-only在预训练任务统一性、上下文学习(In-Context Learning)能力和推理效率上表现更优。工程部署时,Decoder-only模型天然适合流式输出,因为每一步生成仅依赖已生成的。

工程视角的关键组件

  • 位置编码(Positional Encoding):由于自注意力不具备顺序感知,需注入位置信息。现代模型多采用旋转位置编码(RoPE),其外推性更好,对长文本处理更友好。
  • 归一化层(LayerNorm/RMSNorm):稳定深层网络训练。LLaMA与Qwen使用RMSNorm,计算量更小且效果相当。
  • 前馈网络(FFN):通常为两层线性变换加激活函数(如SwiGLU),占据模型约2/3的参数,是推理时的主要计算瓶颈。
  • KV Cache:推理时缓存历史的Key和Value矩阵,避免重复计算,是优化推理吞吐的关键手段。
部署提示:理解KV Cache机制对显存估算至关重要。例如,一个7B模型在生成2048个时,KV Cache可能额外占用约1-2GB显存(取决于层数和头数)。在FastAPI服务中,若需支持高并发,必须考虑KV Cache的显存开销,否则容易触发OOM。

小型场景化说明:为什么Decoder-only更适合服务部署

假设我们需要构建一个代码补全API。若使用Encoder-Decoder模型,每次请求需将整个上下文重新编码,延迟较高;而Decoder-only模型只需将已有代码作为前缀,逐步生成补全内容,且可配合KV Cache实现增量推理,首延迟(TTFT)可降低40%以上。这也是当前主流代码模型(如CodeLLaMA、DeepSeek-Coder)均采用Decoder-only的原因。

3.2 主流开源模型家族对比:LLaMA、ChatGLM、Qwen

模型定位与核心参数

维度 LLaMA(Meta) ChatGLM(智谱AI) Qwen(阿里云)
基础架构 Decoder-only,RMSNorm,RoPE Decoder-only(GLM结构),RoPE Decoder-only,RMSNorm,RoPE
代表性尺寸 7B / 13B / 70B 6B / 32B(ChatGLM3系列) 1.8B / 7B / 14B / 72B
中文能力 原生较弱,需中文微调 原生中文优化,双语表现均衡 原生中文强,中英混合场景优秀
词表大小 32K(LLaMA2) 130K(ChatGLM3) 152K(Qwen2.5)
上下文长度 4K-32K(取决于版本) 8K-128K(ChatGLM3-128K) 32K-128K(Qwen2.5系列)
开源协议 LLaMA2社区许可(商用需申请) MIT协议(ChatGLM3) Apache 2.0(Qwen2.5)

判断方法:根据业务场景选择模型

  1. 英文为主、通用推理任务:优先考虑LLaMA系列,其英文语料质量高,社区生态最丰富(如Alpaca、Vicuna等微调变体)。但需注意,LLaMA原始版本中文能力有限,若业务涉及中文,需额外进行中文指令微调。
  2. 中文为主、需快速上线:ChatGLM和Qwen是更稳妥的选择。ChatGLM在中文对话、文本生成方面表现自然,且MIT协议对商用友好;Qwen在代码、数学、多语言等综合能力上更均衡,且Apache 2.0协议限制更少。
  3. 硬件资源受限(单卡≤24GB):选择7B-14B参数量的模型,并考虑4-bit或8-bit量化。Qwen2.5-7B-Instruct在量化后仍能保持较好的中文效果,是性价比之选。
  4. 需要超长上下文(如文档分析):优先Qwen2.5-14B(32K)或ChatGLM3-32B(128K),但需注意长上下文推理时的显存占用和注意力计算开销。

案例拆解:从零搭建中文知识库问答API的选型过程

背景与约束:某金融科技公司需要构建一个内部知识库问答系统,支持员工查询合规政策文档。硬件环境为2张NVIDIA A10(24GB显存),要求单次请求响应时间小于3秒,支持约50并发用户。文档以中文为主,包含大量专业术语。

初始目标与现象:团队最初尝试使用LLaMA2-7B,发现对中文金融术语的理解明显不足,回答经常出现“张冠李戴”的情况。随后测试ChatGLM3-6B,中文理解有所改善,但在处理长文档(超过4K )时,模型会丢失前文关键信息。

分析判断过程:

  • LLaMA2-7B的词表仅32K,中文覆盖率低,导致中文编码效率差,信息压缩损失大。
  • ChatGLM3-6B虽然中文好,但上下文窗口为8K,对于平均长度约5K的合规文档,加上问题与历史记录后容易超限。
  • Qwen2.5-7B-Instruct支持32K上下文,且词表152K对中文更友好,同时Apache 2.0协议允许商用。

实际操作步骤:

  1. 下载Qwen2.5-7B-Instruct模型,使用transformers库加载,并启用4-bit量化(bitsandbytes)以降低显存占用。
  2. 在FastAPI服务中设置max_tokens=2048,temperature=0.3(保证回答稳定性),并启用流式输出以改善用户体验。
  3. 使用LangChain的RetrievalQA组件,将文档切分为512 的块,通过向量数据库(如Chroma)检索Top-5相关片段,拼接到Prompt中。
  4. 压测结果:单请求平均延迟1.8秒(含检索),50并发下GPU显存占用约20GB,无OOM。

结果对比与复盘:相比初始LLaMA2方案,Qwen2.5-7B在中文术语准确率上从68%提升至91%,长文档关键信息召回率提升40%。代价是需要额外处理检索逻辑,但整体部署成本未增加。复盘经验:选型不能只看模型参数量,词表大小、上下文长度、中文语料占比是更关键的指标。

风险提示:Qwen2.5-7B在量化后(4-bit)可能出现轻微性能下降,若业务对回答质量要求极高,建议使用FP16精度并配合vLLM推理框架,但需确保显存足够(约16GB)。

3.3 模型选型的综合决策框架与常见误区

决策框架:从需求到模型的映射

需求维度 关键问题 推荐方向
语言支持 业务以中文为主还是英文为主? 中文为主选Qwen/ChatGLM;英文为主选LLaMA
硬件预算 单卡显存多大?是否支持多卡? ≤16GB选7B量化;≥40GB可选14B-32B
延迟要求 首延迟目标?并发量级? 低延迟选小模型+量化;高并发需vLLM
微调需求 是否需要领域定制? LLaMA生态微调工具最丰富;Qwen支持LoRA
协议合规 是否商用?是否需修改模型? Apache 2.0(Qwen)最宽松;LLaMA需申请

常见误区与总结复盘

  • 误区一:模型越大越好。实际上,7B模型在垂直领域微调后可能超过70B基座模型的通用效果,且部署成本降低一个数量级。
  • 误区二:忽略词表影响。词表大小直接影响化效率。例如,LLaMA2处理中文时,一个汉字可能被拆分为2-3个,导致有效上下文长度减半。
  • 误区三:不评估量化损失。4-bit量化在部分任务上可能造成5%-10%的准确率下降。建议在部署前用业务测试集对比量化前后效果。
  • 误区四:忽视生态工具链。LLaMA的社区资源(如llama.cpp、FastChat)最丰富,但Qwen和ChatGLM的官方工具链(如ModelScope)对中文开发者更友好。
选型口诀:先看语言与协议,再算显存与延迟;中文场景选Qwen,英文通用LLaMA;资源受限用量化,长文必看上下文。