我一直在考虑这个问题。我真的很想知道其他意见,所以请回答,即使这听起来很愚蠢!
与任何应用程序一样,ML/DL 模型可以以多种方式部署。我尝试了许多架构,但没有明确的答案或直接的解决方案可供选择。
我将专注于实时在线模型,这通常是我需要的解决方案。
第一个解决方案显然是一个烧瓶服务器,提供了一种快速的部署方式,但不太适合生产。
之后,我将其更改为 gRPC 服务器,它增加了流式传输和更高的吞吐量,但仍然没有弹性或确保消息传递的方法。那必须是客户端的自定义解决方案。
然后我开始用 pandas udfs 来研究 Spark。如果您不知道 pandas udf 是什么,基本上代码被包装到一个函数中,该函数将针对批量数据运行。这里的问题是必须在每批上加载模型。在某些情况下,这可以通过广播模型(一种在集群中的节点之间共享变量的方式)来解决,但这并不总是一种选择。这引入了性能权衡,您必须选择足够大的批次才能使模型不会一直加载,而且批次越大,延迟越大。
TensorFlow 服务很愚蠢。当我尝试它时,序列化比实际推理花费的时间更多。这是因为模型的第一层收到了一张图片,我必须为每张图片发送一个像素数组。为了修复这个序列化步骤,我添加了一个 base64 解码层并以这种方式发送。此外,它没有推理保证,而且我上次使用它时,模型不能包含自定义层,除非您在 C++ 中实现对应的层。此外,不支持 lambda 层。这使得大多数在线模型无法使用。
我真的很好奇我是不是想多了,或者每个人都有这个问题。请分享你的经验。谢谢
PS:如果你想加入,我也在这个 reddit 帖子上开始了讨论。