知识点标签

GPU 面试题解析

GPU 相关面试题,覆盖并行计算、显存访问、多卡通信和大模型推理优化。

38 道题 2 个岗位 12 个公司

GPU相关面试题

手写 CUDA All-Reduce/归约 kernel 时,如何设计线程内与 block 内归约,并说明 block 间同步和跨 GPU AllReduce 通常为什么需要多 kernel、cooperative groups 或 NCCL?

这题要先澄清 All-Reduce 在面试手写题里的边界:单 GPU 内通常先写归约 kernel,再解释 block 间同步为什么不能靠普通 __syncthreads 解决;真正跨 GPU AllReduce 属于通信 collective,通常交给 NCCL 或多阶段通信算法。

大模型推理变慢时,如何从序列长度、batch、KV Cache、量化、FlashAttention 和 GPU 资源排查?

这题考 LLM 推理性能诊断闭环。高质量回答应先定义慢在哪里,再拆分队列、prefill、decode、KV Cache、batch 调度、attention kernel、量化、GPU 利用率和服务链路,用指标定位瓶颈,而不是一上来堆优化名词。

同题还出现在 1 个公司岗位

Qwen 支持 128K 长上下文时,如何降低显存占用和注意力计算复杂度?

Qwen 这类支持 128K 长上下文的大模型,不能只靠把最大位置编码拉长来解决问题,核心挑战是注意力计算随序列长度接近平方增长、KV cache 随层数和上下文长度线性增长、训练激活和通信也会放大。常见工程组合包括 RoPE 外推或缩放、FlashAttention 类内存高效注意力、GQA/MQA 降低 KV cache、paged/quantized KV cache、chunked prefill、序列并行或 context parallel、激活重计算,以及在可接受的质量边界内使用滑窗、稀疏或分块注意力。回答时要区分降低显存峰值、降低 KV cache、降低真实计算复杂度三件事。

大模型训练显存如何估算,参数、梯度、优化器状态、激活和临时缓存各占哪些部分?

大模型训练显存可以先拆成 model states、activations、temporary buffers、通信缓存和碎片/框架开销。model states 包括参数、梯度和优化器状态;以 Adam 混合精度训练为例,常见粗估是参数 bf16/fp16 2P、梯度 2P、Adam 一阶和二阶矩 fp32 8P、可选 fp32 master weights 4P,总计约 12P 到 16P bytes。除此之外,activation 随 batch、sequence length、hidden size 和层数增长,长上下文 attention 还可能带来平方项;临时缓存包括 attention workspace、GEMM workspace、logits、通信 bucket、all-gather buffer 和内存碎片。估算时要同时考虑并行策略、ZeRO 分片、activation checkpointing、精度和 micro-batch。

同题还出现在 1 个公司岗位

TensorRT-LLM(TRT-LLM)和 vLLM 在 LLM 推理部署中有什么区别,TRT-LLM 主要靠哪些机制加速?

这题考 LLM 推理部署中的系统取舍。好的回答要把 vLLM 和 TensorRT-LLM 区分为不同工程侧重点:vLLM 更像面向在线服务的通用推理引擎和调度系统,强调 PagedAttention、连续批处理、OpenAI 兼容服务和模型接入灵活性;TensorRT-LLM 更贴近 NVIDIA GPU 上的编译优化与高性能运行时,强调 TensorRT engine、算子融合、专用 kernel、量化、KV cache、in-flight batching 和多 GPU 通信优化。不能简单说谁一定更快,要看模型、硬件、batch、延迟目标和工程成本。

LLM 推理中做 KV Cache sparse 计算时,vLLM/Triton 实现为什么可能选择稀疏索引或稀疏块,而不是直接用 dense mask?

这题考的是稀疏注意力在推理引擎里的真实性能取舍。dense mask 在数学上能表达稀疏模式,但计算和访存仍接近 dense attention;而稀疏索引或稀疏块能让 kernel 只读取和计算被选中的 KV cache,从而节省显存带宽、减少无效 FLOPs,并更适合 vLLM 这类分页 KV 和 Triton 块级并行实现。

SmoothQuant 为什么要做 activation/weight 平滑?平滑参数如何设定,用激活分布判断模型是否适合时应关注 input channel 还是 output channel?

这道题考察对 SmoothQuant 的核心动机、等价变换和校准维度的理解。回答时要先说明 LLM 的激活 outlier 会让 INT8 activation 量化特别困难,而 SmoothQuant 通过按输入通道缩放,把一部分动态范围压力从 activation 平滑地迁移到 weight 上,从而让 W8A8 推理更稳定。关键点不是笼统地说做归一化,而是说明缩放不改变浮点计算语义、参数需要用校准集和逐层误差选择,并明确判断激活分布时主要看线性层的 input channel 维度。

AWQ 和 GPTQ 的量化原理有什么区别?在 LLM 推理部署中它们各自适合什么取舍?

这道题要求区分 AWQ 和 GPTQ 都是大模型后训练量化方法,但优化目标和工程取舍不同。GPTQ 更像基于二阶近似的逐块权重量化误差补偿,利用校准激活构造 Hessian 近似来最小化层输出重构误差;AWQ 则强调 activation-aware 的显著权重保护,通过观察激活通道重要性和缩放搜索减少关键通道误差。好的回答要能讲清原理差异、校准成本、精度与速度、kernel 适配、以及在 LLM 推理部署中的选择标准。

分布式 LLM 训练中 AllReduce、AllGather、ReduceScatter 和 AllToAll 分别解决什么通信问题,哪些并行场景会用到它们?

这道题考察分布式训练中 collective communication 的语义和并行策略映射。回答要先把 AllReduce、AllGather、ReduceScatter、AllToAll 的输入输出关系讲清,再说明它们分别解决梯度汇总、参数或激活拼接、归约后分片、个性化交换等问题。进一步要能联系数据并行、张量并行、ZeRO/FSDP、序列并行、专家并行和 MoE token dispatch,指出通信量、同步开销、拓扑和 overlap 对训练效率的影响。

如何根据模型参数量、训练 token 数、FLOPs、GPU 数量和硬件利用率估算 LLM 训练时间?

这道题考察能否把 LLM 训练时间从经验判断转成可计算的工程估算。核心公式是总训练 FLOPs 除以集群有效算力:dense decoder-only 模型可用约 6 × 参数量 × token 数估算前向加反向训练 FLOPs,再除以 GPU 数、单卡峰值 FLOPs 和硬件利用率或 MFU。好的回答还要说明单位换算、序列长度和 attention 开销、MoE active 参数、数据并行扩展效率、checkpoint/eval/restart 等 wall-clock 修正因素。

LLM 训练过程中应该监控哪些指标,如何用 loss、梯度、吞吐、显存、GPU 利用率、checkpoint 和评测集发现异常?

这道题考察 LLM 训练监控体系,而不是只问 loss 曲线。完整回答要覆盖模型质量、数值稳定性、吞吐性能、资源利用、数据管道、checkpoint 可靠性和周期评测。更重要的是说明如何用这些指标定位异常:loss spike 可能来自坏数据或学习率问题,梯度爆炸会伴随 grad norm 和 NaN,吞吐下降可能来自 dataloader、通信或 straggler,显存增长可能是泄漏或碎片,评测集退化可能暴露过拟合、数据污染或训练分布偏移。

CUDA 算子优化后如何做公平 benchmark,排除硬件和精度差异,并证明性能提升真实有效?

这题考 CUDA 算子优化后的性能证明能力。好答案要建立公平 benchmark:固定硬件、驱动、CUDA/cuDNN/cuBLAS 版本、dtype、shape、batch、warmup、stream、同步点和统计方法;排除异步计时、首次编译、温度降频、不同 GPU 架构和精度算力差异;再用 Nsight/NCU 证明瓶颈从访存、计算、occupancy、launch 或同步角度确实改善,并用精度回归和端到端指标证明收益真实。

vLLM 和 SGLang 在 LLM 推理引擎中分别解决什么问题,如何从 PagedAttention、前缀复用和请求调度角度比较?

这题考 LLM 推理引擎的系统理解,而不是问两个项目谁更快。好答案要说明 vLLM 的核心公共概念是提升 serving 吞吐和显存利用率,典型抓手包括 PagedAttention、KV cache 分页管理、continuous batching 和 prefix caching;SGLang 更强调面向复杂 LLM 应用的编程/运行时,围绕结构化生成、多轮/多调用流程、前缀复用、调度和缓存优化降低复杂请求的执行成本。比较时要从 KV 管理、前缀复用、请求调度、结构化输出、内存压力和 workload fit 讲边界,避免虚构版本特性。

为什么 CPU 通常需要多级 Cache,而 GPU 更强调 shared memory、coalescing 和高带宽并行访存?

这题考 CPU/GPU 架构差异和访存优化思路。好答案要说明 CPU 面向低延迟、强控制流、少量复杂线程,依赖多级 Cache、分支预测和乱序执行降低单线程访存延迟;GPU 面向高吞吐、大量线程并行,用 warp 调度隐藏延迟,更强调 coalesced global memory access、shared memory 显式复用、高带宽和 occupancy。不能简单说 GPU 没有 Cache,而要说明 GPU 也有 L1/L2/纹理等缓存,只是优化重点从自动低延迟缓存转向显式数据布局和并行带宽利用。

单机多卡和多机多卡训练的核心差异是什么,如何根据互联拓扑、通信开销和并行策略做选择?

这道题考察分布式训练的系统判断。单机多卡和多机多卡的差异不只是 GPU 数,而是互联拓扑、通信延迟、带宽、故障域、调度、存储和并行策略。好答案要能按显存瓶颈、计算/通信比、batch、模型规模和网络条件选择 DDP、FSDP/ZeRO、张量并行、流水线并行或组合方案。

同题还出现在 1 个公司岗位

DeepSpeed ZeRO 中哪些训练状态会占用 GPU 显存,为什么 activation 通常用 checkpoint/recompute 而不是像参数或优化器状态一样分页?

这道题考察大模型训练显存构成和 ZeRO 的边界。回答要先把 GPU 显存里的主要训练状态拆清楚:参数、梯度、优化器状态、激活、通信/临时 buffer 和碎片;再说明 ZeRO 主要分片的是模型状态,Stage 1/2/3 分别处理优化器状态、梯度和参数;最后解释 activation 为什么通常用 checkpoint/recompute:它是 batch/sequence 相关的短生命周期中间结果,反向依赖层级顺序,分页到 CPU/NVMe 会引入高带宽低延迟瓶颈,而重计算能用额外 FLOPs 换显存,通常更可控。

FlashAttention 为什么更适合 Prefill,Decode 阶段的瓶颈是什么,Flash Decoding 如何优化?

这题考 GPU 推理性能分析能力。好的回答要区分 Prefill 和 Decode 的计算形态:Prefill 是长 query 的大矩阵注意力,FlashAttention 能提高 IO 效率和并行度;Decode 是单 token 迭代生成,瓶颈常在 KV cache 读取、显存带宽和 SM 利用率,Flash Decoding 通过切分 KV 序列提升并行读取和长上下文吞吐。