尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AI数据中心建设实战:从GPU集群部署到推理服务与批量调度

AI数据中心建设实战:从GPU集群部署到推理服务与批量调度 AI 数据中心的新闻最近很密集尤其是围绕加速卡、光模块、服务器等关键组件的供应链波动。对绝大多数工程师和算法团队来说政策层面的博弈很难干预但有一件事是能控制的把 AI 数据中心从选型、部署、批量任务调度到监控排错的整个工程链路做扎实。这篇文章不讨论具体政策也不评价对错只从技术角度拆解 AI 数据中心建设中最容易被忽略的问题集群管理用什么方案、推理服务怎么暴露接口、批量任务怎么排队、显存和利用率怎么观察、供应链出现波动时怎么保证扩容不卡壳。内容偏实践适合正在考虑自建算力集群、或者已经拿到几台 GPU 服务器准备组集群的团队。1. AI 数据中心核心能力速览AI 数据中心本质上是把“算力、存储、网络、调度、应用”组织成一套可运营的基础设施。下面这张表是先行的能力框架后续所有部署、测试和运维工作都围绕这几个模块展开。能力项说明核心资源GPU/NPU 加速卡、CPU 计算节点、高速计算网络、并行存储典型软件栈Linux 系统 NVIDIA 驱动 CUDA cuDNN或对应厂商的 NPU 算子库Docker NVIDIA Container ToolkitSlurm / Kubernetes 调度系统推理服务常见方案有 vLLM、TGI、TensorRT-LLM、SGLang 等具体选型与模型和显卡绑定批量任务Slurm sbatch 队列、Kubernetes Job、Airflow / DolphinScheduler 工作流接口能力推理服务 HTTP/gRPC 接口、调度系统 REST API、Prometheus 监控指标接口启动方式命令行、容器化部署、集群管理脚本、Terraform / Ansible 编排适合规模单机多卡实验到几十台 GPU 服务器的小型集群均可覆盖典型监控项GPU 利用率、显存使用、温度、功耗、网络吞吐、任务排队数、失败率这里要强调一点不同类型的加速卡对应的驱动、容器镜像、算子库和安全机制差异很大。拿到硬件之后不要立刻跑大数据量任务先做小规模兼容性验证否则很容易出现“驱动装好了但容器里用不了 GPU”“同一个模型在 A 卡上正常、在 B 卡上算子崩掉”之类的问题。2. 适用场景与使用边界2.1 适合谁不适合谁AI 数据中心适合以下几类团队已有稳定的训练或推理负载长期使用云 GPU 成本持续走高开始评估自建。数据有较强的隐私或本地化要求不能轻易把数据传到外部云端。需要承载大模型微调、私有化推理、AI Agent 在线服务、批量视频/图像/语音生成等混合负载。对研发环境有高可控性要求比如要自定义 CUDA 版本、内核参数、分布式文件系统。不适合的场景也很明确临时做一两个模型实验直接租云 GPU 更划算自建设备采购周期长、闲置成本高。团队没有专职运维人员也不愿意投入部署和排错时间。业务波峰波谷非常明显自建集群在低谷期会出现严重的资源浪费。如果是上述情况可以先跑混合架构稳态负载放在本地集群弹性突发负载使用云上 GPU 资源。这样既保留了对核心算力的掌控又不用为峰值一次性买单。2.2 合规、授权与安全边界AI 数据中心承载的负载越重合规边界就越重要。以下几点在规划阶段就要写进架构文档供应链合规采购加速卡、服务器、光模块、存储等关键硬件时要关注设备来源、出口管制要求和最终用途声明确保设备可以合法运达并投入使用。模型授权开源模型权重有各自的 License商用前需要核对是否允许商用、是否要求保留版权声明不能因为模型能下载就直接进入生产环境。数据隐私涉及人脸、声纹、医疗、金融等敏感数据时需要明确数据存储位置、访问权限和审计机制。数据出境还要遵守对应的法律要求。服务安全对外提供 API 服务时必须做认证、限流和内网隔离不能把 GPU 集群的管理端口直接暴露到公网。最终用途审查任何算力资源的提供方和接收方都需要对训练和推理的最终用途负责避免算力被用于未授权或违法违规的场景。这些内容听起来不是“纯技术”但真实做过集群的人都知道一旦合规问题在扩容阶段暴露整批设备被卡住、模型无法上线都只是时间问题。3. 环境准备与前置条件3.1 物理规划空间、电力、散热AI 数据中心的物理层面常常是最大的隐性瓶颈。空间单台 8 卡 GPU 服务器通常占用 4U 左右机架空间整机重量很大机柜承重需要确认。电力高功率加速卡的功耗叠加 CPU、内存和网络设备后单机柜功率密度会明显高于传统机柜。规划时至少要确认机柜供电上限、配电冗余和 UPS 时间。散热风冷数据中心要注意机房温湿度和空调送风方式。高密度机柜如果超过一定功率阈值通常需要液冷方案这会影响机柜选型和机房改造。网络布线计算网络使用光纤时注意光模块类型和布线距离避免因为配线架混乱导致后期排查困难。建议在采购任何设备之前先用功率计和温湿度记录仪做一次机柜环境的摸底得到一组真实数据后再决定硬件配置。3.2 软件栈版本规划AI 数据中心最忌讳“拿到什么卡就装什么驱动”而是先规划软件栈再对照软件栈采购硬件。需要梳理的版本项包括操作系统Ubuntu Server、Rocky Linux、openEuler 等需要确认厂商对系统的支持范围。CUDA / ROCm / CANN 等计算框架版本。Python 版本和依赖管理工具。Docker / containerd 容器运行时版本。NVIDIA Container Toolkit 或对应厂商的容器运行时插件。PyTorch、TensorFlow、vLLM 等框架版本。不同版本的组合存在兼容性矩阵建议先在一台测试机上固定一套组合写成配置文件保存下来。后续所有机器都用同一套版本初始化避免集群内出现“这台机器能跑、那台机器报错”的问题。3.3 网络与存储规划AI 数据中心的网络通常分为三层计算网络承载 GPU 之间的分布式通信常见方案是 InfiniBand 或 RoCERDMA over Converged Ethernet。多机训练大模型时计算网络带宽直接决定扩展效率。存储网络连接并行文件系统或对象存储承载数据集、模型权重和输出结果。管理网络负责节点管理、监控、任务调度等控制面流量一般不需要很高带宽但要求稳定。存储方面小型集群可以先使用 NFS 或 GlusterFS节点数变多后需要评估 Lustre、GPFS、Weaviate 等并行文件系统。模型权重文件通常不小阅读型数据建议放入对象存储训练型数据放入高性能并行存储。4. 安装部署与启动方式下面这套流程以 Ubuntu Server NVIDIA GPU 为例版本号和依赖项需要根据自己的硬件和 CUDA 需求调整。4.1 操作系统与 GPU 驱动先安装操作系统然后更新系统并安装 NVIDIA 驱动。# 更新系统 sudo apt update sudo apt upgrade -y # 安装驱动版本按显卡型号和 CUDA 兼容矩阵选择这里用 535 作为示例 sudo apt install -y nvidia-driver-535 # 重启后验证驱动 sudo reboot nvidia-smi安装完成后nvidia-smi应该能看到设备列表包括 GPU 型号、显存大小和当前驱动版本。如果这里看不到卡后续所有容器和调度配置都没有意义所以这一步必须优先解决。4.2 Docker 与 NVIDIA Container Toolkit推理服务和大模型训练通常使用容器封装环境避免污染宿主机。# 安装 Docker sudo apt install -y docker.io sudo systemctl enable docker sudo systemctl start docker # 安装 NVIDIA Container Toolkit具体仓库配置以官方文档为准 sudo apt-get install -y nvidia-container-toolkit # 配置 Docker 运行时并重启 sudo nvidia-ctk runtime configure --runtimedocker sudo systemctl restart docker验证容器里能不能使用 GPUdocker run --rm --gpus all nvidia/cuda:12.3.1-base-ubuntu22.04 nvidia-smi如果容器能看到 GPU说明 NVIDIA Container Toolkit 配置成功。这一条验证经常被忽略但很多“Docker 里用不了 GPU”的报警都源于此。4.3 Slurm 集群部署与启动Slurm 是科研和工程领域最常用的集群调度系统之一。这里给一个最小化的部署思路。控制节点上安装 slurmctldsudo apt install -y slurm-wlm sudo systemctl enable slurmctld sudo systemctl start slurmctld计算节点上安装 slurmdsudo apt install -y slurmd sudo systemctl enable slurmd sudo systemctl start slurmdslurm.conf的示例如下实际需要按节点名称、CPU 数量和分区名调整ClusterNameai-cluster SlurmctldHostmgmt01 NodeNamenode01 CPUs64 StateUNKNOWN NodeNamenode02 CPUs64 StateUNKNOWN PartitionNamegpu Nodesnode01,node02 DefaultYES MaxTimeINFINITE StateUP配置完成后在控制节点执行sinfo能看到节点状态为 idle 说明集群管理面已经通。任务提交一般通过 sbatch 脚本完成这块放在下面批量任务部分展开。4.4 Kubernetes 方式部署 GPU 调度如果团队已经有 Kubernetes 基础也可以直接让 GPU 作为可调度资源。前提是节点上安装了 NVIDIA Device Plugin。apiVersion: v1 kind: Pod metadata: name: gpu-test spec: restartPolicy: OnFailure containers: - name: cuda-test image: nvidia/cuda:12.3.1-base-ubuntu22.04 command: [nvidia-smi] resources: limits: nvidia.com/gpu: 1kubectl apply -f gpu-test.yaml kubectl logs gpu-test能看到 GPU 信息说明资源调度生效。使用 Kubernetes 的好处是后续可以结合 KEDA、Fluid 等组件做弹性伸缩和数据集缓存但复杂度比 Slurm 更高。5. 功能测试与效果验证5.1 GPU 可用性验证部署完成后在所有计算节点上执行基础验证# 检查每张卡的驱动、显存和温度 nvidia-smi # 检查 PyTorch 是否能看到 GPU python3 -c import torch; print(torch.cuda.is_available(), torch.cuda.device_count())如果 PyTorch 返回True并且 GPU 数量正确说明基础环境没问题。这一步可以在多台节点上并行执行优先排查个别节点的驱动或内核配置差异。5.2 单机推理服务验证以 vLLM 或类似推理服务为例先手动拉起一个小模型确认服务能正常响应。启动命令通常类似python -m vllm.entrypoints.openai.api_server \ --model /data/models/your-model \ --tensor-parallel-size 1 \ --max-model-len 4096 \ --port 8000启动成功后访问http://127.0.0.1:8000/v1/models应该能返回模型列表。这一步只验证服务本身不验证性能。建议用一个固定 prompt 和固定参数跑一次保存基线输出后续修改任何环境配置后都能对比。5.3 并发与压力测试真实业务场景不可能只有一个请求。需要验证服务在并发请求下的表现重点关注 QPS、首 token 延迟、GPU 利用率曲线。import requests import time import threading API_URL http://127.0.0.1:8000/v1/chat/completions payload { model: your-model, messages: [{role: user, content: 介绍 AI 数据中心}], max_tokens: 128, stream: False } def send_request(index): start time.time() resp requests.post(API_URL, jsonpayload, timeout120) cost time.time() - start print(frequest {index}: status{resp.status_code}, cost{cost:.2f}s) threads [] for i in range(20): t threading.Thread(targetsend_request, args(i,)) threads.append(t) t.start() for t in threads: t.join()压测过程中同时执行nvidia-smi观察显存和利用率。如果并发上去了但 GPU 利用率很低说明瓶颈在 CPU、数据加载或网络不在 GPU 本身。5.4 批量任务验证对于离线推理任务Slurm 是更合适的选择。先准备一个批处理脚本#!/bin/bash #SBATCH --partitiongpu #SBATCH --gpus1 #SBATCH --ntasks1 #SBATCH --cpus-per-task8 #SBATCH --mem32G #SBATCH --time00:30:00 python test_inference.py --input $1 --output $2提交命令sbatch batch_tasks.slurm data/input_001.json data/output_001.json squeue任务结束后查看状态sacct -j job_id --formatJobID,State,Elapsed,AllocTRES,ExitCode判断成功的标准是任务状态为 COMPLETED且输出文件完整生成。如果出现 FAILED需要结合 log 文件排查代码问题或资源限制。5.5 长时间稳定性验证短期测试不能覆盖真实运行中的硬件问题。建议在集群交付前跑一轮长时间稳定性验证时间可以控制在 24 到 72 小时持续运行混合负载训练任务 批量推理 在线 API 服务。采集温度、功耗、GPU 利用率、网络丢包和 ECC 错误。设定告警阈值观察是否存在周期性温度过高、驱动崩溃或任务意外退出。显存出现 uncorrectable ECC 错误时需要特别警惕通常是硬件问题的前兆要及时记录并联系售后。6. 接口 API 与批量任务6.1 推理服务 HTTP 接口推理服务通常暴露 OpenAI 兼容的 HTTP 接口也可以使用 gRPC 做低延迟通信。以 HTTP 为例常见端点和参数如下参数说明model模型名称需要与启动时配置一致messages对话消息列表支持多轮temperature采样温度影响随机性max_tokens最大生成 token 数stream是否流式返回top_p核采样参数不传时使用服务默认值6.2 Python 调用示例下面的代码是通用的 HTTP 调用模板具体路径和参数以实际服务框架为准import requests API_URL http://127.0.0.1:8000/v1/chat/completions payload { model: your-model, messages: [ {role: system, content: 你是数据中心运维助手}, {role: user, content: GPU 利用率突然变低怎么排查} ], temperature: 0.5, max_tokens: 256, stream: False } try: resp requests.post(API_URL, jsonpayload, timeout60) resp.raise_for_status() data resp.json() print(data[choices][0][message][content]) except requests.exceptions.Timeout: print(request timeout: 服务端推理过慢或队列堵塞) except requests.exceptions.ConnectionError: print(connection error: 服务未启动或地址端口不对)工程上建议在调用侧加超时和重试。超时时间不宜设得太短大模型推理单条生成时间可能超过几十秒。6.3 批量任务目录与失败重试批量推理任务增多后目录规范很重要。推荐结构如下/inference ├── inputs/ # 输入文件可以是 txt、json、图片路径列表 ├── outputs/ # 输出结果json 或 parquet ├── logs/ # 每个任务的运行日志 ├── scripts/ # 批处理脚本 └── model_cache/ # 模型权重缓存批量提交时不建建议一次性并发几百个任务。比如只有 8 张卡同时跑 100 个大模型任务大概率是排队和超时。更好的做法是结合任务队列控制并发上限for i in $(seq 1 20); do sbatch batch_tasks.slurm inputs/input_${i}.json outputs/output_${i}.json doneSlurm 本身会维护任务队列GPU 空闲时自动调度。对更复杂的依赖关系可以在脚本里加上--dependencyafterok:job_id确保前序任务成功后再执行后续任务。6.4 算力调度接口当集群规模变大用户可能希望通过接口自助申请算力。Slurm 和 Kubernetes 都有对应的 REST APISlurm 提供slurmrestd可以通过 HTTP 创建 job、查询分区和节点状态。Kubernetes 提供原生 API配合自定义资源定义可以实现 GPU 算力自助申请。接口化的好处是后续可以对接内部工单系统或自动化运维平台。团队内部可以统一封装一层“算力申请服务”用户只需要提交数据集路径、模型名称、卡数和预计时长后端自动创建任务。7. 资源占用与性能观察7.1 GPU 利用率与显存最常用的观察命令是nvidia-smi但手动看一眼只能反映瞬间状态。更好的方式是周期采样nvidia-smi \ --query-gpuindex,name,memory.used,utilization.gpu,temperature.gpu,power.draw \ --formatcsv -l 5这条命令每 5 秒输出一次 GPU 指标适合写入日志后做分析。生产环境建议接入 Prometheus Grafana采集项包括GPU 利用率显存占用率显卡温度功耗ECC 错误计数网络吞吐和重传率显存占用看起来“很高”不一定代表任务有问题。推理服务通常会把模型常驻显存显存占用高但利用率低说明服务闲置显存占用高、利用率也高才是比较健康的状态。7.2 网络与存储多机训练大模型时网络是最大的潜在瓶颈。排查命令参考# InfiniBand 网卡状态 ibstatus # 网络打流测试 iperf3 -s # 服务端 iperf3 -c 192.168.1.10 -t 60 # 客户端 # 查看网卡统计和丢包 ethtool -S interface | grep -E discards|errors存储方面观察数据加载时间在训练总时长中的占比。如果 GPU 利用率波动明显、数据加载阶段 GPU 空转就需要增加 DataLoader 的 worker 数或者把数据缓存到本地 NVMe。7.3 能耗与散热功耗与温度直接关联设备寿命和稳定性。每张卡的功耗可以通过nvidia-smi查看机柜级别的功耗需要结合配电柜的功率计。散热不足的表现通常是温度迅速升高并触发降频导致同样的任务变慢。此时优先检查机柜前后风道是否畅通。空调送风温度和湿度是否正常。高功率机柜是否需要液冷。风扇转速策略是否被静音模式限制。7.4 如何降低显存占用模型过大导致显存不足时优先按成本从低到高尝试减小 batch size 或 max_tokens。开启梯度检查点训练场景。使用 FP16 / BF16 混合精度。使用 KV Cache 量化或 PageAttention 优化推理。如果单卡放不下使用张量并行或多卡流水并行。量化到 INT8 / INT4但必须做效果对比不能盲目追求显存下降而牺牲精度。实际占用以本机测试为准不同模型、不同服务框架的显存表现差距很大不要只看网上别人给的数字。8. 常见问题与排查方法问题现象可能原因排查方式解决方案nvidia-smi 看不到 GPU驱动未安装或内核模块加载失败dmesg、nvidia-smi、lspci重装与显卡匹配的驱动并重启Docker 容器内无法使用 GPU未安装或未配置 NVIDIA Container Toolkitnvidia-ctk status、docker run --gpus all安装 toolkit 并重启 docker推理报显存不足 OOM模型过大、batch size 过大、服务并发过高nvidia-smi 查看显存占用降低 batch、量化模型、多卡切分slurmctld 启动失败slurm.conf 配置错误或端口冲突journalctl -u slurmctld逐一核对节点名、分区、端口 6817/6818slurm 任务一直排队GPU 资源被占满或集群节点 Downsinfo、squeue、看节点状态等待任务结束或恢复 Down 节点API 请求超时推理慢、服务排队、网络不通看服务日志和 GPU 利用率增加并发能力、限制请求队列、更换更快的服务框架批量任务中途卡住代码死锁、依赖外部服务不可用查看任务日志、堆栈设置任务超时、加入失败重试逻辑GPU 温度过高导致降频散热不足、风扇策略异常、机房空调故障nvidia-smi 看温度功耗清理灰尘、调整风扇、检查机房制冷机柜跳闸功率超限查看功率计和配电日志错峰启动设备、限制任务功耗上限多机通信很慢计算网络未走 RDMA、光模块速率不匹配ibstatus、ethtool、iperf3确认 IB/RoCE 配置检查光模块型号排查问题的思路有一个原则先把控制面和管理面分开。看到任务失败先判断是“调度系统的问题”还是“业务代码的问题”。如果squeue能看到任务在 RUN说明调度系统正常问题在容器内部如果任务一直 PENDING则优先排查资源分配和分区状态。9. 最佳实践与使用建议9.1 先小规模再规模化最稳妥的做法是先买 1 到 2 台 GPU 服务器跑通“驱动 容器 调度 推理服务 批量任务”的完整链路再决定是否扩容。如果这套最小链路都跑不通扩大规模只会放大问题。扩到十几台机器时建议提前用 Ansible 或 Terraform 把系统初始化、驱动安装、容器运行时配置写成自动化脚本。不要一台一台手工敲命令人肉运维在 GPU 集群上迟早出事故。9.2 工程化规范模型、数据、输出、日志分目录管理。所有服务统一使用配置文件不把参数硬编码在代码里。批量任务必须带上任务 ID 和日志路径。每次环境变更记录变更时间和变更原因。对外的 API 服务必须加认证和限流默认不暴露公网。监控告警接入即时通讯工具温度过高、任务失败、显存不足时及时通知。9.3 供应链与扩容策略AI 数据中心建设中硬件供应链的稳定性往往比性能参数更影响交付。建议在采购时关注关键部件是否有多个供应商可选。不同批次硬件的兼容性是否提前验证过。交付周期是否满足项目时间表。后续扩容时能否买到同型号或兼容型号的设备。光模块、线缆、电源、散热风扇等易耗件是否需要多备库存。从材料看全球 AI 数据中心的硬件供应链正在经历调整不同市场和地区对组件来源的要求也在变化。工程团队的应对方式不是在政策层面表态而是把供应链风险纳入技术规划提前准备多套兼容硬件配置确保即使某个型号无法采购依然有备选方案可以快速切换。9.4 安全与合规再次强调几点涉及人脸、声纹、版权素材的数据必须确认授权链条完整。模型训练结果外发前要做效果复核避免生成不当内容。计算集群要划分权限不同团队不能互相访问彼此的数据目录。对外提供算力服务时记录任务申请人和任务用途。遵守所在地和业务涉及地区的法律法规尤其是数据保护和出口管制相关要求。10. 总结与下一步AI 数据中心的建设不是把几台 GPU 服务器插上电就结束。真正的分水岭在于你能不能让任务自动排队、能不能通过 API 把算力能力开放给业务、能不能在硬件出问题之前提前预警、能不能在供应链波动时依然保证扩容计划执行。建议先从一台 GPU 服务器开始跑通本文第 4 章和第 5 章的最小流程记录一组真实的显存占用、利用率和温度数据。这个基线数据会成为后续扩容决策的重要参考也能帮你判断团队是否真的需要自建集群。最容易踩的坑是硬件先到软件方案还没定。结果驱动装错、容器跑不起来、调度系统没有选型白白浪费设备到场后的黄金调试期。正确顺序是先把软件栈和调度方案定下来再让硬件进场。后续可以继续扩展的方向包括接入 Prometheus Grafana 做完整监控、用 Terraform 统一管理多机房设备、把推理服务和批量任务统一封装成内部算力 API以及评估多品牌加速卡的混合调度方案。建议先收藏这篇文章等设备到场后按流程逐步验证。
返回列表