当前位置: 首页 > news >正文

OpenAI 如何将 Kubernetes 扩展到了 7500 个节点

OpenAI 团队分享的关于他们如何将 Kubernetes (K8s) 集群规模扩展到 7500 个节点的经验和技术细节。核心目标是支撑像 GPT-3、DALL·E 这样的大型 AI 模型的训练和研究。

为什么需要这么大集群?OpenAI 的工作负载特点是什么?

  • 训练巨型模型: 需要成百上千台机器同时协作,处理海量数据(文本、图像)。
  • “整台机器”干活: 每个训练任务(Pod)通常独占一台服务器上的所有资源(尤其是昂贵的 GPU),避免资源争抢。
  • “抱团”工作(MPI): 所有参与训练的机器像一个紧密团队(MPI 通信器)。任何一台机器出问题,整个训练就得暂停重启(从上一个“存档点”恢复)。
  • 数据靠“云盘”: 训练数据主要从类似网盘的“对象存储”(如 S3)读写,而不是依赖 K8s 的本地持久卷(太慢)。
  • 研究性质: 实验变化快,代码迭代频繁,基础架构要足够灵活应对变化。

扩展过程中遇到的关键挑战和解决方案

网络:让机器之间高速互通
  • 问题: 节点太多,早期用的网络方案(Flannel)扛不住流量。
  • 解决: 改用云厂商(Azure)提供的原生高速网络方案(避免封装/隧道)。Pod 直接获得主机级别的网速。
  • 监控流量:iptables 打标记区分内网流量和访问外网流量,方便排查瓶颈(比如是下载数据慢了还是机器间通信慢了)。
  • 安全隔离: 不同集群网络完全隔离,防止互相影响。
大脑(API 服务器 & etcd):别被压垮
  • 问题: 集群大了,API 服务器(K8s 的“指挥中心”)和存储它的数据的 etcd 压力剧增。
  • 解决:
    • 运行多个 API 服务器和 etcd 实例(比如 5 个),分摊压力。
    • 分离事件存储: 把频繁变化的“事件”单独存到另一个 etcd 集群,减轻主 etcd 负担。
    • 升级到 EndpointSlices:解决大量节点监控“服务”时的信息爆炸问题(性能提升巨大)。
    • 避免集中请求: 提醒应用开发者(研究人员)不要搞那种需要每个节点都频繁问 API 服务器的程序。
    • 平滑扩容: 新节点加入不要太猛太快,防止瞬间压垮 API。
监控(Prometheus & Grafana):看得清才能管得好
  • 问题: 节点和指标太多,监控工具 Prometheus 吃不消(内存爆炸、启动超慢)。
  • 解决:
    • 精简指标: 不是所有指标都有用,只收集关键的。
    • 修复 Bug: 发现 Grafana 某些查询会让 Prometheus 崩溃,打了补丁强制超时。
    • 优化启动速度: 限制 Prometheus 重启时使用的 CPU 核心数,避免争抢。
    • 寻求新方案: 承认 Prometheus 内置存储引擎在超大规模下有局限,正在探索替代品(留了个悬念)。
健康检查:快速发现“病”机器
  • 被动检查(实时监控):
    • 监控基础:网络通不通?磁盘满了没?GPU 有没有报错(特别是严重的 ECC 错误)?
    • 用工具(如 dcgm-exporter)把 GPU 状态喂给监控系统。
    • 发现问题的节点会被标记(“污点”),不让新任务调度上去。严重问题会尝试驱逐现有任务。
  • 主动检查(“体检”):
    • “预检”系统: 新节点加入前,先独占 GPU 跑测试(确保硬件驱动没问题),通过后才开放使用。
    • 定期“体检”: 运行定时任务抽查节点上的 GPU 性能,确保长期健康。
资源分配:公平又高效
  • “团队专属区” (Team Taints):
    • 有个服务根据配置,给节点打上不同团队的标签和“污点”。
    • 你的任务只有带对应“通行证”(容忍度)才能调度到你团队的“专属区”。
    • 灵活点:也可以设置允许借用别人空闲资源。
  • “占位气球” (Balloons):
    • 问题:集群自动缩容(为了省钱)有时太快,重新启动节点又慢。
    • 解决:部署一堆低优先级、随时可牺牲的“占位”任务(Balloons)。
    • 效果:让自动缩放器觉得节点不空闲(所以不移除),但当真实任务来时,这些“占位”任务会被立刻踢走腾地方。
  • “团购”调度 (Gang Scheduling/Coscheduling):
    • 问题:一个训练任务需要 100 台机器同时就位才能开始。默认 K8s 调度器可能只给每个任务分 50 台,结果都卡住。
    • 解决:利用 K8s 1.18+ 的新功能(Coscheduling 插件),确保一个任务所需的所有机器要么都分配,要么都不分配,避免死锁。

还没完全搞定的难题

  • 监控存储引擎: Prometheus 自带的存储在大规模下压缩慢、重启慢、查询容易出错。正在找更好的方案。
  • 限制“上网”带宽: 集群整体访问外网(如下载数据集)的带宽需求巨大。需要更好控制每个 Pod 的“网速”,避免个别人把出口带宽占满影响别人。

OpenAI 的核心经验

  1. 了解你的负载: OpenAI 的工作负载(大规模 ML 训练)很特殊,解法不能照搬通用集群。
  2. 网络是命脉: 大规模下必须用高性能网络方案。
  3. 保护“大脑”: API Server 和 etcd 是瓶颈点,要重点防护和优化(多实例、拆分、EndpointSlices)。
  4. 监控要精简高效: 海量指标下必须做取舍和优化。
  5. 自动化健康管理: 快速发现并隔离问题节点至关重要。
  6. 公平且高效调度: 结合“专属区”、“占位符”、“团购”等策略管理多团队资源。
  7. 拥抱 K8s 新特性: 如 EndpointSlices, Coscheduling 插件是解决规模问题的关键。
  8. 持续优化: 7500 节点不是终点,监控存储和带宽整形仍是挑战。

OpenAI 证明了 Kubernetes 能扩展到支撑世界最大 AI 模型训练所需的上千台机器集群。但这需要深刻理解自身需求,精心选择和配置网络、存储、监控、调度等核心组件,并不断解决规模带来的新挑战。他们的经验为其他需要超大 K8s 集群的团队提供了宝贵参考。

DPU( Data Processing Unit,数据处理单元 )是一种专门设计用于 卸载、加速和隔离数据中心基础设施任务 的专用处理器。它的核心目标是 释放CPU和GPU的算力 ,让它们专注于核心业务计算(如AI训练、数据分析等),同时高效处理网络、存储、安全等底层任务。

DPU的核心作用:解决传统架构瓶颈

DPU要解决的核心问题:

  1. GPU算力浪费

    • 传统CPU需处理网络协议栈、存储驱动、虚拟化等任务,消耗25%-30%算力,导致GPU“饥饿”。
    • DPU解决方案:通过硬件卸载网络协议(如TCP/IP、RDMA)、存储管理、安全加密等任务,将CPU/GPU解放出来。
  2. 大规模训练通信延迟

    • 千卡集群中网络拥塞导致通信延迟飙升,拖慢万亿参数模型训练。
    • DPU解决方案:提供超低延迟网络加速(如NVIDIA BlueField的SHARP技术),减少GPU间通信耗时。
  3. 安全与性能矛盾

    • 传统加密卸载牺牲实时性,多租户资源争抢引发性能波动。
    • DPU解决方案:硬件级隔离多租户资源,并行处理加密/解密,实现安全零性能损耗。

DPU的三大能力

  1. 网络加速

    • 卸载网络协议栈,支持高速RDMA、智能路由、拥塞控制,提升分布式计算效率。
    • 示例:BlueField-3 DPU可将千亿模型训练通信延迟降低13%。
  2. 存储虚拟化

    • 硬件加速存储访问(如NVMe over Fabrics),卸载文件系统、数据压缩等任务。
    • 示例:SNAP技术实现50GB/s加密存储读写,CPU开销降低70%。
  3. 安全与隔离

    • 硬件级加密引擎(如AES-GCM),零信任安全架构,物理隔离多租户资源。
    • 示例:多租户环境下保障99.9% SLA,吞吐量提升4倍。

NVIDIA DPU的实战价值(以BlueField-3为例)

NVIDIA BlueField-3 DPU 结合 DOCA软件框架,实现了:

  • 训练效率飙升
    GPU利用率跃升至92%,通信延迟降低13%。
  • 推理实时保障
    硬件隔离确保99.9% SLA,吞吐量提升4倍。
  • 秒级运维响应
    Telemetry高频采样10倍加速故障定位,系统稳定性达99.999%。
  • 存储安全兼得
    SNAP硬件加密加速50GB/s读写,CPU开销骤降70%。

DPU vs. CPU/GPU 定位差异

处理器类型核心任务典型场景
CPU通用计算、逻辑控制操作系统、应用逻辑
GPU大规模并行计算AI训练/推理、图形渲染
DPU基础设施任务卸载与加速网络、存储、安全、虚拟化
  • CPU 是“大脑”(决策与控制)
  • GPU 是“工人”(高强度计算)
  • DPU 是“管家”(处理杂务,让大脑和工人全力工作)

DPU是数据中心的新型“加速引擎” ,通过硬件卸载基础设施任务,彻底解决算力浪费、网络延迟、安全瓶颈等问题。其本质是 将“数据中心税”转化为“算力增益” ,推动AI、云计算、高性能计算进入效率新阶段。

https://mp.weixin.qq.com/s/a26sn4wd0hxTqmPCch3RNw
https://openai.com/research/scaling-kubernetes-to-7500-nodes

http://www.lryc.cn/news/573913.html

相关文章:

  • 46- 赎金信
  • 如何仅用AI开发完整的小程序<3>—创建小程序基础框架
  • python案例练习
  • 《单光子成像》第八章 预习2025.6.22
  • 零基础学习Redis(14) -- Spring中使用Redis
  • AIGC技术的本质:统计学驱动的智能革命
  • 制造业B端登录页案例:生产数据安全入口的权限分级设计
  • 【ELK(Elasticsearch+Logstash+Kibana) 从零搭建实战记录:日志采集与可视化】
  • 防御悬垂指针:C++的多维度安全实践指南
  • 【分布式技术】Bearer Token以及MAC Token深入理解
  • Ubuntu修改Swap交换空间大小
  • SQL Server 基础语句3: 数据操作(插入、删除、更新表)与数据类型
  • 考研408《计算机组成原理》复习笔记,第三章(1)——存储系统概念
  • (C++)素数的判断(C++教学)(C语言)
  • UNet改进(4):交叉注意力(Cross Attention)-多模态/多特征交互
  • 测试工程师实战:用 LangChain+deepseek构建多轮对话测试辅助聊天机器人
  • 2025-06-22 思考-人的意识与不断走向死亡的过程
  • P99延迟:系统性能优化的关键指标
  • AWS认证系列:考点解析 - cloud trail,cloud watch,aws config
  • MySQL之索引结构和分类深度详解
  • 【构建大型语言模型】
  • 鸿蒙 Column 组件指南:垂直布局核心技术与场景化实践
  • 【PyTorch项目实战】CycleGAN:无需成对训练样本,支持跨领域图像风格迁移
  • 《计算机网络:自顶向下方法(第8版)》Chapter 8 课后题
  • 华为云Flexus+DeepSeek征文|基于Dify构建解析网页写入Notion笔记工作流
  • 嵌入式C语言编程规范
  • Vue3解析Spring Boot ResponseEntity
  • select和poll用法解析
  • 如何仅用AI开发完整的小程序<4>—小程序页面创建与删除
  • 软件工程核心知识全景图:从需求到部署的系统化构建指南