Gradio全解1——Gradio简介:简易WebUI框架
前言
本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易webui开发框架,它基于FastAPI和svelte,便于部署人工智能模型,是当前热门的非常易于开发和展示机器学习大语言模型LLM及扩散模型DM的UI框架。本系列文章分为前置概念和实战演练两部分。前置概念先介绍Gradio的详细技术架构、历史、应用场景、与其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,然后详细介绍了大模型及数据的资源网站Hugging Face,包括三种资源models/datasets/spaces、六类开源库transformers/diffusers/datasets/PEFT/accelerate/optimum实战。实战演练部分先讲解了多种不同的安装、运行和部署方式,安装包括Linux/Win/Mac三类系统安装,运行包括普通方式和热重载方式,部署包括本地部署、HuggingFace托管、FastAPI挂载和Gradio-Lite浏览器集成;然后按照先整体再细节的逻辑,讲解Gradio的多种高级特性:三种Gradio Clients(python/javascript/curl)、Gradio Tools、Gradio的模块架构和环境变量等,方便读者对Gradio整体把握;最后深入细节,也是本系列文章的核心,先实践基础功能Interface、Blocks和Additional Features,再详解高级功能Chatbots、Data Science And Plots和Streaming。本系列文章注解详细,代码均可运行并附有大量运行截图,方便读者理解,Gradio一定会成为每个技术人员实现奇思妙想的最称手工具。
本系列文章目录如下:
- 《Gradio全解1——Gradio简介》
- 《Gradio全解1——Gradio的安装与运行》
- 《Gradio全解2——Gradio的3+1种部署方式实践》
- 《Gradio全解2——浏览器集成Gradio-Lite》
- 《Gradio全解3——Gradio Client:python客户端》
- 《Gradio全解3——Gradio Client:javascript客户端》
- 《Gradio全解3——Gradio Client:curl客户端》
- 《Gradio全解4——Gradio Tools:将Gradio用于LLM Agents》
- 《Gradio全解5——Gradio库的模块架构和环境变量》
- 《Gradio全解6——Interface:高级抽象界面类(上)》
- 《Gradio全解6——Interface:高级抽象界面类(下)》
- 《Gradio全解7——Blocks:底层区块类(上)》
- 《Gradio全解7——Blocks:底层区块类(下)》
- 《Gradio全解8——Additional Features:附加功能(上)》
- 《Gradio全解8——Additional Features:附加功能(下)》
- 《Gradio全解9——Chatbots:聊天机器人(上)》
- 《Gradio全解9——Chatbots:聊天机器人(下)》
- 《Gradio全解系列10——Data Science And Plots:数据科学与绘图》
- 《Gradio全解11——Streaming:数据流(上)》
- 《Gradio全解11——Streaming:数据流(下)》
本章摘要
本章第一节做了Gradio简介,包括Gradio是什么、历史、特性及用途;第二节讲述了Gradio与NiceGui、StreamLit、Dash及PyWebIO的比较,并给出了选择建议;第三节对新版Gradio5的特性作了详解。
1. Gradio简介:WebUI框架
1.1 Gradio介绍
1.1.1 Gradio是什么
Gradio 是一个Hugging Face发布的开源Python包,可以为机器学习模型、API或任意Python函数快速构建demo或web应用,并且通过Gradio的内置共享功能可以快速生成对应的链接,而无需任何JavaScript、CSS或网络托管经验。Gradio的设计理念是“无代码”,它的自封装组件的功能也相对比较完整,因此可以让开发者专注于编写基于python代码的业务处理逻辑,而无需关注web前端页面的代码实现细节。这意味着你不需要编写复杂的代码就可以创建一个交互式的界面,其官网如下图所示:
gradio框架基于svelte,它是一个组件框架,构建在HTML之上,是一种全新的构建用户界面的方法,就像React或Vue一样,但有一个重要的区别。传统React或Vue框架支持声明性状态驱动的代码,但缺点是:浏览器必须额外将这些声明性结构转换为DOM操作,这会占用框架和垃圾收集器的运行资源。而Svelte将组件转换为高效的命令式代码以精确更新DOM,并通过构建应用程序的编译阶段来处理,这有助于编写大型且高性能的应用程序。
1.1.2 Gradio的历史
Gradio 的发展历史可以追溯到2019年,其创始人是Abubakar Abid和Ali Abdalla,他们都是斯坦福大学的研究生。他们发现,尽管机器学习模型的复杂性在不断增加,但是这些模型的可解释性和可访问性却并没有得到相应的提高。因此,他们决定创建一个工具,使得任何人都可以轻松地与机器学习模型进行交互。
自从发布以来,Gradio已经得到了广泛的应用。它被用于创建了各种各样的模型界面,包括图像分类器、语音识别系统、文本生成器等等。Gradio的用户群体也非常广泛,从研究人员和数据科学家,到教师和学生,甚至包括艺术家和记者。
Gradio的发展也得到了社区的大力支持。它的GitHub仓库已经收到了数千个星标,这表明了开发者对这个项目的热情。此外,Gradio也得到了一些重要的更新,比如增加了新的界面元素model3D、audio、video等,改进了性能以及提高了兼容性。截至发稿前,其最新版本已更新到5.12.0。
gradio的github地址为:https://github.com/gradio-app/gradio,如下:
通过简介中的demo演示,我们可以先目睹下Gradio的风采.
1.1.3 Gradio的特性
Gradio的主要目标是使模型的测试和调试变得更加简单,同时也让非技术用户能够理解和使用这些模型。以下是Gradio的一些主要特性和关键技术:
- 易于使用:Gradio的一个主要优点是它的易用性。开发者只需要几行代码就可以为他们的模型创建一个交互式的预览界面。这个界面可以包含各种输入和输出类型,包括文本、图像、音频及视频等。
- 灵活性:Gradio不仅可以用于各种类型的模型,包括强化学习模型、深度学习模型、传统的机器学习模型,甚至是简单的函数,而且它也可以在各种环境中运行,包括Jupyter notebook、Python脚本、Colab notebooks等。
- 共享和部署:Gradio还提供了一个共享功能,开发者可以通过一个链接将他们的模型界面分享给其他人。此外,Gradio也支持模型的部署,开发者可以将他们的模型和界面部署到云端,使其可以在网页上访问。
- 可解释性:Gradio还提供了一些工具来帮助用户理解模型的预测。例如,它可以显示模型的预测分布,或者使用类似于 LIME和SHAP的技术来解释模型的预测。
- 多模型比较:Gradio可以同时显示多个模型的预测结果,这使得模型的比较和选择变得更加简单。
1.1.4 Gradio的用途
Gradio的主要优势在于其易用性和灵活性,主要用于快速搭建和分享机器学习模型的交互式演示界面,使得非技术用户也能轻松理解并测试模型的功能,广泛应用于模型展示、教育及协作场景。以下是Gradio的一些主要使用场景:
- 模型演示和测试:数据科学家和机器学习工程师经常需要向同事、管理层或潜在客户展示他们的模型。Gradio提供了一种快速创建交互式演示的方式,用户可以通过Web界面上传数据、调整参数,并实时查看模型的输出结果。这种方式有助于更好地解释模型的工作原理和性能。
- 模型验证和调优:在模型开发过程中,开发者需要不断验证模型的性能并进行调优。Gradio可以快速搭建一个模型验证界面,允许用户输入不同的参数或数据,实时查看模型的预测结果和性能指标。这有助于开发者快速迭代和优化模型。
- 数据收集和标注:在机器学习项目中,收集和标注数据是一个耗时且关键的步骤。Gradio可以用来创建一个数据标注界面,让非技术用户(如标注员)能够上传数据、进行标注,并将结果直接保存到模型的训练数据集中。这不仅提高了数据收集的效率,还有助于提高数据质量。
- 教育和培训:Gradio可以用于创建交互式的教育工具,帮助学生和初学者理解复杂的机器学习概念。通过可视化的界面和实时反馈,学习者可以更直观地看到模型是如何工作的,以及不同参数是如何影响模型输出的。
- 商业应用和产品开发:对于希望将机器学习技术商业化的公司来说,Gradio提供了一种快速将模型转化为产品原型的方式。通过Gradio创建的Web应用可以作为产品的前端,让用户直接与模型交互,从而验证市场需求和用户体验。
- 研究和开发:在研究环境中,Gradio可以帮助研究人员创建交互式的实验平台,以便快速测试新算法或模型。研究人员可以通过Gradio界面收集实验数据,实时观察实验结果,并据此调整研究方向。
- 社区和开源项目:对于开源项目,Gradio可以用来创建一个社区驱动的模型测试和改进平台。开发者可以邀请社区成员通过Web界面测试模型、提供反馈,并共同参与模型的优化过程。
Gradio的使用场景非常广泛,它降低了机器学习模型部署的门槛,使得更多的人能够参与到模型的开发、测试和应用中来。通过Gradio,开发者可以专注于模型的核心算法,而不必担心前端开发的复杂性。这种工具的普及,无疑将推动机器学习技术的快速发展和广泛应用。
1.2 Gradio与NiceGui、StreamLit、Dash及PyWebIO的比较
随着机器学习的发展,便于展示模型训练效果的可视化框架也逐渐兴盛。当前比较流行的框架包括Gradio、NiceGui、StreamLit、Dash及PyWebIO等,它们是轻量级的Python前端框架,而传统的遵循MVC设计模式的Python Web框架如Flash、Django更适合大型复杂的项目。下面对5个轻量级框架进行简单比较和说明。
1.2.1 各个框架区别
先看下图,图中对使用场景、MD/HTML/CSS支持、Jupyter Notebook内支持、上手难度、组件丰富度、综合扩展性、是否开源、基础框架及github starts进行了比较,从中对比可以看出Gradio简单易用、灵活便捷和发展迅速的特点:
– | gradio | nicegui | streamit | dash | PyWebIO |
---|---|---|---|---|---|
主要使用场景 | 可交互Demo,模型及算法 | 小型web apps、DashBoard、机器学习算法及机器人工程 | 生成报告、DashBoard及AI/MI apps | 机器学习、数据科学及web apps | 可交互简单web和基于浏览器的GUI |
MD/HTML/CSS支持 | 是 | 是 | 是 | 是 | 是 |
Jupyter Notebook内支持 | 是 | 是 | 否 | 是 | 是 |
上手难度 | 简单 | 简单 | 中等 | 中等 | 中等 |
组件丰富度 | 低 | 中 | 高 | 高 | 中 |
综合扩展性 | 低 | 中 | 中 | 高 | 中 |
是否完全开源 | 是 | 是 | 是 | 部分企业级功能未开源 | 是 |
基础框架 | 前端svelte后端FastAPI | 前端vue和Qursar,后端FastAPI | React和tornado | Plotly.js,React和Flask | Python源码 |
github stars变化(2024/06-2025/01) | 30.1k-35.2k | 7.9k-10.5k | 32.7k-36.6k | 20.7k-21.8k | 4.4k-4.6k |
总结:Gradio、NiceGui、Streamlit和Dash都是创建机器学习应用的优秀工具,但它们各有优劣。如果你需要快速创建一个简单应用或原型设计,Gradio、NiceGui和Streamlit都是比较好的选择 ,Streamlit提供较高的自由度,默认组件库更为精细和多样化,并且支持自定义组件及异步加载,支持更多的可视化展示例如Matplotlib、Vega Lite (2D charts) 和deck.gl (maps and 3D charts),因此无法支持Jupyter Notebook。Gradio相对而言更专注于深度学习模型的部署,对于模型的输入输出有一定要求,但在这个框架下,用户可以更专注于模型本身的迭代,随着大模型的流行,其github starts增长最快,有逐渐赶超streamlit成为第一的趋势。NiceGui基于vue,在复杂性和易用性之间取得了平衡。如果你需要创建一个复杂的应用,或者你需要更多的控制权,Dash更合适,但它使用python编写前端+后端,代码会比较冗长。对于熟悉python的开发者,PyWebIO适合简单web或基于浏览器的GUI,另外它并没有针对机器学习的开发功能。如果你的项目更加复杂,需要更多的功能、定制性和可扩展性,可能需要考虑使用更强大的框架,比如PyQt、Tkinter(Python自带的GUI库)、wxPython或Kivy 等。
1.2.2 框架选择建议
前端框架复杂多样,作者非专业前端人员,只是为介绍Gradio而查了一些资料,有补充或异议的朋友请留言告知。没有包治百病的灵丹妙药,同样也没有适合所有场景的框架,所以在选择具体框架之前,作者建议根据具体项目决定,通常需要考虑以下几个因素:
-
功能性:该框架是否具备你需要的所有功能?它是否支持你需要的所有控件和功能?
-
社区支持:如果你遇到问题或需要帮助,该框架的社区是否足够大和活跃,能够提供足够的支持和资源?
-
文档和学习资源:该框架的文档是否详尽?是否有足够的教程和学习资源?
-
兼容性和可移植性:该框架是否能在你需要支持的所有平台上运行?
-
长期维护:该框架的开发和维护是否足够活跃,能够持续提供新的功能和修复bug?
当开发具体项目时,需结合项目需求和上述因素来决定所用框架。
1.3 新版Gradio 5特性
不得不感慨,Gradio更新是真的快,彰显了Gradio强大的生命力和广阔的应用前景。在读者看到本系列文章时,Gradio一定会快速迭代到更新的版本,但不影响本系列文章所梳理的整体脉络和某些基本组件的使用方法。对于读者来说,无论您是人工智能领域大模型开发的技术人员,还是其它行业从业者,掌握这门WEB UI开发工具,都可以利用掌握的数据和工具(哪怕只是一个功能函数),快速开发出属于自己的网站界面,从而只需一个URL便可向客户或老板作专业演示,而无须求助于专业的前端技术人员。所以作者认为,从今往后,掌握Gradio可能是每个有志向的IT从业必备技能,所以赶紧学起来吧。
使用Gradio 5,开发者可以构建生产级的机器学习Web应用程序,这些应用不仅性能优越、可扩展、设计精美、易于访问,而且还遵循了最佳的Web安全实践。更重要的是,只需几行Python代码即可实现。想要体验 Gradio 5,只需在终端中输入以下命令:
pip install --upgrade gradio
下面让我们了解下Gradio 5稳定版的新特性。
1.3.1 Gradio 5:面向生产环境的机器学习应用构建工具
如果你之前使用过Gradio,可能会想知道Gradio 5有什么不同。Gradio 5的目标是倾听和解决Gradio开发者在构建生产级应用时遇到的常见问题。例如:
- “Gradio 应用加载太慢” → Gradio 5带来了重大的性能改进,其中包括通过服务端渲染 (SSR) 提供Gradio应用,几乎可以在浏览器中瞬间加载应用,告别加载时的转圈圈! 🏎️💨
视频对比如下:
gradio-4-vs-5-load
对于无法观看视频的同学,可以通过视频截图对比Gradio4与Gradio5的速度差异:
第一步,点击load开始同时加载,如下:
第二图,Gradio5已加载完毕,如下:
第三步,Gradio4加载完毕,以及两者界面对比:
对比视频的加载事件可以看到,即使简单的应用,Gradio5对比Gradio4也有明显的提升,当界面复杂时速度提升会更明显。
-
“这个 Gradio 应用看起来有点过时” → Gradio 5对许多核心组件进行了现代化设计改进,包括按钮、标签页、滑块以及高级聊天界面。同时Gradio5还发布了一组全新的内置主题,让你可以轻松创建外观时尚的Gradio应用 🎨。两者界面对比可参考上面截图。
-
“我无法在Gradio中构建实时应用” → Gradio 5实现了低延迟的流式处理!它使用base64编码和websockets自动加速,还通过自定义组件支持WebRTC。此外,还增加了大量文档和示例演示,涵盖了常见的流式处理用例,如基于摄像头的物体检测、视频流处理、实时语音转录与生成,以及对话型聊天机器人。 🎤
-
“LLM不了解Gradio” → Gradio 5推出了一个实验性的 AI Playground,你可以在其中使用 AI 来生成或修改 Gradio 应用,并立即在浏览器中预览:https://www.gradio.app/playground。这个平台也可以作为在线运行平台,以检验您的代码,作者也会在后续文章中反复用到这个在线运行工具。
Gradio playground结合AI的使用可参考以下视频:
simple-playground
Gradio playground运行截图如下:
- Gradio Sketch:无需编写任何代码也能构建Gradio应用。只需在终端输入 gradio sketch即可打开编辑器,通过网页界面自由定义/修改 Gradio 组件、调整布局、添加事件交互。或直接使用Hugging Face Spaces上托管的在线版 Gradio Sketch:aliabid94/Sketch。
Gradio 5在保留简单直观的开发者API的同时,提供了所有这些新功能。作为面向各种机器学习应用的生产级 Web 框架,Gradio 5还在Web 安全性方面做了重大改进(包括第三方审计)——更多详情请关注Hugging Face的官方博客,地址https://huggingface.co/blog/zh。
1.3.2 Breaking changes-不兼容的更改
在 Gradio 4.x 中没有出现弃用警告的 Gradio 应用应该可以继续在 Gradio 5 中正常运行,少数例外请参考Gradio 5中的不兼容更改列表。
1.3.3 Gradio 的下一步计划
我们在 Gradio 5 中的许多更改是为了支持即将发布的新功能。敬请期待以下内容:
- 支持多页面的 Gradio 应用,以及原生的导航栏和侧边栏;
- 支持通过 PWA 在移动设备上运行 Gradio 应用,甚至可能支持原生应用;
- 更多媒体组件,以支持新兴的图像和视频处理模式;
- 更丰富的 DataFrame 组件,支持常见的电子表格操作;
- 与机器学习模型和 API 提供商的一键集成;
- 进一步减少 Gradio 应用的内存消耗。
当然还有更多功能。有了 Gradio 5提供的稳固基础,可以让开发者使用 Gradio 构建各种机器学习应用。
1.3.4 立即试用 Gradio 5
以下是一些运行 Gradio 5 的 Hugging Face Spaces:
- https://huggingface.co/spaces/akhaliq/depth-pro
- https://huggingface.co/spaces/hf-audio/whisper-large-v3-turbo
- https://huggingface.co/spaces/gradio/chatbot_streaming_main
- https://huggingface.co/spaces/gradio/scatter_plot_demo_main
1.4 关于Gradio网站访问
由于国内已禁止访问国外大部分AI资源网站,那么Gradio托管在HF的Spaces上的Demos怎么办呢?
1.4.1 在线运行平台:playground
Gradio是Hugging Face发布的Python库,其官网地址为:https://www.gradio.app/,正常情况下它可以在国内访问。但由于Gradio线上Demos大部分托管在Hugging Face的Spaces中,而Hugging Face的官网架设在国外,在国内已经被禁止访问,因此经常会出现Gradio中的Demos无法加载的问题。可加载时如下图所示:
注意右下角的字样"托管在spaces"。
不过自官方文档版本Docs5.8.0之后,官方在某些代码片段后已有意删除了紧随在代码后的Demos显示,只保留代码,如下图:
这时我们只需将代码复制到Gradio的在线运行平台playground(网址:https://www.gradio.app/playground)中,便可观察其运行情况。
有时,也会使用Gradio自己的平台构建Demos,如下图:
这里列举了3种Gradio平台的代码运行情况,方便读者知悉其区别。
1.4.2 如何绕过限制
如果仍想访问Gradio托管在Hugging Face的Spaces上的Demos,比如上一节立即试用Gradio5中的Demos,该怎么办呢?Hugging Face在国内有一个镜像网站:https://hf-mirror.com/,但它只镜像了HF中的模型和数据库,如下:
如需下载HF中的模型或数据库,只需用镜像网站的地址替换掉链接中的https://huggingface.co/即可,当然仍会用到hf_token。
为了绕过限制,获取想要的资源,可使用境外VPN,不过在CSDN或者国内,都是不支持使用或者禁止传播的,请读者知悉,根据自己实际情况选择。作者使用的工具是仪表盘,它便宜又好用,此外还有较贵的搬瓦工、西部世界等,适合企业级用户,读者可参考各自官网教程自行设置。除了作者的办法,读者也可自行解决境外访问问题,比如请境外朋友帮忙,或去机场候机厅蹭网…有了境外VPN,无论是申请HF账户及HF_TOKEN,还是访问Gradio的在线Demos,都可迎刃而解。
了解完Gradio的基本情况,下一章开始讲述Gradio的安装、运行和部署。