使用火炬通过 Digital Ocean 部署经过训练的模型,Tensorflow 不起作用

问题描述 投票:0回答:0

疑问如何将 PyTorch 训练的应用程序部署到 Digital Ocean 上?

我用 Tensorflow 和 Torch 制作了一个训练有素的模型 Flask 应用程序,但是我尝试了很多次,不同的 Lite 版本的 Torch 和 Tensorflow 都失败了。 我已经在存储在空间(数字海洋)中的泡菜中训练了模型。但是,我无法使用 15 GB 或更大的大型应用程序 RAM 进行部署。如果我在加载默认 Flask 容器时尝试“pip install --no-cache-dir --upgrade tensorflow”,容器将继续重新启动。如果我从 GitHub 启动容器,尽管使用 >15GB RAM 设置,但仍会出现内存不足错误。

应用程序.py

from flask import Flask, render_template, request
from PIL import Image
from io import BytesIO
from transformers import VisionEncoderDecoderModel, ViTImageProcessor, AutoTokenizer

import pickle
import os
import urllib.request


APP_ROOT = os.path.dirname(os.path.abspath(__file__))
MODEL = os.path.join(APP_ROOT, 'finalized_model.pkl')


model = pickle.load(open('finalized_model.pkl', 'rb'))
feature_extractor = ViTImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
tokenizer = AutoTokenizer.from_pretrained("nlpconnect/vit-gpt2-image-captioning")

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')

@app.route("/forward/", methods=['POST'])
def move_forward():
    #Moving forward code
    url_link = request.form.get('fname')
    image_input = get_image(url_link)
    caption = predict_step(image_input,model)
    print(url_link)
    return render_template('index.html', caption_message=caption, caption_img=url_link)

def get_image(url):
    if 'https' not in url:
        url = 'https:' + url
    req = urllib.request.Request(url,
                                 headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
    })
    response = urllib.request.urlopen(req)
    content = response.read()
    img = Image.open(BytesIO(content))
    return img.convert('RGB')

max_length = 30
gen_kwargs = {"max_length": max_length}

def predict_step(image, model):
  pixel_values = feature_extractor(images=image, return_tensors="pt").pixel_values
  output_ids = model.generate(pixel_values, **gen_kwargs)
  preds = tokenizer.batch_decode(output_ids, skip_special_tokens=True)
  preds = [pred.strip() for pred in preds]
  return preds

if __name__ == '__main__': app.run()

需求文件->

numpy scipy pandas Flask Pillow transformers urllib3 pickle4 gunicorn TensorFlow torch

任何帮助表示赞赏。

python tensorflow digital-ocean torch
© www.soinside.com 2019 - 2024. All rights reserved.