ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

英伟达巨资收购算力调度平台:GPU如何避免沦为白牌资源

英伟达巨资收购算力调度平台:GPU如何避免沦为白牌资源 最近科技圈有个消息一直挂在热搜上没下来某家芯片巨头砸了一笔以十亿美元计的钱买下的不是芯片设计公司也不是什么新架构IP而是一个“平台”。消息传出来的时候评论区吵得热闹有人说这是溢价有人说这是布局。但如果你也做AI基础设施或者管过GPU集群你会瞬间明白这枚棋子的分量——黄仁勋买的不是现有业务而是未来十年整个AI算力栈的“入口”。这篇文章我想把这个事拆开讲清楚。先说结论这笔交易背后真正的焦虑不是芯片性能落后而是GPU正在变成标准件、算力正在被“白牌化”一旦AI工程师的上层入口被Kubernetes这类通用编排工具接管英伟达就会从“独一档的算力定义者”退化成“卖配件的”。所以本文会从算力调度平台的本质出发聊透GPU利用率为什么上不去、调度平台到底在干什么、黄仁勋在怕什么再给出一套你可以直接在自己K8s集群里复现的GPU编排验证方案最后聊几个我实际踩过的坑。适合AI Infra工程师、运维同学以及所有想搞懂“英伟达未来几年软件打法”的技术决策者。1. “买平台”买的是什么AI算力调度平台的底层逻辑1.1 GPU集群的真实痛点算力买了70%用上的还不到一半先说一个特别反常识的现象。很多企业买了整柜整柜的GPU服务器但你去nvidia-smi上看很多卡利用率常年只有百分之二三十。不是算力不够是没调度起来。我用一个最常见的场景来说明。假设你有4台机器每台8张A100总共32张卡。团队A跑一个大模型训练要申请16张卡团队B跑推理服务每路请求需要1张卡团队C做数据预处理偶尔用2张卡跑几十分钟。如果靠人工分配大概率会出现这种情况团队A占的16张卡里有一台机器的2张卡因为和别的任务冲突上不去团队B的推理服务为了扩容瓶瓶罐罐地占着不同节点的零散卡显存用了不到一半团队C的短任务没人排期要么挤在深夜跑要么排队排到天亮。最终的结果就是卡都在但碎片化严重大任务进不去小任务占着拉不出屎。这种浪费是可以量化的。在行业里企业自建GPU集群的利用率普遍在30%-50%之间调度做得好能拉高到70%-80%。如果是混部训练、推理、数据任务通过精细的资源配额和动态调度甚至能到90%以上。而英伟达卖卡卖得再多如果客户买回去发现用不满、算力成本降不下来后续采购就会犹豫云上租卡反而更香。这才是真正的生意危机。1.2 调度平台到底是什么GPU版的Kubernetes业内把这类平台称为AI算力编排平台AI Orchestration Platform说白了就是“GPU版的Kubernetes”。Kubernetes管的是容器把CPU、内存、网络这些资源抽象成池子按需调度。而这类平台管的是GPU让不同团队提交的训练、推理、数据处理任务按照优先级、配额、拓扑要求落到最合适的卡上用完自动释放。用一个生活化的类比帮你快速建立画面感。GPU算力就像自来水厂的产能调度平台则是从水厂到你家的“供水管网水表物业”。如果没有管网水厂产能再大你也只能提着桶去接水如果只有管网没有水表有些人就无限用水邻居家一口水都等不到如果物业不管事水管乱接、压力不均谁都别想稳定用水。调度平台要解决的正是“水压低”“水费乱”“水管打架”这三件事。所以回到那笔收购“买下一个平台”买的不是某个具体的软件功能而是整个AI算力分配体系的控制权。它决定了未来一家企业的GPU集群里谁的任务先跑、谁的资源有保障、哪一步的算力被浪费——这个控制权比几十万张卡本身更值钱。2. 黄仁勋在怕什么从卖卡到卖AI工厂的三个转折点2.1 怕GPU变成“白牌资源”软件入口被上游夺走黄仁勋最不想看到的局面就是GPU像服务器CPU一样变成标准化硬件。标准化的意思就是你今天能用NVIDIA明天换AMD、后天换自研芯片用户体验差异不大。当前的现实显然不是这样CUDA深度绑定着训练和推理框架迁移成本极高。但这个绑定并不牢固——因为上层入口正在被通用化技术取代。具体点说今天很多AI任务的调度已经不是提交到GPU上而是提交到Kubernetes集群里。Kubernetes只认资源不认品牌。一旦这种模式成为绝对主流在用户看来GPU就是一个可插拔资源那么英伟达掌握的CUDA生态价值就会被上层编排层架空。应用层的开发者和运维者更关心的是“我的Pod调度在哪台机器上”而不是“底下的GPU是哪家的”。这时候谁控制了调度平台、队列、配额、监控面板谁就掌握了AI工程师的使用入口。收购一个编排平台本质上就是要在Kubernetes之上再长出一层“AI原生调度层”把这层牢牢握在自己手里让客户哪怕用云原生方式跑任务最终也是跑在英伟达定义的算力体系内。2.2 怕AI工程师用不起GPU被成本倒逼转向自研或云上第二层恐惧很现实GPU卖得越贵客户对利用率越敏感。今天一张H100的市场价动辄十几万人民币跑不起来就是亏。你想想一个AI团队花几百万买的卡如果实际利用率只有30%老板会怎么想大概率是下一批预算不给AI了或者转向云上按时长租卡。不管是哪一种英伟达的硬件销量都会受影响。更危险的是部分大厂已经开始自研AI芯片从Google TPU到各类国产芯片路线越来越成熟。它们有一个共同的卖点针对自家集群做了深度定制的调度系统利用率可以做到很高。英伟达如果不在软件层面帮客户把成本打下来就等于把“算力利用率”这个战场拱手让人。买下平台以后英伟达可以把调度能力直接打进DGX、DGX Cloud和AI Enterprise订阅服务里告诉客户“你买我的整机方案我帮你把GPU利用率拉到80%以上综合单卡成本反而比租云更便宜。”这是典型的用软实力巩固硬件护城河的打法。2.3 怕CUDA帝国出现“旁路”多芯片混跑的幽灵再往深一层想英伟达的护城河到底是硬件还是CUDA我的判断是CUDA生态。但CUDA生态有一个软肋它只绑定在英伟达自己的GPU上。一旦调度层、推理层、甚至训练框架里的底层设备适配层变得足够“中立”应用可以在不同芯片间平移那CUDA就不再是唯一选项。这也是为什么英伟达近几年连续吃下多家AI Infra公司从去年到现在的多笔收购几乎都瞄准同一个方向算力编排、推理优化、AI云平台。它不是在买技术村料而是在拼一张“AI工厂操作系统”的版图——底层拥有GPU硬件中间有CUDA和NIM推理微服务上层有调度平台控制资源的分配和成本顶层还有云服务入口。黄仁勋反复讲AI Factory不是造概念而是要把卖卡这件事变成卖整个工厂的产线。买“平台”是整个拼图里最容易被外界忽视、但最关键的一块。3. 拆解一个商用GPU调度平台的工作原理3.1 整体架构控制面、调度器、执行面如何协同不用把这类平台想得太玄乎。它的核心架构通常分三块控制面Control Plane、调度器、执行面Agent/Worker。控制面负责接收用户的提交请求管理队列、配额、权限、策略。它是整个平台的“大脑”加“物业接待处”。调度器则是核心决策模块它会实时扫描集群里所有GPU节点根据任务优先级、资源需求量、节点亲性和拓扑约束决定把任务放到哪张卡上。执行面一般以Agent的方式跑在每台GPU服务器上负责在节点上完成具体分配——例如配置MIG切片、设置时间片、注入环境变量、拉起容器进程。这三块配合起来对外暴露出来的就是一句简单的runai submit或者一个API请求。用户不用关心该选哪台机器、要不要抢卡、显存够不够平台自动处理。与此同时平台还会带一个仪表盘展示每张卡的实时利用率、队列等待时间、成本分摊情况。这个可观测层非常关键因为以前运维同学排查“为啥我的任务没跑起来”要登录好几台机器看日志现在直接在控制面板上看任务在哪排队、被谁占着资源效率完全不一样。3.2 六大关键能力与技术选型深度对比一个成熟的GPU调度平台至少要有六项能力我挨个说清楚顺便把这些能力对应的开源方案列出来方便你对照理解。第一调度策略。主要包括装箱bin-packing和打散spread。装箱策略会把任务尽量堆到少数节点上省出空闲节点给大任务适合训练场景打散策略则把任务分散开降低单点故障影响适合高可用推理服务。开源方案里Kueue负责队列级调度Volcano则偏批处理和HPC任务两者各有侧重。第二动态配额与抢占。团队A有100张卡的配额团队B有50张但只要A没跑满B可以临时借用A一旦有高优任务进来B的闲置占用会被收回。类似银行“闲钱理财”。Kubernetes原生的ResourceQuota只能做静态限制做不到超卖和抢占所以生产中往往需要Kueue或者Volcano这类扩展组件。第三GPU共享。显存足够、算力有富余的场景下一张卡可以塞多个小任务。技术上分三种Time Slicing时间片轮转、MIG物理切分、vGPU虚拟化。时间片适合延迟要求不高的推理批处理MIG适合隔离要求高、显存需求明确的任务。A100、H100支持MIG但RTX 4090这类消费卡不支持MIG得靠时间片。这个限制在实际选型时影响挺大。第四拓扑感知调度。大模型训练时节点内NVLink通信比跨节点网络快好几个量级。调度平台要尽量把同一个分布式训练任务的8张卡分到同一台8卡机器上避免跨机通信拖慢速度。开源层面Volcano和Kueue都开始引入拓扑感知约束但配置复杂度和成熟度还远不及商业平台。第五多集群与多云纳管。大企业的GPU资源通常分散在不同机房、不同云平台需要统一纳管一个界面看全球资源。开源方案里KubeFed早就不太活跃了Karmada目前是主流但AI任务调度生态还不够丰富。第六可观测与成本分析。平台会记录每张卡被谁用了多久按团队、项目、任务维度拆分成本。很多老板做AI预算决策就靠这张成本报表。开源方案有OpenCost、dcgm-exporter加Grafana的组合但要做成多维成本分摊还是得自己写不少胶水。我把这些对比整理成一个表格你直接看会更快。能力项典型商用实现开源替代方案适用场景队列调度Run:ai、Lepton AIKueue、Volcano多团队共享GPU统一配额管理抢占策略Run:ai优先级队列Kueue Preemption、Volcano Preempt高优任务插队时回收闲置资源GPU共享MIG、Time SlicingNVIDIA官方MIG/time-slicing插件小模型推理、资源共享拓扑感知调度Run:ai拓扑调度Volcano、Kueue较有限大模型分布式训练避免跨机通信多集群纳管Run:ai多集群、Lepton AIKarmadaVolcano组合多机房/多云资源统一管理成本分析Run:ai Dashboarddcgm-exporter自研报表算力成本分摊与量化4. 不花钱也能体验“平台式调度”KubernetesKueue上手实践买不起商用平台没关系调度平台的核心逻辑完全可以用开源组件在自己的K8s集群里复现。这一节带你走一套最小可行的方案跑完后你会理解前面聊的那些能力在系统里究竟是怎么实现的。4.1 环境准备与组件安装你不需要太强的硬件只要有一台带NVIDIA GPU的机器装上Docker和Kubernetes单节点也能跑再装好NVIDIA的GPU驱动后面步骤就能继续。推荐用Ubuntu 22.04K8s版本1.28以上。检查GPU驱动的命令很简单执行nvidia-smi能看到显卡信息就说明驱动没问题。第一步在K8s集群里安装NVIDIA Device Plugin这是让Kubernetes认识GPU的关键。核心组件就是一个DaemonSet它会监听节点上的GPU设备把资源数量上报给kubelet这样调度器在分配Pod时才能看到类似nvidia.com/gpu这样的资源。可以用Helm安装或者直接apply官方yaml。第二步安装Kueue。Kueue是Kubernetes SIG鼎力支持的队列级调度组件它把“容器调度”和“作业排队”两层拆开你可以在集群里定义队列再把Job提交到队列里等待调度。安装也走Helmhelm repo add kueue https://kubernetes-sigs.github.io/kueue/ helm install kueue kueue/kueue -n kueue-system --create-namespace装完后会有kueue-controller-manager这个Pod在运行。4.2 配置队列、调度策略与动态分片Kueue的资源模型里有两个核心对象ClusterQueue和LocalQueue。ClusterQueue定义的是集群级别的资源池和调度策略LocalQueue是某个命名空间下的子队列用户把任务提交到LocalQueue再由Kueue映射到ClusterQueue。下面这个例子定义一个ClusterQueue资源上限是4张GPU装箱策略是BestFit尽量把任务往已有节点上塞。实际生产中我会建议你把strategy参数设为BestFit因为GPU集群通常很贵装箱能省出整节点给大任务。apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: gpu-cluster-queue spec: namespaceSelector: {} resourceGroups: - coveredResources: [nvidia.com/gpu] flavors: - name: gpu-flavor resources: - name: nvidia.com/gpu nominalQuota: 4 preemption: withinClusterQueue: PreemptLowerPriority schedulingPolicy: strategy: BestFit然后是LocalQueue它很简单绑定到上面这个ClusterQueueapiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: name: ai-team-queue namespace: ai-dev spec: clusterQueue: gpu-cluster-queue之后用户只要创建普通K8s Job并在Job的metadata里打上kueue.x-k8s.io/queue-name: ai-team-queue这个标签Kueue就会接管它。我来演示一个申请1张GPU、运行5分钟的压力测试任务apiVersion: batch/v1 kind: Job metadata: name: gpu-test-job namespace: ai-dev labels: kueue.x-k8s.io/queue-name: ai-team-queue spec: parallelism: 1 completions: 1 template: spec: containers: - name: gpu-burn image: nvidia/cuda:12.2.0-base-ubuntu22.04 command: [sh, -c, nvidia-smi sleep 300] resources: limits: nvidia.com/gpu: 1 restartPolicy: Never提交后用kubectl get workload能看到Kueue创建了一个对应的工作负载对象。如果集群里有4张GPU这个任务会被调度到其中一张卡上。再来两个同样的小任务观察它们如何被分配到空闲卡上或如何贴到同一张卡上——如果策略是BestFit且显存充足多个小任务会挤在一张卡上这就复现了前面说的“装箱”。4.3 GPU时间切片实验与结果验证K8s原生只能把一张GPU一次性分配给一个容器如果想让多个容器共享同一张GPU就得开Time Slicing。NVIDIA官方提供的device-plugin支持配置时间切片修改DevicePlugin的配置文件把time-slicing的资源名加进去就能生效。实际操作中需要创建一个ConfigMap声明GPU资源的共享配置这里以一张A100为例apiVersion: v1 kind: ConfigMap metadata: name: time-slicing-config namespace: kube-system data: time-slicing: | version: v1 sharing: timeSlicing: resources: - name: nvidia.com/gpu replicas: 4接着让device-plugin加载这个配置。这步做完后kubectl describe node会看到一张卡被识别为4个可分配资源nvidia.com/gpu: 4也就是一张物理卡对外变成4张“虚拟卡”可以同时被4个不同的Pod请求。实验验证时可以提交4个nvidia-smi任务每个任务申请1个nvidia.com/gpu资源你会看到它们都调度到同一张物理卡上并且4个容器同时运行。在宿主机上执行nvidia-smi能看到这张卡的利用率被切成时间片轮流服务。需要注意Time Slicing并不会隔离显存4个容器共用同一块显存空间任何一个任务显存占多了其他任务就会OOM这一点和MIG完全不同。关于这个坑我在下一节还会单独说。4.4 一组建议的落地参数如果你跑完上面的实验想在更真实的环境里用起来我建议按场景调参数小模型推理服务并发量高、单任务占卡少优先用Time Slicing配合BestFit装箱分布式训练任务之间占用卡多但数量固定建议把preemption关掉或只允许优先级高的队列抢占避免训练中途被挤掉导致checkpoint反复重存如果服务器是A100/H100这类数据中心卡同时部署几个隔离要求高的服务直接MIG切分组合更稳常用的做法是把一张80GB的A100切成3份1×40GB 2×20GB按需暴露给不同团队。以上这些实验虽然只跑在单机或小集群上但你已经完整接触了“资源抽象—队列排队—调度决策—共享执行”这条链路。商用平台上绝大多数功能本质都是在这个链路里加入更精细的策略和更漂亮的可视化。5. 常见问题与排查技巧实录自己搭GPU调度平台和用商业平台遇到的坑其实大同小异。下面这4个问题是我在多个集群里反复踩过、也看别人踩过的每一类都值得记下来。5.1 “卡没被调度上”节点亲和性与资源模型的坑现象是任务一直处于Pending状态kubectl describe pod显示0/1 nodes available但节点明明有GPU。最常见的原因是device-plugin没有上报资源或者上报的资源名和你请求的不一致。执行kubectl describe node确认节点上有nvidia.com/gpu这个条目。如果只有nvidia.com/gpu却显示数量为0多半是驱动和容器运行时版本不匹配查看device-plugin日志一般会提示could not start device plugin。另一个容易忽略的原因是节点标签和ClusterQueue的namespaceSelector或nodeSelector不匹配调度器根本看不到这个节点。5.2 Time Slicing引发的显存OOM和资源假象这个坑特别隐蔽。开了Time Slicing以后一张卡被映射成4个资源但系统层面并没有真的把显存切成4份4个Pod可以同时吃到整张卡的显存。如果其中一个Pod申请了40GB另一个Pod也申请40GB而卡只有80GB显存它们同时跑起来就可能双双OOM但Kubernetes还认为资源是充足的。排查时不能只看调度器必须在宿主机上执行nvidia-smi查看进程占用。生产环境如果有隔离需求不要指望Time Slicing直接走MIG或者给Pod设置好明确的环境变量比如CUDA_VISIBLE_DEVICES和NVIDIA_VISIBLE_DEVICES来管控可见卡数。5.3 优先级抢占引发的“无限重启”集群里开了抢占策略后高优任务会把低优任务挤掉。看起来很正常但如果你没控制好抢占次数低优任务可能刚启动几秒就被打断反复重试半天跑不出一个结果。排查时看工作负载的status.requeueCount如果数值一路飙升就要考虑收紧调度策略。我的建议是训练任务能不抢占就不抢占把抢占留给推理和短时任务如果一个低优任务被抢占3次还没跑完就退回队列尾部防止集群里陷入“永无宁日”的调度风暴。5.4 拓扑感知失效训练性能骤降大模型训练最怕的调度结果是8卡任务被拆到两台上不同交换机下的机器上虽然也能跑但通信效率直接掉一半以上。这里要强调单纯看资源数量不算真正的调度还得看节点之间的拓扑关系。排查时可以按下面的表来定位问题现象可能原因排查命令/工具解决建议任务卡在Pendingdevice-plugin未上报GPU资源kubectl describe node检查device-plugin日志、驱动版本GPU显示有资源但无法调度节点标签与队列不匹配kubectl get nodes --show-labels对齐LabelSelectorTime Slicing后任务OOM显存非隔离导致超额nvidia-smi查看进程显存改用MIG或控制单Pod显存上限低优任务反复重启抢占策略不合理kubectl get workload限制抢占次数、降级抢占优先级多卡训练性能差拓扑感知未生效nvidia-smi topo -m给节点打rack/switch拓扑标签还有一个经验是学会把nvidia-smi topo -m的输出提前录进CMDB。调度前先根据拓扑信息给节点打上标签比如“rack-a-switch-1”然后在调度配置里加nodeAffinity约束让同一个训练任务的Pod尽量落到同一标签节点下。不要等到性能掉下来了再去查网络那时候定位成本远高于提前规划。6. 后续影响一个“算力操作系统”时代正在到来这笔并购真正的影响面不只在英伟达一家。云厂商、做AI Infra的创业公司、还有那些想切入AI计算的硬件厂商都在盯着这件事。对云厂商来说英伟达如果掌握调度平台就能把“GPU利用率”做到极致那云厂商自己给客户分的GPU池就得在开放度和绑定度之间重新找平衡。对AI创业公司而言以后申请算力可能不再单纯是“开几台机器”而是“在英伟达定义的队列里买配额”。对AMD和国内芯片厂商来说挑战更直接它们本来希望靠开源调度工具让客户平滑切换芯片现在英伟达把调度层也收编了迁移成本只会更高。所以我看这件事的实质就是英伟达正在构建一个从芯片、服务器、集群调度、推理服务到云入口的完整“算力操作系统”。黄仁勋怕的不是某一个具体的竞争对手而是怕整个AI基础设施层失去控制权。买“平台”这场仗打得其实比卖卡本身更值钱。而我个人的体会是作为AI基础设施工程师现在应该开始认真地把Kubernetes的调度能力、GPU共享机制、配额策略这些知识补起来——未来几年无论你用的是商业平台还是开源组件这些底层的资源调度思维都是躲不开的核心技能。最后再分享一个小技巧在决定为团队引入任何调度平台之前先把当前集群每张GPU的利用率、每类任务的排队时长、每次抢卡冲突的成本记录成表格用数据说话这件事比任何技术选型都更关键。
返回列表