ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

从零构建AI数据中心:GPU集群规划、网络设计与LLM推理部署实战

从零构建AI数据中心:GPU集群规划、网络设计与LLM推理部署实战 最近围绕 AI 数据中心AI Data Centres的讨论热度很高从算力供应、能耗压力到 GPU 资源调度各种话题都被反复提起视频平台上也有不少相关作品。但抛开观点性质的讨论对开发者来说真正有价值的问题其实是AI 数据中心到底是什么它和传统数据中心有什么本质区别如果让我从零规划一个 GPU 集群又该从哪里下手这篇文章就从工程视角出发系统拆解 AI 数据中心的基础组成、硬件选型、网络设计、软件栈以及一套完整的 LLM 推理服务部署示例。适合刚接触 AI Infra 的开发者也适合正在负责 GPU 集群落地的后端或运维工程师。读完你会掌握训练集群与推理集群的设计差异、Kubernetes 调度 GPU 资源的方式以及几个高频问题的排查思路。1. AI 数据中心是什么从“通用机房”到“算力工厂”1.1 传统数据中心为什么撑不住大模型传统数据中心通常以 CPU 为中心服务器按照通用业务模型设计跑的是 Web 服务、微服务、数据库和虚拟化平台。这种架构在常规业务场景下非常成熟但一到大规模 AI 训练和推理三个核心矛盾就会立刻暴露出来。第一个矛盾是算力形态。大模型训练和推理的主算力来自 GPU 或 NPU而不是 CPU。CPU 擅长串行逻辑控制和复杂分支判断GPU 则擅长大规模并行矩阵运算。Transformer 模型的计算量绝大部分集中在矩阵乘法和注意力计算上恰好是 GPU 的优势区域。如果强行用 CPU 集群训练现代大模型时间和成本都会膨胀到无法接受。第二个矛盾是通信压力。分布式训练过程中多个节点需要同步梯度依赖 AllReduce 这类集合通信操作。假设你有一个 1000 张 GPU 卡的集群每完成一个训练步都要在千卡范围内做一次梯度聚合。这个操作对网络的带宽和延迟极其敏感。普通数据中心常见的千兆或万兆以太网在千卡规模下会直接成为训练瓶颈表现为 GPU 利用率上不去、训练吞吐长期很低。第三个矛盾是散热与功耗。一张高端 GPU 的满载功耗远高于一颗 CPU一个满配 GPU 机柜的功率经常达到几十千瓦。传统数据中心的制冷系统是按 CPU 时代的功率密度设计的面对高密度 GPU 机柜常常“压不住”。这也是为什么近两年 AI 数据中心都在密集转向液冷方案。理解了这三个矛盾再看 AI 数据中心的架构设计就容易很多。1.2 AI 数据中心的六大核心组成从功能上拆解AI 数据中心可以分成六层算力层以 GPU/NPU 服务器为主体是大模型训练和推理的核心载体。网络层提供高带宽、低延迟的节点互联常见方案有 InfiniBand 和 RoCE。存储层负责海量训练数据的读取、中间结果的缓存、模型 Checkpoint 的保存。平台层负责资源调度、训练任务编排和推理服务发布目前主流是 Kubernetes。基础设施层包含电力、制冷、机柜和机房环境决定集群能否稳定长期运行。运维与安全层覆盖监控告警、日志审计、镜像安全、权限控制等能力。这六层缺一不可。很多团队买 GPU 时很积极却忽视了网络和存储结果训练跑起来之后发现吞吐上不去GPU 大量空转。这类问题在外界看来是“集群性能不行”实际上是基础设施资源配置失衡。1.3 训练集群与推理集群的差异在规划 AI 数据中心之前先要确认业务偏向训练还是推理。两者的设计目标差别很大不能直接复用同一套模板。对比项训练集群推理集群核心目标高吞吐、高扩展性低延迟、高并发、成本可控计算特征长时间稳定运行任务可暂停恢复请求波动大需要弹性扩缩容网络要求极高跨节点梯度同步频繁相对较低但需要请求聚合能力存储要求高Checkpoint 写入频繁中模型加载和缓存是关键容错方式任务级容错 Checkpoint 恢复实例级冗余 负载均衡典型技术DeepSpeed、Megatron、HorovodvLLM、Triton、TensorRT-LLM理解这个差异非常重要。如果团队的主要需求是给业务线提供模型推理服务却按照千卡训练集群的规格去建设基础设施会造成巨大的成本浪费。反过来如果要做大模型预训练只拿几台带 GPU 的服务器简单拼一个推理集群也根本跑不起来。2. 硬件选型与基础设施规划2.1 GPU 服务器选型需要考虑哪些指标GPU 服务器选型没有标准答案但可以从几个关键指标进行拆解。第一看单卡显存和显存带宽。大模型参数、激活值和 KV Cache 都存放在显存里。显存不够模型就加载不上显存带宽低计算单元读取数据的速率受限推理吞吐也会下降。选择 GPU 型号时要结合目标模型参数量和部署方式估算显存需求。比如 8B 参数模型用 FP16 精度加载权重本身约 16GB再加上推理过程中的激活和 KV Cache单卡 24GB 会比较紧张。第二看卡间互联方式。多卡训练时需要频繁交换数据GPU 与 GPU 之间的通信效率直接影响扩展性。常见互联方式包括 PCIe 和 NVLink/NVSwitch。单机内部多卡互连越强后续做张量并行时就越省心。如果预算有限至少要保证机内多卡互联方案成熟不要为了省一点成本选一张多卡通信能力很弱的板型。第三看 CPU、内存和本地 NVMe 的配比。数据加载、Token 化、数据增强这类预处理仍然依赖 CPU。GPU 利用率低很多时候不是 GPU 不够强而是 CPU 预处理跟不上。建议为每张 GPU 配足量的 CPU 核心和足够大的内存并准备高速本地 NVMe SSD 缓存数据集。第四看整机功耗与机柜承重。满配 GPU 服务器的功耗很高机柜的供电能力和散热能力必须提前评估。设备上架之后才发现电力不足再调整就非常被动。2.2 网络结构从“交换机”到“无损网络”大规模分布式训练对网络提出的要求可以概括为高带宽、低延迟、不丢包。传统以太网在拥塞时会出现丢包一旦发生丢包RDMA 通信性能会断崖式下降。因此 AI 数据中心普遍采用无损网络方案典型代表是 InfiniBand 或支持 PFC/ECN 的 RoCE 网络。从拓扑上看常用设计是 Leaf-Spine 两层架构GPU 服务器 ↓ Leaf 交换机接入层 ↓ Spine 交换机核心层 ↓ Leaf 交换机 ↓ GPU 服务器Spine 层负责提供东西向流量的高速转发避免单点瓶颈。节点规模扩大时可以增加 Spine 交换机的数量来扩充带宽。实际部署中还要关注网卡和交换机端口速率的匹配比如 200G 或 400G 网卡要搭配对应速率的端口。网络规划时有一个容易被忽略的点分布式框架的通信模式。如果使用张量并行卡间通信对延迟极度敏感最好保证参与张量并行的卡落在同一台服务器上。如果使用数据并行跨节点通信占比高网络拓扑要尽量减少跨 Spine 的跳数。集群规模越大网络设计对训练性能的影响就越明显。2.3 存储与 Checkpoint 策略AI 训练会产生大量中间数据存储设计不好会拖慢全局。需要重点考虑两个场景训练样本的读取和 Checkpoint 的写入。训练样本读取要求高吞吐。通常会把数据集放在并行文件系统或高性能对象存储中然后配合多机多卡的数据预取流水线。如果每次训练都直接读远程存储IO 延迟会严重影响 GPU 利用率。Checkpoint 写入同样要求高带宽。大模型训练过程中会周期性保存模型权重和优化器状态一个 Checkpoint 动辄几十 GB 甚至上百 GB。写入速度慢训练进程就得停下来等待。一个比较实用的策略是异步 Checkpoint训练进程先把状态写入本地 NVMe后台线程再异步上传到共享存储。这样既不会阻塞训练也能保证状态可靠落盘。2.4 能耗与散热风冷之外的选择AI 数据中心的能耗主要由 GPU 贡献衡量效率常用 PUEPower Usage EffectivenessPUE 数据中心总能耗 / IT 设备能耗PUE 越接近 1说明能源被有效利用的部分越多。传统风冷机房的 PUE 一般在 1.3 到 1.5 之间。高密度 GPU 机柜如果继续用风冷要么散热能力不足要么空调系统为了降温消耗大量额外电力。液冷是目前 GPU 集群的主流趋势分为冷板式液冷和浸没式液冷。冷板式液冷把冷却液通过冷板直接贴在 CPU/GPU 芯片上带走热量对机房改造的难度比较小。浸没式液冷把服务器整机浸入冷却液中散热效率更高适合超高功率密度场景。选择液冷方案时需要同时考虑机房条件、设备保修政策和运维团队的实际能力。3. AI 数据中心软件栈从驱动到上层平台3.1 GPU 驱动与容器运行时物理机装好 GPU 驱动之后要让 Docker 或 Kubernetes 里的容器使用 GPU通常需要安装 NVIDIA Container Toolkit。它的作用是把宿主机的 GPU 设备映射到容器内部同时注入对应的驱动库。以 Docker 运行时为例配置方式如下# 安装 nvidia-container-toolkit 后配置 Docker 运行时 sudo nvidia-ctk runtime configure --runtimedocker sudo systemctl restart docker配置完成后可以用一个 CUDA 镜像验证容器是否能访问 GPUdocker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi如果能看到 GPU 信息说明容器运行时链路已经打通。注意这里只是示意CUDA 镜像的版本需要根据你实际代码依赖的 CUDA 版本调整不能照搬。3.2 Kubernetes 如何调度 GPU在 Kubernetes 中GPU 属于扩展资源由设备插件Device Plugin上报。安装 NVIDIA Device Plugin 后节点会暴露nvidia.com/gpu资源Pod 可以像声明 CPU、内存一样声明 GPU 数量。下面是一个最简单的 GPU Pod 示例apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: cuda-container image: nvidia/cuda:12.2.0-base-ubuntu22.04 resources: limits: nvidia.com/gpu: 1这里的关键是nvidia.com/gpu: 1。Kubernetes 本身不认识这个资源必须通过设备插件注册之后才能被调度器统计和分配。把 GPU 写在limits而不是requests是为了让调度器在计算节点资源时准确预留 GPU 数量避免多个 Pod 申请同一块 GPU。在多卡场景下Kubernetes 默认不会保证 Pod 内的多张 GPU 落在同一台机器上更不会优化到 NVLink 拓扑。如果需要张量并行建议使用拓扑感知调度或者引入自定义调度器确保同一个 Pod 的 GPU 能满足互联拓扑要求。3.3 训练与推理平台选型思路平台层的作用是把 GPU 资源包装成业务可用的能力。训练场景常用 Volcano、Kueue 这类批量调度组件支持队列、优先级、抢占、任务级容错。推理场景更强调弹性扩缩容和延迟保障经常配合 KEDA 按请求量自动伸缩实例。选型建议是不要一开始就把平台做得太重。先在 Kubernetes 上手动跑通一个训练任务或推理服务理解资源模型再逐步引入队列、监控、弹性伸缩能力。平台越复杂维护成本越高。如果团队里没有足够熟悉调度器的人很容易陷入“平台搭起来了但没人会用”的困境。4. 完整实战在 GPU 集群上部署 LLM 推理服务下面通过一个完整流程演示如何把一个 LLM 推理服务部署到 Kubernetes 管理的 GPU 节点上。这个示例可以作为 AI 数据中心应用层的最小落地样板。4.1 前置条件本文示例需要以下环境Kubernetes 集群至少有 1 个包含 GPU 的工作节点。节点上已安装 NVIDIA 驱动、NVIDIA Device Plugin 和容器运行时。示例中使用的镜像和模型版本请根据实际网络环境和模型资源调整。推理框架以 vLLM 为例模型使用开源 Llama 系列 8B 模型。如果你的环境无法直接访问模型仓库可以先把模型下载到本地再通过 PVC 挂载到容器中。本文示例重点是部署流程模型下载方式不做展开。4.2 检查节点 GPU 资源部署前先确认 GPU 资源是否已经上报到 Kuberneteskubectl describe node | grep -A 10 Allocatable如果输出中能看到nvidia.com/gpu说明设备插件工作正常。如果看不到回退检查 nvidia-device-plugin 的 Pod 日志kubectl logs -n kube-system -l namenvidia-device-plugin这是整个部署流程里最容易出错的一步。很多 GPU 推理服务迟迟无法调度并不是模型或镜像问题而是 GPU 资源根本没上报到集群。4.3 创建命名空间先创建独立命名空间避免和业务服务混在一起kubectl create namespace ai-infra4.4 编写推理服务 Deployment保存文件为inference-deployment.yamlapiVersion: apps/v1 kind: Deployment metadata: name: llm-inference namespace: ai-infra spec: replicas: 1 selector: matchLabels: app: llm-inference template: metadata: labels: app: llm-inference spec: containers: - name: vllm image: vllm/vllm-openai:v0.5.0 command: [vllm, serve, meta-llama/Llama-3.1-8B-Instruct] args: - --tensor-parallel-size - 1 - --gpu-memory-utilization - 0.85 resources: limits: nvidia.com/gpu: 1 ports: - containerPort: 8000说明几个关键参数--tensor-parallel-size 1表示模型由 1 张 GPU 执行。如果模型超过单卡显存可以改成 2 或 4但 Pod 也需要申请对应数量的 GPU。--gpu-memory-utilization 0.85限制模型最多使用 85% 的显存留出余量给推理计算和 KV Cache。resources.limits向调度器声明这个容器需要 1 张 GPU。镜像版本号只是示例实际使用时请以你环境中能拉取到的 vLLM 镜像版本为准。不同版本的启动命令可能有差异新版本优先使用vllm serve入口。4.5 编写 Service 暴露服务保存文件为inference-service.yamlapiVersion: v1 kind: Service metadata: name: llm-inference-svc namespace: ai-infra spec: selector: app: llm-inference ports: - port: 8000 targetPort: 8000 type: ClusterIP生产环境通常会额外部署 Ingress 或 API 网关这里先用 ClusterIP 在集群内部验证。4.6 部署并验证执行部署命令kubectl apply -f inference-deployment.yaml kubectl apply -f inference-service.yaml查看 Pod 状态kubectl get pods -n ai-infra -w等待 Pod 进入 Running 状态后通过日志确认服务启动完成kubectl logs -f deployment/llm-inference -n ai-infra当日志中出现类似Uvicorn running on http://0.0.0.0:8000的信息时说明推理服务已经就绪。接下来在集群内部发起一个推理请求kubectl run curl-test --rm -i --restartNever --imagecurlimages/curl -- \ -sS -X POST http://llm-inference-svc.ai-infra.svc.cluster.local:8000/v1/completions \ -H Content-Type: application/json \ -d {model: meta-llama/Llama-3.1-8B-Instruct, prompt: Hello, what is AI?, max_tokens: 128}如果返回结果中包含choices字段说明整个服务链路已经打通。4.7 结果说明这个示例虽然简单但覆盖了 AI 数据中心应用层一个非常典型的流程GPU 资源上报、根据扩展资源调度、启动推理服务、通过 Service 暴露、发起推理请求。后续可以基于这套模型继续扩展比如把模型文件改为 PVC 挂载、增加 HPA 自动扩缩容、引入 Ingress 做多模型路由、接入 Prometheus 指标采集等。5. 常见问题与排查思路AI 数据中心的故障排查很考验系统思维。下面从训练和推理两个场景梳理高频问题。5.1 训练场景高频故障问题现象常见原因解决思路GPU 利用率低CPU 数据加载成为瓶颈优化数据加载增加预取和并发 workerNCCL 通信超时网络丢包或拥塞检查无损网络配置开启 PFC/ECN显存 OOMbatch size 过大调小 batch size开启梯度累积训练不稳定学习率过高或精度问题检查混合精度配置降低学习率节点运行一段时间掉卡供电、散热或固件不稳定查看系统日志做 GPU 压力测试以 NCCL 通信超时为例常见根因是网络丢包。排查思路一般如下检查 RDMA 网卡状态InfiniBand 环境使用ibstatRoCE 环境可以查看rdma link输出。检查节点之间的 MTU 配置是否一致。观察交换机端口计数看是否存在 CRC 错误或丢包。确认是否启用了 PFC 或 ECNRoCE 网络必须保证无损特性。网络层面的问题往往不是应用代码造成的排查时一定要先看底层网络的健康状态。5.2 推理服务部署排错推理服务部署时有三类问题最常见。第一类是节点有 GPU 但 Pod 调度不上去。原因通常是nvidia.com/gpu没有上报或者 Pod 的资源limits写错。排查思路是先用kubectl describe node确认节点资源再检查 Device Plugin 日志。第二类是服务启动之后显存 OOM。原因通常是--gpu-memory-utilization设置过高或者并发请求撑爆了 KV Cache。解决方式是降低显存利用率参数、增加实例副本同时确保推理框架的批处理功能已启用。第三类是请求一直超时。这时候要分段排查先检查模型是否还在加载再确认 Service 端口是否连通最后看后端是否存在性能瓶颈。一个有效的办法是直接进入 Pod 容器使用curl http://localhost:8000/v1/models自测这样能把问题快速收敛到是服务本身的问题还是网络发布的问题。6. 工程化与运维最佳实践6.1 监控与可观测性GPU 监控不能只停留在 CPU 和内存层面。推荐使用 DCGMData Center GPU Manager采集 GPU 利用率、显存使用、温度、功耗等指标再由 Prometheus 抓取并展示到 Grafana。关键指标至少包括GPU 利用率判断计算资源是否打满。显存使用率判断推理服务是否需要扩容。GPU 温度与功耗判断散热是否正常。NVLink 带宽利用率判断卡间通信是否成为瓶颈。网络丢包率判断无损网络是否退化。缺少这些指标时很多故障只能靠猜。先把 GPU 指标采集起来是 AI 基础设施运维的第一步。6.2 成本控制与任务调度GPU 是 AI 数据中心里最贵的资产成本控制的核心在于提高利用率。一个常见做法是训练任务与推理任务错峰调度。夜间推理请求量低时把 GPU 资源让给训练任务。这需要平台层支持优先级队列和时间片调度。另一个做法是支持 GPU 共享把一张 GPU 同时分给多个小模型使用但要注意显存隔离和性能隔离避免一个实例拖垮整张卡。6.3 安全与数据保护AI 数据中心涉及模型权重、训练数据、中间状态等多类敏感资产安全设计不能滞后。首先容器镜像和模型文件要纳入版本管理并对关键文件做完整性校验防止模型被替换或篡改。其次账号体系要遵循最小权限原则不是所有人都能删除命名空间或修改模型权重。最后所有涉及生产环境的变更包括镜像升级、模型替换、网络配置调整都必须先在测试环境验证再灰度发布。Checkpoint 是大规模训练任务的“救命稻草”建议同时保留本地和远程两份备份并定期演练从 Checkpoint 恢复训练的流程。任何涉及删除数据、覆盖模型的操作都要提前备份并经过评审。6.4 绿色节能与长期运维AI 数据中心的长期运维很大程度上是在和功耗做斗争。除了液冷等硬件方案软件层面也可以做很多事动态功耗管理根据业务负载调整 GPU 功耗上限。任务错峰把可延迟任务放到功耗紧张的时间段之外执行。容器密度管理合理规划单机容器数量减少空转浪费。这些措施不能孤立看待需要结合资源调度、业务容忍度和散热方案综合评估。7. 总结与后续学习方向本文从 AI 数据中心的基础概念入手分析了它和传统数据中心的差异拆解了硬件、网络、存储、软件栈等关键模块并通过一个完整的 LLM 推理服务部署示例演示了 GPU 资源如何在 Kubernetes 上被调度和暴露。最后补充了训练与推理场景的高频排错思路和工程化最佳实践。如果你刚开始接触 AI Infra建议从三件事入手第一在一台带 GPU 的服务器上手动安装驱动和容器运行时跑通nvidia-smi第二搭建一个最小的 Kubernetes GPU 集群理解nvidia.com/gpu的资源模型第三把一个开源模型成功部署成推理服务并尝试接入监控告警。如果这篇文章对你有帮助可以收藏备用。等你真正开始规划 GPU 集群或者排查推理服务问题时再拿出来对照排错。后续还需要重点攻关的方向包括 GPU 网络调优、推理框架选型、模型量化与缓存策略这些才是 AI 数据中心真正体现工程深度的环节。
RELATED READING

延伸阅读

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