学习路线¶
建议按“单机可解释 → 多卡可推演 → 集群可运营”的顺序推进。每阶段都用一个可运行实验闭环,而不是只背术语。
8 周主线¶
| 阶段 | 主题 | 达成标准 | 建议实验 |
|---|---|---|---|
| 第 1 周 | Linux、容器、进程/线程、NUMA | 能解释容器看到 GPU 的链路 | nvidia-smi、容器 GPU 注入、CPU 绑核 |
| 第 2 周 | GPU 架构、CUDA 执行与显存 | 能区分算力、带宽、容量瓶颈 | PyTorch Profiler + Nsight Systems |
| 第 3 周 | 互连、RDMA、NCCL collective | 能画出单机/跨机数据流 | nccl-tests,比较 PCIe/NVLink/跨机 |
| 第 4 周 | DDP、FSDP、TP、PP | 能根据模型与集群选择并行策略 | torchrun 单机多卡,观察 all-reduce |
| 第 5 周 | 数据加载、checkpoint、容错 | 能拆解 step time 和恢复路径 | 人为制造慢盘、worker 退出与重启 |
| 第 6 周 | LLM 推理、KV Cache、批处理 | 能解释 TTFT 与 TPOT 的权衡 | 用固定/突发流量压测 vLLM |
| 第 7 周 | Kubernetes GPU 与模型服务 | 能部署、扩缩并完成灰度 | Device Plugin + 一个 GPU Pod/服务 |
| 第 8 周 | 可观测、SLO、容量与成本 | 能用仪表盘定位一次退化 | Prometheus + DCGM + 服务指标联动 |
每个主题的四问法¶
学习任意组件时回答四个问题:
- 抽象是什么? 它对上层隐藏了什么复杂性?
- 关键路径是什么? 数据、控制信号与状态分别怎样流动?
- 边界在哪里? 容量、吞吐、延迟、故障域与一致性限制是什么?
- 如何证明? 哪些指标、profile 或实验能证伪当前判断?
实验记录模板¶
# 实验:<标题>
- 日期 / 代码版本 / 镜像 digest:
- GPU / 驱动 / CUDA / 框架版本:
- 节点、网络与存储拓扑:
- 工作负载:模型、精度、序列长度、batch、并发:
- 假设:
- 变量与对照组:
- 结果:P50/P95/P99、吞吐、显存、功耗:
- 结论与适用边界:
- 原始日志或 dashboard 链接:
毕业项目
部署一个小型开源模型,设计两种工作负载(稳定流量与突发流量),完成压测、容量估算、SLO、仪表盘、告警和一次故障演练。最后写一页“为什么选这个配置”的设计说明。
容易走偏的地方¶
- 只学组件 API,不画端到端关键路径。
- 只看平均值,不看分位数、队列和请求形状。
- 只报 GPU utilization,不解释 SM 活跃、显存带宽与通信等待。
- 用一次 benchmark 推广到所有模型、序列长度和并发。
- 先堆复杂平台,再定义用户场景与 SLO。