全网最详细Gradio教程系列——浏览器集成部署Gradio-Lite

news2024/11/23 16:50:15

全网最详细Gradio教程系列——浏览器集成Gradio-Lite

  • 前言
  • 本篇摘要
  • 4 浏览器集成Gradio-Lite
    • 4.1 Gradio-Lite介绍
    • 4.2 构建Hello World例程
    • 4.3 routines
      • 4.3.1 multiple files
      • 4.3.2 Additional Requirements
      • 4.3.3 SharedWorker mode
      • 4.3.4 Code and Demo Playground
    • 4.4 与Transformers.js一起构建无服务器的ML Apps
      • 4.4.1 transformers_js_py
      • 4.4.2 定制化model、pipeline和UI
    • 4.5 优缺点分析
      • 4.5.1 @gradio/lite的优点
      • 4.5.2 局限性
  • 参考文献

前言

本系列文章主要介绍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教程系列——Gradio简介》
  2. 《全网最详细Gradio教程系列——Gradio的安装与运行》
  3. 《全网最详细Gradio教程系列——Gradio的3+1种部署方式实践》
  4. 《全网最详细Gradio教程系列——浏览器集成Gradio-Lite》
  5. 《全网最详细Gradio教程系列——Gradio Client》
  6. 《全网最详细Gradio教程系列——Interfaces》
  7. 《全网最详细Gradio教程系列——Blocks》
  8. 《全网最详细Gradio教程系列——Custom Components》
  9. 《全网最详细Gradio教程系列——Tabular Data Science And Plots 》

本篇摘要

本篇详细介绍了Gradio的第四种部署方式:无服务器的浏览器集成部署Gradio-Lite。

4 浏览器集成Gradio-Lite

4.1 Gradio-Lite介绍

传统上,Gradio应用程序依赖服务器端基础设施来运行,这对需要托管应用程序的开发人员来说可能是一个阻碍,Gradio-Lite应运而生。本节我们将探讨Gradio-Lite是什么,浏览示例代码,并讨论它为运行gradio应用程序提供的好处。

Gradio-lite (官方资料也写作@gradio/lite)是一个JavaScript库,它利用Pyodide直接在web浏览器中运行gradio应用程序。Pyodide是基于WebAssembly的 py平台,它可以在浏览器环境下执行python代码。WebAssembly(简称wasm)是一个虚拟指令集体系架构(virtual ISA),是面向Web的二进制格式,整体架构包括核心的ISA定义、二进制编码、程序语义的定义与执行,以及面向不同的嵌入环境(如Web)的应用编程接口(WebAssembly API)。其初始目标是为C/C++等语言编写的程序经过编译,在确保安全和接近原生应用的运行速度更好地在Web平台上运行。

而使用Gradio-Lite可以为gradio应用程序编写常规Python代码,并在浏览器中无缝运行,而无需服务器端的基础设施。

4.2 构建Hello World例程

下面我们通过构建示例程序Hello World来揭示Gradio-Lite的用法。

<html>
	<head>
		<script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.js"></script>
		<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.css" />
	</head>
	<body>
		<gradio-lite>
		import gradio as gr

		def greet(name):
			return "Hello, " + name + "!"

		gr.Interface(greet, "textbox", "textbox").launch()
		</gradio-lite>
	</body>
</html>

构建步骤如下:

  1. 首先,创建一个新的HTML文件并命名,如hello.html,并引入与@gradio/lite相关的JavaScript和CSS包,见内容;
  2. 在包含Gradio程序的HTML页内的标签内创建开合标签,也可以设置内的属性,比如theme;
  3. 在标签内添加python格式的Gradio代码。

注意:作者在用firefox打开HTML文件时,遇到错误提示无法打开:Gtk-Message: Failed to load module “canberra-gtk-module”,搜索解决办法无果,后来用chromium,虽然同样报错但可以顺利打开并正确执行Gradio程序,读者也可以尝试其它的浏览器。运行输出信息如下:

$ chromium gradio_file.html 
(chrome:46749): Gtk-WARNING **: 20:08:24.912: GTK+ module /snap/chromium/2890/gnome-platform/usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so cannot be loaded.
GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported.
Gtk-Message: 20:08:24.912: Failed to load module "canberra-gtk-module"
[46749:46749:0627/200825.142461:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.ScreenSaver.GetActive: object_path= /org/freedesktop/ScreenSaver: org.freedesktop.DBus.Error.NotSupported: This method is not implemented

等待几秒钟后,运行效果如下图所示:
在这里插入图片描述

4.3 routines

为了加深理解和实践应用,我们多展示几个Gradio-Lite例程。

4.3.1 multiple files

第一个示例,多文件集成。在@gradio/lite应用程序中添加多个文件非常简单:使用标记。您可以有任意多个<gradio file>标签,但每个标签都需要有一个name属性,并且gradio应用程序的入口点应该有entrypoint属性。

html的head和body标签部分与上例相同,故省略,例程代码如下:

<gradio-lite>

<gradio-file name="app.py" entrypoint>
import gradio as gr
from utils import add

demo = gr.Interface(fn=add, inputs=["number", "number"], outputs="number")

demo.launch()
</gradio-file>

<gradio-file name="utils.py" >
def add(a, b):
	return a + b
</gradio-file>

</gradio-lite>

4.3.2 Additional Requirements

第二个示例,导入附加requirements。如果您的Gradio应用程序有其他要求,通常可以使用micropip将其安装在浏览器中。我们创建了一个包装器,使其非常方便:只需以与requirements.txt相同的语法列出您的需求,并用标签将其括起来。

本例我们安装transformers_js_py,直接在浏览器中运行文本分类模型!代码如下:

<gradio-lite>

<gradio-requirements>
transformers_js_py
</gradio-requirements>

<gradio-file name="app.py" entrypoint>
from transformers_js import import_transformers_js
import gradio as gr

transformers = await import_transformers_js()
pipeline = transformers.pipeline
pipe = await pipeline('sentiment-analysis')

async def classify(text):
	return await pipe(text)

demo = gr.Interface(classify, "textbox", "json")
demo.launch()
</gradio-file>

</gradio-lite>

运行效果如下图:
在这里插入图片描述

4.3.3 SharedWorker mode

第三个示例,共享工作空间模式。默认情况下,Gradio-Lite在具有Pyodide的Web工作空间中执行Python代码,并且每个Gradio-Lite应用程序都有自己的工作空间。它有一些好处,例如环境隔离。然而,当同一页面中有多个Gradio-Lite应用程序时,可能会导致性能问题,如内存使用率高,因为每个应用程序都需加载自己的工作空间和Pyodide的py平台。

在这种情况下,我们可以使用SharedWorker模式在多个Gradio-Lite应用程序之间共享一个SharedWorker中的单个Pyodide的py平台。

要启用SharedWorker模式,将shared-worker属性设置在<gradio-lite>标签内即可:

<!-- These two Gradio-Lite apps share a single worker -->

<gradio-lite shared-worker>
import gradio as gr
# ...
</gradio-lite>

<gradio-lite shared-worker>
import gradio as gr
# ...
</gradio-lite>

使用SharedWorker模式时,应注意以下几点:

  1. 这些应用程序共享相同的Python环境,这意味着它们可以访问相同的模块和对象。例如,如果一个应用程序对某些模块进行了更改,也会影响到其他应用程序。
  2. 文件系统在应用程序之间共享。因为每个应用程序的文件都挂载在主目录中,因此每个应用程序都可以访问其他应用程序的文档。

4.3.4 Code and Demo Playground

第四个示例,代码和demo空间。如果您希望代码与演示并排,只需在gradio-lite元素中设置playground属性即可。这将创建一个可以同步更新代码和demo的交互式空间,同时也可以将布局设置为“vertical”或“horizontal”,即垂直或水平展示代码编辑器和预览页面(默认与页面的宽度一致)。

示例代码如下:

<gradio-lite playground layout="horizontal">
import gradio as gr

gr.Interface(fn=lambda x: x,
			inputs=gr.Textbox(),
			outputs=gr.Textbox()
		).launch()
</gradio-lite>

运行效果如下图所示:
在这里插入图片描述

4.4 与Transformers.js一起构建无服务器的ML Apps

Gradio和Transformers是构建具有web界面的机器学习应用程序的强大组合,这两个库都有可以完全在浏览器中运行的无服务器版本:Gradio-Lite和Transformers.js。在本节,我们将介绍如何使用Gradio-Lite和Transformers.js创建无服务器的机器学习应用程序。我们只需在一个静态HTML文件中编写Python代码并托管它,而无需设置服务器端的py平台。

常规Transformers库与浏览器环境不兼容,而Transformers.js是Transformers库的JavaScript版本,这导致浏览器中Gradio-Lite应用程序的Python代码不能直接使用Transformers库和Transformers.js。为此,我们使用了一个名为Transformers.js.py的包装库,它包含了在浏览器环境中使用Python代码中的Transformers.js所需的所有技术堆栈。

下面看一些routines。

4.4.1 transformers_js_py

将Gradio-Lite与Transformers.js通过transformers_js_py结合,以pipeline的情感分析sentiment-analysis为例,创建html并输入代码:

<html>
	<head>
		<script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.js"></script>
		<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.css" />
	</head>
	<body>
		<gradio-lite>
import gradio as gr
from transformers_js_py import pipeline

pipe = await pipeline('sentiment-analysis')

demo = gr.Interface.from_pipeline(pipe)

demo.launch()

			<gradio-requirements>
         transformers-js-py
			</gradio-requirements>
		</gradio-lite>
	</body>
</html>

使用浏览器打开html文件,以下是上面代码的运行示例(加载应用程序后可以断开Internet连接,但应用程序仍然可以工作,因为它完全在您的浏览器中运行):
在这里插入图片描述代码说明:

  1. 标签 内是gradio应用程序代码, 用于指定要安装的包或Gradio-Lite及其依赖项,这里使用Transformers.js.py (transformers-js-py)。
  2. pipe = await pipeline(‘sentiment-analysis’) :创建了一个Transformers.js的情感分析pipeline,关于更多pipeline的类型和用法,请参考Transformers.js的官方文档:
  3. demo = gr.Interface.from_pipeline(pipe):通过向gr.Interface.from_pipeline()传入Transformers.js.py类型的pipeline,创建了一个Gradio应用程序实例Interface,该接口利用了pipeline中预定义的输入和输出组件以生成WEBUI。
  4. demo.launch() 启动创建的应用程序。

4.4.2 定制化model、pipeline和UI

在上例中,可以修改pipeline()的参数来尝试不同的任务或模型,比如pipe = await pipeline(‘sentiment-analysis’, ‘Xenova/bert-base-multilingual-uncased-sentiment’),第二个参数用于制定情根分析任务的模型名称,如果像第一个示例中没有指定,则使用默认模型。

另外比如pipe = await pipeline(‘image-classification’),创建图像分类的pipeline,此时Interface会自动转换为上传图像和展示分类结果的界面。函数gr.Interface.from_pipeline()会基于pipeline类型自动创建合适UI。
注意:如果您使用音频管道,如自动语音识别,则在处理音频文件时需要在中引入transformers js-py[audio]。

如果不想使用gr.Interface.from_pipeline()中自定义的UI,也可以通过Gradio的常规API定义用户界面。以下示例中,我们修改了代码以手动构建Gradio用户界面,这样我们就可以将结果输出为JSON:

<html>
	<head>
		<script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.js"></script>
		<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.css" />
	</head>
	<body>
		<gradio-lite>
import gradio as gr
from transformers_js_py import pipeline

pipe = await pipeline('sentiment-analysis')

async def fn(text):
	result = await pipe(text)
	return result

demo = gr.Interface(
	fn=fn,
	inputs=gr.Textbox(),
	outputs=gr.JSON(),
)

demo.launch()

			<gradio-requirements>
transformers-js-py
			</gradio-requirements>
		</gradio-lite>
	</body>
</html>

通过结合Gradio-Lite和Transformers.js(通过Transformers.js.py),可以创建完全在浏览器中运行的无服务器机器学习应用程序。Gradio-Lite通过gr.Interface.from_pipeline()来为给定的Transformers.js pipeline创建接口,此方法根据管道的任务类型自动构造UI,也可以Gradio的常规API手动定义接口。通过使用这些库,我们就可以可以构建和部署机器学习应用程序,而无需服务器端Python设置或外部依赖。

4.5 优缺点分析

4.5.1 @gradio/lite的优点

使用@gradio/lite的好处包括:

  1. 无服务器部署:@gradio/lite的主要优点是它消除了对服务器基础设施的需求。这简化了部署,降低了与服务器相关的成本,并使Gradio应用程序易于分享。
  2. 低延迟:通过在浏览器中运行,@gradio/lite为用户提供了低延迟的交互。不需要数据往返于服务器,从而实现更快的响应和更流畅的用户体验。
  3. 隐私和安全:由于所有处理都发生在用户的浏览器中,用户数据只在本地设备上流转,因此@gradio/lite增强了隐私和安全性。

4.5.2 局限性

目前,使用@gradio/lite的最大限制是初始加载时间。浏览器初始加载gradio应用程序通常需要较长时间(通常为5-15秒),这是因为浏览器在渲染Python代码之前需要加载Pyodide运行时。

另外,Pyodide并不支持所有Python包。虽然gradio和许多其他流行的软件包(包括numpy、scikit learn和transformers js)可以安装在Pyodide中,但当应用程序有很多依赖项,还是需要检查这些依赖与Pyodide的兼容性,以及是否可以通过micropip安装。

参考文献

机器学习实战之模型的解释性:Scikit-Learn的SHAP和LIME库详解

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

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

相关文章

OpenCV学习之cv2.imshow()函数

OpenCV学习之cv2.imshow()函数 一、简介 cv2.imshow 是 OpenCV 库中用于显示图像的基本函数之一。在图像处理和计算机视觉的过程中&#xff0c;使用该函数可以快速预览处理后的图像&#xff0c;便于调试和结果展示。 二、基本语法 cv2.imshow(WindowName, Imgmat)三、参数说…

Webpack: 借助 Babel+TS+ESLint 构建现代 JS 工程环境

概述 Webpack 场景下处理 JavaScript 的三种常用工具&#xff1a;Babel、TypeScript、ESLint 的历史背景、功能以及接入 Webpack 的步骤借助这些工具&#xff0c;我们能构建出更健壮、优雅的 JavaScript 应用 使用 Babel ECMAScript 6.0(简称 ES6) 版本补充了大量提升 JavaSc…

人生最有力,最棒的十句话!

人生最有力&#xff0c;最棒的十句话 1、允许一切事发生&#xff0c;所有一切发生的事不是你能阻挡了的&#xff0c;你接受&#xff0c;他也发生&#xff0c;你不接受&#xff0c;他也发生&#xff0c;你还不如坦然面对接受现实。 2、你焦虑的时候千万不要躺着啥也不干&#xf…

企业数据挖掘平台产品特色及合作案例介绍

泰迪企业数据挖掘平台是一款通用的、企业级、智能化的数据分析模型构建与数据应用场景设计工具&#xff0c;能够一体化地完成数据集成、模型构建、模型发布&#xff0c;为数据分析、探索、服务流程提供支撑&#xff0c;提供完整的数据探索、多数据源接入、特征处理、模型搭建、…

RpcRrovider分发rpc服务(OnMessage和Closure回调)

目录 1.完善rpcprovider.cc的OnConnection 2.完善rpcprovider.cc的OnMessage 3.完整rpcprovider.h 4.完整rpcprovider.cc 这篇文章主要完成&#xff0c;protobuf实现的数据序列化和反序列化。 1.完善rpcprovider.cc的OnConnection rpc的请求是短连接的&#xff0c;请求一次…

MathType2024最新官方无限永久试用版本下载

“我正在使用MathType&#xff0c;它让我的工作变得简单多了。”在中国科学院数学与系统科学研究院的一间办公室内&#xff0c;研究员张益唐兴奋地对《中国科学报》说。 这位因解决了数学界著名的“孪生素数猜想”而名声大噪的数学家&#xff0c;在谈到他最近使用的数学公式编辑…

如何把项目文文件/文件夹)上传到Gitee(全网最细)

目录 1、首先必须要有一个Gitee官网的账号 2、点击右上角的号&#xff0c;点击新建仓库 3、按照下图步骤&#xff0c;自己起仓库名字&#xff0c;开发语言 4、点击初始化readme文件 5、在自己的电脑上选择姚上传的文件夹&#xff0c;或者文件&#xff0c;这里都是一样的&a…

AI与学术的交响:ChatGPT辅助下的实验设计新篇章

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术研究中&#xff0c;实验设计是确保研究质量和结果可信度的关键环节。这篇文章我们将为大家介绍如何利用ChatGPT辅助完成学术论文的实验设计&#xff0c;通过提供灵感、优化实验步…

【docker】2. 编排容器技术发展史(了解)

该篇文章介绍的主要是编排以及容器技术的发展史(了解即可)&#xff0c;如果想单纯学习docker命令操作可直接略过&#xff01;&#xff01;&#xff01; 容器技术发展史 Jail 时代 容器不是一个新概念或者新技术&#xff0c;很早就有了&#xff0c;只是近几年遇到了云计算&am…

昇思25天学习打卡营第4天|扩散模型

文章目录 昇思MindSpore应用实践基于MindSpore的Diffusion扩散模型1、Diffusion Models 简介2、构建 Diffusion Model 的准备工作3、Attention 机制4、条件 U-Net5、Diffusion 正向过程6、Diffusion 反向过程7、Diffusion 模型训练 Reference 昇思MindSpore应用实践 本系列文章…

图形处理单元(GPU)在现代计算中的应用与挑战(研究论文框架)

摘要:随着高性能计算需求的日益增长,图形处理单元(GPU)已从专业的图形渲染处理器转变为具有高性能并行处理能力的多功能计算平台。本文将探讨GPU的核心优势、编程模型、在不同领域的应用以及面临的挑战和限制。此外,还将讨论GPU技术的未来发展趋势和潜在的研究机会。 关键…

Debian/Ubuntu Linux安装OBS

先决条件 建议使用 xserver-xorg 1.18.4 或更新版本&#xff0c;以避免 OBS 中某些功能&#xff08;例如全屏投影仪&#xff09;出现潜在的性能问题。在 Linux 上使用 OBS Studio 需要 OpenGL 3.3&#xff08;或更高版本&#xff09;支持。在终端中输入以下内容来检查系统支持…

办公效率新高度:利用办公软件实现文件夹编号批量复制与移动,轻松管理文件

在数字化时代&#xff0c;我们的工作和生活都围绕着海量的数据和文件展开。然而&#xff0c;随着数据量的不断增加&#xff0c;如何高效地管理这些数字资产成为了摆在我们面前的一大难题。今天&#xff0c;我要向您介绍一种革命性的方法——利用办公软件实现文件夹编号批量复制…

揭开统计分析的秘密:独立样本和配对样本T检验实战案例

一、独立样本T检验 1.收集20名学生的自信心值 见下表&#xff0c;试问该指标是否与性别有关&#xff1f;&#xff08;非参数检验或参数检验&#xff09; 数据值 性别 1&#xff0c;1&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;2&#xff0c;1&#xff0c;1&#…

UE5蓝图快速实现打开网页与加群

蓝图节点&#xff1a;启动URL 直接将对应的网址输入&#xff0c;并使用即可快速打开对应的网页&#xff0c;qq、discord等群聊的加入也可以直接通过该节点来完成。 使用后会直接打开浏览器。

装载问题(回溯法)

#include<iostream> using namespace std; int n;//货物的数量 int c;//轮船的总的载重量 int cw;//轮船当前的载重量 int r;//货物的总重量 int w[1000];//n个货物各自的重量 int x[1000];//当前最优解 int bestx[1000];//最优解 int bestw;//货物的最优载重量 void Bac…

Day 48 消息队列集群RabbitMQ

消息队列集群-RabbitMQ 一、消息中间件 中间件 tomcat java web中间件 web容器 mysql php php mysql uwsgi python mysql mycat 数据库中间件 rabbitMQ 消息中间件 1、简介 MQ 全称为&#xff08;Message Queue消息队列&#xff09;。是一种应用程序对应用程序的通信方…

gemini 1.5 flash (node项目)

https://www.npmjs.com/package/google/generative-ai https://ai.google.dev/pricing?hlzh-cn https://aistudio.google.com/app/apikey https://ai.google.dev/gemini-api/docs/models/gemini?hlzh-cn#gemini-1.5-flash https://ai.google.dev/gemini-api/docs/get-started…

vue3+vite+nodejs,通过接口的形式请求后端打包(可打包全部或指定打包组件)

项目地址https://gitee.com/sybb011016/test_build 打包通过按钮的形式请求接口&#xff0c;让后端进行打包&#xff0c;后端使用express-generator搭建模版。前端项目就在npm init vuelatest基础上添加了路由 如果只想打包AboutView组件&#xff0c;首先修改后端接口。 //打…

【计算机毕业设计】基于微信小程序的电子购物系统的设计与实现【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…