【发布时间】:2019-09-18 00:33:11
【问题描述】:
我正在尝试部署一个已在 Tesorflow 2.0 beta 中训练过的 NLP 模型。我使用model.save('pb_model') 以 .pb 格式保存模型(这给了我 pb_model.pb 和变量文件夹像往常一样)。
我将 pb 文件放在 Google Cloud 存储桶中,总共大约 370Mb。我正在使用 Google Cloud Functions,因为这是目前唯一支持 TF 2.0 的无服务器平台。对于我的 GCP 函数,我选择了当前可用的最高内存分配 2Gb。我使用 HTTP 请求触发我的函数。
我的main.py 代码如下所示:
import sys
import os
import psutil
import shutil
import tensorflow as tf
import googleapiclient.discovery
from google.cloud import storage
model = None
class CustomModel():
def __init__(self):
print('Starting CustomModel build...')
print('1:', psutil.virtual_memory())
dirName = '/tmp/model_dir/variables/'
# Create target directory & all intermediate directories if don't exists
os.makedirs(dirName, exist_ok=True)
pb_model_dir = 'gs://<cloud_bucket_name>/model_dir' # storage bucket file path of pb files
model = tf.saved_model.load(pb_model_dir)
shutil.rmtree('/tmp/model_dir', ignore_errors=True) # remove tmp files to maintain low memory
print('loaded model')
return model
def handler(request):
global model
# Model load which only happens during cold starts
if model is None:
model = CustomModel()
model_inputs = <some input text>
predictions = model(model_inputs)
print(predictions)
return predictions
查看日志时,打印语句print('1:', psutil.virtual_memory()) 的输出显示在加载模型之前,我在分配的 2Gb 内存中有 1.9Gb 空闲空间。
当我在 Google Colab 上运行这个确切的代码时,加载的模型占用的最大内存量约为 0.9Gb。因此,原则上,这意味着当我在 GCP Function 中部署模型时,2Gb 对于我的模型来说已经绰绰有余了,但是我不断收到超出内存限制的错误:
错误:超出内存限制。函数调用被中断。
有人知道我为什么会收到这个错误吗?我是否正确构建 GCP 功能?我对 GCP 还是有点陌生。顺便说一句,我什至尝试将存储桶中的 pb 模型文件导入到我的 Function /tmp/ 文件夹中,而不是指向存储桶路径(pb_model_dir = 'gs://<cloud_bucket_name>/model_dir'),但这也给了我超出内存限制的错误。
不知道还有什么可以尝试...提前感谢您的帮助!
【问题讨论】:
-
Cloud Function 并不是唯一一个以无服务器方式服务模型的平台。 I wrote an article with Tensorflow1 and Cloud Run。您可以尝试与您的模型等效的东西。我必须在 Tensorflow2 中更新我的模型,并使用 Tensorflow2 发布本文的新版本。但我现在没有时间......告诉我这是否有帮助
-
感谢您提供链接并建议使用 Cloud Run 无服务器平台。我查看了 Cloud Run,他们也有 2Gb 的最大内存分配。从技术上讲,我的 Tensorflow 2.0 pb 文件应该与 Cloud Function 一起使用,但我一直遇到
memory limit exceeded错误,我认为 Cloud Run 也会遇到同样的错误,因为它也有 2Gb 内存限制。
标签: python tensorflow google-cloud-platform google-cloud-functions tensorflow2.0