1. 其他教程
  2. 使用 Hugging Face 集成

相关空间

使用 Hugging Face 集成

简介

Hugging Face Hub 是一个中心平台,拥有数十万个模型数据集演示(也称为 Spaces)。

Gradio 具有多种功能,可以非常轻松地利用 Hub 上的现有模型和 Spaces。本指南将介绍这些功能。

使用 Hugging Face 推理端点的演示

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)。

您可能会注意到第一次推理需要稍长的时间。这是因为推理端点正在服务器中加载模型。之后您会获得一些好处:

  • 推理速度会快得多。
  • 服务器会缓存您的请求。
  • 您将获得内置的自动缩放功能。

在 Spaces 上托管您的 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 的文件上传到仓库中。

从 Spaces 加载演示

您还可以使用和混搭 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(),这与我们使用推理端点加载模型的方法相同。但是,在这里我们指定 srcspaces(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 协同工作的各种方式:

  1. 您可以通过使用 gr.load(),围绕推理端点构建演示,而无需加载模型。
  2. 您可以在 Hugging Face Spaces 上托管 Gradio 演示,无论是使用 GUI 还是完全使用 Python。
  3. 您可以使用 gr.load() 从 Hugging Face Spaces 加载演示,以进行混搭并创建新的 Gradio 演示。
  4. 您可以使用 from_pipeline()transformers pipeline 转换为 Gradio 演示。

🤗

gradio