大模型面试精选20题(第二辑)模型架构、训练技巧
大模型面试精选20题-2(持续更新中)
本文是大模型面试精选的第二辑,从不同角度精选20道高频面试题,涵盖模型架构、训练技巧、部署优化、Agent、多模态等核心知识点,适合准备大模型相关岗位面试的同学。
字数约 9000,预计阅读 18 分钟
一、模型架构与设计篇(5题)
01|GPT 和 BERT 的区别是什么?
参考答案:
GPT(Generative Pre-trained Transformer):
- 架构:Decoder-only(只有解码器)
- 训练方式:自回归(Autoregressive),从左到右生成
- 预训练任务:语言建模(Language Modeling),预测下一个 token
- 特点:擅长生成任务,可以生成连贯的文本
- 应用:文本生成、对话、代码生成
BERT(Bidirectional Encoder Representations from Transformers):
- 架构:Encoder-only(只有编码器)
- 训练方式:双向编码,可以同时看到上下文
- 预训练任务:掩码语言建模(MLM)+ 下一句预测(NSP)
- 特点:擅长理解任务,对文本有深度理解
- 应用:文本分类、命名实体识别、问答
核心区别:
| 特性 | GPT | BERT |
|---|---|---|
| 架构 | Decoder-only | Encoder-only |
| 注意力 | 掩码自注意力(只能看前面) | 双向自注意力(可以看全部) |
| 训练 | 自回归 | 双向编码 |
| 优势 | 生成能力强 | 理解能力强 |
| 应用 | 生成任务 | 理解任务 |
为什么 GPT 用 Decoder-only?
- 生成任务需要自回归特性
- 训练时只能看到前面的 token,推理时也如此
- 保持训练和推理的一致性
为什么 BERT 用 Encoder-only?
- 理解任务需要双向信息
- 可以同时利用上下文信息
- 对文本有更全面的理解
02|什么是 MoE(Mixture of Experts)?它的优势是什么?
参考答案:
MoE(Mixture of Experts,专家混合) 是一种模型架构设计,将模型分成多个"专家"(Expert),每个专家负责处理不同类型的输入。
工作原理:
-
专家网络
- 模型包含多个专家网络(如 8 个、16 个)
- 每个专家是一个完整的神经网络
- 不同专家学习不同的特征和模式
-
门控网络(Gating Network)
- 根据输入决定激活哪些专家
- 输出每个专家的权重(通常是稀疏的)
- 例如:只激活 Top-2 个专家
-
加权组合
- 将激活的专家输出加权组合
- 公式:
output = Σ w_i * Expert_i(input)
优势:
-
参数效率
- 模型总参数量大,但每次只激活部分参数
- 例如:1.7T 参数的模型,每次只激活 13B 参数
- 显存和计算量大幅减少
-
可扩展性
- 可以轻松增加专家数量
- 模型容量可以非常大(如 1.7T 参数)
-
专业化
- 不同专家可以学习不同的知识领域
- 提升模型的表达能力
-
训练效率
- 可以并行训练多个专家
- 训练速度更快
挑战:
-
负载均衡
- 需要确保所有专家都被充分使用
- 避免某些专家过载,某些专家闲置
-
路由学习
- 门控网络需要学习如何正确路由
- 训练难度较高
-
通信开销
- 多 GPU 训练时,专家之间的通信开销大
应用:
- Switch Transformer:Google 的 MoE 模型
- GShard:大规模 MoE 训练框架
- Mixtral 8x7B:Mistral AI 的 MoE 模型
03|什么是 Grouped Query Attention(GQA)?它如何优化注意力机制?
参考答案:
GQA(Grouped Query Attention,分组查询注意力) 是 Multi-Head Attention 的一种变体,通过减少 Query 头的数量来优化注意力计算。
标准 Multi-Head Attention:
- Q、K、V 都有相同数量的头(如 32 个头)
- 每个头独立计算注意力
- 参数量:
3 × num_heads × head_dim
GQA 的设计:
- Query 头:减少数量(如 8 个头)
- Key/Value 头:保持数量(如 32 个头)
- 分组共享:多个 Query 头共享一组 Key/Value 头
- 例如:8 个 Query 头,32 个 Key/Value 头,每组 4 个 Query 共享 1 组 Key/Value
优势:
-
减少 KV Cache 显存
- KV Cache 大小与 Key/Value 头数量相关
- GQA 减少 Key/Value 头数量,显存减少
- 例如:从 32 头减少到 8 头,KV Cache 减少 75%
-
保持模型性能
- Query 头数量减少,但 Key/Value 头保持
- 模型表达能力基本不变
- 性能损失很小(通常 < 5%)
-
推理加速
- 减少注意力计算量
- 提升推理速度
对比:
| 方法 | Query 头 | Key/Value 头 | KV Cache | 性能 |
|---|---|---|---|---|
| MHA | 32 | 32 | 100% | 100% |
| MQA | 1 | 1 | 3% | 85% |
| GQA | 8 | 8 | 25% | 98% |
MQA vs GQA:
- MQA(Multi-Query Attention):所有 Query 共享一组 Key/Value,显存最少但性能损失大
- GQA:平衡了显存和性能,是更好的选择
应用:
- LLaMA 2:使用 GQA
- PaLM 2:使用 GQA
- 大多数新的大模型都采用 GQA
04|什么是 RMSNorm?它相比 LayerNorm 有什么优势?
参考答案:
RMSNorm(Root Mean Square Layer Normalization) 是 LayerNorm 的简化版本,去掉了均值中心化,只进行缩放。
LayerNorm 公式:
LN(x) = γ * (x - μ) / √(σ² + ε) + β
其中:
μ = mean(x) # 均值
σ² = var(x) # 方差
RMSNorm 公式:
RMSNorm(x) = γ * x / RMS(x)
其中:
RMS(x) = √(mean(x²) + ε)
关键区别:
- LayerNorm:减去均值,再除以标准差
- RMSNorm:不减去均值,只除以 RMS(均方根)
优势:
-
计算更简单
- 不需要计算均值
- 只需要计算均方根
- 计算量减少约 10-15%
-
数值稳定性
- 不涉及减法,数值更稳定
- 减少浮点误差
-
训练速度
- 计算更快,训练速度提升
- 在 GPU 上效率更高
-
性能相当
- 在大多数任务上性能与 LayerNorm 相当
- 有些任务甚至更好
为什么可以去掉均值?
- 在 Transformer 中,残差连接和 LayerNorm 的组合已经提供了足够的归一化
- 均值中心化在某些情况下不是必需的
- RMSNorm 通过缩放已经能够稳定训练
应用:
- LLaMA:使用 RMSNorm
- PaLM:使用 RMSNorm
- 许多新的大模型都采用 RMSNorm
05|什么是 SwiGLU 激活函数?它相比 ReLU 有什么优势?
参考答案:
SwiGLU(Swish-Gated Linear Unit) 是一种激活函数,结合了 Swish 和 GLU(Gated Linear Unit)的特点。
公式:
SwiGLU(x) = Swish(xW + b) ⊙ (xV + c)
其中:
Swish(x) = x * sigmoid(x)
⊙ 是逐元素乘法
GLU(Gated Linear Unit)原理:
- 将输入分成两部分:
[A, B] - A 作为主路径,B 作为门控
- 输出:
A ⊙ sigmoid(B) - 门控机制可以控制信息流
SwiGLU 的特点:
- 使用 Swish 作为激活函数(而不是 sigmoid)
- Swish 是平滑、非单调的函数
- 在负值区域也有梯度,避免死神经元
优势:
-
性能更好
- 在语言模型任务上表现优于 ReLU
- 提升模型表达能力
-
平滑性
- Swish 是平滑函数,梯度更稳定
- 训练更稳定
-
门控机制
- GLU 的门控机制可以控制信息流
- 提升模型的表达能力
对比:
| 激活函数 | 公式 | 特点 | 应用 |
|---|---|---|---|
| ReLU | max(0, x) | 简单、快速 | 广泛使用 |
| GELU | x * Φ(x) | 平滑、性能好 | BERT、GPT-2 |
| Swish | x * sigmoid(x) | 平滑、非单调 | 某些模型 |
| SwiGLU | Swish(xW) ⊙ (xV) | 门控+平滑 | LLaMA、PaLM |
应用:
- LLaMA:使用 SwiGLU
- PaLM:使用 SwiGLU
- 许多新的大模型都采用 SwiGLU
为什么需要门控?
- 门控机制可以动态控制信息流
- 让模型学习何时传递信息,何时抑制信息
- 提升模型的表达能力
二、训练技巧与优化篇(5题)
06|什么是梯度累积(Gradient Accumulation)?它的作用是什么?
参考答案:
梯度累积(Gradient Accumulation) 是一种训练技巧,通过多次前向传播累积梯度,然后一次性更新参数,从而在有限的显存下模拟更大的 batch size。
工作原理:
-
正常训练
- Batch size = 32
- 一次前向传播 + 反向传播
- 更新一次参数
-
梯度累积
- Batch size = 8,累积步数 = 4
- 4 次前向传播,每次计算梯度
- 累积 4 次梯度(不更新参数)
- 第 4 次后,更新参数(相当于 batch size = 32)
伪代码:
optimizer.zero_grad()
for i in range(accumulation_steps):
loss = model(inputs[i])
loss = loss / accumulation_steps # 归一化
loss.backward() # 累积梯度
optimizer.step() # 更新参数
作用:
-
模拟大 batch size
- 显存不足时,可以用小 batch + 梯度累积
- 效果接近大 batch size
-
稳定训练
- 大 batch size 通常训练更稳定
- 梯度累积可以达到类似效果
-
灵活调整
- 可以根据显存情况调整累积步数
- 不需要修改模型结构
注意事项:
- 需要将 loss 除以累积步数,保证梯度大小正确
- 学习率可能需要调整(因为有效 batch size 变了)
- 训练时间会增加(需要多次前向传播)
应用场景:
- 显存不足,无法使用大 batch size
- 需要大 batch size 来稳定训练
- 多 GPU 训练时,每个 GPU 的 batch size 较小
07|什么是学习率调度(Learning Rate Scheduling)?常见的策略有哪些?
参考答案:
学习率调度(Learning Rate Scheduling) 是在训练过程中动态调整学习率的方法,可以提升训练效果和模型性能。
为什么需要学习率调度?
- 训练初期:需要大学习率快速收敛
- 训练后期:需要小学习率精细调整
- 固定学习率可能导致训练不稳定或收敛慢
常见策略:
-
固定学习率(Constant)
- 整个训练过程使用固定学习率
- 优点:简单
- 缺点:可能收敛慢或不稳定
-
线性衰减(Linear Decay)
- 学习率线性减少
- 公式:
lr(t) = lr_0 * (1 - t/T) - 适用:大多数场景
-
余弦退火(Cosine Annealing)
- 学习率按余弦函数衰减
- 公式:
lr(t) = lr_min + (lr_max - lr_min) * (1 + cos(πt/T))/2 - 优点:平滑衰减,效果好
- 适用:长时间训练
-
阶梯衰减(Step Decay)
- 在特定 epoch 降低学习率
- 例如:每 10 个 epoch 降低 10 倍
- 适用:需要快速调整的场景
-
Warmup + Decay
- 训练初期逐渐增加学习率(Warmup)
- 然后逐渐减少(Decay)
- 优点:训练更稳定
- 适用:大模型训练
-
OneCycleLR
- 学习率先增后减,形成一个周期
- 优点:可以找到更好的学习率
- 适用:需要快速实验的场景
Warmup 的作用:
- 训练初期,模型参数随机初始化
- 大学习率可能导致训练不稳定
- Warmup 让学习率从 0 逐渐增加到目标值
- 通常 Warmup 10% 的训练步数
最佳实践:
- 大模型训练:Warmup + Cosine Annealing
- 小模型训练:Linear Decay 或 Step Decay
- 快速实验:OneCycleLR
- 根据验证集性能调整策略
08|什么是标签平滑(Label Smoothing)?它的作用是什么?
参考答案:
标签平滑(Label Smoothing) 是一种正则化技术,将硬标签(one-hot)转换为软标签,减少模型过度自信的问题。
问题背景:
- 标准分类使用 one-hot 标签:
[0, 0, 1, 0] - 模型会过度自信,对正确类别输出接近 1 的概率
- 可能导致过拟合,泛化能力差
标签平滑方法:
- 原始标签:
[0, 0, 1, 0] - 平滑后:
[ε/K, ε/K, 1-ε+ε/K, ε/K] - 其中:ε 是平滑系数(通常 0.1),K 是类别数
例如(4 类,ε=0.1):
- 原始:
[0, 0, 1, 0] - 平滑:
[0.025, 0.025, 0.925, 0.025]
作用:
-
防止过度自信
- 模型不会对正确类别输出接近 1 的概率
- 提升模型的校准度(Calibration)
-
提升泛化能力
- 减少过拟合
- 模型对相似类别有更好的区分能力
-
训练更稳定
- 梯度更平滑
- 训练过程更稳定
数学原理:
- 原始损失:
L = -log(p_correct) - 平滑后损失:
L = -(1-ε)log(p_correct) - ε/K * Σlog(p_i) - 第二项鼓励模型对所有类别都有一定的概率
参数选择:
- ε = 0.1:常用值,适合大多数场景
- ε = 0.05:轻微平滑,适合简单任务
- ε = 0.2:强平滑,适合复杂任务
应用场景:
- 图像分类
- 文本分类
- 大模型训练(如 GPT、BERT)
注意事项:
- 不适合所有任务(如需要高置信度的任务)
- 需要根据任务调整平滑系数
09|什么是 Dropout?它在 Transformer 中如何使用?
参考答案:
Dropout 是一种正则化技术,在训练时随机丢弃部分神经元,防止过拟合。
工作原理:
- 训练时:以概率 p 随机将神经元输出设为 0
- 推理时:保留所有神经元,但输出乘以 (1-p)
数学表示:
- 训练:
y = x * mask / (1-p),其中 mask 是随机二值矩阵 - 推理:
y = x * (1-p)
在 Transformer 中的应用:
-
Attention Dropout
- 在注意力权重上应用 Dropout
- 位置:
softmax(QK^T / √d)之后 - 作用:防止注意力过度集中在某些位置
-
FFN Dropout
- 在前馈网络的激活函数之后应用 Dropout
- 位置:
FFN(x) = Dropout(Activation(Linear(x))) - 作用:防止前馈网络过拟合
-
Embedding Dropout
- 在词嵌入层应用 Dropout
- 位置:输入嵌入之后
- 作用:防止嵌入层过拟合
Dropout 率的选择:
- Attention Dropout:通常 0.1-0.2
- FFN Dropout:通常 0.1-0.3
- Embedding Dropout:通常 0.1
为什么 Transformer 需要 Dropout?
- Transformer 参数量大,容易过拟合
- Dropout 可以提升泛化能力
- 训练更稳定
注意事项:
- 推理时必须关闭 Dropout
- Dropout 率不能太大,否则影响训练
- 不同层可以使用不同的 Dropout 率
现代趋势:
- 一些新模型(如 LLaMA)不使用 Dropout
- 依赖其他正则化方法(如权重衰减、标签平滑)
- 大模型训练时,Dropout 的影响较小
10|什么是梯度裁剪(Gradient Clipping)?为什么需要它?
参考答案:
梯度裁剪(Gradient Clipping) 是一种训练技巧,限制梯度的大小,防止梯度爆炸问题。
问题背景:
- 深度网络训练时,梯度可能变得非常大
- 梯度爆炸会导致训练不稳定,甚至发散
- 特别是在 RNN/Transformer 等序列模型中
两种裁剪方式:
-
按值裁剪(Clip by Value)
- 将梯度限制在 [-threshold, threshold] 范围内
- 公式:
grad = clip(grad, -threshold, threshold) - 简单直接
-
按范数裁剪(Clip by Norm)
- 如果梯度范数超过阈值,按比例缩放
- 公式:
grad = grad * min(1, threshold / ||grad||) - 保持梯度方向不变
为什么需要梯度裁剪?
-
防止梯度爆炸
- 限制梯度大小,避免参数更新过大
- 训练更稳定
-
提升训练稳定性
- 特别是在训练初期,梯度可能很大
- 裁剪后训练更平滑
-
允许更大的学习率
- 梯度被限制后,可以使用更大的学习率
- 训练速度更快
参数选择:
- 按值裁剪:通常 threshold = 1.0 或 0.5
- 按范数裁剪:通常 threshold = 1.0 或 5.0
- 需要根据模型和任务调整
应用场景:
- RNN/Transformer 训练
- 大模型训练
- 训练不稳定时
注意事项:
- 不要裁剪过度,否则可能影响训练
- 如果经常裁剪,可能需要降低学习率
- 现代优化器(如 Adam)对梯度爆炸有更好的处理
三、Agent 与工具调用篇(4题)
11|什么是 AI Agent?它的核心组件有哪些?
参考答案:
AI Agent(智能体) 是一个能够感知环境、做出决策并执行行动的自主系统,可以理解用户意图、规划任务、调用工具并完成任务。
核心组件:
-
规划模块(Planning)
- 理解用户意图,分解复杂任务
- 制定执行计划
- 例如:将"帮我订机票"分解为"查询航班"→"选择航班"→"填写信息"→"支付"
-
工具调用(Tool Calling)
- 调用外部工具和 API
- 例如:搜索、计算器、数据库查询
- 扩展模型的能力边界
-
记忆管理(Memory)
- 短期记忆:当前对话的上下文
- 长期记忆:历史对话、用户偏好
- 工作记忆:当前任务的状态
-
反思与修正(Reflection)
- 评估执行结果
- 发现错误并修正
- 优化执行策略
工作流程:
用户输入 → 理解意图 → 规划任务 → 调用工具 → 执行行动 → 评估结果 → 返回用户
类型:
-
ReAct Agent
- 结合推理(Reasoning)和行动(Acting)
- 交替进行思考和行动
-
Plan-and-Execute Agent
- 先制定完整计划,再执行
- 适合复杂、多步骤任务
-
AutoGPT Agent
- 自主执行任务,持续运行
- 可以自我反思和修正
应用场景:
- 代码生成和执行
- 数据分析
- 自动化工作流
- 智能助手
挑战:
- 工具调用的准确性
- 长期记忆管理
- 错误处理和恢复
- 安全性问题
12|什么是 ReAct?它的工作原理是什么?
参考答案:
ReAct(Reasoning + Acting) 是一种 Agent 框架,通过交替进行推理(Reasoning)和行动(Acting)来完成任务。
核心思想:
- 传统方法:先推理再行动,或先行动再推理
- ReAct:推理和行动交替进行,动态调整策略
工作流程:
-
观察(Observation)
- 获取当前环境状态
- 例如:搜索结果、工具返回结果
-
思考(Thought)
- 分析当前情况
- 决定下一步行动
- 例如:“我需要搜索更多信息”
-
行动(Action)
- 执行具体行动
- 例如:调用搜索工具
-
观察结果
- 获取行动结果
- 继续思考下一步
示例:
用户:北京的天气怎么样?
Agent:
Thought: 用户想知道北京的天气,我需要调用天气API。
Action: search_weather(city="北京")
Observation: 北京今天晴天,温度25度
Thought: 我已经获得了天气信息,可以回答用户了。
Action: answer("北京今天晴天,温度25度")
优势:
-
动态调整
- 根据观察结果动态调整策略
- 不需要预先制定完整计划
-
可解释性
- 思考过程可见,易于理解
- 便于调试和优化
-
错误恢复
- 可以及时发现错误
- 通过思考修正策略
-
灵活性
- 适合各种类型的任务
- 可以处理意外情况
实现方式:
- 使用大模型的工具调用能力
- 通过 prompt 引导模型进行思考和行动
- 使用 LangChain、AutoGPT 等框架
应用:
- 问答系统
- 代码生成和执行
- 数据分析
- 自动化任务
13|什么是 Function Calling?它如何实现工具调用?
参考答案:
Function Calling(函数调用) 是大模型调用外部工具和函数的能力,让模型可以执行搜索、计算、数据库查询等操作。
工作原理:
-
定义工具
- 描述工具的功能、参数、返回值
- 使用 JSON Schema 格式
{ "name": "search_weather", "description": "查询天气", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名称"} } } } -
模型选择工具
- 模型根据用户输入,决定调用哪个工具
- 生成符合 Schema 的参数
- 返回工具调用请求
-
执行工具
- 系统执行工具,获取结果
- 将结果返回给模型
-
模型生成回答
- 模型基于工具结果生成最终回答
示例流程:
用户:北京的天气怎么样?
模型输出:
{
"function_call": {
"name": "search_weather",
"arguments": {"city": "北京"}
}
}
系统执行:search_weather("北京") → "晴天,25度"
模型最终回答:北京今天晴天,温度25度。
优势:
-
扩展能力
- 模型可以调用任意工具
- 突破训练数据的限制
-
准确性
- 使用实时数据,而不是训练时的数据
- 减少幻觉问题
-
灵活性
- 可以定义各种工具
- 适应不同场景
实现方式:
- OpenAI API:支持 function calling
- Anthropic Claude:支持 tool use
- LangChain:提供工具调用框架
- 自定义实现:通过 prompt 引导模型
最佳实践:
- 工具描述要清晰准确
- 参数 Schema 要完整
- 处理工具调用失败的情况
- 验证工具返回结果
14|什么是 Tool-Use?它和 Function Calling 有什么区别?
参考答案:
Tool-Use(工具使用) 是 Anthropic Claude 的工具调用机制,类似于 OpenAI 的 Function Calling,但有一些设计差异。
相同点:
- 都是让大模型调用外部工具
- 都需要定义工具 Schema
- 工作流程类似:定义工具 → 模型选择 → 执行工具 → 生成回答
区别:
-
API 设计
- Function Calling:使用
functions参数定义工具 - Tool-Use:使用
tools参数定义工具
- Function Calling:使用
-
返回格式
- Function Calling:返回
function_call对象 - Tool-Use:返回
tool_use对象,包含id字段
- Function Calling:返回
-
多工具调用
- Function Calling:一次只能调用一个工具
- Tool-Use:可以同时调用多个工具(并行)
-
工具结果处理
- Function Calling:需要将结果作为消息传入
- Tool-Use:使用
tool_result消息,通过id关联
Tool-Use 的优势:
-
并行调用
- 可以同时调用多个工具
- 提升效率
-
更好的关联
- 使用
id关联工具调用和结果 - 支持多轮工具调用
- 使用
-
更灵活
- 支持更复杂的工具调用场景
示例(Tool-Use):
# 定义工具
tools = [{
"name": "search_weather",
"description": "查询天气",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string"}
}
}
}]
# 模型调用
response = model.messages.create(
messages=[{"role": "user", "content": "北京和上海的天气"}],
tools=tools
)
# 模型可能同时调用两个工具
# tool_use_1: search_weather(city="北京")
# tool_use_2: search_weather(city="上海")
选择建议:
- 使用 OpenAI:Function Calling
- 使用 Claude:Tool-Use
- 需要并行调用:Tool-Use
- 简单场景:两者都可以
四、多模态与部署篇(3题)
15|什么是多模态大模型?它的架构特点是什么?
参考答案:
多模态大模型(Multimodal Large Language Model) 是能够理解和处理多种模态(文本、图像、音频、视频等)信息的大模型。
核心能力:
- 文本理解:理解自然语言
- 图像理解:理解图像内容
- 跨模态理解:理解文本和图像的关系
- 多模态生成:根据一种模态生成另一种模态
架构特点:
-
多模态编码器
- 文本编码器:Transformer Encoder(如 BERT)
- 图像编码器:Vision Transformer(ViT)或 CNN
- 音频编码器:音频 Transformer
- 将不同模态转换为统一表示
-
模态对齐(Modality Alignment)
- 将不同模态映射到同一语义空间
- 使用对比学习(如 CLIP)对齐文本和图像
- 让模型理解跨模态的语义关系
-
融合机制
- 早期融合:在输入层融合
- 晚期融合:在特征层融合
- 交叉注意力:使用 Cross-Attention 融合
-
统一解码器
- 使用 Transformer Decoder 生成文本
- 可以生成图像描述、回答图像相关问题
典型架构:
-
CLIP(Contrastive Language-Image Pre-training)
- 文本编码器 + 图像编码器
- 对比学习对齐两种模态
- 应用:图像检索、零样本分类
-
GPT-4V(Vision)
- 图像编码器 + 文本编码器
- 统一到 Transformer 架构
- 应用:图像理解、视觉问答
-
LLaVA(Large Language and Vision Assistant)
- 图像编码器(CLIP) + 大语言模型(LLaMA)
- 投影层连接两种模态
- 应用:视觉对话、图像理解
训练方式:
-
预训练
- 大规模多模态数据
- 图像-文本对对比学习
- 图像描述生成
-
指令微调
- 多模态指令数据
- 视觉问答、图像理解任务
应用场景:
- 图像描述生成
- 视觉问答
- 图像检索
- 多模态对话
挑战:
- 模态对齐困难
- 计算成本高
- 需要大量多模态数据
16|大模型部署时需要考虑哪些因素?
参考答案:
大模型部署 是将训练好的模型部署到生产环境,需要考虑多个因素:
1. 性能优化
-
推理速度
- 使用量化(INT8/INT4)
- 使用推理框架(vLLM、TensorRT)
- 优化 KV Cache
- 批处理优化
-
延迟要求
- 实时对话:< 1 秒
- 批量处理:可以接受更长延迟
- 根据场景调整优化策略
2. 资源管理
-
显存优化
- 模型量化
- KV Cache 优化
- 动态批处理
-
计算资源
- GPU 选择(A100、H100 等)
- 多 GPU 部署
- CPU 推理(量化模型)
3. 可扩展性
-
水平扩展
- 多实例部署
- 负载均衡
- 自动扩缩容
-
垂直扩展
- 使用更强的 GPU
- 增加显存
4. 成本控制
-
硬件成本
- 选择合适的 GPU
- 使用云服务还是自建
-
运营成本
- 电力消耗
- 维护成本
5. 可靠性
-
容错机制
- 多实例备份
- 故障自动切换
- 健康检查
-
监控告警
- 性能监控
- 错误监控
- 资源使用监控
6. 安全性
-
数据安全
- 输入输出过滤
- 防止注入攻击
- 数据加密
-
访问控制
- API 密钥管理
- 速率限制
- 权限控制
7. 易用性
-
API 设计
- RESTful API
- 清晰的文档
- 错误处理
-
SDK 支持
- Python SDK
- 其他语言 SDK
部署方案:
-
云端部署
- AWS、Azure、GCP
- 阿里云、腾讯云
- 优点:灵活、易扩展
- 缺点:成本较高
-
边缘部署
- 本地服务器
- 边缘设备
- 优点:低延迟、数据安全
- 缺点:资源有限
-
混合部署
- 云端 + 边缘
- 根据场景选择
推荐框架:
- vLLM:高性能推理框架
- TensorRT:NVIDIA 优化框架
- ONNX Runtime:跨平台推理
- Triton:模型服务框架
17|什么是模型量化?常见的量化方法有哪些?
参考答案:
模型量化(Quantization) 是将模型参数从高精度(如 FP32、FP16)转换为低精度(如 INT8、INT4)的技术,可以大幅减少模型大小和显存占用。
量化原理:
- FP32:32 位浮点数,精度高但占用空间大
- INT8:8 位整数,精度降低但占用空间减少 75%
- 通过映射函数将浮点数映射到整数范围
量化公式:
Q = round((F - zero_point) / scale)
其中:
F:原始浮点数
Q:量化后的整数
scale:缩放因子
zero_point:零点偏移
常见方法:
-
训练后量化(Post-Training Quantization)
- 静态量化:使用校准集确定量化参数
- 动态量化:运行时动态确定量化参数
- 优点:不需要重新训练
- 缺点:可能损失精度
-
量化感知训练(Quantization-Aware Training, QAT)
- 训练时就考虑量化
- 模拟量化过程,让模型适应量化
- 优点:精度损失小
- 缺点:需要重新训练
-
权重量化(Weight Quantization)
- 只量化权重,激活值保持 FP16
- 优点:简单、速度快
- 缺点:显存减少有限
-
激活量化(Activation Quantization)
- 量化激活值
- 优点:显存大幅减少
- 缺点:可能影响精度
-
全量化(Full Quantization)
- 权重和激活值都量化
- 优点:显存减少最多
- 缺点:精度损失可能较大
量化位数:
-
INT8 量化
- 显存减少 50%
- 精度损失通常 < 5%
- 最常用
-
INT4 量化
- 显存减少 75%
- 精度损失可能 5-10%
- 需要特殊硬件支持
-
混合精度
- 关键层保持 FP16,其他层量化
- 平衡精度和效率
量化工具:
- GPTQ:训练后量化,效果好
- AWQ:激活感知量化
- LLM.int8():Hugging Face 的量化方法
- TensorRT:NVIDIA 的量化工具
选择建议:
- 追求极致速度:INT4 量化
- 平衡精度和速度:INT8 量化
- 精度要求高:量化感知训练
- 快速部署:训练后量化
五、评估与评测篇(3题)
18|如何评估大模型的性能?常见的评估指标有哪些?
参考答案:
大模型评估 是衡量模型性能的关键,需要从多个维度评估:
1. 语言能力评估
-
困惑度(Perplexity, PPL)
- 衡量模型对文本的预测能力
- 越低越好
- 公式:
PPL = exp(cross_entropy)
-
BLEU 分数
- 评估生成文本的质量
- 比较生成文本和参考文本的 n-gram 重叠
- 范围:0-1,越高越好
-
ROUGE 分数
- 评估摘要质量
- ROUGE-L:基于最长公共子序列
- ROUGE-N:基于 n-gram 重叠
2. 任务特定评估
-
分类任务
- 准确率(Accuracy)
- F1 分数
- 精确率、召回率
-
问答任务
- EM(Exact Match):完全匹配率
- F1:token 级别的 F1
- BLEU:生成质量
-
代码生成
- Pass@K:K 个生成中至少一个通过测试的比例
- 代码执行正确率
3. 综合评估基准
-
MMLU(Massive Multitask Language Understanding)
- 57 个任务,涵盖多个领域
- 评估模型的综合能力
-
HellaSwag
- 常识推理任务
- 评估模型的推理能力
-
HumanEval
- 代码生成任务
- 164 个编程问题
-
GSM8K
- 数学问题求解
- 评估模型的数学能力
4. 安全性评估
-
毒性检测
- 评估模型生成有害内容的比例
- 使用 RealToxicityPrompts 等数据集
-
偏见检测
- 评估模型是否存在性别、种族等偏见
- 使用 BOLD 等数据集
5. 效率评估
-
推理速度
- Tokens/秒
- 延迟(Latency)
-
资源占用
- 显存占用
- 模型大小
评估方法:
-
零样本评估(Zero-shot)
- 不提供示例,直接评估
- 评估模型的泛化能力
-
少样本评估(Few-shot)
- 提供少量示例
- 评估模型的上下文学习能力
-
微调后评估(Fine-tuned)
- 在特定任务上微调后评估
- 评估模型的适应能力
最佳实践:
- 使用多个评估指标
- 在多个数据集上评估
- 考虑实际应用场景
- 关注模型的弱点和优势
19|什么是数据泄露(Data Leakage)?如何避免?
参考答案:
数据泄露(Data Leakage) 是指测试集中的数据在训练时被模型看到,导致评估结果虚高,不能反映模型的真实性能。
类型:
-
直接泄露
- 测试集数据直接出现在训练集
- 例如:同一篇文章出现在训练和测试集
-
时间泄露
- 未来数据出现在训练集
- 例如:用 2024 年的数据训练,用 2023 年的数据测试
-
分布泄露
- 训练集和测试集分布不一致
- 例如:训练集是新闻,测试集是社交媒体
-
标签泄露
- 测试标签信息泄露到训练集
- 例如:测试集的答案出现在训练文本中
影响:
- 评估结果虚高,不能反映真实性能
- 模型可能过拟合到测试集
- 部署到真实场景时性能下降
如何避免:
-
数据划分
- 严格划分训练集、验证集、测试集
- 测试集只在最终评估时使用
- 使用时间顺序划分(时间序列数据)
-
去重处理
- 检查训练集和测试集是否有重复
- 使用去重工具(如 MinHash)
-
时间顺序
- 时间序列数据按时间划分
- 训练集时间 < 验证集时间 < 测试集时间
-
分布一致性
- 确保训练集和测试集分布一致
- 使用分层采样
-
交叉验证
- 使用 K-fold 交叉验证
- 多次划分,取平均结果
-
外部测试集
- 使用完全独立的外部测试集
- 例如:使用其他来源的数据
检测方法:
-
相似度检测
- 计算训练集和测试集的相似度
- 使用 TF-IDF、Embedding 等
-
性能异常
- 如果测试集性能异常高,可能存在泄露
- 对比验证集和测试集性能
-
人工检查
- 随机抽样检查
- 查找重复内容
最佳实践:
- 数据划分要早,避免后续处理导致泄露
- 使用版本控制管理数据集
- 记录数据来源和处理过程
- 定期检查数据质量
20|什么是 Chain-of-Thought(CoT)?它如何提升模型性能?
参考答案:
Chain-of-Thought(CoT,思维链) 是一种提示技术,通过引导模型展示推理过程来提升复杂推理任务的性能。
核心思想:
- 传统方法:直接给出答案
- CoT:先展示推理步骤,再给出答案
- 让模型"思考"过程可见
示例:
传统提示:
问题:一个篮子里有 5 个苹果,吃掉 2 个,还剩几个?
答案:3 个
CoT 提示:
问题:一个篮子里有 5 个苹果,吃掉 2 个,还剩几个?
推理:
1. 初始有 5 个苹果
2. 吃掉 2 个,所以减少 2 个
3. 剩余 = 5 - 2 = 3 个
答案:3 个
为什么有效?
-
分解复杂问题
- 将复杂问题分解为简单步骤
- 每一步都更容易解决
-
减少错误
- 展示推理过程,更容易发现错误
- 可以逐步验证
-
利用模型能力
- 大模型擅长逐步推理
- CoT 激活了这种能力
类型:
-
Zero-shot CoT
- 直接要求模型展示推理过程
- 提示:“让我们一步步思考”
-
Few-shot CoT
- 提供几个 CoT 示例
- 模型学习推理模式
-
Self-Consistency
- 生成多个推理路径
- 选择最一致的答案
应用场景:
- 数学问题求解
- 逻辑推理
- 常识推理
- 复杂问答
效果:
- 在数学问题上提升 20-50%
- 在逻辑推理上提升 10-30%
- 在复杂任务上效果显著
进阶技术:
-
Tree of Thoughts
- 探索多个推理路径
- 选择最佳路径
-
ReAct
- 结合推理和行动
- 动态调整策略
-
Self-Correct
- 模型自我纠正
- 发现并修正错误
最佳实践:
- 根据任务复杂度选择 CoT 类型
- 提供清晰的推理示例
- 鼓励模型展示完整推理过程
- 验证推理步骤的正确性
总结
这 20 道面试题(第二辑)涵盖了大模型的不同维度:
✅ 模型架构:GPT vs BERT、MoE、GQA、RMSNorm、SwiGLU 等
✅ 训练技巧:梯度累积、学习率调度、标签平滑、Dropout、梯度裁剪等
✅ Agent 技术:AI Agent、ReAct、Function Calling、Tool-Use 等
✅ 多模态与部署:多模态模型、部署考虑、模型量化等
✅ 评估与评测:性能评估、数据泄露、Chain-of-Thought 等
学习建议:
- 结合第一辑和第二辑,全面掌握大模型知识
- 理解每个技术的原理和应用场景
- 关注最新研究进展(如 MoE、GQA 等新架构)
- 动手实践,加深理解
推荐资源:
- 论文:GPT、BERT、LLaMA、MoE 等经典论文
- 开源项目:LangChain、vLLM、LLaMA 等
- 实践:实现简单的 Agent、RAG 系统等
以上是今天的分享,如果对你有帮助的话,欢迎点亮【在看】,【收藏】和【点赞】
更多推荐


所有评论(0)