“像用水电一样使用算力”是算力网络最常见的比喻,但这个比喻从第一句就不成立:水是均质的,算力不是。同是 8 卡机器,互联拓扑、驱动版本、散热策略、甚至固件版本都不同,同一个任务跑出来的时间可能差一倍。
为什么算力不能像水电一样调度?
因为算力的”规格”是隐性的。一度电就是一小时一千瓦,条件清楚;一张 GPU 卡的可用算力却取决于卡间互联带宽、显存带宽、是否支持特定算子、驱动与框架版本是否匹配。这些信息不体现在报价单上,却直接决定任务能不能跑、跑多快。
调度器如果不知道这些差异,所谓池化就只是把一堆孤岛连成更大的孤岛——资源看起来统一了,实际仍然要靠人工指派出哪台机器。
四件必须解决的事是什么?
异构、隔断、计费、信任,缺一件都落不了地。
| 环节 | 具体问题 | 常见做法 |
|---|---|---|
| 异构 | 卡型、拓扑、驱动不一致,任务无法通用 | 建立算力画像:按实测性能而非型号标注分档 |
| 隔断 | 多租户共用硬件,显存与缓存互相污染 | MIG 切分、cgroup 限制、驱动层隔离策略 |
| 计费 | 按卡时计费与实际占用严重偏离 | 按显存占用 × 时长 + 算力加权计价 |
| 信任 | 跨机构调度时,数据与模型谁负责 | 任务沙箱 + 审计日志 + 数据不出域的约定 |
异构问题怎么量化?
不要用型号描述算力,要用实测。同一批任务在同一型号的卡上跑,性能也可能因为散热和功耗墙差 15% 以上。可行做法是建一张基准表:对每类机器跑固定的一组标准任务(矩阵乘、典型模型推理、数据加载吞吐),记录实测值,调度时按实测值分配,而不是按型号猜。
这张表还有一个副产品:当机器性能衰减(风扇积灰、硅脂老化)时,实测值会下降,能提前发现而不是等用户投诉。
隔断为什么比想象中难?
因为共享发生在多个层面。显存切分解决了”装不下”的问题,但没解决”互相影响”的问题:一个任务显存越界可能拖垮同卡其他任务;缓存争抢会让延迟抖动;功耗墙是整卡共享的,一个任务跑满会让另一个降频。
所以隔离要分层做:硬件层用 MIG 做物理切分;系统层用 cgroup 限制 CPU 与内存;驱动层开启错误隔离,让单个进程的故障不扩散到整卡。只做其中一层,故障仍会穿透。
计费为什么容易失真?
按整卡时计费是最简单也最不公平的方式:一个只用 8GB 显存的推理服务,和一个吃满 80GB 的训练任务付同样的钱,前者必然被浪费,后者必然被挤占。更合理的计价是显存占用 × 时长再乘以算力权重,虽然复杂,但能真实反映资源消耗,也能引导用户优化。
信任问题在跨机构场景下最尖锐,怎么破?
跨机构调度时,算力提供方担心数据泄露,需求方担心模型被复制。可行的技术路径是任务沙箱化:代码在隔离环境执行,数据只读挂载且不出域,输出仅回传结果。配合审计日志记录每一次访问,双方才有合作基础。这不是纯技术问题,合同条款要同步写清楚。
自建算力网络,第一步该做什么?
先做画像,不要先买调度软件。把现有全部机器的实测性能、互联拓扑、驱动版本、故障率摸清楚,形成一张可查询的表。多数单位做完这一步就发现:真正需要扩容的只有少数几类任务,盲目买卡的钱可以省下来。
发表回复