当前位置:   article > 正文

全网最详细Gradio教程系列5——Gradio Client: python_gradio服务端和客户端

gradio服务端和客户端

前言

本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的一个简易的webui开发框架,它基于FastAPI和svelte,便于部署人工智能模型,是当前热门的非常易于开发和展示机器大语言模型及扩散模型的UI框架。本系列文章不仅从概念上介绍Gradio的详细技术架构、历史、应用场景、与其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,还进行了大量实践讲解。实践部分先讲解了多种不同的安装、运行和部署方式,然后实践了基础类的Interfaces、Blocks和Custom Components,最后对详解Gradio的多种高级特性,比如Gradio-Lite、Gradio Client和Tabular Data Science And Plots等。

本系列文章目录如下:

  1. 《全网最详细Gradio教程系列1——Gradio简介》
  2. 《全网最详细Gradio教程系列2——Gradio的安装与运行》
  3. 《全网最详细Gradio教程系列3——Gradio的3+1种部署方式实践》
  4. 《全网最详细Gradio教程系列4——浏览器集成Gradio-Lite》
  5. 《全网最详细Gradio教程系列5——Gradio Client: python》
  6. 《全网最详细Gradio教程系列5——Gradio Client: javascript》
  7. 《全网最详细Gradio教程系列5——Gradio Client: curl》
  8. 《全网最详细Gradio教程系列6——Interfaces》
  9. 《全网最详细Gradio教程系列7——Blocks》
  10. 《全网最详细Gradio教程系列8——Custom Components》
  11. 《全网最详细Gradio教程系列9——Tabular Data Science And Plots 》

本篇摘要

本章讲解访问API的Gradio Client的三种使用方式:python、javascript和curl。受字数限制,所以分三篇博客发布。

5. Gradio Client的三种使用方式

程序部署完成后,如何将Gradio App作为API访问使用呢,这就用到Gradio Client。本章讲解Gradio Client的三种使用方式:python、javascript和curl,以下分别讲解。

5.1 使用Gradio Python Client

通过Gradio Python Client非常易于将Gradio应用程序作为API使用,本节讲述gradio_client安装、连接Gradio应用程序、查看可用API及其使用方式、job和session等用法。在使用前先安装gradio_client。

5.1.1 安装gradio_client

如果已安装gradio的最新版本(4.39.0),那么gradio_client将作为依赖项包含在内。但请注意,此文档使用了gradio_client的最新版本,如果不确定,请使用以下命令升级,并确保python版本在3.9及以上:

$ pip install --upgrade gradio_client
  • 1

5.1.2 连接Gradio应用程序

Gradio Client可通过URL或SpaceID与任意托管的Gradio应用程序配合使用。

1. 通过URL连接

因此尽管Gradio Client主要用于Hugging Face Spaces上托管的应用程序,但也可用于本地或网络上部署的Gradio应用程序,通过其URL连接。

注意:在使用Gradio Client之前,读者不需要非常详细地了解Gradio库,但有必要大致熟悉Gradio的输入和输出组件概念。

比如还是以本地已部署的hello_name例程为例,代码如下:

from gradio_client import Client

client = Client("http://127.0.0.1:7860/")
result = client.predict(
        name="Felix",
        api_name="/predict"
)
print(result)

>> Loaded as API: http://127.0.0.1:7860/>> Hello Felix!!!!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

程序先从gradio_client中导入对象Client,然后利用URL创建其实例client,这里的URL即可是本地URL也可是互联网上任意Gradio程序的URL。最后使用client的内置函数predict执行预测结果,参数name为输入值,api_name指定接受参数的函数,尤其在多个路径时需要特别指定,后续会讲predict的使用方法。

2. 通过SpaceID连接

当然也可用SpaceID创建Client对象。为增加对Gradio程序的了解,所以引入更多的例程。下面以huggingface Spaces的gradio/text_analysis为例,它对一句话进行语法分析,并输出highlight、json和html三种格式的分析结果,完整地址为:https://huggingface.co/spaces/gradio/text_analysis。那么创建Client对象语句为:client = Client(“gradio/text_analysis”)或client = Client(“https://huggingface.co/spaces/gradio/text_analysis”)。gradio/text_analysis的完整部署代码如下:

import gradio as gr
import os
# 以下括号中的代码也可在对应环境的命令行下运行
os.system('pip install spacy')
os.system('python -m spacy download en_core_web_sm')
import spacy
from spacy import displacy

nlp = spacy.load("en_core_web_sm")

def text_analysis(text):
    doc = nlp(text)
    html = displacy.render(doc, style="dep", page=True)
    html = (
        "<div style='max-width:100%; max-height:360px; overflow:auto'>"
        + html
        + "</div>"
    )
    pos_count = {
        "char_count": len(text),
        "token_count": len(doc),
    }
    pos_tokens = []

    for token in doc:
        pos_tokens.extend([(token.text, token.pos_), (" ", None)])

    return pos_tokens, pos_count, html

demo = gr.Interface(
    text_analysis,
    gr.Textbox(placeholder="Enter sentence here..."),
    ["highlight", "json", "html"],
    examples=[
        ["What a beautiful morning for a walk!"],
        ["It was the best of times, it was the worst of times."],
    ],
)

demo.launch()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

程序运行截图如下:
在这里插入图片描述
对应创建的Client及预测.predict()的代码如下:

from gradio_client import Client

client = Client("gradio/text_analysis")
result = client.predict(
    text="Find the API endpoint below corresponding to your desired function in the app.",
    api_name="/predict"
)
print(result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
3. 辅助:duplicate()和hf_token

虽然可以通过Hugging Face的公共Space作为Gradio Client的API,但当请求太多时会被Hugging Face限速。如果想无限次使用某个Space的Gradio程序,只需使用Client的类方法duplicate(),它将Space复制到本地并创建一个私人Space的Gradio应用。

当访问Hugging Face上私有Space或复制Space时,需传入HF_TOKEN或使用登录后的Hugging Face CLI。

这里使用的例程是Hugging Face上的abidlabs/en2fr,它将英语翻译为法语,其源代码如下:

import gradio as gr

from transformers import pipeline

pipe = pipeline("translation", model="Helsinki-NLP/opus-mt-en-fr")

def predict(text):
  return pipe(text)[0]["translation_text"]
  
title = "English to French Translation"

iface = gr.Interface(
  fn=predict, 
  inputs=[gr.Textbox(label="text", lines=3)],
  outputs='text',
  title=title,
)

iface.launch()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

例程可在本地启动,也可直接使用Hugging Face上的abidlabs/en2fr,这里采用第二种方式。
使用HF_TOKEN方式连接,登录Colab NoteBook(详细用法见下)后在线运行,代码如下:

import os
from gradio_client import Client, file
from google.colab import userdata

# 设置系统变量的hf_token,hf_token需在HuggingFace官网申请
HF_TOKEN = userdata.get('HF_TOKEN')

client = Client.duplicate("abidlabs/en2fr", hf_token=HF_TOKEN, hardware = 'cpu-basic')
client.predict("Hello", api_name='/predict')

# 输出如下
Using your existing Space: https://hf.space/shao918516/en2fr 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/924339
推荐阅读
相关标签