2025年3月9日,云计算ETF易方达单日上涨3.04%,盘面上一水的算力标的领涨。很多人看到这类新闻第一反应是“AI行情又回来了”,但作为一个常年泡在GPU集群、处理过算力积压、也亲手搭过异构调度平台的云计算运维老兵,我看到的其实是另一件事:算力产业链正在从概念叙事切换到真实需求释放。
这篇文章不聊代码推荐,更不做行情预测。我想顺着这条新闻,把算力产业为什么会在这个时间点被资金关注、算力需求增长后云计算运维到底在忙什么、企业级异构算力调度平台应该怎么搭、以及混合精度训练里那些看着简单实际全是坑的细节,一次讲清楚。适合正在做云计算运维、AI基础设施,或者准备上大模型训练任务的朋友参考。不管你手里是几块卡还是一个机房,这套思路都能用上。
1. 一条ETF涨跌背后,算力产业链到底发生了什么
1.1 算力供给的三层结构
先说清楚新闻里反复出现的“算力”到底指什么。按我平时跟业务方对齐的口径,算力供给围绕三层结构展开:最底层是芯片和硬件层,GPU、HBM高带宽显存、NVLink互联、光模块和高速交换机都算这层;中间是云平台与基础设施层,像云计算厂商的数据中心、私有云管平台、算力调度系统,负责把裸金属GPU包装成可被租用或调度的资源;最上层是算法与应用层,大模型训练、推理服务、科学计算、渲染,这些真正吃掉算力的任务。
这三层是典型的“卖水人”关系。应用层的模型公司要训练千亿参数模型,就必须向中间层买云资源;中间层要扩容,就必须向底层买GPU服务器和网络设备。所以ETF成分股里经常有三类公司混在一起:做芯片的、做服务器和数据中心的、做云服务和SaaS的。它们只要财报里出现一个共同信号——资本开支大幅增长——整个产业链就会出现连锁反应。
3月9日云计算ETF上涨3.04%这件事,表面看就是资金面情绪回暖,往深了看其实是市场对算力需求持续性的又一次投票。关键是“领涨”集中在算力龙头,说明买的不再是普涨,而是产业链里业绩确定性最强的那一档。这类信号对做技术的人也有一个参考价值:当上游订单暴增,下游运维团队大概率要在半年到一年内接手一大堆新集群,早做准备总没错。
1.2 “算力龙头”的涨跌信号怎么读
“算力龙头”没有官方定义,大家一般默认指的是国产AI芯片设计公司、AI服务器厂商、算力集群集成商这类直接受益标的。我在实际观察里更关注一个硬指标:云厂商的季度资本开支。这玩意儿本质上就是算力产业的总投资额,比股价更诚实。过去两个季度几乎所有头部云厂商都在明确表示要增加AI相关基础设施建设,这些资本开支最终会转化成机房里的GPU、网络和存储设备,然后由我们这种运维的人接手。
还有一条线索是国产替代。由于供应侧的原因,国内很多算力中心正在批量采购国产AI芯片。国产芯片和英伟达卡混布在一个集群里,是过去一年我看到的最典型的机房形态变化。这直接催生了“异构算力调度”的需求——你不能让业务方自己挑卡,一个调度平台必须让国产卡和英伟达卡在同一套系统里被透明调度。
所以这条ETF新闻背后真正的产业事件是:需求侧的大模型研发和推理服务持续烧钱,供给侧的投资计划和国产替代同步加码。两股力量叠加,算力产业链的景气度自然就上来了。但对我们技术人来说,股价涨跌只是一天的情绪,真正决定职业天花板的,是你愿不愿意去把那些新到货的算力变成可用的训练资源。
2. 算力需求暴增后,云计算运维的工作台长什么样
2.1 GPU服务器运维和传统运维差在哪
“云计算运维工程师”这个关键词最近搜索量涨得很快。很多人好奇,传统服务器运维转做GPU算力运维,到底有什么门槛。说实话,门槛不在Linux命令,而在思维方式。
传统CPU服务器运维看的是CPU使用率、内存占用、磁盘IO和网络带宽。GPU服务器运维多了一个核心维度:显存。显存就像GPU的“内存”,训练任务动辄把80GB显存吃光,一旦泄漏或者碎片化,任务直接OOM退出。除了显存,还要盯SM占用率、GPU功耗、温度、NVLink带宽、HBM显存带宽。一台8卡A100服务器价值一两百万,宕机损耗比传统服务器高一个数量级,故障定位速度直接决定成本。
我第一次从CPU运维转GPU运维时,最不适应的就是“重启大法”不好使了。传统服务重启一下可能就好了,但训练任务跑了两天,因为一个驱动小版本不匹配导致显存报错,重启之后checkpoint没保存,两天算力白烧。后来我养成一个毛病:凡是碰到GPU相关的新环境,第一件事就是核对驱动版本、CUDA版本、PyTorch或框架版本三件套是否匹配,再跑一个小的matmul验证,确认没问题才放业务方的大任务上去。
日常监控工具上我建议直接上组合拳:命令行用nvidia-smi和nvtop看实时状态,时间序列监控用DCGM配合Prometheus和Grafana,这样既能看单卡瞬时指标,也能看整个集群的显存分配趋势和利用率热力图。不要等到业务方来投诉“卡好慢”才去看监控,要提前设定GPU利用率低于某个阈值就告警,通常是利用率连续15分钟低于30%就要查原因。
2.2 从“管机器”到“管算力”的一次转变
真正让我觉得运维变了味的,是“管机器”变成“管算力”这个过程。以前运维管的是单台服务器的健康状态:宕机了重启、磁盘满了清理、网络断了排查。现在算力中心的核心资源是GPU,业务方关心的不是一台机器活没活着,而是“我要的8张卡什么时候能调度给我”和“我的任务昨天中断后有没有自动接上”。
这就把运维推向了调度系统。云厂商的解决方案是把GPU放进容器平台,通过Kubernetes的资源调度能力做分配;科研院所和传统企业则更多用Slurm集群,按任务队列申请节点。运维人员的工作重心从“修机器”变成“配策略”:设置不同团队的GPU配额、调整任务优先级、处理任务排队积压、管理多租户间的安全隔离。
还有一个很现实的场景:算力中心怎么挣钱。现在的商业模式无非三种,按时出租GPU实例、按token量提供大模型推理API、还有把空闲时段的算力接入分布式算力网络卖给有需求的用户。后面两种都依赖一个稳定的调度系统来保证资源不闲置。我见过不少算力中心买了大量GPU,结果利用率长期只有20%不到,就是吃了“只管买卡、不管调度”的亏。所以现在企业招云计算运维,已经不再问“会不会配nginx”,而是问“有没有跑过千卡任务,遇到资源碎片化怎么处理”。
3. 从零到一:企业级异构算力调度平台搭建拆解
3.1 为什么需要“异构调度”而不是“继续加机器”
很多非技术朋友可能不理解:算力不够,再加机器不就行了,为什么还要专门搭一个调度平台?我举个例子你就明白了。假设公司采购了8台A100服务器和8台国产加速卡服务器,英伟达卡跑分布式训练,国产卡跑推理和微调。如果没有统一调度,业务A在英伟达卡上资源不够用,业务B在国产卡上闲得发慌,两边却无法互相借调,因为任务提交方式不一样、队列不互通、权限也不统一。浪费的算力,折算成钱,就是每天都在烧钱。
异构调度平台存在的意义就是把这些五花八门的底层资源“池化”。对上,业务方看到的是一个统一的算力池,提交任务时只需要声明要几张卡、多大显存、什么架构;对下,平台负责把任务调度到最合适的集群上,解决跨集群的资源互借、统一配额、统一监控和任务排队。这也是“算力约束下提升大语言模型能力的资源配置建模”这个搜索热词背后的核心命题:你手里的卡是固定的,怎么优化调度策略才能让模型训练吞吐最大化。
最直观的收益就三个:GPU利用率从20-40%提到60-80%、业务方申请资源从走工单变成自助提交、训练任务中断后能自动在其他可用节点上续跑。光是最后一条,就能帮公司省下大量因单点故障导致的重训成本。
3.2 平台选型:K8s、Slurm还是开源调度框架
做异构调度选型时,很多人第一反应是“直接用Kubernetes不就得了”。K8s确实能管容器化GPU资源,但它不是为AI训练设计的,调度器不知道什么任务能卡间通信、什么任务适合整机调度、什么任务需要抢占排队。Slurm恰好擅长排队和调度,但它的容器支持和云原生生态都比较弱,在多租户管理上也麻烦。
我更推荐的做法是:以K8s为基础,在上面叠加一个AI调度框架。目前市场上能参考的开源项目里,OpenPAL是很有代表性的一种方案,它面向AI生命周期管理,能够统一管K8s集群和Slurm集群两种底层,做到跨集群的算力调度和弹性配额。简单说,OpenPAL就像“算力界的中介”,它本身不生产算力,只负责把不同集群的空闲资源高效分配出去。
选型时还有一个容易被忽略的点:是否支持“弹性配额”。传统固定配额是“给你32张卡就是32张,别人闲着你也不能用”。弹性配额允许团队在别人不用时临时借用空闲算力,优先级高的任务还可以抢占。这个功能在算力紧张的大模型训练场景里特别重要,直接决定你集群整体利用率能不能拉上去。
3.3 一个最小可用的调度平台部署路线
我按自己踩过坑的经验,给一个从零到一搭建异构调度平台的最小可行路线。假设你的环境里已经有一个K8s集群和一个Slurm集群,目标是用OpenPAL把它们纳管起来。
第一步是部署控制面。控制面需要有数据库和缓存,我一般把MySQL和Redis用容器部署在独立的控制节点上,配置固定IP。OpenPAL的服务端运行后,会提供一个REST API和前端页面,用于查看集群状态、管理配额和提交任务。
第二步是接入子集群。这一步的坑最多,K8s集群要准备kubeconfig文件,配置好RBAC权限,只暴露OpenPAL需要的访问权限;Slurm集群要有能免密登录管理节点的账号,再配置数据同步和作业提交的通道。我建议先在测试集群上把两个底层平台各接一个,验证控制面能正常看到GPU资源,再全量接入,避免配置错了影响生产业务。
第三步是配置Quota策略。不要一上来就精细到每个团队,先把大原则定下来:训练任务和推理任务的比例、紧急任务能否抢占、空闲时间段的弹性借用规则。配额的单位建议直接用“卡时数”,就是GPU卡数乘以使用时长,方便财务核算成本。
第四步是业务方提交任务。OpenPAL的任务模板可以直接声明所需的GPU类型、数量、镜像地址和启动命令。业务方不再需要关心任务落在哪个集群,平台会自动选择满足显存和互联需求的资源。对用户来说,这就是一个自助服务门户。
搭完之后一定要做续航性验证:找一个正在训练的任务,手动把它所在节点断电,看看任务是否会自动迁移到其他节点并从最近的checkpoint续跑。这个验证不过关,平台就等于白搭。
4. 混合精度:int8/fp16/fp32/fp64怎么选,算力需求差多少
4.1 先把算力需求算明白
很多团队在采购算力或调度资源时,最大的问题不是没有GPU,而是不知道自己需要多少GPU。我习惯用一套简单的估算公式来算:
训练一个大模型的浮点运算量约等于 6 × 参数量 × 训练token数。这6倍来自前向传播一次、反向传播两次(算梯度和更新权重差不多各一次)。
举个例子,预训练一个70亿参数的模型,数据量1万亿token,总计算量就是 6 × 7×10^9 × 1×10^12 ≈ 4.2×10^22 FLOPs。单张A100在FP16下的理论算力是312 TFLOPS,也就是每秒3.12×10^14次浮点运算。即便假设实际训练效率能到50%(这已经是非常理想的情况了),单卡跑完这个训练也需要4.2×10^22除以1.56×10^14,差不多2.7亿秒,将近8年半。所以必须上并行训练,集群规模直接决定训练时间。
推理侧的算力需求就更直观了。一个7B模型用FP16权重裸跑,光权重就要占14GB显存,再算上KV cache和中间激活值,单卡80GB的A100勉强跑得动。如果用INT8量化,权重降到7GB左右,推理吞吐和并发都能显著提升。这也是为什么大模型推理服务普遍要做量化的原因。
4.2 训练场景精度选择:FP32、FP16还是BF16
训练场景里,FP64基本用不上,那是科学计算和数值模拟的领域。日常大模型训练的主角是FP32、FP16和BF16。
FP32是单精度,数值稳定,但显存占用大、算力密度低,全用FP32训练大模型纯属浪费硬件。FP16是半精度,算力翻倍,显存减半,但动态范围小,遇到梯度值太小或loss太低容易出现下溢出。所以FP16训练必须配合loss scaling,把梯度放大到安全范围再缩放回去。BF16是和FP16同占两个字节、但保留更多指数位的一种格式,动态范围跟FP32接近,训练稳定性更好,是当前大模型训练的主流选择。
很多新手一上来就用FP16跑训练,跑着跑着损失变成NaN,第一反应是调学习率。其实很可能是精度下溢。我自己的经验是:除非代码里已经处理好loss scaler,否则新任务优先用BF16起步,遇到卡不支持BF16再退回FP16加scaler。A100、H100、新一代国产AI芯片基本都原生支持BF16,没必要跟精度动态范围硬磕。
再提一下TF32。这是A100之后引入的格式,输入输出是FP32的表示范围,但内部计算精度截断,性能接近FP16。适合卷积和Transformer里的矩阵乘,用来做混合精度训练过渡期很稳,不需要额外改代码。
4.3 推理场景量化:INT8和INT4的实战感受
训练用FP16/BF16,推理则更激进。INT8把权重压缩到单字节,显存占用直接减半,推理吞吐能提升2到3倍。INT4更极端,单权重只有4比特,显存可以压到四分之一,但精度损失明显,需要配合更仔细的校准和后处理。
量化落地时我建议不要直接上INT4。先用INT8做PTQ(训练后量化),拿一小批有代表性的数据做校准集,观察量化前后的困惑度或任务指标,如果下降在可接受范围内,再决定是否进一步优化到INT4。传统经验是:7B左右的模型用INT8量化后效果损失很小,70B以上大模型量化收益更明显,反而小模型(1B以下)量化后效果衰减很快,不建议强行压。
还有一个细节:现在很多推理框架支持混合量化,也就是attention部分保留更高精度、FFN层做INT8量化。这种方案比全局INT8盲量要稳,工程上也不复杂。如果你正在搭推理服务,优先考虑支持这种细粒度量化方案的工具,能省不少返工时间。
5. 实战踩坑:算力集群运维的常见问题与排查技巧
5.1 GPU利用率上不去的真正原因
我接到的算力集群求助单里,出现频率最高的问题是:“GPU利用率只有20%,怎么办?”很多人下意识认为是GPU不够好,其实大部分情况根本不是算力瓶颈,而是数据喂不上来。
GPU利用率上不去的核心原因是“等数据”。训练循环里GPU计算完一小批数据后,必须等CPU从磁盘读图、做预处理、再打包发到显存。如果Dataloader的num_workers设得太少,CPU处理速度跟不上GPU消费速度,GPU就只能空转。解决方法是把num_workers调大、开启prefetch_factor预取、数据打成分片用TFRecord或WebDataset格式读取,以及确保数据在本地SSD而不是网络盘上。
第二个常见原因是小算子太多。模型里如果有大量细碎的矩阵乘法,每次计算量太小,GPU调度开销占比就大,SM利用率自然上不去。这种时候优先考虑算子融合,比如把连续的线性层和激活函数合并到一个kernel里。
第三个原因就比较隐蔽了:梯度同步太频繁。分布式训练里每个step都要做一次全局同步,如果网络带宽不够,通信时间甚至超过计算时间。这种情况要么加大batch size减少同步次数,要么检查多机之间的网卡速率和协议配置,确保跑在RDMA或高速IB网络上而不是普通TCP。
我的排查顺序非常固定:先看dmon日志确认有没有SM idle的卡,再看Dataloader耗时和通信耗时占比,最后才考虑改模型。千万别一上来就动代码里的并行策略,往往越改越乱。
5.2 显存不够不只是OOM
显存溢出是训练任务崩溃的头号杀手。但“OOM”这个报错背后至少有三种完全不同的问题。
第一种是显存真的不够,模型+激活值+梯度+优化器状态放不下一张卡。这时候先别急着加卡,试试梯度累积(gradient accumulation),相当于用小batch凑出大batch的梯度效果;再开启混合精度,把FP32的显存占用砍半;还不行就考虑张量并行或序列并行,把单卡显存压力分散开。
第二种是显存碎片化。训练过程中动态分配和释放显存,时间长会产生大量碎片,新任务申请一大块连续显存时失败。这种情况重启进程不一定能根除,更有效的办法是调整显存分配策略,比如PyTorch的PYTORCH_CUDA_ALLOC_CONF设为max_split_size_mb,防止小块内存过度切分。
第三种是KV cache膨胀。推理或全参微调时,随着序列长度变长,KV cache占用的显存是线性增长的,长文本场景下它可能比权重本身还大。这时候优先限制最大序列长度或做PagedAttention式的缓存管理,而不是盲目扩卡。
5.3 排队、抢占和断点续训的坑
算力调度的坑同样不少。最常见的是任务一直Pending但不报错。我遇到过几次,全是配额调度器在等“资源预留”释放,但预留资源的任务实际上已经死了只是状态没更新。处理办法是定期清理僵尸任务,并在调度平台上开启资源超时回收。
还有一个很现实的场景是断点续训。大模型训练动辄跑几周,任何一个单点故障都会让任务中断。我在OpenPAL这类平台上会特别强调“周期性保存checkpoint”,并且checkpoint里不仅要存模型权重,还要存优化器状态、学习率调度器状态和随机数状态,否则续训时优化器的动量全部丢失,效果会退化。更专业一点的做法是异步保存:保存到当前节点本地盘的同时再同步一份到分布式存储,防止节点整体宕机丢掉最近几小时的进度。
关于抢占策略我也想说一句真心话:不要无条件允许高优任务抢占低优任务。我曾在一个集群上让一个紧急推理任务抢占训练任务,结果每次训练任务都要中断重启,checkpoint保存频率不够,几天的进度反复回退,整体效率反而更低。现在我的习惯是:紧急任务可以抢占,但训练任务必须提前保存checkpoint,并且抢占次数设置上限。调度策略的设计,永远不能脱离业务的实际跑法。
6. 写在最后:算力这个赛道,真正值钱的是什么
回到开头那条ETF新闻。云计算ETF单日涨3.04%,对二级市场来说只是一个普通交易日的小幅波动,但算力产业的真实景气度,体现在数据中心的上架率、GPU集群的平均利用率和云厂商资本开支明细这些枯燥数字里。
我个人这两年最大的体会是:算力本质上是一门“高投入、高技术门槛、高运维复杂度”的苦生意。真正值钱的从来不是机房里堆了多少张卡,而是你能不能把每张卡喂饱、能不能在算力紧张时让最高优的任务跑起来、能不能在硬件损坏时不让训练白烧。芯片会迭代,单卡算力会翻倍,但调度、运维和精度控制的工程能力,才是长在团队身上带不走的东西。
如果你正打算往云计算运维或者AI基础设施的方向转型,我的建议很直接:不要只盯着NVIDIA官网看新卡参数,去装一个监控工具看看你自己电脑或租来的实例上GPU利用率到底多少,试着把一个训练任务调快两倍,再试着把一台GPU服务器故障恢复时间压缩到半小时以内。这些一个小目标一个小目标做下来,比追着ETF的涨跌更有确定性。