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

相关空间:

使用 Hugging Face 集成

介绍

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

Gradio 具有多种功能,使其非常容易利用 Hub 上的现有模型和空间。本指南将逐步介绍这些功能。

使用Hugging Face推理端点的演示

Hugging Face 提供了一项名为 Serverless Inference Endpoints 的服务,允许您向 Hub 上的模型发送 HTTP 请求。该 API 包含一个慷慨的免费层级,当您想在生产环境中使用时,可以切换到 dedicated Inference Endpoints。Gradio 直接与 Serverless Inference Endpoints 集成,因此您只需指定模型名称(例如 Helsinki-NLP/opus-mt-en-es)即可创建演示,如下所示:

import gradio as gr

demo = gr.load("Helsinki-NLP/opus-mt-en-es", src="models")

demo.launch()

对于Inference Endpoints支持的任何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 上

或者,你可以通过编程方式创建一个Space,利用huggingface_hub客户端库库。以下是一个示例:

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演示,无论是使用图形用户界面还是完全使用Python。
  3. 你可以从Hugging Face Spaces加载演示,使用gr.load()来重新混合并创建新的Gradio演示。
  4. 您可以使用from_pipeline()transformers管道转换为Gradio演示。

🤗