【问题标题】:Using Google App Engine as a machine learning prediction engine使用 Google App Engine 作为机器学习预测引擎
【发布时间】:2011-05-12 16:33:39
【问题描述】:

我之前没有使用过 Google App Engine 的经验,但我是一位经验丰富的 Java 开发人员。

我有兴趣通过 Google App Engine 设置一个 REST API,您可以在其中向它提供数据,它会使用我单独生成的预测模型进行预测。

构成预测模型的数据可以从几百千字节到 gzip 压缩时的几兆字节,解压缩时大几倍。当存储在内存中时,它基本上由 10-30 个 HashMap 组成,每个 HashMap 包含从少数到数万个条目。

在预测过程中,从这些 HashMap 中检索数据并以各种方式组合以得出最终预测。重要的是尽快发生这种情况以最大程度地减少 API 的延迟,这就是我希望将 HashMap 保留在内存中的原因。

有没有办法在 Google App Engine 中将这些数据存储为序列化文件,以便在启动时加载?我意识到我可以将数据存储在数据存储中的 HashMap 中并根据需要检索它们,但我担心这会相当慢,因为典型的预测可能需要从不同的 HashMap 检索 30 个不同的值。

即使使用 Memcache,我也担心这会比将数据存储在 JVM 中的 HashMap 中慢得多。

【问题讨论】:

    标签: java google-app-engine


    【解决方案1】:

    除了 Jason 建议使用新的 Google App Engine 后端服务之外,另一种选择是让 Google 使用 Google Prediction API 托管您的预测模型。它通过 REST API 使您的模型可用,因此您不必自己构建它。单击“Gallery”链接以了解有关使用 Google 托管您自己的模型的更多信息。训练数据使用Google Storage service 存储。

    【讨论】:

    • 预测 API 构建模型;它不允许您托管自己的模型。不过,这可能比自己重新发明服务更好。
    • 是的 - 这些模型也是由预测服务构建的。您不能上传预制模型,只能上传原始数据,服务会为您转换为模型。
    • 啊,是的,没错。画廊里的所有的都是。我想我指的是右上角的小部分,“提交你自己的模型!”或者你也在谈论那些? (你会继续度假吗?!?) :-)
    【解决方案2】:

    传统上,App Engine 实例会定期被终止,因此您无法在请求之间将 HashMaps 保留在内存中。

    不过,最近发布的Backends 功能已经取消了这个限制。

    每个 Backend 实例最多可以保留 1GB 内存,并且在请求之间保持正常(尽管它们偶尔会崩溃,因此您应该在设计时考虑到这一点)。

    出于您的目的,这可能值得研究。

    【讨论】:

    • 您当然可以将哈希图保存在内存中。加载它们会有一些启动延迟,但实例可能会处理数万到数千个请求,具体取决于应用的流量负载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多