Tensorflow_hub 在 heroku 上加载内存限制

Tensorflow_hub load Memory limit on heroku

在 tensorflow_hub 模型中加载时是否可以减少内存使用?
截至目前,它达到了 heroku 内存配额的限制,即 512 mb。
是否有可能以某种方式拆分负载?我试过线程化并在后台加载它,但这只解决了请求超时的问题。

from flask import Flask, render_template, url_for, make_response,jsonify,request
import tensorflow_hub as hub
import numpy as np
import tensorflow as tf
import threading


app = Flask(__name__,template_folder='templates')




def semantic(search1,search2):
    comparison = model([search1,search2])
    return np.inner(comparison[0],comparison[1])

def task():
    module_url = "https://tfhub.dev/google/universal-sentence-encoder/4" #@param ["https://tfhub.dev/google/universal-sentence-encoder/4", "https://tfhub.dev/google/universal-sentence-encoder-large/5"]
    model = hub.load(module_url)
    tf.keras.backend.clear_session()


@app.route('/')
def menu():
    threading.Thread(target=task).start()
    return render_template("index.html")

@app.route('/<search1>/<search2>',methods=['POST','GET'])
def deploy(search1,search2):
    compare = semantic(search1,search2)
    compare = compare*100
    compare = str(compare)
    compare = compare.strip("")
    response = {
        "Semantic Similarity": compare
    }
    if request.method == 'POST':
        return make_response(jsonify(response),200)
    else:
        return render_template("results.html",compare=compare,)
    

感谢您查看此主题,我一直在寻找答案,但唯一的解决方案是迁移到另一个平台或付费。

据我所知,不幸的是,在这种情况下我们无能为力。内存量取决于负责从其序列化表示加载权重和图形的逻辑的内部 TensorFlow 实现。因此,您可以尝试使用 TensorFlow 提交功能请求,看看是否可以改进该逻辑以提高内存意识。

或者,当从 tfhub.dev 加载模型时,库会将内容复制到本地临时目录。如果此目录是 memory-mapped,则将缓存位置更改为非 memory-mapped 位置可能会有所帮助。这可以通过设置 TFHUB_CACHE_DIR 环境变量来完成。

最后,如果这些方法都不起作用,那么尝试使用尺寸更小的不同模型也是一种选择。