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'가 잘못되었습니다.
- code가 로컬에서 제대로 작동합니다.
- Heroku 배포 방법은 Github입니다.
- weight.bin 크기는 255MB입니다.
- localhost에서 제대로 작동하는 플라스크 API
- 답변 # 1
- 답변 # 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
vikas Singh 어떻게 git-lfs를 설치하셨습니까? 나는 또한 같은 오류가 발생합니다