标签题目
CUDA相关面试题
LLM 推理算子优化中,Memory Coalescing 和 Bank Conflict 分别是什么,如何影响显存访问效率?
这题考 CUDA 访存优化在 LLM 推理算子里的基本功。回答要把 GMEM 的连续合并访问、SMEM 的 bank 并行访问、warp 级访问模式和 profiling 现象连起来,而不是只背两个定义。
LLM 推理算子中,Tensor Core、WMMA 和 MMA 分别是什么,工程上如何选择使用层级?
这题考候选人是否理解 NVIDIA GPU 矩阵乘加的硬件、CUDA C++ 抽象和更底层指令接口。回答要能说明 Tensor Core 是硬件单元,WMMA 是较高层 CUDA API,MMA 是更贴近指令和 PTX 的矩阵乘加操作。
LLM 推理算子变慢时,如何判断瓶颈是 Memory Bound 还是 Compute Bound?
这题考算子性能诊断方法。回答要从理论 roofline、算术强度、实际 profiler 指标、stall reason 和优化方向闭环判断,而不是只说“看 GPU 利用率”。
AI Infra 中拿到一个慢算子时,如何判断是否值得优化,并选择 kernel 优化、算子融合、图优化或数据布局调整?
这题考慢算子优化的工程决策树,重点不是单独判断 Memory Bound 或 Compute Bound,而是先判断投入是否值得,再把 profile 证据映射到 kernel、融合、图优化和 layout 等不同路径。
AWQ 等权重量化引入反量化步骤后,为什么仍可能让 LLM 推理整体变快?
这题考权重量化的反直觉加速机制,核心是解释额外 dequant 计算为什么可能小于权重带宽、显存占用、cache 命中和融合带来的收益,同时说明它只在合适瓶颈和 kernel 支持下成立。
推理优化中为什么常把动态图转成静态图再做算子融合,转换开销如何评估和控制?
这题考动态图和静态图在推理优化中的取舍,重点是静态图提供全局依赖、shape、pattern 和内存信息,便于融合和调度优化;转换开销要靠缓存、shape bucketing、warmup、fallback 和端到端摊销控制。
手写 CUDA vector add kernel 时,为什么需要边界判断,为什么通常不用 shared memory,block size 和 warp 有什么关系?
这题考 CUDA 入门 kernel 的工程基本功:线程索引、越界保护、全局内存合并访问、shared memory 是否有复用收益、block size 与 warp/occupancy 的关系。
手写 CUDA Softmax2D 时,如何在 K 维做数值稳定的 softmax,避免指数溢出和精度爆炸?
这题考 row-wise softmax kernel 的正确性和性能:按 K 维减最大值、FP32 累加、block/warp reduction、不同 K 大小的线程映射,以及极端输入验证。
使用 CUTLASS 优化 GEMM/LLM 推理算子时,通常从 tile 划分、memory hierarchy、epilogue 融合和 Tensor Core 利用率哪些方向入手?
这题考候选人是否能把 CUTLASS 当成可配置的 GEMM/kernel 生成框架来理解:从问题规模、tile 层级、访存搬运、Tensor Core 指令形状、epilogue 融合和 profiling 闭环解释优化,而不是只说“用库会更快”。
针对特定 GPU 架构做算子优化是否值得,如何权衡性能收益、维护成本、可移植性和 fallback 方案?
这题考 GPU kernel 优化的工程取舍:不是问能不能榨干某一代硬件,而是问性能收益是否覆盖多架构维护、编译发布、回归矩阵和 fallback 成本。
手写 CUDA All-Reduce/归约 kernel 时,如何设计线程内与 block 内归约,并说明 block 间同步和跨 GPU AllReduce 通常为什么需要多 kernel、cooperative groups 或 NCCL?
这题要先澄清 All-Reduce 在面试手写题里的边界:单 GPU 内通常先写归约 kernel,再解释 block 间同步为什么不能靠普通 __syncthreads 解决;真正跨 GPU AllReduce 属于通信 collective,通常交给 NCCL 或多阶段通信算法。
如何用 PyTorch/CUDA 思路实现四线性插值,说明索引、权重计算和边界处理伪代码?
这题考实现思路而不是背库函数:先声明把“四线性插值”按 4D/quadrilinear interpolation 理解,即 4 个连续维度上各取 floor/ceil 共 16 个邻居,再讲索引映射、权重乘积、边界策略、CUDA 并行和反向传播验证。
在 LLM 推理算子中,什么时候应使用 CUDA Core,什么时候应使用 Tensor Core?
这题考察 GPU 架构理解和算子选型能力,核心不是背概念,而是能按算子形态、数据类型、规模、访存和精度做工程判断。
大模型训练中的 MFU 指标是什么,如何结合 Nsight/Profiler 定位吞吐瓶颈?
这题考训练性能分析能力:MFU 是把实际训练吞吐折算成模型有效 FLOPs 后,与 GPU 理论峰值比较的利用率指标;定位瓶颈要把 MFU、step time、kernel 时间线、通信、数据加载和显存行为一起看。
LLM 推理中做 KV Cache sparse 计算时,vLLM/Triton 实现为什么可能选择稀疏索引或稀疏块,而不是直接用 dense mask?
这题考的是稀疏注意力在推理引擎里的真实性能取舍。dense mask 在数学上能表达稀疏模式,但计算和访存仍接近 dense attention;而稀疏索引或稀疏块能让 kernel 只读取和计算被选中的 KV cache,从而节省显存带宽、减少无效 FLOPs,并更适合 vLLM 这类分页 KV 和 Triton 块级并行实现。
分布式 LLM 训练中 AllReduce、AllGather、ReduceScatter 和 AllToAll 分别解决什么通信问题,哪些并行场景会用到它们?
这道题考察分布式训练中 collective communication 的语义和并行策略映射。回答要先把 AllReduce、AllGather、ReduceScatter、AllToAll 的输入输出关系讲清,再说明它们分别解决梯度汇总、参数或激活拼接、归约后分片、个性化交换等问题。进一步要能联系数据并行、张量并行、ZeRO/FSDP、序列并行、专家并行和 MoE token dispatch,指出通信量、同步开销、拓扑和 overlap 对训练效率的影响。
CUDA 算子优化后如何做公平 benchmark,排除硬件和精度差异,并证明性能提升真实有效?
这题考 CUDA 算子优化后的性能证明能力。好答案要建立公平 benchmark:固定硬件、驱动、CUDA/cuDNN/cuBLAS 版本、dtype、shape、batch、warmup、stream、同步点和统计方法;排除异步计时、首次编译、温度降频、不同 GPU 架构和精度算力差异;再用 Nsight/NCU 证明瓶颈从访存、计算、occupancy、launch 或同步角度确实改善,并用精度回归和端到端指标证明收益真实。
为什么 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 推理中 depthwise / separable convolution 为什么可能变慢,为什么常被判断为访存密集型算子?
这题考 GPU 推理中 depthwise / separable convolution 为什么容易 memory-bound。它虽然显著降低 FLOPs,但 activation 读写没有同比减少,算术强度低,无法充分利用 GPU 计算吞吐,瓶颈常转向显存带宽、cache locality 和 kernel launch。
FlashAttention 为什么更适合 Prefill,Decode 阶段的瓶颈是什么,Flash Decoding 如何优化?
这题考 GPU 推理性能分析能力。好的回答要区分 Prefill 和 Decode 的计算形态:Prefill 是长 query 的大矩阵注意力,FlashAttention 能提高 IO 效率和并行度;Decode 是单 token 迭代生成,瓶颈常在 KV cache 读取、显存带宽和 SM 利用率,Flash Decoding 通过切分 KV 序列提升并行读取和长上下文吞吐。