gradio如何实现修改代码后自动重载运行

news2024/12/26 15:18:00

使用自动重载加速开发

前提条件:本指南要求你了解 Blocks。在阅读本指南之前,请确保你已经阅读了Blocks指南。

本指南涵盖自动重载、在Python IDE中的重载,以及在Jupyter Notebooks中使用Gradio。

为什么需要自动重载?

当你使用 Blocks 构建 Gradio 演示时,你可能会发现每次测试更改时都要重新运行代码非常麻烦。

为了让你更快、更方便地编写代码,我们简化了在 Python IDE(如 VS Code、Sublime Text、PyCharm 等)中开发时,快速“重载”Gradio应用的过程。我们还开发了一种类似的“魔法命令”,可以在你使用 Jupyter Notebooks(或类似环境如 Colab)时更快地重新运行单元格。

本指南将涵盖这两种方法,因此无论你如何编写Python代码,学习完本指南后,你都能更快地构建Gradio应用。

Python IDE 重载 🔥

如果你使用Python IDE构建Gradio Blocks,你的代码文件(假设名为 run.py)可能如下所示:

import gradio as gr

with gr.Blocks() as demo:
    gr.Markdown("# Greetings from Gradio!")
    inp = gr.Textbox(placeholder="What is your name?")
    out = gr.Textbox()

    inp.change(fn=lambda x: f"Welcome, {x}!",
               inputs=inp,
               outputs=out)

if __name__ == "__main__":
    demo.launch()

问题是,每次你想更改布局、事件或组件时,都需要关闭并重新运行应用,即使用 python run.py

你可以通过将 python 改为 gradio,以 重载模式 运行代码来避免这种情况:

在终端中运行 gradio run.py。就是这么简单!

现在,你会看到类似如下的内容:

Watching: '/Users/freddy/sources/gradio/gradio', '/Users/freddy/sources/gradio/demo/'

Running on local URL:  http://127.0.0.1:7860

关键是包含 Watching... 的这一行。Gradio 会观察 run.py 文件所在的目录,如果文件发生更改,它将自动重新运行文件。这样你就可以专注于编写代码,而你的Gradio演示将自动刷新 🥳

提示gradio 命令无法检测 launch() 方法中传递的参数,因为在重载模式下,launch() 方法不会被调用。例如,设置 authshow_error 将不会在应用中反映出来。

在使用重载模式时,还有一个重要事项:Gradio 会特意寻找代码中名为 demo 的Gradio Blocks/Interface演示。如果你将演示命名为其他名称,则需要将演示名称作为第二个参数传递。因此,如果你的 run.py 文件如下所示:

import gradio as gr

with gr.Blocks() as my_demo:
    gr.Markdown("# Greetings from Gradio!")
    inp = gr.Textbox(placeholder="What is your name?")
    out = gr.Textbox()

    inp.change(fn=lambda x: f"Welcome, {x}!",
               inputs=inp,
               outputs=out)

if __name__ == "__main__":
    my_demo.launch()

那么你需要像这样启动重载模式:gradio run.py --demo-name=my_demo

默认情况下,Gradio 对脚本使用 UTF-8 编码。对于重载模式,如果你使用的是 UTF-8 以外的编码格式(如 cp1252),请确保按照以下步骤进行操作:

  1. 配置Python脚本的编码声明,例如:# -*- coding: cp1252 -*-
  2. 确保你的代码编辑器已识别该编码格式。
  3. 以如下方式运行:gradio run.py --encoding cp1252

🔥 如果你的应用程序接受命令行参数,也可以传递它们。例如:

import gradio as gr
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--name", type=str, default="User")
args, unknown = parser.parse_known_args()

with gr.Blocks() as demo:
    gr.Markdown(f"# Greetings {args.name}!")
    inp = gr.Textbox()
    out = gr.Textbox()

    inp.change(fn=lambda x: x, inputs=inp, outputs=out)

if __name__ == "__main__":
    demo.launch()

可以这样运行:gradio run.py --name Gretel

顺便提一下,如果你更改了 run.py 源代码或 Gradio 源代码,自动重载都会触发。这意味着,如果你决定 为Gradio做贡献,这也会很有用 ✅

控制重载 🎛️

默认情况下,重载模式会在每次修改时重新运行整个脚本。但有些情况下这并不可取。例如,加载机器学习模型通常只需执行一次以节省时间。此外,一些使用 C 或 Rust 扩展的Python库(如 numpytiktoken)在重载时会抛出错误。

在这些情况下,你可以将不希望重新运行的代码放在 if gr.NO_RELOAD: 代码块中。以下是一个示例,展示如何在开发过程中仅加载一次 transformers 模型。

提示gr.NO_RELOAD 的值为 True。因此,在完成开发并想在生产环境中运行时,你无需更改脚本,只需使用 python 而不是 gradio 运行文件即可。

import gradio as gr

if gr.NO_RELOAD:
    from transformers import pipeline
    pipe = pipeline("text-classification", model="cardiffnlp/twitter-roberta-base-sentiment-latest")

demo = gr.Interface(lambda s: pipe(s), gr.Textbox(), gr.Label())

if __name__ == "__main__":
    demo.launch()

Jupyter Notebook 魔法命令 🔮

如果你在 Jupyter Notebooks(或 Colab Notebooks 等)中开发代码,怎么办?我们也有适合你的工具!

我们开发了一个 魔法命令,可以为你创建并运行 Blocks 演示。要使用它,在笔记本的顶部加载 Gradio 扩展:

%load_ext gradio

然后,在你开发Gradio演示的单元格中,简单地在顶部编写魔法命令 %%blocks,然后像往常一样编写布局和组件:

%%blocks

import gradio as gr

with gr.Blocks() as demo:
    gr.Markdown(f"# Greetings {args.name}!")
    inp = gr.Textbox()
    out = gr.Textbox()

    inp.change(fn=lambda x: x, inputs=inp, outputs=out)

注意:

  • 你不需要启动演示 — Gradio 会为你自动完成!

  • 每次你重新运行单元格时,Gradio 都会在相同端口和底层web服务器上重新渲染你的应用。这意味着你会比正常重新运行单元格看到更快的变化。

这就是它在 jupyter notebook 中的样子:

在这里插入图片描述

🪄 这在 Colab notebooks 中同样有效!这里有一个Colab notebook,你可以看到 Blocks 魔法命令的实际效果。尝试做一些更改并重新运行包含Gradio代码的单元格!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#归并排序算法

前言 归并排序是一种常见的排序算法,它采用分治法的思想,在排序过程中不断将待排序序列分割成更小的子序列,直到每个子序列中只剩下一个元素,然后将这些子序列两两合并并排序,最终得到一个有序的序列。 归并排序实现原…

蓝牙芯片 vs. 蓝牙模块:如何为蓝牙方案做出最佳选择?

不论您是设计全新的低功耗蓝牙产品,还是升级现有产品,开发者都面临的一个关键的选择:是采用蓝牙芯片还是蓝牙模块呢?作为蓝牙技术领域的资深专家,信驰达将从蓝牙芯片与蓝牙模块的各自优缺点进行分析,帮助您…

通过访存地址获取主存数据的过程

目录 1.根据访存地址在Cache中查找数据 2.如果在Cache中命中 3.如果没有命中 4.数据送CPU 5.做几道题: 主要厘清思路,中间细节需自行补充! 1.根据访存地址在Cache中查找数据 ① 访存地址的结构会根据Cache和主存之间的映射方式不同而改变。映射方式…

【MySql】 mysql的组从复制

mysql的组从复制 配置mastesr [rootmysql-node10 ~]# vim /etc/my.cnf [mysqld] datadir/data/mysql socket/data/mysql/mysql.sock symbolic-links0 log-binmysql-bin server-id1 [rootmysql-node10 ~]# /etc/init.d/mysqld restart #进入数据库配置用户权限 [rootmysql-nod…

方差稳定变换(Variance Stabilizing Transformation)介绍,专业生物学领域统计

介绍 方差稳定变换(Variance Stabilizing Transformation,VST)是一种统计方法,用于将一个具有异方差性的随机变量(即方差随着均值的变化而变化的变量)转换为方差相对稳定的变量。这种转换在数据分析和建模…

【网络】TCP协议详解(下)

上文介绍了TCP传输控制协议的报头,并且渗透了TCP保证可靠性的策略:如流量控制、按序到达、确认应答机制以及超时重传。本文继续讲解TCP剩下的协议,剩下俩个大话题,难度都比较麻烦。 本文将介绍TCP协议最常见的三次握手和四次挥手…

腾讯地图SDK Android版开发 7 覆盖物示例1

腾讯地图SDK Android版开发 7 覆盖物示例1 前言界面布局MapMarker类常量成员变量初始值Marker点击事件Marker拖拽事件创建覆盖物移除覆盖物设置属性 MapMarkerActivity类控件响应事件 运行效果图 前言 文本介绍Marker的常用属性、交互和碰撞示例。 示例功能如下: …

【计算机网络】认识端口号 认识传输层协议 认识网络字节序 认识socket套接字

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

收银系统源码—千呼新零售【硬件篇】

连锁店收银系统源码—多商户平台入驻商城已上线-CSDN博客文章浏览阅读1k次。零售行业连锁店收银管理系统多商户入驻本地生活即时零售平台商城https://blog.csdn.net/V15850290240/article/details/141310629 详细介绍请查看上方文章↑↑↑ 详细介绍请查看上方文章↑↑↑ 详细…

[大模型]配置文件-Langchain-Chatchat-V0.3 (1)

文章目录 简述本地配置配置文件model_settings.yaml使用Ollama配置模型配置 使用Xinference配置模型配置修改默认使用的模型 对话基础对话知识库对话 简述 针对Langchain-Chatchat-V0.3版本,对配置文件与模型使用说明,本文建议使用Ollama配合Chatchat使…

用Python实现9大回归算法详解——09. 决策树回归算法

1. 决策树回归的基本概念 决策树回归(Decision Tree Regression)是一种树状结构的回归模型,通过对数据集进行递归分割,将数据分成更小的子集,并在每个子集上进行简单的线性回归。决策树的核心思想是通过选择特征及其阈…

centos7.9系统安装cloudpods并使用ceph存储(二)

1.ceph安装 1.1 环境准备 配置hosts: $ vim /etc/hosts 10.121.x.x node01设置ssh无密码登录: # ssh-keygen -t rsa # ssh-copy-id -i /root/.ssh/id_rsa node01关闭selinux、firewalld # setenforce 0 # sed -i "s#SELINUXenforcing#SELINUXd…

国自然研究热点、“C位出圈”的类器官研究离不开细胞因子

前 言: 目前,类器官已从基础研究发展至药物开发和精准治疗。在疾病建模、药物开发、肿瘤研究、再生医学、精准医学等领域发展迅速。类器官与体内器官在功能和结构上的高度相似,使其广泛用于发育生物学和疾病建模。传统的2D细胞模型和模式动物…

k8s之Pod对象多种调度方式

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Redis数据库一文入门

Redis 是一个用于存储和管理数据的开源内存数据结构存储系统。它以其高性能和丰富的数据结构支持而闻名,是构建高效、可扩展应用程序的理想选择。本文将带你入门 Redis,并探讨其基本概念、安装步骤和一些常见的使用场景。 什么是 Redis? Re…

疯感工牌的风还是吹到了L4级无人驾驶

俗话说得好,打工人哪有不疯的? 最近你是不是也被“发疯工牌梗”刷屏了 一张张看似情绪稳定的工牌 以独特的方式展现了属于打工人自己的个性 这不,疯感工牌的风也吹到了无人驾驶 无人车也有了属于自己的时尚单品 看看它们都是如何介绍自己的&a…

Wot Design Uni:一个高颜值、轻量化的uni-app组件库,uni-app生态的新宠

一、介绍 wot-design-uni组件库基于vue3Typescript构建,参照wot design的设计规范进行开发,提供70高质量组件,支持暗黑模式、国际化和自定义主题,旨在给开发者提供统一的UI交互,同时提高研发的开发效率。 特性&#x…

新的网络钓鱼方法针对 Android 和 iPhone 用户

关注公众号网络研究观获取更多内容。 ESET 研究人员发现了一种针对 Android 和 iPhone 用户的不常见网络钓鱼活动。 他们分析了一起针对捷克某知名银行客户的网络钓鱼案例。 网络钓鱼流程 这种技术值得注意,因为它会从第三方网站安装钓鱼应用程序,而无…

数据可视化大屏模板-美化图表

Axure作为一款强大的原型设计软件,不仅擅长构建交互式界面,更在数据可视化方面展现出了非凡的创意与实用性。今天,就让我们一起探索Axure设计的几款精美数据可视化大屏模板,感受数据之美。 立体图表的视觉冲击力 Axure的数据可视…

【大模型理论篇】基于3D可视化视角理解GPT

1. 背景介绍 先前我们通过多篇技术文章来分析大模型的原理,包括: 《Transformer原理及关键模块深入浅出》《GPT系列预训练模型原理讲解》、《大模型时代下Bert去哪啦》、《关于LLaMA 3.1 405B以及小模型的崛起》、《LLaMA3结构关键模块分析》、《强化学习…