首页 > 其他分享 >Gradio官方学习文档(二)

Gradio官方学习文档(二)

时间:2024-05-25 11:29:01浏览次数:23  
标签:gr demo Gradio yield streaming 官方 文档 True

一、队列

多用户访问Gradio app排队机制,支持的类:gr.Interface, gr.Blocks, and gr.ChatInterface
示例:

#在类后使用queue()函数,设定`default_concurrency_limit` = 5(不声明,默认值为1)
demo = gr.Interface(...).queue(default_concurrency_limit=5)
demo.launch()

二、流式输出(yield)

在Gradio中,类声明streaming=True 和生成器 yield 都是用于处理实时数据流的技术,但它们在工作方式和应用场景上有所不同。

类声明streaming=True

streaming=True目前只支持Audio和Image类

  • 使用 streaming=True 可以将数据流拆分成多个小块,并在每个小块准备好后立即将其发送给Gradio界面。这使得Gradio能够实时更新界面,而无需等待整个数据流完全准备好。
  • 使用 streaming=True 需要使用 yield 生成器来逐个生成数据块。
  • streaming=True 适用于需要实时更新界面的场景,例如实时监控传感器数据或生成实时音频/视频。
    示例:gr.Audio(source='microphone', streaming=True)

生成器 yield

  • 生成器 yield 是一种用于生成序列的函数。它每次调用时都会返回序列中的下一个元素,但不会立即计算整个序列。
  • 生成器 yield 可以与 streaming=True 一起使用,也可以单独使用。
  • 生成器 yield 适用于需要按需生成数据的场景,例如生成大型数据集或进行迭代计算。

区别对比:

特性streaming=True生成器 yield
工作方式将数据流拆分成多个小块,并在每个小块准备好后立即将其发送给Gradio界面。每次调用时都会返回序列中的下一个元素,但不会立即计算整个序列。
应用场景实时更新界面按需生成数据
适用范围Audio和Image类几乎所有

示例:


import gradio as gr
import numpy as np
import time
#Steps步渲染出目标图片,实现流式输出
def fake_diffusion(steps):
    rng = np.random.default_rng()
    for i in range(steps):
        time.sleep(1)
        image = rng.random(size=(600, 600, 3))
        yield image
    image = np.ones((1000,1000,3), np.uint8)
    image[:] = [255, 124, 0]
    yield image


demo = gr.Interface(fake_diffusion,
                    inputs=gr.Slider(1, 10, 3, step=1),#定义拖拉条,默认值为3,拖拉单位为1
                    outputs="image")

demo.launch()

yield流式输出

三、警示通知

报错:

gr.Error('This is an error.')    

通知:

gr.Info('This is some info.')

gr.Warning('This is a warning.')

InfoWarning这两个只有颜色区别
alert

四、主题风格

使用方法

demo = gr.Interface(..., theme=gr.themes.Monochrome())

要进一步拥有样式设计的能力,您可以向Gradio应用程序传递任何CSS(以及自定义JavaScript)。

预览主题切换示例:

import gradio as gr

gr.themes.builder()

themes-mon
themes-soft

其他主题的细节设置请看官访文档:

themes-guild

五、进度条

示例:

import gradio as gr
import time

#在函数定义添加参数gr.Progress()即可,inputs和outputs不需要改变
def slowly_reverse(word, progress=gr.Progress()):
    #初始化
    progress(0, desc="Starting")
    time.sleep(1)
    #定义处理的显示单位长度
    progress(0.05)
    new_string = ""
    for letter in progress.tqdm(word, desc="Reversing"):
        time.sleep(0.25)
        new_string = letter + new_string
    return new_string

demo = gr.Interface(slowly_reverse, gr.Text(), gr.Text())

demo.launch()

Progess
也可以和tqdm进行耦合,如果想使用tqdm,只需要修改为gr.Progress(track_tqdm=True),前提是有tqdm.tqdm在你的函数体内。

六、批处理函数(对多个请求,并行处理加速)

Gradio支持传递批处理函数的功能。批处理函数就是接收输入列表并返回预测列表的函数。
例如,这里是一个批处理函数,它接收两个输入列表(一个单词列表和一个整数列表),并返回修剪后的单词列表作为输出:

import time

def trim_words(words, lens):
    trimmed_words = []
    time.sleep(5)
    for w, l in zip(words, lens):
        trimmed_words.append(w[:int(l)])
    return [trimmed_words]

使用批处理函数的优势在于,如果启用排队,Gradio服务器可以
自动批处理传入的请求并并行处理,可能加快演示速度

以下是相关Gradio代码示例(请注意batch=Truemax_batch_size=16):
gr.Interface类使用方式:

demo = gr.Interface(
    fn=trim_words, 
    inputs=["textbox", "number"], 
    outputs=["output"],
    batch=True, 
    max_batch_size=16 #最大批处理大小
)

demo.launch()

gr.Blocks使用方式(之后会提到gr.Blocks)

import gradio as gr

with gr.Blocks() as demo:
    with gr.Row():
        word = gr.Textbox(label="word")
        leng = gr.Number(label="leng")
        output = gr.Textbox(label="Output")
    with gr.Row():
        run = gr.Button()

    event = run.click(trim_words, [word, leng], output, batch=True, max_batch_size=16)

demo.launch()

在上面的例子中,可以并行处理16个请求(总推理时间为5秒),而不是每个请求单独处理(总推理时间为80秒)。
并行5秒,串行80秒,并行提速。

标签:gr,demo,Gradio,yield,streaming,官方,文档,True
From: https://blog.csdn.net/2301_78453609/article/details/139191133

相关文章

  • Gradio官方文档学习记录(一)
    一、Gradio基本使用方式:Gradio是一个开源的Python包,允许您快速为您的机器学习模型、API或任意Python函数构建演示或Web应用程序。然后,您可以使用Gradio内置的分享功能在几秒钟内分享您的演示或Web应用程序链接。无需JavaScript、CSS或Web主机经验。基本使用:importgradi......
  • 利用Doxygen生成代码文档
    说明在vscode上使用doxygendocumentgenerate写好代码后,想要生成文档的话可以使用doxygen来进行生成下载Doxygendownload打开安装好后打开Doxywizard配置......
  • 前端学习-Dart官方文档学习-001-基础表达式
    学习链接变量创建并初始化变量//不指定变量类型,自动推断为String;可通过指定类型改变varname='Bob';//一个对象不受限于单一类型时,使用Object或dynamic(谨慎使用)Objectname='Bob';dynamicname='Bob';//直接指定类型Stringname='Bob';空安全空安全能够......
  • 社区医院|基于SprinBoot+vue的社区医院管理服务系统(源码+数据库+文档)
    社区医院管理服务系统目录基于SprinBoot+vue的社区医院管理服务系统一、前言二、系统设计三、系统功能设计 1系统功能模块2管理员功能模块3用户功能模块4医生功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博......
  • 家政服务|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)
    家政服务管理平台目录基于SprinBoot+vue的家政服务管理平台一、前言二、系统设计三、系统功能设计 1前台模块设计2后台功能模块5.2.1管理员功能模块5.2.2用户功能模块5.2.3服务人员功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推......
  • 家乡特色|基于SprinBoot+vue的家乡特色推荐系统(源码+数据库+文档)
    家乡特色推荐系统目录基于SprinBoot+vue的家乡特色推荐系统一、前言二、系统设计三、系统功能设计 1系统功能模块2管理员功能模块3用户功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设......
  • 家政服务|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)
    家政服务管理平台目录基于SprinBoot+vue的家政服务管理平台一、前言二、系统设计三、系统功能设计 1前台模块设计2后台功能模块5.2.1管理员功能模块5.2.2用户功能模块5.2.3服务人员功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推......
  • 家乡特色|基于SprinBoot+vue的家乡特色推荐系统(源码+数据库+文档)
    家乡特色推荐系统目录基于SprinBoot+vue的家乡特色推荐系统一、前言二、系统设计三、系统功能设计 1系统功能模块2管理员功能模块3用户功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设......
  • 家政服务|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)
    家政服务管理平台目录基于SprinBoot+vue的家政服务管理平台一、前言二、系统设计三、系统功能设计 1前台模块设计2后台功能模块5.2.1管理员功能模块5.2.2用户功能模块5.2.3服务人员功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推......
  • 家政服务|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)
    家政服务管理平台目录基于SprinBoot+vue的家政服务管理平台一、前言二、系统设计三、系统功能设计 1前台模块设计2后台功能模块5.2.1管理员功能模块5.2.2用户功能模块5.2.3服务人员功能模块四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推......