Hugging Face Hub 是一个中心平台,拥有数十万个模型、数据集和演示(也称为 Spaces)。
Gradio 具有多种功能,可以非常轻松地利用 Hub 上的现有模型和 Spaces。本指南将介绍这些功能。
Hugging Face 有一项名为无服务器推理端点的服务,它允许您向 Hub 上的模型发送 HTTP 请求。该 API 提供慷慨的免费使用额度,当您想在生产环境中使用它时,可以切换到专用推理端点。Gradio 直接集成了无服务器推理端点,因此您只需指定模型的名称(例如 Helsinki-NLP/opus-mt-en-es)即可创建演示,如下所示:
import gradio as gr
demo = gr.load("Helsinki-NLP/opus-mt-en-es", src="models")
demo.launch()对于推理端点支持的任何 Hugging Face 模型,Gradio 会自动推断预期的输入和输出并进行底层的服务器调用,因此您无需担心定义预测函数。
请注意,我们只需指定模型名称并声明 src 应为 models(Hugging Face 的模型中心)。由于您不会在计算机上加载模型,因此无需安装任何依赖项(除了 gradio)。
您可能会注意到第一次推理需要稍长的时间。这是因为推理端点正在服务器中加载模型。之后您会获得一些好处:
Hugging Face Spaces 允许任何人免费托管他们的 Gradio 演示,上传 Gradio 演示只需几分钟。您可以访问 hf.co/new-space,选择 Gradio SDK,创建一个 app.py 文件,瞧!您就拥有了一个可以与其他人分享的演示。要了解更多信息,请阅读本指南,了解如何使用网站在 Hugging Face Spaces 上托管。
或者,您可以使用 huggingface_hub 客户端库以编程方式创建 Space。这是一个示例:
from huggingface_hub import (
create_repo,
get_full_repo_name,
upload_file,
)
create_repo(name=target_space_name, token=hf_token, repo_type="space", space_sdk="gradio")
repo_name = get_full_repo_name(model_id=target_space_name, token=hf_token)
file_url = upload_file(
path_or_fileobj="file.txt",
path_in_repo="app.py",
repo_id=repo_name,
repo_type="space",
token=hf_token,
)在这里,create_repo 使用特定账户的写入令牌在该账户下创建一个具有目标名称的 gradio 仓库。repo_name 获取相关仓库的完整仓库名称。最后,upload_file 将一个名为 app.py 的文件上传到仓库中。
您还可以使用和混搭 Hugging Face Spaces 上现有的 Gradio 演示。例如,您可以将 Spaces 上的两个现有 Gradio 演示作为单独的选项卡放在一起,并创建一个新的演示。您可以在本地运行这个新演示,或者将其上传到 Spaces,从而实现无限的混搭和创建新演示的可能性!
这是一个完全实现上述功能的示例:
import gradio as gr
with gr.Blocks() as demo:
with gr.Tab("Translate to Spanish"):
gr.load("gradio/en2es", src="spaces")
with gr.Tab("Translate to French"):
gr.load("abidlabs/en2fr", src="spaces")
demo.launch()请注意,我们使用了 gr.load(),这与我们使用推理端点加载模型的方法相同。但是,在这里我们指定 src 为 spaces(Hugging Face Spaces)。
注意:以这种方式加载 Space 可能会导致与原始 Space 略有不同。特别是,适用于整个 Blocks 的任何属性,例如主题或自定义 CSS/JS,都不会被加载。您可以将这些属性从您加载的 Space 复制到您自己的 Blocks 对象中。
transformers 中的 Pipeline 演示Hugging Face 广受欢迎的 transformers 库有一个非常易于使用的抽象,即 pipeline(),它处理了大部分复杂的代码,为常见任务提供了一个简单的 API。通过指定任务和(可选)模型,您可以用几行 Python 代码围绕现有模型构建一个演示:
import gradio as gr
from transformers import pipeline
pipe = pipeline("translation", model="Helsinki-NLP/opus-mt-en-es")
def predict(text):
return pipe(text)[0]["translation_text"]
demo = gr.Interface(
fn=predict,
inputs='text',
outputs='text',
)
demo.launch()但是 gradio 实际上使将 pipeline 转换为演示变得更加容易,只需使用 gradio.Interface.from_pipeline 方法,它甚至不需要指定输入和输出组件:
from transformers import pipeline
import gradio as gr
pipe = pipeline("translation", model="Helsinki-NLP/opus-mt-en-es")
demo = gr.Interface.from_pipeline(pipe)
demo.launch()前面的代码会生成以下界面,您可以在浏览器中直接试用:
就是这样!让我们回顾一下 Gradio 和 Hugging Face 协同工作的各种方式:
gr.load(),围绕推理端点构建演示,而无需加载模型。gr.load() 从 Hugging Face Spaces 加载演示,以进行混搭并创建新的 Gradio 演示。from_pipeline() 将 transformers pipeline 转换为 Gradio 演示。🤗