引言
前一段时间,拜访客户的时候,客户提出一个问题:原来他们的AI应用,把不同的模型部署在不同的EC2实例上,不同模型的EC2实例打不同的tag,通过tag来识别不同模型的成本消耗。现在他们想把不同的模型部署到同一个EC2实例上,那么这么混合部署后,如何来识别不同的模型的成本消耗呢?
我们现场讨论了几种方案。后来回来后,我想了想,觉得这个是个挺有意思的话题。多年前,我在网龙工作时,我们曾经试图通过压测的定量分析来指导程序的优化,在类似的方向上有过讨论,有很多的共通之处。这里把思考做一个记录、总结,以供大家参考。
理想的成本
理想情况下,一次API调用的成本可以简单理解为,调用这个API一次,消耗了多少资源,折合多少钱。
但是在实际的执行过程中,通常很难这么衡量。原因在于,大多数的用于保障API执行的基础设施,并不是以这么细的粒度来进行计费和付费的(哪怕是云上serverless lambda的方式,通常也只是计算层可以做到这么细粒度的计费,如果这个计算要用到DB,也很难把DB的消耗细化到每一个API请求)。
从财务的角度
通常时候,只能以一台或者一组服务器作为粒度来计算成本。即便是引入虚拟化或者云化后,也只能以虚机的维度来计算成本。很难进行更细粒度的成本拆分。
这个角度,只是为了让所有的成本有归属,所有的资源使用能找到承担成本和责任的人。
损耗的问题
实际上,系统在运行中,其实是有损耗的,我们很难把硬件设备的性能用尽。比如一台服务器,一天有能力执行100W次的计算,但是实际上&#