plan-now


看你这张 JD,它要的”Infra 实习生”其实很明确:大模型/多模态/视频生成的训练与推理基础设施 + 性能优化 + 高并发高可用,并且点名了 算法优化、通信优化、调度优化、计算与通信 overlap。你可以按下面这条学习主线来准备(从最有性价比到更硬核)。

1) 必备底座(面试最常问)

  • Python 工程能力:熟练写可维护代码、并发(线程/进程/asyncio)、日志、配置、性能 profiling
  • C++ 基础:至少能读懂/改简单模块(指针、RAII、STL、并发基础),因为很多性能关键路径在 C++/CUDA
  • 操作系统 + 网络:进程/线程/锁、内存管理、I/O、TCP/HTTP/gRPC、限流/熔断/重试

2) GPU & 深度学习系统(你跟别人拉开差距的地方)

  • CUDA 基础概念:kernel launch、warp、shared memory、memory bandwidth、stream、异步拷贝、pin memory
  • Profiling 工具:知道怎么用 Nsight Systems/Compute 看瓶颈(是算力不够还是带宽不够还是 launch 太多)
  • PyTorch 推理链路:autocast、inference_mode、torch.compile(理解它优化了什么、没优化什么)

3) 大模型推理 Infra(JD 的核心关键词)

重点把下面这几个“系统概念”学到能讲清楚+能落地:

  • KV Cache 管理:PagedAttention / block allocator / 显存碎片 / prefix cache
  • 调度:continuous batching、prefill/decode 分离、chunked prefill、QoS(p99 延迟)
  • 推理加速:量化(INT8/FP8/INT4)、算子融合、FlashAttention、CUDA Graph、TensorRT/Triton
  • 投机解码:speculative decoding(能讲清收益、代价、适用场景)

你前面已经在学 vLLM/SGLang,这块继续深挖就是“对口”。

4) 通信优化 & overlap(JD 点名要)

这是很多人短板,也是加分项:

  • NCCL 基础:all-reduce / all-gather / reduce-scatter 的意义与代价
  • 并行策略:TP/PP/DP(张量/流水线/数据并行)在训练/推理里各自的瓶颈
  • 计算与通信 overlap:用 CUDA stream 把通信塞到计算空隙里;理解 pipeline bubble、micro-batch

5) 多模态/视频生成(加分但不一定深挖)

JD 提到“多模态和视频生成大模型”,你至少要懂:

  • 扩散模型推理结构:UNet + VAE + sampler(为什么步数决定时间)
  • 常见加速:LCM/Lightning/Turbo(少步数)、Flash/xFormers attention、TensorRT、torch.compile/stable-fast
  • 视频生成的额外瓶颈:时序维度更大、显存更凶、IO/解码也会成为瓶颈

最有效的准备方式:做 2 个能写进简历的项目

不用大而全,做“对口且可证明”的:

项目 A(推理方向,强对口)

用 vLLM 或 SGLang 搭一个推理服务,自己加一项优化并量化收益:

  • 加:continuous batching 参数调优 / chunked prefill / prefix cache / speculative
  • 输出:吞吐(tokens/s)、TTFT、p95/p99、显存占用对比图

项目 B(通信/训练方向,加分项)

用 PyTorch DDP 跑一个小模型,做一次通信优化实验:

  • 对比:不同 batch、不同梯度累积、reduce-scatter vs all-reduce(理解即可)
  • 尝试:把通信 overlap 到反向计算(哪怕只是原理级演示)
  • 输出:step time 分解(compute vs comm)

你可以按 4 周冲刺节奏学(很现实)

  • 第 1 周:OS/网络 + Python 并发 + profiling 入门
  • 第 2 周:CUDA 基础 + Nsight 看懂一张 trace
  • 第 3 周:vLLM/SGLang 深挖(KV、batching、prefill/decode)
  • 第 4 周:做项目 A + 写指标报告(这是面试王牌)

如果你愿意,我可以根据你现在的水平(比如:会不会 CUDA、C++ 到哪、是否有 GPU 环境)把上面拆成每天的学习任务清单,并且给你一份“面试会追问的题库”,完全贴这个 JD 的关键词。

下面是ai给的每日规划

第 1 周|系统 & 工程底座(Infra 必修)

目标:不再“只会写 Python”,而是像 infra 工程师一样思考

Day 1|进程 / 线程 / GIL

学:

进程 vs 线程

Python GIL 是什么,什么时候有用/没用

做:

写一个多线程 + 多进程 demo,对比 CPU 利用率

能回答:

推理服务为什么常用多进程而不是多线程?

Day 2|并发模型(async / queue)

学:

threading / multiprocessing / asyncio 的适用场景

做:

写一个 producer–consumer 队列(模拟请求进来、worker 处理)

能回答:

streaming 推理适合用哪种并发模型?

Day 3|内存 & I/O

学:

虚拟内存、page、mmap

阻塞 I/O vs 非阻塞 I/O

做:

对比:普通读文件 vs mmap 读文件

能回答:

模型权重为什么常用 mmap 加载?

Day 4|网络基础(服务端视角)

学:

HTTP vs gRPC

keep-alive、timeout、retry

做:

用 FastAPI 写一个简单推理 mock 接口

能回答:

为什么推理服务要限流/熔断?

Day 5|性能 profiling(CPU 侧)

学:

latency / throughput / p99

做:

给 Day 4 的接口加 timing 和简单 profiling

能回答:

为什么 batch 大吞吐高,但延迟可能变差?

Day 6–7|总结 &复盘

输出:

一页笔记:“一次推理请求的完整系统路径”

检查点:

你能画出:客户端 → 服务 → GPU → 返回

第 2 周|CUDA & GPU(拉开差距)

目标:能看懂 Nsight trace,知道慢在哪一层

Day 8|GPU 结构(你已经学得很好)

学:

GPU / SM / warp / register / shared / L1 / L2 / HBM

做:

画一张你自己的 GPU 结构图

能回答:

shared、L1、L2 的关系

Day 9|kernel / warp / divergence

学:

kernel launch

warp lockstep

branch divergence

做:

写一个 if/else kernel(或看示例),理解 divergence

能回答:

为什么分支多会慢?

Day 10|内存带宽 & 访存

学:

memory bandwidth

coalesced vs random access

做:

理解一个 “连续访问 vs 随机访问” 的 kernel 示例

能回答:

KV cache 为什么是带宽瓶颈?

Day 11|Stream & 异步

学:

CUDA stream

async copy

pinned memory

做:

理解一张 “compute + memcpy overlap” 时间线图

能回答:

async copy 什么时候会退化成同步?

Day 12|Nsight Systems

学:

nsys 的 timeline 怎么看

做:

跑一个 PyTorch 推理,截图一张 trace

能回答:

launch overhead 在 trace 里长什么样?

Day 13–14|总结

输出:

一页笔记:“GPU 慢的 4 种典型原因”

launch

divergence

bandwidth

sync

第 3 周|大模型推理 Infra(JD 核心)

目标:能像 vLLM/SGLang 开发者一样说话

Day 15|vLLM 架构

学:

prefill vs decode

continuous batching

做:

跑 vLLM demo

能回答:

为什么 decode 是瓶颈?

Day 16|KV Cache & PagedAttention

学:

KV cache 生命周期

block / page allocator

做:

画 KV cache 的内存分布图

能回答:

为什么不用连续内存?

Day 17|调度

学:

continuous batching

chunked prefill

做:

改一个参数,看吞吐变化

能回答:

长短请求混跑的问题?

Day 18|推理加速

学:

FlashAttention

CUDA Graph

量化思路

做:

理解 FlashAttention 的数据复用逻辑

能回答:

CUDA Graph 解决的是什么问题?

Day 19|Speculative Decoding

学:

speculative decoding / EAGLE

做:

写一段“流程图”

能回答:

什么场景收益最大?风险是什么?

Day 20–21|确定 PR 选题

选一个:

profiling

batching 参数

prefix cache

写:

README 草稿(问题 / 怀疑 / 实验)

第 4 周|项目 & PR(面试王牌)

目标:让面试官默认你“真干过 infra”

Day 22–23|动代码

做:

fork 项目

实现你的实验性改动

要求:

改动不大,但逻辑清楚

Day 24|跑实验

做:

baseline vs optimized

记录:

tokens/s

TTFT

显存占用

Day 25|完善 README

必须包含:

问题

为什么怀疑

实验结果

局限性

Day 26|整理简历素材

写清楚:

你改了什么

带来了什么变化

学到了什么 trade-off

Day 27–28|模拟面试

自问自答:

为什么这里慢?

为什么这样改?

有没有更极端场景?


文章作者: Austin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Austin !
评论
  目录