>source

Heroku에 bert 모델을 배포하려고 합니다.

import torch
import transformers
import numpy as np
from flask import Flask, render_template, request
from model import DISTILBERTBaseUncased
MAX_LEN= 320
TOKENIZER= transformers.DistilBertTokenizer.from_pretrained(
    "distilbert-base-uncased", do_lower_case=True
)
DEVICE= "cpu"
MODEL= DISTILBERTBaseUncased()
MODEL.load_state_dict(torch.load("weight.bin"))
MODEL.to(DEVICE)
MODEL.eval()
app= Flask(__name__)
def sentence_prediction(sentence):
    tokenizer= TOKENIZER
    max_len= MAX_LEN
    comment= str(sentence)
    comment= " ".join(comment.split())
    inputs= tokenizer.encode_plus(
        comment,
        None,
        add_special_tokens=True,
        max_length=max_len,
        pad_to_max_length=True,
    )
    ids= inputs["input_ids"]
    mask= inputs["attention_mask"]
    ids= torch.tensor(ids, dtype=torch.long).unsqueeze(0)
    mask= torch.tensor(mask, dtype=torch.long).unsqueeze(0)
    ids= ids.to(DEVICE, dtype=torch.long)
    mask= mask.to(DEVICE, dtype=torch.long)
    outputs= MODEL(ids=ids, mask=mask)
    outputs= torch.sigmoid(outputs).cpu().detach().numpy()
    return outputs[0][0]
@app.route("/")
def index_page():
    return render_template("index.html")
@app.route("/model")
def models():
    return render_template("model.html")
@app.route("/predict", methods=["POST", "GET"])
def predict():
    if request.method== "POST":
        sentence= request.form.get("text")
        Toxic_prediction= sentence_prediction(sentence)
        return render_template(
            "index.html", prediction_text=np.round((Toxic_prediction * 100), 2)
        )
    return render_template("index.html", prediction_text="")
if __name__== "__main__":
    app.run(debug=True)

오류

MODEL.load_state_dict(torch.load("weight.bin"))

2020-05-18T06:32:32.134536+00:00 앱[web.1]: 파일 "/app/.heroku/python/lib/python3.7/site-packages/torch/serialization.py", 라인 593, 로드 중

2020-05-18T06:32:32.134536+00:00 앱[web.1]: return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)

2020-05-18T06:32:32.134536+00:00 앱[web.1]: 파일 "/app/.heroku/python/lib/python3.7/site-packages/torch/serialization.py", 763행, _legacy_load

2020-05-18T06:32:32.134537+00:00 앱[web.1]: magic_number= pickle_module.load(f, **pickle_load_args)

2020-05-18T06:32:32.134537+00:00 앱[web.1]: _pickle.UnpicklingError: 로드 키 'v'가 잘못되었습니다.

  1. code가 로컬에서 제대로 작동합니다.
  2. Heroku 배포 방법은 Github입니다.
  3. weight.bin 크기는 255MB입니다.
  4. localhost에서 제대로 작동하는 플라스크 API
  • 답변 # 1

    vikas Singh 어떻게 git-lfs를 설치하셨습니까? 나는 또한 같은 오류가 발생합니다

  • 답변 # 2

    확인 오류 1.MODEL.load_state_dict(torch.load("weight.bin")) --> 아래를 사용하거나 글자를 제대로 확인하면 됩니다.

    model.load_state_dict(torch.load(model_state_dict))
    

    2._pickle.UnpicklingError: 로드 키 'v'가 잘못되었습니다. --> 귀하의 환경에 git-lfs가 설치되어 있지 않은 것 같습니다. 설치 후 다시 시도하십시오.

    고마워, @humber 내 환경에 git-lfs를 설치했습니다. 나는 elements.heroku.com/buildpacks/raxod502/… 도움이 됩니다.

    vikasSingh2022-02-04 14:14:37
  • 이전 python : 파이썬의 목록에서 고유한 문자열을 인쇄하고 싶지만 목록이 깨집니다.
  • 다음 reactjs : 반응 빌드에 경로가 정의되어 있지 않습니다. react-router-dom v6