python-3.x - tensorflow 和 keras - SQS 生产中的快速推理

标签 python-3.x tensorflow amazon-sqs

我的模型是在 Keras 中编写和训练的。我正在尝试将其用于生产中的推理。我收到包含 (path_in, path_out) 元组的 SQS“任务”消息.

我显然可以使用:

BATCH_SIZE = 10
batch_messages = []


while True:
  while len(batch_messages) < BATCH_SIZE:
    msg = sqs.read_messsage()  
    batch_messages.apend(msg)

  assert len(batch_messages) == BATCH_SIZE
  batch = np.array([read_image(msg.path_in) for msg in batch_messages]) 

  output_batch = model.predict(batch)

  for i in range(BATCH_SIZE):
    write_output(output_batch[i], path=batch_messages[i].path_out)

  batch_messages = []


问题是代码浪费了大部分时间从 SQS 读取,从磁盘读取图像并在最后写回。这意味着 GPU 在这段时间内一直处于空闲状态。

我知道 Keras 的 Sequence ,但不确定它是否也适用于这种情况,以及用于推理(而不是训练)

最佳答案

我建议你使用 Tensorflow Serving解决方案,因为它实现了服务器端批处理策略,可优化推理速度和 GOU 利用率。此外,如果您想加快管道速度,您应该将模型转换为 TensorRT将模型操作优化到特定 GPU 的模型(并且它做得更多)。

关于python-3.x - tensorflow 和 keras - SQS 生产中的快速推理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61562123/

相关文章:

Tensorflow无法量化 reshape 函数

opencv - 将图像从 cvimg 正确转换为张量

node.js - 使用 AWS 无服务器和 NodeJS 在接收器 lambda 上未从 SQS 接收所有消息

amazon-web-services - 您可以在哪里更改触发 AWS Lambda 函数的 SQS 队列的批处理大小?

python - 如何检查单词是否以字母表范围内开头

python-3.x - make_lazy_gettext 与 wForms 获取输出 .lazy_gettext at 0x07808D68>

node.js - 使用 tfjs-node 时添加类型

node.js - 提高 Amazon SQS 性能

python - 无法在 tkinter 上使用网格调整 TreeView 大小

list - 不允许玩家移出2D网格Python 3之外