政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行

目录

简介

什么是@gradio/lite?

入门

1.导入 JS 和 CSS

2. 创建标签

3. 在标签内编写你的 Gradio 应用程序

更多示例:添加其他文件和要求

多个文件

其他要求

SharedWorker 模式

代码和演示playground

1.无服务器部署

2.低延迟

3. 隐私和安全

限制

尝试一下!


政安晨的个人主页:政安晨

欢迎 👍点赞✍评论⭐收藏

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

简介

Gradio 是一个流行的 Python 库,用于创建交互式机器学习应用程序。传统上,Gradio 应用程序依赖于服务器端基础设施来运行,这对于需要托管其应用程序的开发人员来说可能是一个障碍。

 输入 Gradio-lite(@gradio/lite):一个利用 Pyodide将 Gradio 直接带到浏览器的库。

Pyodide 是基于 WebAssembly 的浏览器和 Node. js 的 Python 发行版。

Pyodide 是 CPython 到 WebAssembly/ Emscripten的移植。

Pyodide 允许使用 micropip在浏览器中安装和运行 Python 包。PyPI 上任何带有 wheel 的纯 Python 包均受支持。许多带有 C 扩展的包也已移植到 Pyodide 中。其中包括许多通用包,例如 regex、pyyaml、lxml 和科学 Python 包,包括 numpy、pandas、scipy、matplotlib 和 scikit-learn。

Pyodide 带有强大的 Javascript ⟺ Python 外部函数接口,因此您可以在代码中自由混合这两种语言,而不会产生任何麻烦。这包括对错误处理(在一种语言中抛出错误,在另一种语言中捕获错误)、async/await 等的完全支持。

在浏览器中使用时,Python 可以完全访问 Web API。

在这篇文章中,我们将探讨 @gradio/lite 是什么,回顾示例代码,并讨论它为运行 Gradio 应用程序提供的好处。

什么是@gradio/lite?

@gradio/lite是一个 JavaScript 库,可让您直接在 Web 浏览器中运行 Gradio 应用程序。它通过利用 Pyodide(WebAssembly 的 Python 运行时)来实现这一点,它允许在浏览器环境中执行 Python 代码。有了@gradio/lite,您可以为 Gradio 应用程序编写常规 Python 代码,它们将在浏览器中无缝运行,而无需服务器端基础设施。

入门

让我们在 Gradio 中构建一个“Hello World”应用程序@gradio/lite

1.导入 JS 和 CSS

如果您还没有 HTML 文件,请先创建一个。@gradio/lite使用以下代码导入与包对应的 JavaScript 和 CSS:

<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>
</html>

@gradio/lite请注意,您通常应该使用可用的最新版本。

2. 创建<gradio-lite>标签

在 HTML 页面主体的某个位置(您希望 Gradio 应用程序呈现的任何位置),创建打开和关闭<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>
		</gradio-lite>
	</body>
</html>

注意:您可以将theme属性添加到<gradio-lite>标签以强制主题为深色或浅色(默认情况下,它遵循系统主题)。例如:

<gradio-lite theme="dark">
...
</gradio-lite>

3. 在标签内编写你的 Gradio 应用程序

现在,像平常一样用 Python 编写 Gradio 应用程序!请记住,由于这是 Python,所以空格和缩进很重要。

<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>

就这样!现在您应该能够在浏览器中打开 HTML 页面并查看 Gradio 应用程序的呈现效果!请注意,由于 Pyodide 可能需要一段时间才能安装在您的浏览器中,因此 Gradio 应用程序可能需要一段时间才能首次加载。

调试注意事项:要查看 Gradio-lite 应用程序中的任何错误,请在 Web 浏览器中打开检查器。所有错误(包括 Python 错误)都将打印在那里。

更多示例:添加其他文件和要求

如果您想创建一个跨多个文件的 Gradio 应用程序怎么办?或者有自定义 Python 要求?两者都可以@gradio/lite

多个文件

在应用程序中添加多个文件@gradio/lite非常简单:使用标签。

您可以拥有任意<gradio-file>数量的标签,但每个标签都需要有一个属性,并且 Gradio 应用程序的入口点也应该具有该属性。<gradio-file>nameentrypoint

以下是一个例子:

<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>

其他要求

如果您的 Gradio 应用程序有其他要求,通常可以使用 micropip 在浏览器中安装它们。我们创建了一个包装器,使这特别方便:只需以与 a 相同的语法列出您的要求requirements.txt并用标签括起来即可<gradio-requirements>

这里,我们安装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>

尝试一下:您可以看到此示例在Hugging Face 静态空间中运行,它可以让您免费托管静态(无服务器)Web 应用程序。访问该页面,您将能够在没有互联网访问的情况下运行机器学习模型!

<!DOCTYPE html>
<html lang="en">
	<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>
		<h2>
			Gradio-lite (Gradio running entirely in your browser!)
		</h2>
		<p>Try it out! Once the Gradio app loads (can take 10-15 seconds), disconnect your Wifi and the machine learning model will still work!</p>

		<gradio-lite theme="dark">

		<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", examples=["It's a happy day in the neighborhood", "I'm an evil penguin", "It wasn't a bad film."])
		demo.launch()
		</gradio-file>

		</gradio-lite>
	</body>
</html>

SharedWorker 模式

默认情况下,Gradio-Lite使用Pyodide运行时在Web Worker中执行 Python 代码,并且每个 Gradio-Lite 应用都有自己的 Worker。它具有环境隔离等优势。

但是,当同一页面中有许多 Gradio-Lite 应用时,可能会导致性能问题,例如内存使用率过高,因为每个应用都有自己的工作器和 Pyodide 运行时。在这种情况下,您可以使用SharedWorker 模式在多个 Gradio-Lite 应用之间共享SharedWorker中的单个 Pyodide 运行时。要启用 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模式时需要注意以下几点:

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

代码和演示playground

如果您想同时查看代码和演示,只需将playground属性传递给 gradio-lite 元素。

这将创建一个交互式操场,允许您更改代码并更新演示!如果您使用操场,您还可以将布局设置为“垂直”或“水平”,这将决定代码编辑器和预览是并排还是彼此叠放(默认情况下,它对页面宽度有响应)。

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

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

使用的好处@gradio/lite

1.无服务器部署

@gradio/lite 的主要优势在于它无需服务器基础设施。这简化了部署,降低了与服务器相关的成本,并使您更容易与他人共享 Gradio 应用程序。

2.低延迟

通过在浏览器中运行,@gradio/lite 为用户提供低延迟交互。数据无需往返于服务器,从而实现更快的响应和更流畅的用户体验。

3. 隐私和安全

由于所有处理都在用户的浏览器中进行,因此@gradio/lite增强了隐私性和安全性。用户数据仍保留在其设备上,因此在数据处理方面可让您高枕无忧。

限制
  • 目前,使用中最大的限制@gradio/lite是您的 Gradio 应用通常需要更多时间(通常为 5-15 秒)才能在浏览器中首次加载。这是因为浏览器需要先加载 Pyodide 运行时,然后才能呈现 Python 代码。

  • 并非所有 Python 软件包都受 Pyodide 支持。虽然gradio和许多其他流行软件包(包括numpyscikit-learntransformers-js)都可以在 Pyodide 中安装,但如果您的应用程序有许多依赖项,则值得检查依赖项是否包含在 Pyodide 中,或者是否可以使用来安装micropip。

尝试一下!

您可以立即尝试@gradio/lite将此代码复制并粘贴到本地index.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

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

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

上文中完整代码的演绎如下:


掌握gradio lite有助于以后人工智能的应用完全在浏览器中运行!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】文件操作(1)(文件打开关闭和顺序读写函数的万字笔记)

文章目录 一、什么是文件1.程序文件2.数据文件 二、数据文件1.文件名2.数据文件的分类文本文件二进制文件 三、文件的打开和关闭1.流和标准流流标准流 2.文件指针3.文件的打开和关闭文件的打开文件的关闭 四、文件的顺序读写1.fgetc函数2.fputc函数3.fgets函数4.fputs函数5.fsc…

AI开发-三方库-Hugging Face-Pipelines

1 需求 需求1&#xff1a;pipeline支持的任务类型 需求2&#xff1a;推理加速使用CPU还是GPU 需求3&#xff1a;基于pipeline的文本分类示例 需求4&#xff1a;pipeline实现原理 模型使用步骤&#xff08;Raw text -》Input IDs -》Logits -》Predictions&#xff09;&…

k8s 1.28.2 集群部署 harbor v2.11.1 接入 MinIO 对象存储

文章目录 [toc]提前准备什么是 HarborHarbor 架构描述Harbor 安装的先决条件硬件资源软件依赖端口依赖 Harbor 在 k8s 的高可用Harbor 部署Helm 编排YAML 编排创建 namespace导入镜像部署 Redis部署 PostgreSQL部署 Harbor core部署 Harbor trivy部署 Harbor jobservice部署 Ha…

前端考试总结

1HTML标签 h标题标签 块级标签 独占一行 p段落标签 同上 br换行标签 单标签 img图片标签 内联标签:不独占一行(src图片地址 alt图片的替代文字 title鼠标悬停提示文字) a超链接标签 同上 (href跳转路径 target属性{_blank新窗口打开 _self在当前窗口打开}) 列表标签(ul无…

VSCODE 导入cubeide工程

1.下载vscode及插件STM32 VS Code Ectersion 版本号1.0.0&#xff0c;之后这个有导入功能。 2.等待自动安装对应插件&#xff0c;提示缺少什么就补什么 3.在左侧出现stm32图标。点击Import a local project导入本地项目。 4.报错 [{"resource": "/f:V11/cmak…

前端html,css 样式巩固1

想做这样 一个效果 点击图片切换 当前的选中图片 我们使用 原生的js html 来开发这个 直接粘贴代码 相信大家 都能看懂的 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" …

抖音视频制作怎么暂停画面,抖音视频怎么让它有暂停的效果

千万别滥用视频特效&#xff0c;不然它能毁掉你的抖音作品。在创作过程中&#xff0c;应尽量使用类似暂停画面、隐形字幕这样的视觉特效&#xff0c;可以显著提高作品的视觉体验。增强视频表现力的同时&#xff0c;也不会让画面看起来过于夸张。有关抖音视频制作怎么暂停画面的…

Springboot 整合 Java DL4J 实现文物保护系统

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…

2011年国赛高教杯数学建模A题城市表层土壤重金属污染分析解题全过程文档及程序

2011年国赛高教杯数学建模 A题 城市表层土壤重金属污染分析 随着城市经济的快速发展和城市人口的不断增加&#xff0c;人类活动对城市环境质量的影响日显突出。对城市土壤地质环境异常的查证&#xff0c;以及如何应用查证获得的海量数据资料开展城市环境质量评价&#xff0c;研…

应用层协议 序列化

自定义应用层协议 例子&#xff1a;网络版本计算器 序列化反序列化 序列化&#xff1a;将消息&#xff0c;昵称&#xff0c;日期整合成消息-昵称-日期 反序列化&#xff1a;消息-昵称-日期->消息&#xff0c;昵称&#xff0c;日期 在序列化中&#xff0c;定义一个结构体…

【Pycharm默认解释器配置文件】怎样删除配置解释器的无效历史记录?

有时候我们希望删除无效的解释器路径&#xff0c;可以找到这个文件&#xff0c;进行删除修改。 C:\Users\你的用户名\AppData\Roaming\JetBrains\PyCharm2022.3\options\jdk.table.xml直接删除解释器名称对应的一整个<jdk version"2">节点即可&#xff01; …

2023年ICPC亚洲合肥赛区赛 C. Cyclic Substrings

题目 题解 #include<bits/stdc.h> using namespace std; // #define int long long #define ll long long const int maxn 6e6 5; const int mod 998244353; int fail[maxn];//fail[i]表示i结点代表的回文串的最大回文后缀的编号 int len[maxn]; //len[i]表示结点i代…

大模型涌现判定

什么是大模型&#xff1f; 大模型&#xff1a;是“规模足够大&#xff0c;训练足够充分&#xff0c;出现了涌现”的深度学习系统&#xff1b; 大模型技术的革命性&#xff1a;延申了人的器官的功能&#xff0c;带来了生产效率量级提升&#xff0c;展现了AGI的可行路径&#x…

UDP/TCP协议

网络层只负责将数据包送达至目标主机&#xff0c;并不负责将数据包上交给上层的哪一个应用程序&#xff0c;这是传输层需要干的事&#xff0c;传输层通过端口来区分不同的应用程序。传输层协议主要分为UDP&#xff08;用户数据报协议&#xff09;和TCP&#xff08;传输控制协议…

mongodb-7.0.14分片副本集超详细部署

mongodb介绍&#xff1a; 是最常用的nosql数据库&#xff0c;在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb&#xff08;分片副本&#xff09;集群。 环境准备 系统系统 BC 21.10 三台服务器&#xff1a;192.168.123.247/248/249 安装包&#xff1a…

Javaweb基础-vue

Vue.js Vue是一套用于构建用户界面的渐进式框架。 起步 引入vue <head><script src"static/js/vue2.6.12.min.js"></script> </head> 创建vue应用 <body> <div id"index"><p>{{message}}</p> </div>…

Java的walkFileTree方法用法【FileVisitor接口】

在Java旧版本中遍历文件系统只能通过File类通过递归来实现&#xff0c;但是这种方法不仅消耗资源大而且效率低。 NIO.2的Files工具类提供了两个静态工具方法walk()和walkFileTree()可用来高效并优雅地遍历文件系统。walkFileTree()功能更强&#xff0c;可自定义实现更多功能&am…

5.3章节python中字典:字典创建、元素访问、相关操作

1.字典的创建和删除 2.字典的访问和遍历 3.字典的相关操作 4.字典的生成式 一、字典的创建和删除 字典&#xff08;dictionary&#xff09;是一种用于存储键值对&#xff08;key-value pairs&#xff09;的数据结构。每个键&#xff08;key&#xff09;都映射到一个值&#xf…

基于FPGA的信号发生器verilog实现,可以输出方波,脉冲波,m序列以及正弦波,可调整输出信号频率

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 输出方波 输出脉冲波 输出m随机序列 输出正弦波 2.算法运行软件版本 vivado2019.2 3.部分核心程序 &#xff08;完整…

顺序表算法题【不一样的解法!】

本章概述 算法题1算法题2算法题3彩蛋时刻&#xff01;&#xff01;&#xff01; 算法题1 力扣&#xff1a;移除元素 我们先来看这个题目的要求描述&#xff1a; 把与val相同数值的元素移除掉&#xff0c;忽略元素的相对位置变化&#xff0c;然后返回剩下与val值不同的元素个数…