凌晨一点的机房,风扇声比白天清楚。屏幕上的任务队列不长,几张加速卡却亮着空转的灯。值班的人说,怕的不是任务多,而是任务卡在等待:数据没到位、环境没配好、上一个作业还没释放显存。
这类场景常被“算力”两个字盖过去。我们习惯问一套系统能提供多少峰值性能,却很少问,它在一天里真正被用起来的时间有多少。峰值可以买,利用率却要一点点磨。
先看账单,还是先看等待
自建机房的账不难算:设备折旧、电费、散热、运维,加起来是一条缓慢上升的线。租用云上资源的账则直接:按量计费,停掉就少花钱。但两张账单都漏掉了一部分成本:工程师等环境的时间,任务排队的时间,以及为了跑通一个流程反复试错的夜晚。
我见过一种做法,先把所有任务塞进同一套集群,再靠人工盯着。表面上看资源集中,实际却容易互相挤占。另一些团队会把长任务和短任务分开,把调试和正式运行分开,资源不一定增加,等待却少了。差别不在设备型号,而在调度习惯。
被忽略的那一层:调度
调度听起来像后台细节,实际决定了资源能不能流动。一个小团队如果只有少量加速卡,一个直接的办法是排队,但排队规则要写清楚:谁先占、占多久、超时怎么办。否则,先到的任务会长期占住资源,后来的任务只能等。
再往上一层,是数据与环境的准备。很多等待并非来自设备不够,而是镜像不对、依赖冲突、数据没挂载。把这些前置工作做成可复用的模板,常常能减少空转;添机器不一定解决等待。这里的判断很朴素:先减少空转,再谈扩容。
云端与本地,不是一道单选题
云端适合波动明显的任务,本地适合长期稳定、对数据位置敏感的工作。现实里常见的是混合:平时用本地资源跑常规任务,遇到短时高峰再向外借资源。问题在于,借来的资源也要有人管,接口、权限、计费方式都要提前理清,否则高峰过后,账单和闲置会一起留下。
能耗也是同一件事的另一面。设备跑满时耗电,空转时也耗电。把任务集中到较少的时间窗口,或者让不紧急的任务错峰运行,既是对成本的考虑,也是对设备寿命的照顾。这些动作不显眼,却贴近日常。
算力之外,还是算力之内
回到那个凌晨的机房。真正需要解决的,可能不是再买几张卡,而是让队列可见、让失败可查、让资源释放得干净。算力是一种基础能力,但它的价值不在数字本身,而在被稳定调用的时候。把利用率、等待时间、失败重试这些看似琐碎的指标记录下来,团队对资源的感受会变得具体。
下一步要做的,也许只是把明天的任务提前排好,把不再使用的环境关掉。听起来不够宏大,却能让那些没跑满的夜晚少一点。