import gradio as gr import time import pandas as pd from PIL import Image import matplotlib as plt # device import torch device = 'cuda:0' if torch.cuda.is_available() else 'cpu' # models model_name_bb = "pierreguillou/bert-base-cased-squad-v1.1-portuguese" model_name_bl = "pierreguillou/bert-large-cased-squad-v1.1-portuguese" # load models from transformers import pipeline qa_bb = pipeline("question-answering", model_name_bb, device=device) from optimum.pipelines import pipeline qa_bb_better = pipeline("question-answering", model_name_bb, accelerator="bettertransformer", device=device) from transformers import pipeline qa_bl = pipeline("question-answering", model_name_bl, device=device) from optimum.pipelines import pipeline qa_bl_better = pipeline("question-answering", model_name_bl, accelerator="bettertransformer", device=device) # function to get results def get_answer(context, question): # get predictions start = time.perf_counter() answer_bl = qa_bl(question=question, context=context) end = time.perf_counter() diff_bl = round(end - start, 2) answer_bl["time (s)"] = diff_bl del answer_bl["start"] del answer_bl["end"] start = time.perf_counter() answer_bl_better = qa_bl_better(question=question, context=context) end = time.perf_counter() diff_bl_better = round(end - start, 2) answer_bl_better["time (s)"] = diff_bl_better del answer_bl_better["start"] del answer_bl_better["end"] start = time.perf_counter() answer_bb = qa_bb(question=question, context=context) end = time.perf_counter() diff_bb = round(end - start, 2) answer_bb["time (s)"] = diff_bb del answer_bb["start"] del answer_bb["end"] start = time.perf_counter() answer_bb_better = qa_bb_better(question=question, context=context) end = time.perf_counter() diff_bb_better = round(end - start, 2) answer_bb_better["time (s)"] = diff_bb_better del answer_bb_better["start"] del answer_bb_better["end"] answer = dict() answer["BERT large"] = answer_bl answer["BERT large (BetterTransformer)"] = answer_bl_better answer["BERT base"] = answer_bb answer["BERT base (BetterTransformer)"] = answer_bb_better # get image of prediction times df = pd.DataFrame.from_dict({"Method":["BERT base (BetterTransformer)", "BERT base", "BERT large (BetterTransformer)", "BERT large"], "Time (seconds)": [answer["BERT base (BetterTransformer)"]["time (s)"], answer["BERT base"]["time (s)"], answer["BERT large (BetterTransformer)"]["time (s)"], answer["BERT large"]["time (s)"]]}) ax = df.plot.barh(x='Method', title=f'Prediction times on {str(device).replace("cuda:0", "GPU").replace("cpu", "CPU")}') ax.figure.savefig("img.png", bbox_inches='tight') image = Image.open('img.png') return image, answer title = "QA in Portuguese with BetterTransformer (this App runs on " + str(device).replace("cuda:0", "GPU").replace("cpu", "CPU") + ")" description = '
(20/11/2022) Forneça seu próprio parágrafo e faça perguntas sobre o texto. Quão bem os modelos respondem?
(este aplicativo usa os modelos pierreguillou/bert-base-cased-squad-v1.1-portuguese and pierreguillou/bert-large-cased-squad-v1.1-portuguese and their versions BetterTransformer)