跳到主要内容

Gradio 应用

Gradio 提供了简单直观的界面,让模型可以通过一系列输入,生成图像、音频等内容进行展示输出。现在,Gradio 还增加了一个绘图输出组件,可以使用 Matplotlib、Bokeh 和 Plotly 让数据可视化!更多细节,请查看 Gradio 的入门指南

提示

Gradio 仅为 UI 库,SDK 自带 Python 环境,您可以在应用中直接使用 Python 代码,也可以自行安装其他依赖。

创建新应用时选择 Gradio 作为 SDK。

访问 Gradio 文档了解其所有特性,并查看 Gradio 指南,这些实用的教程可以指导您使用Gradio!

您的第一个 Gradio 应用:中文诗生成器

在以下各节内容中,您将了解创建应用、配置应用以及将代码部署到应用的基础知识。我们将使用 Gradio 创建一个中文诗生成应用,该应用将用于演示gpt2-chinese-poem 模型,该模型可以根据输入生成中文诗。

您可以在 stringify/gpt2-chinese-poem-app 上找到此应用的全部内容。

创建 Gradio 应用

我们从创建新应用开始,并选择 Gradio 作为我们的依赖 SDK。Gitee AI 应用是基于 Git 仓库的,这意味着您可以通过推送提交来逐步(与他人协作)开发您的应用。在继续之前,请查看仓库指南,学习如何创建和编辑文件。

添加依赖

该应用使用 Transformers pipeline 依赖包来使用模型,通过在仓库中创建一个 requirements.txt 文件并向其添加以下依赖来完成:


transformers
torch

应用在运行时将会自动安装这些依赖!

创建 Gradio 界面

创建 Gradio 应用时,请在仓库文件中创建一个名为 app.py 的文件,并添加以下代码:


import torch
import gradio as gr
import torch.nn.functional as F
from transformers import BertTokenizer, GPT2LMHeadModel
tokenizer = BertTokenizer.from_pretrained("hf-models/gpt2-chinese-poem")
model = GPT2LMHeadModel.from_pretrained("hf-models/gpt2-chinese-poem")
model.eval()
def top_k_top_p_filtering(logits, top_k=0, top_p=0.0, filter_value=-float('Inf')):
assert logits.dim() == 1
top_k = min(top_k, logits.size(-1))
if top_k > 0:
indices_to_remove = logits < torch.topk(logits, top_k)[0][..., -1, None]
logits[indices_to_remove] = filter_value
if top_p > 0.0:
sorted_logits, sorted_indices = torch.sort(logits, descending=True)
cumulative_probs = torch.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1)
sorted_indices_to_remove = cumulative_probs > top_p
sorted_indices_to_remove[..., 1:] = sorted_indices_to_remove[..., :-1].clone()
sorted_indices_to_remove[..., 0] = 0
indices_to_remove = sorted_indices[sorted_indices_to_remove]
logits[indices_to_remove] = filter_value
return logits
def generate(input_text):
input_ids = [tokenizer.cls_token_id]
input_ids.extend( tokenizer.encode(input_text, add_special_tokens=False) )
input_ids = torch.tensor( [input_ids] )
generated = []
for _ in range(100):
output = model(input_ids)
next_token_logits = output.logits[0, -1, :]
next_token_logits[tokenizer.convert_tokens_to_ids('[UNK]')] = -float('Inf')
filtered_logits = top_k_top_p_filtering(next_token_logits, top_k=8, top_p=1)
next_token = torch.multinomial( F.softmax(filtered_logits, dim=-1), num_samples=1 )
if next_token == tokenizer.sep_token_id:
break
generated.append( next_token.item() )
input_ids = torch.cat((input_ids, next_token.unsqueeze(0)), dim=1)
return input_text + "".join( tokenizer.convert_ids_to_tokens(generated) )
examples = [["不堪翘首暮云中"], ["开源中国"], ["行到水穷处"], ["王师北定中原日"] ,["雪"], ["海上升明月"], ["十年磨一剑"]]
if __name__ == "__main__":
gr.Interface(fn=generate, inputs="text", outputs="text",examples=examples).queue(concurrency_count=1).launch()

此 Python 脚本使用 Transformers pipeline 加载 Gradio 使用的 gpt2-chinese-poem-app 模型。将代码保存到 app.py 文件后,点击 “启动”,您可以查看日志,稍后请访问“App”选项卡即可以查看您的应用运行情况!