第一百一十三章 沈默
三月中旬,出行限制松动了一点。
沈默来上海的那天下午,程一帆去接的,两个人先去公司,然后去见陆衍。陆衍在 B208 等他们,桌上摆了三杯茶,还有程一帆提前打印出来的那份负载数据报告。
沈默进来,比陆衍记忆里视频里看到的还要安静——不是内向的那种安静,是不浪费话的那种。他点了一下头,坐下,先拿起那份报告翻了几页。
翻到第三页,他停了一下,「这个 GPU 利用率,」他说,「峰值是百分之八十七?」
「是,」程一帆说,「那天是个别情况,平均是七十出头。」
沈默没有说话,继续往下看。翻完最后一页,他把报告放下,「我可以看一下你们的架构图吗?是怎么部署的。」
程一帆在白板上把青舟现有的部署方式画了出来:公有云的计算实例,模型权重放在对象存储里,推理请求进来之后,从存储拉权重,加载进 GPU,跑推理,结果返回给调用方。权重文件大的有几十个 GB,每次加载都要走网络,延迟的主要来源就在这里。
沈默听他说完,在白板旁边站了大约十五秒,「你们是按训练的方式搭的推理服务,」他说,「这两件事不一样。」
「怎么不一样?」陆衍问。
「训练的时候,你可以容忍把权重从存储里拉进来,因为你一跑就是几个小时,前面那几秒的加载时间可以忽略,」沈默说,「但推理的时候,每个请求都是独立的,如果每次都要重新拉权重,那个延迟就摊到每个请求上了,代价不一样。」
程一帆有些尴尬地抬了一下眉,「我知道这个,」他说,「所以我们做了缓存,把高频使用的模型权重放在 GPU 内存里常驻。」
「这个思路对,」沈默说,「但你们的模型有多少个?」

「企业客户的定制模型加上基础模型,一共十三个,」程一帆说。
「十三个,全部常驻 GPU 内存,」沈默看着白板,「但你们用的是公有云的什么实例?」
程一帆报了型号,是一个主流的推理用 GPU 实例,8 卡,每张卡 24GB 显存。
沈默做了一个心算,「192GB 显存,十三个模型,每个模型平均放进去大概十五个 GB,这已经超出了,」他说,「所以你们其实是在做热换,访问低频的模型时还是要从存储拉,只是不是每次都拉,但会间歇性地拉,这就是你们看到的延迟毛刺的来源。」
「是,」程一帆说,「就是这个。」
「那个毛刺出现的时候,」沈默问,「是哪一类请求?」
「一部分是企业定制模型的请求,那些模型不是所有客户每天都用,有时候好几天没人用,然后突然来了一批,」程一帆说。
沈默点了点头,在白板上写了几个字:「冷启动」。然后转过来看陆衍,「你们现在的核心矛盾,」他说,「不是 GPU 算力不够,而是存储和内存的架构决定了高频请求之间有不可预测的延迟抖动。公有云上买更多 GPU,解决不了这个问题,因为调度层和存储层没有改。」
陆衍把这句话记在本子上,「如果要改这两层,」他说,「你的判断是怎么改?」
「自建,」沈默说,「不只是推理节点,连调度层和热存储都要自建。」
「热存储?」
「就是常驻在 SSD 或者 NVMe 里的模型仓库,访问速度比对象存储快一到两个数量级,可以把冷启动时间从几秒压到几百毫秒,」沈默说,「公有云给不了你这个控制权,因为他们的存储层是给所有人共享的,你没有办法保证那个速度。」

沈默那天下午在公司待了三个小时,走的时候说「我回去整一份方案出来,这周五给你」。
周五下午,方案发过来了,一共十一页,没有配图,全是文字和表格。
陆衍把十一页从头看到尾,看完之后把程一帆叫过来一起看了一遍。
方案的核心是两件事:第一,自建推理集群,配置是三台推理节点,每台 4 卡,配 NVMe 存储和万兆内网;第二,重写调度层,实现模型热换的智能预测,在负载低谷期预热下一个时段可能被调用的模型,消灭冷启动。
费用估算在最后一页:第一期建设,硬件采购加机房托管,大约八百万到一千万,运维人员配置建议三个人,按月支出大概十五万左右。
程一帆看完说了第一句话:「这个数字比我预期的低。」
「因为他没有选最贵的方案,」陆衍说,「他用的是国产的推理加速卡,不是主流的 A100,性能有差距但价格差一半,针对我们的负载特征,他判断够用。」
「你怎么知道他这个判断对?」
「不知道,」陆衍说,「但他在方案里解释了为什么他这么判断,逻辑我看得懂,如果他说错了,我们可以追问他。」
程一帆又看了一遍那个硬件选型部分,「他选的那款推理卡,我查了一下,是去年出的,有几家用过,反馈还行,不算冒险。」
「好,」陆衍说,「你把方案给所有人看一下,让他们明天开个视频会,沈默来讲,大家问问题。」
第二天的视频会,沈默来讲,参加的是程一帆、林翔廷、乔木,还有陆衍。

沈默把方案说了一遍,讲完之后,乔木第一个开口:「如果我们做了这套自建集群,现有的客户能感受到什么变化?」
「平均延迟会降一到两秒,毛刺会基本消失,」沈默说,「对于那种定制模型,冷启动时间会从三到五秒压到五百毫秒以内。」
「这些数字,客户侧能观测到吗?」
「API 的时延统计,客户侧可以看到,」沈默说,「如果你们愿意发一份服务提升的通知出去,可以把这个当成承诺。」
林翔廷问了费用和时间线,沈默说硬件采购最快六到八周,机房托管选址一两周,总安装调试大约三个月,六月底能跑起来一部分,第三季度末能达到完整产能。
「三季度末,」陆衍问,「如果需求继续增长,这套集群能撑多久?」
「按你们现在的增长速度,」沈默想了一下,「两年,」他说,「但如果增长速度超过现在的两倍,一年半。」
「两年,」陆衍重复了一下,然后没有继续往下说。
会议结束之后,程一帆给陆衍发消息:「你同意做了吗?」
「同意,」陆衍说,「但不只是这套集群。」
「什么意思?」
「沈默那份方案是第一期,解决的是现在的问题,」陆衍说,「我要他来做的不只是这一期,是把基础设施这条线建起来,这条线往后会越走越深。」

程一帆沉默了一会儿,「你要他长期留下来?」
「如果他愿意,」陆衍说,「他有没有说过对长期的打算?」
「没有,他不太说这类话,」程一帆说,「但你可以直接问他。」
陆衍给沈默打了电话,说了方案的决定,然后问了那个问题:「你有没有兴趣做长期的事,不只是这一期集群?」
沈默沉默了三秒,「你说的「长期」是什么意思?」
「不知道,」陆衍说,「但这个方向会走很远,我需要一个真正懂基础设施的人一起走,不是做完一件事就结束的顾问关系。」
「你说不知道,」沈默说,「但你有一个大概的方向?」
「有,」陆衍说,「但现在说还太早,会吓到人。」
沈默又沉默了几秒,「那先做这一期,」他说,「边走边看。」
「好,」陆衍说,「先做这一期。」
他把电话挂掉,在本子上那行「基础设施/算力方向的核心工程师,2020年初」后面,加了一个名字:「沈默」。