如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?
Posted
技术标签:
【中文标题】如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?【英文标题】:How to call a global variable from a pubsub callback function in google-cloud-platform vminstance? 【发布时间】:2019-03-27 09:15:24 【问题描述】:我正在运行一个神经网络模型,该模型应该在每次触发 pubsub 事件时异步地在回调函数中运行。我在主程序初始化期间将模型加载为全局变量,以便它可以在任何函数中访问,并避免每次在回调函数本身中加载模型。 典型代码可以是:
global cv_model
cv_model = load_model('my_model.h5')
def callback():
prediction = cv_model.predict(image)
此方法在我的本地机器上完美运行。但是当我尝试使用 pubsub 事件回调时,我遇到了一些错误。经过一番搜索,我发现“pubsub 是主程序的子进程,我们不能在进程之间共享全局变量”。我尝试了嵌套函数方法和 OOP 方法,但都没有奏效。
如何避免每次调用回调函数时加载模型? 有什么替代方法可以解决这个冲突吗?
谢谢你的建议!!
【问题讨论】:
【参考方案1】:如果您无法通过 Pub/Sub 回调实现这一点,您可以尝试编写一个 Google Cloud Function with a Pub/Sub Trigger 来代替,它不存在此问题:
from keras.models import load_model
cv_model = load_model('my_model.h5')
def handle_pubsub(data, context):
image = ... # do something with the `data` arg here
prediction = cv_model.predict(image)
【讨论】:
在 G-cloud-function 中加载巨大的模型是个好主意吗?与VM相比成本如何?云功能最大内存限制为2GB,不够用。以上是关于如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何从外部从 GitHub 加载 JavaScript 文件? [复制]