Appearance
如何根据有限材料还原workload?
问题来源
最近接到了个需求,我的心里是三分好奇,三分不解,四分荒唐的。
领导让我根据少量的材料,来构建出负载的workload。
我更加认可,最容易把AI神话的,既不是从来不用AI的人,也不是相当了解AI的人,而是对AI一知半解、觉得AI什么都能干的人。
这个需求确实有很高的价值,但领导们可以打出价值高度,执行层上的落实路径究竟是空中楼阁还是脚下实地,就真不好说了。
而真要完成这个需求,既要懂点AI,又要懂workload的构建,而且对workload的理解要求还要更高一些。
先说workload
workload这个东西,概念本身是很宽泛的。但一般情况下,它是在因成本考虑无法使用原始负载时,从业务中提取的一段典型负载。这里就和做benchmark很接近了,本质上都是受限于各种条件,而需要小规模地复现出原始的业务负载。
- 怎么提取?提取本质上是在对原始负载做减法:什么是必须的,什么是可以放弃的。比如,仅提取原始负载的前十个热点,其余函数都去除。
- 怎么组织?原始负载本身是完备的业务代码,但提取出的负载是一个子集,不一定能直接运行。一些框架虽然是必须的,但并不会对业务特征产生影响,那要不要保留框架呢?(所以有更高级的特征提取方式:指令流)
这里也可以看出,提取出一个workload是很复杂的工作了,speccpu也是10年才会更新一个大版本,中间从选型到实现,再到测试,都需要很多的时间和精力。
如何借助AI?
正常的构建workload的流程,输入材料是完备的,开发人员具备项目的源码、多种测试环境和丰富的测试工具与表征手段。如果没有AI,仅根据一张火焰图就把负载给构建起来,这种需求不具备可行性;即使有了AI,这个需求同样离谱。
但是话又说回来,离谱程度是和最终的目标相关的。按照传统的workload构建流程,最终的效果是要能“反映原始业务的特征”,抽象点说就是要在特征空间上具有相关性,从而可以通过调优workload来找到调优原始业务的手段。这是最终的目标,实现难度也最高。而如果仅是和输入材料的特征维度对齐,那么这个任务就相对简单了。
另一方面,AI的特点是输入材料越丰富,输出内容越满足需求。如果输入材料包括了源代码,凭借当前的agent能力,完全可以自动提取出workload。当输入材料不足的时候,至少这些材料的特征维度是可以对齐的。本质来说,从高维的特征空间提取出低维的特征是可以保证准确性的,这也就是原始业务和workload之间的关系。
这里,我本来已经给AI仅通过有限材料还原出高质量的workload下了“死刑”,但是这个任务仍然有解决的方案(滑稽)。
熟悉AI的人看到高维、低维这些其实应该也有思路了。这个任务实际上是要实现从低维特征到高维特征的映射。那么就可以按照模型训练的方式,加一层MLP即可。如果有足够的训练数据,完全可以训练一个特殊的模型,来学习市面上主流业务的特征映射关系,这样即使只有少量的材料,也可以构建出高质量的workload。
总结
上文中仅有我个人的思考,收束一下大致是这几点:
- workload是原始业务做减法后的产物,它的价值不在于“跑起来”,而在于能否在特征空间上和原始业务保持相关性。只有相关性成立,调优workload得到的手段才可能迁移回原始业务。
- 材料是否完备,决定了workload的质量。材料充足时(有源码、有测试环境),凭当前的agent能力自动提取workload是可行的;材料不足时(比如只有一张火焰图),能对齐的只是输入材料自身的特征维度,谈不上反映业务特征。
- 但材料不足并不等于任务无解。从低维特征映射回高维特征,本质上是模型训练的问题:在建模流程中加一层MLP,用足够的训练数据去学习主流业务的特征映射关系,就有机会在少量材料下构建出高质量的workload。当然,训练数据的获取本身就是另一个大工程,这条路目前也是为了碟醋包了盘饺子的解法,没有可行性。
至于实际的实现,可以参考我使用AI搓出来的workload-rebuild skill。其中的流程和细节考虑得更加全面,虽然也是材料有限情况下的无奈之举了。它未必能实现“根据少量材料还原出高质量workload”的终极目标,但至少比空想要实在一些。