ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI Infra从零到一:学习路线、核心技术与实战指南

AI Infra从零到一:学习路线、核心技术与实战指南 1. 先说清楚AI Infra 到底是什么为什么这么火这两年 AI Infra 这个名词出现频率越来越高招聘网站上相关岗位的薪资也一路水涨船高。但如果你去问十个人“AI Infra 具体做什么”大概率会得到十种不同的回答——有人说是做 GPU 集群管理的有人说是优化训练框架的还有人说是搞推理加速的。这些说法都对但都不完整。我自己的理解是AI Infra 是连接“算法创意”和“算力硬件”之间的那一整层工程体系。算法工程师写出一段模型代码GPU 厂商提供芯片中间怎么把代码高效跑在芯片上、怎么让几百张卡协同工作不浪费、怎么在模型训练到一半的时候从容应对显存溢出和断点续训、怎么把训练好的模型以最低延迟和成本部署上线——这些脏活累活全部属于 AI Infra 的范畴。它不是一个单一技术栈而是硬件、系统、框架、平台、工程化方法的合集。对于想入行的人来说最大的困难恰恰就在这里。不同于“学 Python 写爬虫”或者“学 React 做前端”这种目标明确的路线AI Infra 的知识图谱是横向铺开的你得同时懂一点 CUDA、懂一点网络、懂一点分布式系统、懂一点容器编排还得懂模型训练的基本原理。网上资料虽然多但散落在不同社区、不同仓库、不同技术博客里初学者很容易迷失方向。这篇文章就是基于我自己从零开始摸爬滚打的经验整理出来的一条相对清晰的学习路径。我会尽量少讲虚的多讲具体的知识点、工具、实操步骤和面试中常被问到的内容。适合准备转行做 AI Infra 的开发工程师、相关专业还没确定方向的学生以及已经在做算法但想往底层走的同学参考。2. 学习路线怎么设计先搭骨架再填血肉2.1 先搞清楚 AI Infra 的四大核心板块我见过太多人一上来就抱着 CUDA 编程的教材啃啃了两周发现矩阵乘法都调不明白自信心备受打击最后放弃。这种学法的问题在于把“某一个垂直技能”当成了“整个方向的基础”顺序搞反了。AI Infra 的知识体系在我看来可以分成四个互相关联的板块第一个是硬件与集群层。包括 GPU 的架构特征显存、带宽、算力、CPU 与 GPU 的协作方式、服务器之间的网络拓扑以太网、InfiniBand、RDMA、存储系统分布式文件系统、对象存储。这一层的核心问题是算力资源长什么样怎么把它们组织起来变成可用的集群。第二个是框架与并行策略层。包括 PyTorch 分布式训练原理、数据并行DP、模型并行MP、流水线并行PP、张量并行TP、ZeRO 优化器、混合精度训练FP16/BF16等。这一层的核心问题是怎么让模型训练逻辑在多个设备上正确且高效地执行。第三个是调度与平台层。包括 Docker 容器、Kubernetes、GPU 调度插件如 Volcano、Koordinator、任务编排、资源隔离与配额管理、镜像仓库等。这一层的核心问题是怎么让多个团队、多个任务共享一个集群同时互不干扰。第四个是推理与工程化层。包括模型推理加速TensorRT、vLLM、TGI、量化INT8、INT4、服务化部署TorchServe、Triton、弹性伸缩、模型版本管理、监控告警Prometheus、Grafana等。这一层的核心问题是模型训练完之后怎么让它稳定高效地对外提供服务。这四个板块不是并列关系而是层层递进的。硬件是底座框架在硬件之上抽象出编程接口平台再在框架之上做资源管理推理则把最终产物交付给用户。初学者的学习顺序理论上应该从下往上但我不建议在第一层停留太久。2.2 推荐的分阶段学习路线我自己的学习过程大概经历了三个阶段每个阶段对应不同的目标和产出。第一阶段是“建立全局认知”阶段。目标是搞清楚上面四个板块分别解决什么问题涉及哪些核心组件相互之间什么关系。这个阶段不需要深抠细节也不用写太多代码重点是快速在脑海里画出一张地图。我当时用的主要方式是看技术大会的视频演讲比如各类云厂商的 AI 基础设施分享、读一些大厂的工程博客以及刷知乎和 InfoQ 上的入门文章。大概花了两到三周就能对“AI Infra 包含什么”有一个基本概念。第二阶段是“垂直突破 横向串联”阶段。选择一个方向作为主线深入下去比如先从 PyTorch 分布式训练入手从单卡训练逐步扩展到多卡训练然后引入容器化最后上 Kubernetes。过程中你会发现每一个新问题都在逼迫你接触上一层或下一层的知识——当你运行一个分布式训练任务发现网卡带宽不够时你会本能地去了解 RDMA当你手动在一百台机器上操作环境装到崩溃时你会自然地想用容器来解决。第三阶段是“项目实战”阶段。这个阶段必须动手做一个相对完整的项目比如把一个小模型如 GPT-2 规模在一个多机多卡的集群上完成训练、监控、部署的全流程。这个项目会成为你面试时最重要的谈资也是验证前面所有学习效果的唯一标准。2.3 学习过程中最常见的心态误区关于学习路线我先说一个不少人踩过的坑沉迷八股不做实验。AI Infra 因为面试题相对固定市面上确实流传着各种“AI Infra 八股文”汇总我自己面试时也背过不少。八股本身不是坏事它可以帮助你在短时间内覆盖知识盲区但如果只背八股而不理解背后的系统设计逻辑面试官连环追问两轮就会露馅。另一个误区是贪多求全。看到别人说 CUDA 很重要就去学 CUDA看到招聘 JD 写着熟悉 Kubernetes 就去考 CKA结果每个方向都只学了个皮毛。我的建议是在以一条主线比如分布式训练垂直深入之前不要花大量时间碰其他方向。先把一条链路跑通其他知识都是围绕这条链路自然长出来的。3. 四大核心板块逐个拆解每个方向学什么、怎么学3.1 硬件与集群理解计算资源的底层逻辑很多软件背景的同学会下意识地排斥硬件知识觉得那是“搞机房的人”才需要管的。但实际上AI Infra 里 70% 的性能问题最终都能追溯到硬件配置或拓扑结构上。你不必会设计服务器但你必须读懂一张 GPU 集群的拓扑图。先从最基本的开始。你需要搞清楚一张 GPU 卡的关键参数显存大小、显存带宽、FP16/BF16 算力、卡间互联带宽。以目前主流的 NVIDIA A100 为例80GB 显存显存带宽超过 2TB/sBF16 算力约 312 TFLOPSNVLink 卡间互联带宽 600GB/s。这些数字意味着什么意味着模型参数和激活值能放到多大的显存里意味着每一轮迭代的数据搬运速度上限在哪里。面试官问你“为什么 A100 训练比 V100 快”你要能回答出不只是算力提升还有显存带宽和互联带宽的同步升级。集群层需要理解的关键词是RDMARemote Direct Memory Access和InfiniBand。简单来说RDMA 允许一台机器的网卡直接读写另一台机器的内存绕过操作系统内核和 CPU 的中转从而大幅降低延迟、提升带宽。在多机分布式训练中梯度同步是每一轮迭代都发生的操作通信效率直接决定训练吞吐。你可以用一个小实验来感受差距对比用 TCP 和用 RDMA 跑一次 all-reduce 操作观察同样的数据量下耗时差多少。学习这类知识不怎么需要动手但要结合图表看一些集群拓扑的案例。推荐阅读 NVIDIA 官方关于 DGX 系列集群的文档以及 InfiniBand 的架构科普。国内一些大厂的技术博客也偶尔会分享大规模训练集群的运维实践这些案例能帮你把抽象概念具象化。3.2 框架与并行策略这是核心中的核心如果说整个 AI Infra 只有一块知识点需要你反复咀嚼我毫不犹豫会选“分布式训练”。原因很直接训练任务是大规模算力消耗的主要场景也是工程复杂度最高的地方。先理解数据并行DP。最简单的方式是把同一个模型复制到 N 张卡上每张卡分到一批不同的数据独立做前向和反向计算然后通过 all-reduce 操作把各自的梯度汇总求平均再统一更新参数。数据并行的优点是实现简单缺点是每张卡都要存一份完整模型副本模型大到放不进单卡显存时就无能为力了。ZeRO 就是在此基础上的优化——把模型参数、梯度和优化器状态切分到不同设备上需要时再通过通信收集这就是为什么 ZeRO Stage 3 能训练比单卡显存大数倍的模型。再理解模型并行MP。当单张卡放不下完整模型时把模型的不同“层”切到不同卡上就是流水线并行PP把同一层的参数矩阵切成多份分布在多张卡上就是张量并行TP。实际大模型训练中往往是 TP、PP、DP 甚至 ZeRO 混合使用比如训练千亿参数模型时常见的做法是在单机内用 TP 和 PP跨机用 DP 或 ZeRO。PyTorch 的torch.distributed是学习这些策略的最佳切入点。我建议从最基础的多卡训练代码开始写起import torch import torch.distributed as dist dist.init_process_group(backendnccl) local_rank dist.get_rank() device torch.device(fcuda:{local_rank}) # 模型包装为 DDP model nn.Linear(1024, 1024).to(device) ddp_model torch.nn.parallel.DistributedDataParallel(model, device_ids[local_rank]) # 数据分配到当前进程 sampler torch.utils.data.distributed.DistributedSampler(dataset) dataloader torch.utils.data.DataLoader(dataset, samplersampler, batch_size32) for epoch in range(10): for batch in dataloader: optimizer.zero_grad() output ddp_model(batch[0].to(device)) loss criterion(output, batch[1].to(device)) loss.backward() optimizer.step()这段代码看似简单但里面藏着几个关键点init_process_group负责初始化进程组DistributedSampler保证不同的进程拿到不重叠的数据DistributedDataParallel会自动完成梯度同步。你随便改一点就能引发连锁排查——比如忘了设置local_rank环境变量程序会直接报错比如用了不恰当的 batch size可能导致显存溢出。除了代码本身你还得理解几个“为什么”。为什么同步训练的全局 batch size 变大会影响收敛精度因为梯度是全局平均的等价于用更大的 batch 做一次更新学习率可能需要相应调整。为什么混合精度训练能加速因为 FP16 的算力通常比 FP32 高一倍以上显存占用减半同时配合GradScaler防止下溢。这些问题既是面试高频题也是你实际调优时绕不开的点。3.3 调度与平台把算力变成“自来水”当你真正开始在一个几十甚至上百人的团队里做算法研发时会发现一个残酷的现实GPU 资源永远不够用。训练一个模型要一周调参可能要跑几十次实验每个人都需要算力但总资源有限——这时候就需要一套资源管理和调度系统。Kubernetes 在 AI 场景的应用实际上做了不少扩展。原生 K8s 调度 GPU 的方式比较简单粗暴通过nvidia.com/gpu这个资源字段来声明但功能有限。比如它不支持 GPU 显存的精细划分一张 A100 可以按显存切成多份给不同任务使用也不支持 NUMA 感知和拓扑感知的调度把需要高速通信的任务调度到同一台机器的不同卡上。为了解决这些问题社区出现了多种 GPU 调度方案NVIDIA 官方的k8s-device-plugin是最基础的 GPU 设备插件Volcano 是一个面向高性能计算和 AI 场景的调度器支持公平调度、队列优先级、任务依赖Koordinator 则是去年开始非常火的一个开源项目主打 QoS 感知和混部可以在离线任务与在线任务之间动态分配资源。学习容器和 K8s 时我不建议直接去啃 K8s 官方文档从头到尾读一遍而是应该带着任务学。先自己做一个镜像把 PyTorch 训练环境全部装好然后写一个 K8s Job 的 YAML 文件跑通一个单卡训练任务再逐步扩展到多机多卡。格式上参考最简单的模板apiVersion: batch/v1 kind: Job metadata: name: pytorch-training-job spec: template: spec: restartPolicy: OnFailure containers: - name: trainer image: myrepo/pytorch-train:latest command: [torchrun, --nproc_per_node2, --nnodes2, train.py] resources: limits: nvidia.com/gpu: 2 nodeSelector: gpu-type: a100这个 YAML 模板会引导你逐步了解几个核心概念Job是一次性任务跑完就结束nvidia.com/gpu是设备资源的声明方式nodeSelector用来选择带特定标签的节点。当你真正把一个多机多卡任务跑通你对容器、调度器、环境变量、网络模式的理解会比看十篇文章都深。3.4 推理与工程化模型上线是最后一步训练出模型只是第一步把模型变成能服务用户的产品才是工程闭环。推理优化的核心目标有两个降低延迟和提升吞吐。这两个目标在某种程度上是互斥的——为了降低单请求延迟你可能要把请求独占一个 GPU 实例为了提升吞吐你得实现请求的批量动态拼接。主流的推理加速方法中vLLM是当下大模型推理绕不开的一个开源项目。它的核心卖点是 PagedAttention简单类比就是操作系统里的虚拟内存分页机制——把 KV Cache 切分成固定大小的块不要求物理上连续按需分配和释放把显存利用率提高数倍从而支持更大的并发。TGIText Generation Inference是 Hugging Face 推出的推理服务同样支持连续批处理和量化推理。TensorRT 则是 NVIDIA 官方的推理优化库可以对模型做层融合、精度校准和算子替换适合对延迟有极致要求的场景。推理这块的实操入门比较直接拉一个 vLLM 的镜像启动一个 OpenAI 兼容的 API 服务然后压测吞吐量再做不同并发、不同 max-token 参数下的对比实验。你会发现一些有意思的现象并发从 1 提升到 16总吞吐大幅上升但单请求延迟也跟着上升max-token 越长解码阶段的计算量越大对显存带宽的要求越高。这些现象背后都对应具体的系统设计权衡值得写笔记。4. 从零到一实操演练两周搭出一个迷你训练平台4.1 环境准备没有 A100 也能玩起来很多人一听到 AI Infra 就条件反射地问是不是得先有一张 A100其实不用。学习阶段完全可以用云平台的按量付费 GPU 实例或者单机的消费级显卡RTX 3090 24GB、RTX 4090 24GB完成大部分实验。消费级显卡不支持 NVLink但你在单机内跑起 DDP 仍然是有效的学习体验。更进一步你甚至可以在一台不带 GPU 的机器上用gloo作为 PyTorch 的后端模拟多进程环境下的分布式训练流程理解数据分发和梯度汇总的逻辑。我的推荐配置清单是一台 4 核 16GB 内存的 Linux 服务器云厂商按量付费即可一张至少 16GB 显存的 GPU如果预算有限先跑通 CPU 版本的分布式逻辑也行Docker 和 Docker Composeminikube本地单节点 Kubernetes或者直接买一个 3 节点的托管 K8s 集群Python 3.10、PyTorch 2.x、CUDA 12.x装对应的版本4.2 三个动手项目从跑脚本到管集群我在学习阶段给自己设计了三个递进的项目每完成一个能力就上一个台阶。第一个项目用 PyTorch DDP 训练一个简单的语言模型。数据集就用 WikiText-103 或者自己造一批文本数据。先单卡训练一个 baseline记录吞吐量每秒处理的 token 数然后改用 2 卡 DDP再改 4 卡观察扩展效率的变化。最后分析一下为什么卡数翻倍吞吐量没有翻倍瓶颈是通信、数据加载还是负载不均衡第二个项目把训练任务容器化并在 Kubernetes 上运行。Dockerfile 里装好 Python 依赖和训练代码构建镜像推到私有仓库然后在 K8s 集群上声明一个 Job 运行。这个项目会逼着你学会镜像构建、容器日志查看、环境变量注入、GPU 资源声明等基础设施知识。我到现在还记得第一次把多机任务在 K8s 上跑通时的成就感——所有错综复杂的配置终于在一条kubectl logs日志里得到了回应。第三个项目部署一个模型推理服务并提供 HTTP API。拿你训练好的模型用 vLLM 启动一个 server然后写一个小脚本测试并发请求下的响应时间和吞吐量。接着用 Prometheus 采集 GPU 利用率、显存占用、请求延迟这些指标用 Grafana 画一个简单的 Dashboard。这个项目做完你对“AI Infra 全链路”这个概念就有了无比具体的感知。4.3 时间分配建议整个阶段如果每天能投入 3-4 小时大约 4-6 周可以完成。其中 50% 的时间花在分布式训练的代码实验和调参上25% 花在 K8s 和容器学习上15% 花在推理部署上最后 10% 用于整理笔记和知识体系复盘。复盘这一步特别容易被人忽略。我的习惯是每完成一个项目就写一篇笔记把遇到的问题、排查思路、最后的解决方案记录下来同时对照网上已有的最佳实践找差距。这个过程积累出的笔记后来直接成了我面试时的复习资料比任何培训班资料都有效。5. “AI Infra 八股”高频考点与面试准备5.1 面试官到底想考察什么在准备“AI Infra 八股”之前你要明白面试官问这些问题不是在考背诵而是在考察你有没有系统性思维。比如“讲讲 ZeRO 的三种阶段”表面上是在问概念实际上是想看你能不能清晰地解释显存分配、通信开销、时间空间权衡之间的关系。所以你不仅要背结论还要能推导。把各大厂 AI Infra 岗位的面经汇总起来高频考点主要集中在以下几个方面分布式训练原理数据并行/模型并行/流水线并行的优缺点与适用场景、all-reduce 的实现方式和通信量与百亿千亿模型训练时的显存估算方法、混合精度训练的数值问题与解决方案、Kubernetes GPU 调度的基本流程和 GPU 虚拟化方案对比、推理优化中的 KV Cache 和连续批处理原理。如果把这些问题一个个吃透你会发现自己对整个领域的理解已经超出了“八股”层面。5.2 几个典型问题举例拿“训练一个 7B 参数模型需要多少显存”这个经典问题来说。回忆一个简单的估算公式模型参数为 7B以 FP16 存储参数占显存 14GB训练时还需要保存梯度同样 FP16又是 14GB优化器状态如果用 AdamW需要为每个参数保存两份动量FP32大约 42GB。这样一算仅训练中的“参数 梯度 优化器状态”就需要约 70GB 显存再加上激活值和临时变量一张 A100 80GB 勉强够用实际要跑起来就得靠 ZeRO 或张量并行切分了。这类问题没有标准答案但能体现你的工程敏感度。再比如“为什么大模型推理时显存占用随 batch size 增大而快速上涨”。解码阶段的 KV Cache 大小和序列长度、batch size、层数、注意力头维度成正比。可以估算一下7B 模型40 层KV Cache 每个 token 可能需要几百 KB当 batch size 和序列长度增大时显存压力会很快超过模型权重本身。理解了这一点你就明白为什么 vLLM 的 PagedAttention 那么重要了——它本质上是在用高效的显存管理换取更大的并发能力。5.3 项目经验怎么包装面试问到你项目经验时不要只说“我用 PyTorch 训练了一个模型”。要把项目中体现 Infra 思维的决策讲出来为什么选这个并行策略、遇到了什么性能瓶颈、如何定位和解决、系统扩展到什么规模。我当时把“容器化训练 监控采集 服务部署”的迷你平台作为案例讲完之后面试官明显更感兴趣的是我把数据加载从单线程改成num_workers8并且用了prefetch_factor之后的吞吐变化数据而不是模型本身的效果。6. 常见问题与踩坑经验坑 1多卡训练速度没提升反而变慢了。排查思路很简单先用nvidia-smi看 GPU 利用率再用top看 CPU 和网络占用。最常见的罪魁祸首是数据加载成为瓶颈——每轮迭代 GPU 都在等 CPU 准备好数据你增加 GPU 数量只是让等待更明显。解决方案一般是增加 DataLoader 的num_workers、开启pin_memory、用 TFRecord 等更高效的格式替代小文件读取或者用torch.compile减少单步计算时间。坑 2Kubernetes 上容器里看不到 GPU。几乎每个第一次在 K8s 上跑 GPU 任务的人都会遇到这个问题。原因通常是你没有部署 NVIDIA 的 device pluginKubelet 根本不知道节点上有 GPU 资源。先在节点上运行nvidia-smi确认驱动正常然后部署k8s-device-plugin的 DaemonSet再检查 pod 的 resources 声明是否包含nvidia.com/gpu。坑 3训练过程中显存逐渐增长。如果显存不是一开始就溢出而是在训练中途持续增长直到 OOM大概率是代码里有显存泄漏——比如在循环中不断创建新的计算图、忘记对 loss 或梯度做 detach、或者 DataLoader 返回的数据没有及时释放。用环境变量PYTORCH_CUDA_ALLOC_CONFexpandable_segments:True可以让 PyTorch 的显存分配器更灵活但根本解法还是定位到泄漏源头。多机训练时如果使用了 gloo 后端却跑在多 GPU 环境也会出现莫名的性能问题记得统一用 nccl。坑 4分布式训练一跑多进程就报地址已在使用。这是因为你没有正确处理进程序号和通信端口。先用dist.init_process_group里设置好init_method最常见的做法是指定一个 master 节点的地址和端口其余节点连过来在同一个节点上启动多个进程时每个进程要分配不同的local_rank。端口冲突的典型场景是你上次跑的进程没杀干净ps -ef查一下清理掉就解决了。坑 5模型训练时 loss 不下降。这个问题和 Infra 其实关系不大但很多人排查时容易误伤 Infra——先检查数据预处理和标签的是否对齐再检查学习率和 warmup 策略最后才去查分布式训练梯度同步是否正确。有一种诡异的场景是DDP 训练时梯度正常但 loss 不变原因可能是某个进程的数据加载有缓存导致每个 epoch 拿到相同数据检查一下 DataLoader 的重置逻辑。7. 个人体会AI Infra 学习中最值得投资的三个能力最后分享一点我的真实想法。AI Infra 方向的知识更新速度极快今天还在用 ZeRO Stage 2明天可能所有大厂都切到 FSDP 或者自研的混合并行方案了。所以我越来越觉得具体工具和框架的熟练程度反而不是最关键的更重要的是三个底层能力。第一个是定位问题的能力。一个任务没跑起来你要能从上到下层层排查——先看资源够不够再看网络通不通再看代码报什么错最后看日志指标是否异常。这种排查顺序听起来简单但很多人遇到问题是一上来就怀疑代码逻辑在正确但不够高效的地方浪费时间。第二个是估算数量级的能力。不管是显存占用、通信耗时还是推理延迟养成在动手前先粗算一下的好习惯。等你训练一个 13B 模型之前能提前预判需要几张卡、每张卡多少显存、数据加载要多少带宽很多失败在开始前就能避免。这种能力在面试中也非常加分的。第三个是持续学习的习惯。AI Infra 的社区非常活跃几乎每个月都有新工具和新论文出来。我的做法是每周固定花一些时间刷 arXiv 上系统方向的论文、看 GitHub 上热门仓库的 Release Notes、关注几个大厂工程团队的博客。不需要每篇都精读但起码要能跟上大方向的变化。从零开始学 AI Infra 确实不容易这个方向的知识密度大、涉及面广、上手门槛高。但反过来想正因为门槛高真正踏踏实实走过这条路径的人才会拥有长期的职业竞争力。如果你正在这条路上或者准备出发希望这篇路线图能帮你少走一些弯路也欢迎在实践中多动手验证——毕竟在这个领域跑通一个实验比读十篇文章都管用。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进