看你这张 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|模拟面试
自问自答:
为什么这里慢?
为什么这样改?
有没有更极端场景?