Gradio 智能体与 MCP 黑客马拉松

获奖者
Gradio logo
  1. 其他教程
  2. 使用 Hugging Face 集成

相关 Spaces

使用 Hugging Face 集成

简介

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

Gradio 具有多项功能,可以极其轻松地利用 Hub 上现有的模型和 Spaces。本指南将详细介绍这些功能。

使用 Hugging Face 推理端点的演示

Hugging Face 有一项名为无服务器推理端点 (Serverless Inference Endpoints) 的服务,允许您向 Hub 上的模型发送 HTTP 请求。该 API 包含一个慷慨的免费层级,当您想在生产环境中使用时,可以切换到专用推理端点 (dedicated Inference Endpoints)。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 上托管

或者,您也可以通过编程方式创建 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 演示。例如,您可以将两个现有的 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 对象中。

使用 transformersPipeline 的演示

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. 您可以从 Hugging Face Spaces 加载演示,并使用 gr.load() 进行混搭和创建新的 Gradio 演示。
  4. 您可以使用 from_pipeline()transformers pipeline 转换为 Gradio 演示。

🤗