尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

AI基础设施竞赛:从单卡到万卡集群的技术跃迁

AI基础设施竞赛:从单卡到万卡集群的技术跃迁 “5000亿美元”这个数字前几天直接刷屏了整个科技圈。很多人第一反应是黄仁勋这是要造芯片工厂还是要建超大规模数据中心但从技术视角看真正值得关注的不是这笔钱本身而是它背后指向的一个判断——AI 计算正在从“单卡跑模型”全面转向“基础设施级竞赛”。也就是说过去我们讨论的是某块 GPU 算力有多强某个框架训练收敛有多快接下来几年讨论的核心会变成怎么把几万张 GPU 组织成一个稳定、高效、可扩展的计算集群并让上层开发者像用一台超级计算机一样使用它。这篇文章我不想停留在“震惊体”的层面。我想拆解的是如果一笔数千亿美元级别的投入真的落到 AI 基础设施上它会流向哪些技术环节这些环节分别解决什么问题作为普通开发者、架构师或技术管理者我们应该在哪些方向提前做技术储备先说一个明确判断这笔钱如果落地最大的增量不在 GPU 芯片本身而在整个 AI 计算基座——包括网络、存储、能源、集群调度、软件栈、工具链和运维体系。芯片是其中最核心的一环但绝不只是“买更多卡”这么简单。1. 为什么算力基础设施突然成为“国家战略级”话题过去五年AI 产业的演进可以简单分成三个阶段。第一阶段是“模型创新驱动”。Transformer、BERT、GPT 这类架构突破让研究者可以用相对有限的算力做出惊人成果大家拼的是算法思路。第二阶段是“规模竞赛驱动”。当大家发现“更大的模型 更多的数据 更多的算力”可以稳定带来能力提升时算力规模本身就变成了竞争要素。GPT-3 的 1750 亿参数再到后续更大规模的模型每一代模型的训练都需要数量级增长的算力。第三阶段也就是现在是“基础设施驱动”。当头部模型的参数量冲到万亿级训练集群从千卡走向万卡、十万卡时瓶颈就不再是单卡性能而是整个系统的综合能力。这里有一个经常被误解的地方很多人以为训练一个万亿参数模型就是把更多 GPU 插上去跑就行了。事实远不是这样。一个万卡集群面临的问题包括卡间通信带宽是否足够GPU 计算几毫秒就能完成的任务如果另一张卡的数据没到整条流水线就要空等。网络拓扑是否支持大规模并行全部卡都互相通信是不现实的必须有层次化设计。故障率是否可控万卡规模下平均无故障时间可能短到以小时计。一张卡故障如果导致整个训练任务中断重启损失是以天计的。能源和散热能跟上吗单机柜功率密度越来越高传统风冷已经撑不住。软件栈能不能自动容错、自动恢复、自动调度这些问题的本质是AI 正在从“算力密集型计算”变成“系统工程密集型计算”。所以当新闻里出现数千亿美元级别的投入时技术人应该顺着这条链路去理解芯片是核心但网络、能源、软件、运维同样在吃掉大量成本和研发资源。2. 算力基建的四个技术支点算力、网络、能源、软件如果把一个大规模 AI 计算中心拆开看可以分成四个相互依赖的技术层。2.1 算力层GPU 只是起点芯片形态正在多元化算力层是大家最熟悉的。英伟达的 GPU 确实占据主导位置尤其是针对大模型训练和推理的场景。但算力层不等于只有 GPU它还包括用于特定场景的加速芯片比如推理场景下的定制 ASIC。CPU 与 GPU 的协同数据预处理、调度、控制面仍要依赖 CPU 集群。多卡互联能力比如英伟达的 NVLink 技术就是解决“单卡性能再强卡间通信跟不上也是白搭”的问题。从架构看未来算力集群一定是异构的训练用 GPU推理用 GPU 加 ASIC数据清洗和存储用 CPU 集群某些场景还可能引入存算一体方案。这意味着一套成熟的软件调度体系要能够屏蔽异构硬件的差异。2.2 网络层万卡集群真正的主战场如果说过去十年 AI 竞争拼的是 GPU 数量那未来五年拼的更多是网络能力。为什么我们先看一组逻辑。假设你有一个一万张 GPU 的集群采用最常见的 All-Reduce 通信模式做梯度同步。每张卡每轮都要把自己的梯度发给别人同时接收别人的梯度。如果没有高带宽、低延迟的通信网络数据同步的时间会迅速超过计算时间。这正是英伟达的 InfiniBand 网络在超大规模 AI 集群中价值凸显的原因。它支持 RDMA远程直接内存访问数据可以直接从一个 GPU 的内存搬到另一个 GPU 的内存跳过操作系统内核大大降低延迟和 CPU 开销。对比一下普通数据中心用的 TCP/IP 以太网走的是“数据 - 内核 - 网卡 - 对端内核 - 对端应用”的路径延迟高、CPU 消耗大。而 RDMA 网络走的是“数据 - 网卡 - 对端网卡 - 对端内存”的路径更低延迟、更低 CPU 占用。但 RDMA 网络也有自己的坑它对网络拥塞极其敏感。一条链路拥塞可能引发“队头阻塞”导致整个集群训练性能断崖式下跌。所以超大规模 AI 集群通常还要做拥塞控制、动态路由、自适应负载均衡。这带来的直接影响是网络工程师在 AI 基础设施中的地位会越来越高。过去网络是“通就行”现在是“不仅要通还要保证极低延迟、零丢包、高可用”。2.3 能源层AI 计算的隐性天花板很多人会忽略能源但它很可能是 AI 基础设施最容易卡脖子的地方。一个大规模 GPU 集群的功耗有多夸张可以做一个粗略估算一块高性能 GPU 的典型功耗在 300W 到 700W 之间一个机柜放上 8 块 GPU再加上 CPU、内存、存储和网络设备单机柜功耗很容易达到 20kW 以上。传统数据中心一个机柜的设计功耗一般是 5kW 到 10kW。也就是说AI 机柜的功率密度是传统机柜的 2 到 4 倍。这对供电、散热、机柜承重、楼宇结构都提出了全新要求。风冷能不能压住小规模可以但到万卡集群规模单机柜功耗高企液冷几乎是必经之路。液冷的好处不只是散热效率高还能把热量回收利用比如给办公区域供暖这在北欧一些数据中心已经是实际方案。所以当我们在新闻里看到某个数千亿美元投资计划背后真实的工程难点之一是“哪里有足够的电”以及“怎么把热量散出去”。这是物理问题不是软件问题但同样决定整个项目的进度。2.4 软件层真正决定“算力利用率”的胜负手买回来一万张 GPU不代表你就拥有一万张 GPU 的算力。这里面有一个关键指标MFUModel FLOPs Utilization模型算力利用率。简单说MFU 衡量的是在训练一个模型的过程中GPU 的理论峰值算力有多少真正被用上了。实际训练大模型时MFU 通常很难达到 50% 以上。为什么数据加载和预处理可能成为瓶颈GPU 一直在等数据。通信等待时间消耗了大量算力窗口。检查点保存checkpoint会打断训练流程。故障恢复需要回滚和重新计算。内存不足导致频繁换入换出。这些问题的解决靠的不是更强的 GPU而是更聪明的软件栈。这里就要提到 NVIDIA 的 CUDA 生态。CUDA 不只是让 GPU 能跑程序它更是一整套为高性能计算设计的工具链包含了深度学习框架的底层优化cuDNN、cuBLAS 等。分布式训练通信库NCCL。计算图优化工具TensorRT。容器化和调度支持。CUDA 之所以在 AI 时代形成事实标准不只是因为硬件强更因为它的软件生态让“开发者不需要从零开始优化 GPU 程序”这件事成为可能。这也是为什么很多国产芯片厂商在单卡性能上已经追近但落地仍然艰难——硬件可以追软件生态的积累却是十年功夫。3. 从单卡到万卡分布式训练的技术演进有了前面四个支点的基础我们再来看一个具体问题一个大型语言模型的训练到底是怎么从单卡扩展到万卡的3.1 单卡训练到数据并行最早的深度学习训练一张 GPU 就够了。数据量不大模型也不大。后来模型变大单卡放不下完整模型于是出现数据并行Data Parallelism每张卡保存一份完整的模型副本各自处理不同的数据批次然后定期同步梯度。数据并行的问题是如果模型本身大到一张卡放不下就无能为力了。3.2 模型并行、流水线并行、张量并行针对“模型太大”的问题出现了多种并行策略张量并行Tensor Parallelism把一层网络的计算切到多张卡上每张卡算一部分然后通过 All-Reduce 合并结果。缺点是通信量巨大一般要求卡间有超高带宽比如 NVLink。这种并行方式通常限制在同一台机器内因为跨机器的通信延迟太高。流水线并行Pipeline Parallelism把模型按层切分第 1 到第 10 层放在 GPU 0第 11 到第 20 层放在 GPU 1数据像流水线一样从前到后流动。缺点是存在“气泡”也就是某些 GPU 在等待上游数据时是空闲的。专家并行Expert Parallelism用于混合专家模型MoE把不同的专家网络放到不同的 GPU 上通过路由机制决定每个 token 交给哪个专家。实际的大模型训练几乎都是多种并行策略的组合。3.3 分布式训练框架的作用手动实现这些并行策略几乎是不可能的所以工程上会借助分布式训练框架。这里说一下 PyTorch 官方提供的torchrun它是 PyTorch 分布式训练的入口工具。下面是一个最简示例torchrun --nproc_per_node8 \ --nnodes1 \ --master_addr127.0.0.1 \ --master_port29500 \ train.py参数含义--nproc_per_node8每台机器上启动 8 个训练进程对应 8 张 GPU。--nnodes1本次训练使用 1 台机器。--master_addr和--master_port指定分布式协调节点的地址和端口。当集群扩展到多台机器时命令会变成torchrun --nproc_per_node8 \ --nnodes16 \ --node_rank0 \ --master_addr192.168.1.10 \ --master_port29500 \ train.py这里的--node_rank表示当前机器在所有节点中的编号每个节点运行时需要传入不同的值。这只是一个入门示例真正的大规模训练还会涉及混合精度训练FP16/BF16减少显存占用并加速计算。梯度累积模拟更大的批次大小。ZeRO 优化器把模型状态切分到多张卡上让超大模型训练成为可能。4. 大模型训练的完整工程链路前面讲了不少概念接下来用一个完整的视角看一套大模型训练工程该有的样子。4.1 环境准备以一套基于 NVIDIA GPU 的集群为例典型的环境包括操作系统Ubuntu 20.04 或更新版本。NVIDIA 驱动和 CUDA 工具包。Python 3.8 和 PyTorch。容器运行时Docker 或 NVIDIA Container Toolkit。集群调度器Kubernetes 或 Slurm。版本号建议以实际项目为准不要盲目跟风最新版。新版本通常伴随新的不兼容问题生产环境更看重稳定。4.2 容器化配置把训练环境打包成容器镜像是工程化的第一步。这样可以保证开发环境和训练环境一致也可以让调度系统很方便地分发和启动。下面是一个最小可用的DockerfileFROM nvcr.io/nvidia/pytorch:23.10-py3 WORKDIR /workspace RUN pip install --no-cache-dir transformers datasets accelerate COPY . /workspace CMD [python, train.py]构建镜像docker build -t my-train-image:v1 .简单说明镜像基于 NVIDIA 官方 PyTorch 容器构建省去了装 CUDA、PyTorch、cuDNN 的麻烦。这一步推荐的实现方式是直接使用官方容器作为基础镜像只在上面叠加自己的代码和依赖。4.3 集群调度配置如果是用 Kubernetes 管理 GPU 集群通常会通过 Device Plugin 让 Pod 能申请 GPU 资源。在部署训练任务时YAML 中关键的配置如下apiVersion: v1 kind: Pod metadata: name: gpu-train-pod spec: containers: - name: trainer image: my-train-image:v1 resources: limits: nvidia.com/gpu: 8 ports: - containerPort: 29500 name: master-port同样如果使用 Python 脚本来启动训练可以用一个简单的启动脚本# 文件路径train.py import os import torch import torch.distributed as dist from torch.nn.parallel import DistributedDataParallel as DDP def init_process_group(): dist.init_process_group( backendnccl, init_methodenv://, world_sizeint(os.environ.get(WORLD_SIZE, 1)), rankint(os.environ.get(RANK, 0)), ) torch.cuda.set_device(int(os.environ.get(LOCAL_RANK, 0))) def main(): init_process_group() # 模型、数据、训练逻辑在这里编写 print(DDP training initialized) if __name__ __main__: main()这个示例展示了分布式训练中“初始化进程组”的核心逻辑即通过环境变量让各进程知道它在整个集群中的位置。这是所有分布式训练的第一步也是最容易出错的一步。5. 如何验证你的训练集群是否健康很多人把训练脚本跑起来就算完了但在大规模集群上这只是开始。真正要解决的问题是训练是不是稳定、性能是不是达标、出故障能不能快速发现。5.1 运行命令与预期输出以单机八卡为例torchrun --nproc_per_node8 --nnodes1 train.py正常启动后你会在日志中看到每个进程的 rank、local rank以及 NCCL 初始化成功的标志。如果dist.init_process_group成功通常不会立即报错。判断成功的标准有两个层面进程没有崩溃退出。训练 loss 在预期范围内逐步下降。如果训练直接崩溃第一步应该看 NCCL 相关错误。最常见的错误是“NCCL failure”通常与网络连通性、防火墙、共享内存设置有关。5.2 监控 GPU 状态训练跑起来之后至少要用nvidia-smi看 GPU 的状态nvidia-smi关注几个核心指标GPU 利用率%如果长期低于 50%说明可能存在数据加载瓶颈或通信瓶颈。显存使用量如果接近上限可能需要调小 batch size 或者开启梯度检查点。温度如果超过 85°C需要检查散热。功耗如果长期远低于 TDP说明 GPU 没跑满。还有一个更直观的方法用gpustat工具pip install gpustat gpustat --watchgpustat可以自动刷新显示所有 GPU 的状态非常适合快速判断集群运行是否健康。5.3 网络与通信验证在大规模分布式训练中NCCL 通信往往是最脆弱的一环。你可以用 PyTorch 提供的内置测试脚本验证节点间通信带宽。这类脚本在网上有大量现成实现核心逻辑就是在多个 GPU 之间反复执行 All-Reduce然后统计每秒钟能传输的数据量。如果带宽远低于预期通常要检查是否启用了 RDMA/RoCE。网卡速率是否一致。是否存在防火墙限制。交换机是否有丢包。6. 常见问题与排查思路大模型训练的排错和对普通后端服务的排错有很大区别。很多问题不是看代码就能看出来的需要结合硬件、网络、驱动、系统配置综合判断。问题现象可能原因排查方式解决方案NCCL 初始化失败节点间网络不通或防火墙拦截检查端口连通性、防火墙规则放通 master 端口和通信端口GPU 利用率忽高忽低数据加载太慢GPU 等待数据查看 dataloader 的吞吐检查磁盘 IO增加 DataLoader 的 num_workers使用高速存储训练 loss 不下降学习率设置不合理或数据有问题检查 loss 曲线验证数据预处理调低学习率检查数据增强逻辑部分进程 OOM模型太大或 batch size 太大查看报错的是哪个节点哪张卡调小 batch size开启梯度检查点使用 ZeRO某节点总是故障硬件故障或散热问题检查该节点的系统日志和温度替换硬件改善散热训练中断后从头开始没有配置检查点保存检查代码中是否定期保存 checkpoint配置定期 checkpoint并支持断点续训速度远低于理论性能网络拥塞或拓扑不合理运行 NCCL 带宽测试优化网络拓扑启用动态路由这里把最后一个问题展开说一下。很多人新搭一个集群测试单卡性能没问题一跑分布式训练发现多卡训练速度甚至不如单卡。这种情况十有八九是通信开销大于计算收益。解决办法通常是增大 batch size减少通信频率。使用梯度累积降低通信次数。检查是否真的跑在 RDMA 网络上而不是走了 TCP 回退。调整 NCCL 的环境变量比如NCCL_DEBUGINFO查看链路信息。7. 大规模 AI 基础设施的工程最佳实践结合前面讲的链路这里给出在大规模 AI 基础设施上做工程时建议遵守的几条原则。7.1 设计时就考虑故障恢复而不是事后补救万卡集群中“某个节点出故障”是常态不是异常。所以训练框架必须支持定期保存 checkpoint。从最新 checkpoint 自动恢复训练。数据读取有容错机制单个文件损坏不能拖垮整个任务。关于 checkpoint 保存建议把训练权重、优化器状态、随机数状态、dataloader 位置都保存下来。只有完整保存才能做到真正意义上的“无缝恢复”。7.2 一切指标可观测在大规模集群上没有监控就等同于盲飞。至少要覆盖硬件层面GPU 利用率、显存、功耗、温度、网络带宽。系统层面CPU 利用率、内存、磁盘 IO、网络连接数。训练层面loss、学习率、梯度范数、吞吐量。训练指标建议用统一平台收集比如 Prometheus Grafana。硬件指标可以用dcgm-exporter暴露给 Prometheus训练指标可以在代码里主动上报。7.3 环境变更要走灰度流程无论是驱动升级、CUDA 版本变更还是 PyTorch 版本升级都不能直接在训练集群上全量操作。正确做法是先在几台机器上搭建新环境跑通小规模测试。验证测试结果的数值与旧环境一致。再扩大到部分节点观察稳定性。最后才全量切换。对于关键训练任务建议保留“回滚到旧环境”的能力不要升级完就删掉旧镜像。7.4 最小权限与安全边界GPU 集群往往意味着高价值资产必须做好权限隔离。所有训练任务跑在容器里不共享宿主机文件系统。模型权重和数据要做权限控制只允许有授权的账号访问。对集群管理接口要做身份认证和审计。涉及数据集的读取尽量走统一的数据服务而不是把数据散落复制到每个节点。7.5 关注能源效率而不只是峰值性能在大规模基础设施中单位能耗能跑出多少有效算力比峰值算力更能说明问题。实践上可以从几方面优化优先选用能效比高的计算卡。合理配置制冷系统不要“全功率运行但热量排不出去”。训练任务的调度尽量让节点跑满减少空闲待机。推理场景可以动态缩容让不用的 GPU 进入低功耗状态。8. 对技术人意味着什么新的方向与新的能力要求如果你是一名后端开发、算法工程师或运维工程师AI 基础设施这个方向正在带来新的能力要求。这里有三个判断供参考。8.1 分布式系统能力变得比算法技巧更重要过去算法工程师的核心技能是模型设计、损失函数、调参。但在大模型时代你怎么把一个训练任务稳定地跑在几千张卡上可能比你怎么调一个学习率更影响结果。这意味着需要理解分布式训练的原理应该知道数据并行、张量并行、流水线并行各自解决什么问题也应该会看 NCCL 日志能定位到底是算法问题还是系统问题。8.2 “GPU 运维”会成为一个独立且吃香的方向大家习惯把运维分成应用运维、系统运维、网络运维。AI 基础设施带来了一个新的细分AI 算力运维。这个岗位要解决的问题包括GPU 集群的调度和资源管理。训练任务的故障检测和自动恢复。多租户环境下算力隔离和成本核算。GPU 硬件的生命周期管理。这类岗位的技能栈横跨系统、网络、容器、分布式计算和机器学习复合度非常高短期内供需缺口会很大。8.3 从“调 API”到“懂底层”工程师的价值重新分层当 AI 能力越来越标准化大家都能调大模型 API 时那些懂底层计算原理的工程师会重新凸显出来。举个例子同样是用 PyTorch 训练模型很多人只会写前向、反向、优化器三步但遇到显存不足就抓瞎不知道可以开梯度检查点不知道可以 ZeRO 切分不知道可以用混合精度把显存省一半。这些知识不深但在关键时刻能决定一个任务能不能跑起来。所以我的建议是如果现在还有余力可以刻意往“算力工程”方向补一点东西。不需要一下子成为底层系统专家但至少要建立几个概念框架GPU 程序是怎么执行的为什么显存会爆。数据从硬盘到 GPU 要经过哪些环节哪些环节会成为瓶颈。分布式训练中通信为什么那么贵。容器和调度系统是怎么管理 GPU 资源的。有了这几个框架再去看复杂的大规模训练系统就不会觉得像黑盒。9. 冷静判断数千亿美元投入背后的确定性回到标题本身。“5000亿美元”这个数字无论最终以什么形式落地都不会改变一个基本事实AI 计算正在经历一次从“软件创新”到“基础设施创新”的重心迁移。在这个迁移里确定的方向有几个大模型训练和推理对算力的需求在未来几年不会下降。算力基础设施的复杂度只会越来越高。软件生态和工具链会持续吞噬大量工程师的精力。能效、网络、存储、集群管理这些问题会在工程中占据越来越大的比重。不太确定的方向也有几个算力硬件最终会是集中式超大规模集群为主还是分散式边缘计算为主还没有定论。GPU 之外会不会出现新的主流训练硬件存在变数。大规模基础设施的投入是否能带来相符的商业回报还需要时间验证。从技术人的角度看与其纠结这些宏观问题不如关注自己手头能做的事情把你现有的 AI 项目往更大规模、更稳定、更高效的方向推动一寸就已经走在趋势里了。如果你正打算进入这个方向可以参考下面的学习路径掌握 PyTorch 分布式训练的基本用法至少能跑通torchrun的多节点训练。理解 NCCL 的原理和常见问题学会用NCCL_DEBUGINFO查看链路日志。了解 Kubernetes 管理 GPU 集群的基本方式包括 Device Plugin、资源调度、节点池管理。动手搭建一个小规模集群哪怕是 2 台机器、4 张卡尝试跑一个真实的小模型。系统学习大模型训练中常见的显存优化手段混合精度、梯度检查点、ZeRO。这些技能没有一项是“看一遍就会”的都需要在真实环境中踩坑。但正因为如此它们才更有长期价值。算力基础设施这个赛道缺的恰恰是能把硬件的极限和软件的能力衔接起来的人。
返回列表