有个做模型微调的朋友抱怨,项目卡住不是因为算法,也不是因为数据,而是GPU排队。申请已经批了,机器却要等两周。他手里那批标注数据只能搁着,团队几个人轮流刷进度,像在等一台迟迟不来的公交车。
这件事让我意识到,很多人讨论算力时,脑子里浮现的是硬件:加速卡、机柜、集群规模。但真正影响项目节奏的,往往不是“有没有”,而是“什么时候能用、能用多久、用得多充分”。算力是一种带时间属性的资源,这点常被忽略。
排队本身就是成本
把训练任务提交到共享集群,表面上是技术流程,实际上是一次资源分配。任务多了,就会出现等待;优先级不同,等待时间也不同。等待期间,工程师并没有闲着,他们反复检查代码、调整参数,看似在优化,其实是在消磨。
更隐蔽的问题是,等待会改变决策。一个团队如果预判机器要等很久,可能提前提交更大规模的任务,先把资源占住再说。这种“占坑”心态一多,集群反而更紧张。资源越稀缺,越容易被过度申请,这是调度里常见的恶性循环。
所以,排队时间不该只被当成运维指标。它直接关系到研发节奏,也关系到团队对基础设施的信任。一个总是要等两周的平台,会让做实验的人下意识地减少尝试次数。而尝试次数,恰恰是模型迭代最依赖的东西。
利用率是另一面镜子
机器等任务,和任务等机器,经常同时存在。有些训练任务在跑,但加速卡的实际负载并不高;有些任务因为数据读取慢,长时间挂在等待I/O上。从外部看,集群很忙;从内部看,真正用于计算的时间未必多。
这也是为什么单看“扩容”容易失效。如果调度粗糙、任务粒度不合理、数据管道跟不上,增加设备只是把闲置从一个地方挪到另一个地方。算力不是买回来就自动生效的,它需要被组织、被分配、被度量。
我不太喜欢把所有问题都归因于“缺算力”。有时候,缺的是把已有资源看清楚的能力:哪些任务可以中断,哪些必须连续跑,哪些实验其实用小规模就能验证。这些判断做在前面,比事后加机器更有价值。
把算力当成时间预算
换个角度想,与其问“我们有多少算力”,不如问“我们每周有多少可用的计算时间,打算怎么花”。这个问法会逼出一些具体决定:哪个项目值得占用连续窗口,哪些探索性实验放到低峰时段,哪些评估任务可以批量合并。
有团队开始把训练任务分层,短任务走快速通道,长任务提前预约窗口。听起来像行政流程,但它减少的是沟通成本和临时插队。规则不一定完美,但比所有人都在群里喊“机器空了吗”要清楚。
当然,预约机制也有边界。研究型工作很难提前精确规划,过度流程化会把灵活性压没。所以更现实的做法是保留一部分机动资源,同时把可预测的常规任务纳入计划。算力的管理,本质上是在确定性和灵活性之间找平衡。
被忽略的小事
回到那位朋友的项目。后来他们没有等大集群,而是把微调任务拆小,先在少量设备上跑通流程,确认数据和评估链路没问题,再申请完整窗口。等机器到位时,试错已经完成大半。排队的两周没有被浪费,反而变成了准备期。
这未必是普遍方案,但它说明一件事:算力的效率不只由硬件决定,也由使用它的方式决定。什么时候申请、任务怎么切分、结果如何复用,这些看起来琐碎的动作,累加起来就是项目的时间账本。
讨论AI基础设施时,我们容易盯着规模和峰值,却很少问一句:这些计算时间,最后有没有被用在真正需要的地方。这个问题没有漂亮答案,但值得每个做项目的人偶尔停下来想一想。