Gradio-Lite: 完全在浏览器里运行的无服务器 Gradio

Gradio 是一个经常用于创建交互式机器学习应用的 Python 库。在以前按照传统方法,如果想对外分享 Gradio 应用,就需要依赖服务器设备和相关资源,而这对于自己部署的开发人员来说并不友好。

欢迎 Gradio-lite ( @gradio/lite ): 一个通过 Pyodide 在浏览器中直接运行 Gradio 的库。在本文中,我们会详细介绍 @gradio/lite 是什么,然后浏览示例代码,并与您讨论使用 Gradio-lite 运行 Gradio 应用所带来的优势。

@gradio/lite 是什么?

@gradio/lite 是一个 JavaScript 库,可以使开发人员直接在 Web 浏览器中运行 Gradio 应用,它通过 Pyodide 来实现这一能力。Pyodide 是可以将 Python 代码在浏览器环境中解释执行的 WebAssembly 专用 Python 运行时。有了 @gradio/lite ,你可以 使用常规的 Python 代码编写 Gradio 应用 ,它将不再需要服务端基础设施,可以 顺畅地在浏览器中运行

开始使用

让我们用 @gradio/lite 来构建一个 "Hello World" Gradio 应用。

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 页面的 body 中某处 (你希望 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 grdef greet(name):return "Hello, " + name + "!"gr.Interface(greet, "textbox", "textbox").launch()</gradio-lite></body>
</html>

基本的流程就是这样!现在你应该能够在浏览器中打开 HTML 页面,并看到刚才编写的 Gradio 应用了!只不过由于 Pyodide 需要花一些时间在浏览器中安装,初始加载 Gradio 应用可能需要一段时间。

调试提示: 所有错误 (包括 Python 错误) 都将打印到浏览器中的检查器控制台中,所以如果要查看 Gradio-lite 应用中的任何错误,请打开浏览器的检查器工具 (inspector)。

更多例子: 添加额外的文件和依赖

如果想要创建一个跨多个文件或具有自定义 Python 依赖的 Gradio 应用怎么办?通过 @gradio/lite 也可以实现!

多个文件

@gradio/lite 应用中添加多个文件非常简单: 使用 <gradio-file> 标签。你可以创建任意多个 <gradio-file> 标签,但每个标签都需要一个 name 属性,Gradio 应用的入口点应添加 entrypoint 属性。

下面是一个例子:

<gradio-lite><gradio-file name="app.py" entrypoint>
import gradio as gr
from utils import adddemo = 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 在浏览器中安装它们。我们创建了一层封装使得这个过程更加便捷了: 你只需用与 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 grtransformers = 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 Static Space 中看到上述示例,它允许你免费托管静态 (无服务器) Web 应用。访问此页面,即使离线你也能运行机器学习模型!

使用 @gradio/lite 的优势

1. 无服务器部署

@gradio/lite 的主要优势在于它消除了对服务器基础设施的需求。这简化了 Gradio 应用的部署,减少了与服务器相关的成本,并且让分享 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 grdef greet(name):return "Hello, " + name + "!"gr.Interface(greet, "textbox", "textbox").launch()</gradio-lite></body>
</html>

我们还在 Gradio 网站上创建了一个 playground,你可以在那里交互式编辑代码然后即时看到结果!

Playground 地址:
https://www.gradio.app/playground

🤗 宝子们可以戳 阅读原文 查看文中所有的外部链接哟!


英文原文: https://hf.co/blog/gradio-lite

原文作者: Abubakar Abid, Yuichiro Tachibana, Ali Abdalla

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

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

相关文章

Vue3+nuxt+ts项目引入高德地图API实现步骤

看了好多相关的文章都没有完全贴合选用Vue3nuxtts框架的&#xff0c;也不太靠谱&#xff0c;只好自己踩坑实现了 首先去高德开放平台用自己的账号申请一个key&#xff0c;位置如下&#xff0c;申请好后保存好生成的key 我们使用vuemap/vue-amap&#xff0c;一个高德地图2.0版本…

阅读软件OmniReader Pro mac功能特色

OmniReader Pro mac是一款文字识别和阅读软件&#xff0c;它可以将印刷体和手写体的文字转换为数字文本&#xff0c;并将其朗读出来。该软件适用于视力受损、阅读困难、语言障碍等用户&#xff0c;可以帮助他们更加轻松地获取信息和阅读文本。 OmniReader Pro具有简洁直观的用户…

05_通信案例

群聊案例 服务端 package login;import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List;public class Server {public static List<Socket> onlineSockets new ArrayList<>(); // 用于…

单细胞个性化细胞注释

关于单细胞中级的课程内容&#xff0c;前面已经有了三次直播。欢迎回看&#xff5e; 单细胞直播一理解seurat数据结构与pbmc处理流程 单细胞直播二从GSE104154中理解seurat结构 单细胞直播三seurat数据结构与数据可视化 本期主要内容 本期指哪打哪&#xff0c;自己选定细胞&…

java的四种内部类,从0讲清楚

什么是内部类&#xff1f; 为什么要学习内部类&#xff1f; 可以发现&#xff0c;发动机虽然跟汽车相关&#xff0c;但发动机不像车龄或颜色一样&#xff0c;只用一个变量就可以描述&#xff0c;而是要有发动机品牌&#xff0c;发动机年限&#xff0c;多个变量描述发动机。那么…

测试面经1203

测试面经1203 4. 什么是黑盒测试5. 除了黑盒测试还有其他的测试吗&#xff1f;6. 灰盒测试是谁来进行的&#xff1f;7. 使用Excel表格设计测试用例&#xff0c;使用Excel表格有什么优势呢&#xff1f;Xmind优势Xmind劣势 12. 测试需求怎么分析&#xff1f;13. 黑盒测试都有哪些…

MATLAB 自抗扰控制 - Active Disturbance Rejection Control

系列文章目录 MATLAB 模型参考自适应控制 - Model Reference Adaptive Control 文章目录 系列文章目录前言一、控制器结构1.1 一阶逼近1.2 二阶逼近 二、指定控制器参数参考 前言 自抗扰控制 (ADRC) 是一种无模型控制方法&#xff0c;适用于为具有未知动态特性以及内部和外部…

利用vue3SeamlessScroll简单实现列表的无限循环滚动

1、安装 yarn add vue3-seamless-scroll2、导入及基本使用 <!--组件.vue--> <script setup>import { Vue3SeamlessScroll } from vue3-seamless-scroll;import {ref} from vue//vue3导入组件是不需要用component注册的//导入完成后如果项目本身是在运行的记得重新…

Azure Machine Learning - 使用 Azure SDK 进行全文搜索

了解如何使用 Azure SDK 中的 Azure.Search.Documents 客户端库创建、加载和查询使用示例数据的搜索索引&#xff0c;实现全文搜索。 全文搜索使用 Apache Lucene 进行索引和查询&#xff0c;使用 BM25 排名算法对结果进行评分。 关注TechLead&#xff0c;分享AI全维度知识。作…

【Spring Boot 源码学习】ApplicationContextInitializer 详解

Spring Boot 源码学习系列 ApplicationContextInitializer 详解 引言往期内容主要内容1. 初识 ApplicationContextInitializer2. 加载 ApplicationContextInitializer3. ApplicationContextInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》&#xff0c;我们…

ubuntu18编译Android8的Failed to contact Jack server问题

环境 ubuntu18.04 Android8.1.0 步骤 安装环境 apt install git-core apt install gnupg apt install flex apt install bison apt install gperf apt install build-essential apt install curl apt install libc6-dev apt install libssl-dev apt install libncurses5-dev:…

【傻瓜级JS-DLL-WINCC-PLC交互】6.​向PLC里面装载数据变量

思路 JS-DLL-WINCC-PLC之间进行交互&#xff0c;思路&#xff0c;先用Visual Studio创建一个C#的DLL控件&#xff0c;然后这个控件里面嵌入浏览器组件&#xff0c;实现JS与DLL通信&#xff0c;然后DLL放入到WINCC里面的图形编辑器中&#xff0c;实现DLL与WINCC的通信。然后PLC与…

使用String.valueOf()的坑

说明&#xff1a;记录一次使用String.valueOf()的坑&#xff0c;以下是一段有问题的代码&#xff1a; String count String.valueOf(listData.get(0).get(0).get("count");if (StringUtils.isBlank(count) || "0".equals(count)) {result.setResult(page)…

【bat】批处理脚本大全

目录 1.概述 2.变量 3.运算符 3.2.重定向运算符 3.3.多命名运算符 3.4.管道运算符 4.命令 4.1.基本命令 4.2.参数传递 4.3.查看脚本内容 4.4.注释 4.5.日期和时间 4.6.启动脚本 4.7.调用其他bat 4.8.任务管理 4.8.1.任务列表查看 4.8.2.任务终止 4.9.文件夹 …

react-native实践日记--3.ui-kitten中的button设置字体颜色无效

react-native搭建App&#xff0c;UI框架采用ui-kitten&#xff0c;遇到其中的button组件设置字体颜色无效&#xff0c;一直都是白色 设置button的style和textStyle更改字体颜色&#xff0c;一直都是不起作用 <Buttonstyle{[styles.dateBtn,{flexDirection: row-reverse,fle…

Vue经典面试题源码级分析【一】

01-Vue组件通信方式有哪些 父子组件 &#xff1a; props/ emit/ $parent / ref / $attrs $attrs: https://cn.vuejs.org/api/component-instance.html#attrs 兄弟组件&#xff1a;$parent / $root / eventbus / vuex跨层级关系&#xff1a;eventbus / vuex / provide inject 父…

美容院管理系统服务预约会员小程序效果如何

美容院在美业场景中需求度较高&#xff0c;尤其女性爱美悦己消费逐年增加&#xff0c;如清洁焕肤、祛皱抗衰、激光脱毛等美容项目都有不少需求者。 互联网深入美业行业多年&#xff0c;传统线下经营模式已经很难满足当今客户消费流程&#xff0c;如品牌寻找、服务预约、到店、…

Effective Java解读

Effective Java 第一章 引言第二章 创建和销毁对象第1条&#xff1a;用静态工厂方法代替构造器第2条&#xff1a;遇到多个构造器参数时要考虑使用构建器第3条&#xff1a;用私有构造器或者枚举类型强化Singletion属性第4条&#xff1a;通过私有构造器强化不可实例化的能力第5条…

pandas基础操作2

数据读取 我们想要使用 Pandas 来分析数据&#xff0c;那么首先需要读取数据。大多数情况下&#xff0c;数据都来源于外部的数据文件或者数据库。Pandas 提供了一系列的方法来读取外部数据&#xff0c;非常全面。下面&#xff0c;我们以最常用的 CSV 数据文件为例进行介绍。 …

【LeetCode:1423. 可获得的最大点数 | 滑动窗口】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…