博主原文链接:https://www.yourmetaverse.cn/llm/249/
Gradio Blocks:queue、integrate和load方法介绍
Gradio是一个功能强大的库,提供了多种方法来构建交互式Web应用和演示。其中之一是Gradio的Blocks模块,它为用户提供了更大的自由度和控制权,使用户能够创建更加自定义的Web应用和演示。本文将介绍Gradio的Blocks模块中的queue、integrate和load方法,这些方法将进一步扩展了Gradio的功能,使用户能够更灵活地控制应用程序的行为和集成其他库。
1. 使用queue方法控制请求处理速率
queue方法允许用户通过创建一个队列来控制请求的处理速率,从而实现更好的控制。用户可以设置一次处理的请求数量,并向用户显示他们在队列中的位置。
示例用法:
with gr.Blocks() as demo:
button = gr.Button(label="Generate Image")
button.click(fn=image_generator, inputs=gr.Textbox(), outputs=gr.Image())
demo.queue(concurrency_count=3)
demo.launch()
参数介绍:
- concurrency_count:并发处理请求的工作线程数,默认为1。增加此值将增加请求处理的速率,但也会增加队列的内存使用量。
- status_update_rate:状态更新的频率,以秒为单位。默认为"auto",表示队列将在每个作业完成时向所有客户端发送状态估计。
2. 使用integrate方法与其他库集成
integrate方法是Gradio的一个通用方法,用于与其他库进行集成。此方法应在launch()方法之后运行。
示例用法:
with gr.Blocks() as demo:
def get_time():
return datetime.datetime.now().time()
dt = gr.Textbox(label="Current time")
demo.load(get_time, inputs=None, outputs=dt)
demo.launch()
参数介绍:
- comet_ml:与comet_ml库进行集成,将界面显示在Comet dashboard上。
- wandb:与wandb模块进行集成,将界面显示在WandB dashboard上。
- mlflow:与mlflow模块进行集成,将界面显示在ML Flow dashboard上。
3. 使用load方法加载演示
load方法既可以作为类方法使用,也可以作为实例方法使用,但它们具有完全不同的功能。
类方法:从Hugging Face Spaces仓库加载演示,并在本地创建并返回一个Blocks实例。注意:这个方法将被弃用。建议使用等效的gradio.load()
方法。
示例用法:
import gradio as gr
import datetime
with gr.Blocks() as demo:
def get_time():
return datetime.datetime.now().time()
dt = gr.Textbox(label="Current time")
demo.load(get_time, inputs=None, outputs=dt)
demo.launch()
参数介绍:
- fn:要封装为界面的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回一个值或值的元组,其中元组的每个元素对应一个输出组件。
- inputs:作为输入的Gradio组件列表。如果函数不需要输入,则应该是一个空列表。
- outputs:作为输出的Gradio组件列表。如果函数不返回输出,则应该是一个空列表。
- api_name:定义此参数将在API文档中公开该端点。
- scroll_to_output:如果为True,在完成后将滚动到输出组件。
- show_progress:显示进度动画,表示正在等待处理。
- queue:如果为True,在存在队列的情况下,将请求放入队列。
- batch:如果为True,则函数应处理一批输入,即接受每个参数的输入值列表。列表应具有相等的长度(最多为max_batch_size)。函数必须返回一个元组的列表(即使只有一个输出组件),其中元组的每个元素对应一个输出组件。
- max_batch_size:如果从队列中调用此方法,最多可以批处理的输入数量。
- preprocess:如果为False,则在运行函数之前不会运行组件数据的预处理。
- postprocess:如果为False,则在将函数输出返回给浏览器之前不会运行组件数据的后处理。
- every:以指定的时间间隔运行此事件。以秒为单位解释。必须启用队列。
- name:模型的名称(例如,“gpt2"或"facebook/bart-base”)或空间的名称(例如,“flax-community/spanish-gpt2”),可以包含前缀作为
src
(例如,“models/facebook/bart-base”)。 - src:模型的源:
models
或spaces
(如果提供了前缀作为name
)。 - api_key:用于加载私有Hugging Face Hub模型或空间的可选访问令牌。
4. 参数说明
以下是queue
、integrate
和load
方法的参数介绍,包括数据类型和默认值,并附上每个参数的意义:
方法 | 参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|---|
queue | concurrency_count | int | 1 | 并发处理请求的工作线程数量。增加此数字将增加请求处理速度,但也会增加队列的内存使用。 |
status_update_rate | float | Literal[‘auto’] | “auto” | 如果为"auto",则队列在每个任务完成时将状态估计发送给所有客户端。否则,队列将按照参数设置的秒数定期发送状态。 | |
client_position_to_load_data | int | None | None | 已弃用。此参数已弃用,不再起作用。 | |
default_enabled | bool | None | None | 已弃用。此参数已弃用,不再起作用。 | |
api_open | bool | True | 如果为True,则开放后端的REST路由,允许直接向这些端点发出请求,跳过队列。 | |
max_size | int | None | None | 队列在任何给定时刻存储的事件的最大数量。如果队列已满,则不会添加新的事件,并向用户显示队列已满的消息。如果为None,则队列大小不受限制。 | |
integrate | comet_ml | Any | None | None | 如果提供comet_ml Experiment对象,将与实验集成,并显示在Comet仪表板上。 |
wandb | ModuleType | None | None | 如果提供wandb模块,将与之集成,并显示在WandB仪表板上。 | |
mlflow | ModuleType | None | None | 如果提供mlflow模块,将与之集成,并显示在ML Flow仪表板上。 | |
load | fn | Callable | None | None | 实例方法 - 要包装为接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回一个值或值的元组,其中元组的每个元素对应一个输出组件。 |
inputs | List[Component] | None | None | 实例方法 - 用作输入的Gradio组件列表。如果函数不需要输入,则应该是一个空列表。 | |
outputs | List[Component] | None | None | 实例方法 - 用作输出的Gradio组件列表。如果函数不返回输出,则应该是一个空列表。 | |
api_name | str | None | None | 实例方法 - 定义此参数将在API文档中公开该端点。 | |
scroll_to_output | bool | False | 实例方法 - 如果为True,在完成后将滚动到输出组件。 | |
show_progress | str | “full” | 实例方法 - 如果为True,在等待时显示进度动画。 | |
queue | Any | None | None | 实例方法 - 如果为True,在存在队列的情况下,将请求放入队列。 | |
batch | bool | False | 实例方法 - 如果为True,则函数应处理一批输入,即接受每个参数的输入值列表。函数必须返回一个元组的列表,其中元组的每个元素对应一个输出组件(即使只有一个输出组件)。 | |
max_batch_size | int | 4 | 实例方法 - 如果从队列中调用此方法,最多可以批处理的输入数量。 | |
preprocess | bool | True | 实例方法 - 如果为False,在运行函数之前不会运行组件数据的预处理。 | |
postprocess | bool | True | 实例方法 - 如果为False,在将函数输出返回给浏览器之前不会运行组件数据的后处理。 | |
every | float | None | None | 实例方法 - 按指定的时间间隔运行此事件(以秒为单位)。必须启用队列。 | |
name | str | None | None | 类方法 - 模型的名称或空间的名称。可以包含src 作为前缀。 | |
src | str | None | None | 类方法 - 模型或空间的源。 | |
api_key | str | None | None | 类方法 - 用于加载私有Hugging Face Hub模型或空间的可选访问令牌。 | |
alias | str | None | None | 类方法 - 可选的字符串,用作加载的模型的名称。仅适用于加载Gradio 2.x的空间。 |
通过这些方法和参数,Gradio的Blocks模块提供了更大的灵活性和控制力,使用户能够创建更加定制化和功能丰富的交互式Web应用和演示。用户可以根据自己的需求和场景选择适合的方法和参数来构建出独特的应用程序和演示。
5. 总结
Gradio的Blocks模块为用户提供了创建自定义交互式Web应用和演示的强大工具。通过queue、integrate和load等方法,用户可以更好地控制请求处理速率、与其他库进行集成,并加载现有的演示。这些方法为用户提供了更多的灵活性和定制化的选择,使他们能够构建出更加功能丰富和个性化的应用程序和演示。无论是构建机器学习模型的界面,还是进行数据可视化,Gradio的Blocks模块都将是一个强大而便捷的工具。