问题描述
现在,我想在生产环境中使用它,我需要每天在几次包含10k-100k图像的大文件夹上执行模型。这需要几个小时,因此每次改进都会有所帮助。
我想知道在生产中使用它的正确方法是什么。我目前仅在创建的model.predict()
上使用Sequence
。但是在我所看到的所有地方,我都能看到似乎相关的各种不同的库或技术。
tensorflow-serving
,通过intel和其他工具转换为C,不同的库。
我想知道在生产级和尽可能高效地执行模型的底线推荐方法是什么。
解决方法
我不确定这是否有一个规范的答案-就像很多事情一样,不同的选择之间需要进行很多取舍-但我会尝试给出答案。
我很高兴使用TensorFlow Serving进行模型部署,并由单独的服务执行调用这些模型的业务逻辑,并对预测进行某些处理。这提供了一个小小的提升,因为不会有太多的资源争用-TensorFlow Serving实例除了运行模型外什么也不做。我们通过Kubernetes对其进行了部署,如果您想同时水平扩展以提高吞吐量,则使TensorFlow Serving实例集群的分组变得非常容易。
您不太可能通过在边缘弄乱诸如确保TensorFlow Serving部署使用正确的标志编译以使用所有Intel向量指令的事情而获得有意义的改进。最大的推动力是以快速的C ++代码运行所有内容。提高性能的一种方法(可能非常明显)是在GPU而不是CPU上运行推理。这将或多或少地按您期望的方式扩展:GPU越强大,推理就越快。
您可能需要做更多的事情才能使我们获得更多的单个百分点收益。但这在速度和灵活性之间取得了很好的平衡。拥有这种独立的服务体系结构肯定有点挑剔:如果您没有做太复杂的事情,那么在Python脚本中按原样使用模型可能会更容易(如果要慢一些),而不是麻烦设置TensorFlow服务。另一方面,提速非常重要,而且很容易管理。另一方面,我不知道您可以采取什么疯狂的措施来获得更多的边际性能提升,但是本能告诉我,它们将变得非常奇特,因此很难维护。
,很难回答,但我将考虑以下正交方面
- 我可以以较低的分辨率运行模型吗?如果是这样,请在运行模型之前调整图像的大小-这应该使您的速度提高X ** 2倍,其中X是您使用的下采样系数。
- 生产模型通常是远程执行的。因此,了解您的远程计算机配置非常重要。如果您仅拥有仅CPU的计算机,则与本地tensorflow相比,OpenVINO之类的选项通常可以提供更快的速度。如果您有GPU机器,tensorRT之类的选项也可以为您提供帮助。实际的速度很难估算,但我说至少要快2倍。
- 上传/下载JPEG图像而不是PNG或BMP。这样可以大大减少您的交流时间。