【问题标题】:Cloud ML Engine online prediction performanceCloud ML Engine 在线预测性能
【发布时间】:2018-06-23 11:53:50
【问题描述】:

我创建了一个 Cloud ML Engine 模型并尝试生成在线/HTTP 预测,但我发现运行预测的延迟仍然很高。下面是我用来生成预测的 Python 脚本(来自here):

def predict_json(project, model, instances, version=None):
    service = googleapiclient.discovery.build('ml', 'v1')
    name = 'projects/{}/models/{}'.format(project, model)

    if version is not None:
        name += '/versions/{}'.format(version)

    response = service.projects().predict(
        name=name,
        body={'instances': instances}
    ).execute()

    if 'error' in response:
        raise RuntimeError(response['error'])

    return response['predictions']

当模型在我的笔记本电脑上运行时,一旦我有一个 tf.Session 并恢复了所有变量,通过网络的前向传递大约需要 0.16 秒(批量大小为 1)。但是,当我使用 Cloud ML 输入相同的数据时,前向传递大约需要 3.6 秒,即使我多次运行相同的脚本也是如此。

我怀疑每次我尝试进行预测时都会从头开始重新加载模型 - 有没有办法让相同的 tf.Session 在后台运行,以便更快地生成预测?还是我做错了什么?

提前感谢您的帮助!

【问题讨论】:

  • 根据this doc,可以使用模型的默认版本,也可以每次指定不同的版本。你每次都用同一个版本吗?查看有关Managing Models and Jobs 的文档。也许this general troubleshooting doc 也有帮助 - 检查为预测配置云资源的方式。
  • 感谢您的回复。我使用的模型只有 1 个版本(我已将其设置为默认版本),所以这不应该是问题 - 故障排除文档中的问题也不适用。

标签: python tensorflow machine-learning google-cloud-platform google-cloud-ml


【解决方案1】:
  1. 测量您的计算机和 Google 云之间的延迟?尝试发送格式错误的 URL 并测量响应时间。

  2. 检查服务部署的区域。

  3. 每隔 30 秒向服务发送五个请求。延迟会降低吗?

【讨论】:

  • 1.当我使用 Cloud Shell 中的 gcloud 命令时,我尝试发送一个空的 json 文件,然后使用 time 对其进行计时,它花了大约 400 毫秒,这不考虑其他 3000 毫秒。 2.部署在us-central1,我在西海岸。 3. 当我发送间隔 30 秒(甚至更短的间隔,如 2 秒)的请求时,延迟并没有下降
  • 当你在本地测量时,你使用的是“gcloud local predict”吗?如果没有,你也可以试试吗?
  • 我建议使用the API explorer, ml.projects.predict endpoint,以查看在将代码从工作中分离出来时性能的最终变化,留下纯HTTP请求-响应。请回复结果
猜你喜欢
  • 1970-01-01
  • 2019-01-09
  • 2019-02-08
  • 2018-12-09
  • 2019-01-19
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多