本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的一个简易的webui开发框架,它基于FastAPI和svelte,同时便于部署人工智能模型,是当前热门的非常易于开发和展示机器学习和深度学习的大语言模型和扩散模型的框架。本系列文章不仅从概念上介绍Gradio的详细技术架构、历史、应用场景和其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,还进行了大量实践讲解。实践部分先讲解了多种不同的安装、运行和部署方式,然后实践了基础类的Interfaces、Blocks和Custom Components,最后对Gradio的高级特性进行了详细讲解和实践,比如Gradio-Lite、Gradio Client和Tabular Data Science And Plots等。
本系列文章如下:
本篇第一章讲述了Gradio是什么、历史、特性、用途以及与NiceGui、StreamLit、Dash及PyWebIO的比较,并给出了选择建议。
Gradio 是一个Hugging Face发布的开源Python库,可以为机器学习模型、API或任意Python函数快速构建web可视化界面,并且通过Gradio的内置共享功能快速生成对应的链接,而无需任何JavaScript、CSS或网络托管经验。Gradio的设计理念是“无代码”,它的自封装组件的功能也相对比较完整,因此可以让开发者专注于编写基于python代码的业务处理逻辑,而无需关注web前端页面的代码实现细节。这意味着你不需要编写复杂的代码就可以创建一个交互式的界面,其官网如下图所示:
gradio框架基于svelte,它是一个组件框架,构建在HTML之上,是一种全新的构建用户界面的方法,就像React或Vue一样,但有一个重要的区别。传统React或Vue框架支持声明性状态驱动的代码,但缺点是:浏览器必须额外将这些声明性结构转换为DOM操作,这会占用框架和垃圾收集器的运行资源。而Svelte将组件转换为高效的命令式代码以精确更新DOM,并通过构建应用程序的编译阶段来处理,这有助于编写大型且高性能的应用程序。
Gradio 的发展历史可以追溯到2019年,其创始人是Abubakar Abid和Ali Abdalla,他们都是斯坦福大学的研究生。他们发现,尽管机器学习模型的复杂性在不断增加,但是这些模型的可解释性和可访问性却并没有得到相应的提高。因此,他们决定创建一个工具,使得任何人都可以轻松地与机器学习模型进行交互。
自从发布以来,Gradio已经得到了广泛的应用。它被用于创建了各种各样的模型界面,包括图像分类器、语音识别系统、文本生成器等等。Gradio的用户群体也非常广泛,从研究人员和数据科学家,到教师和学生,甚至包括艺术家和记者。
Gradio的发展也得到了社区的大力支持。它的GitHub仓库已经收到了数千个星标,这表明了开发者对这个项目的热情。此外,Gradio也得到了一些重要的更新,比如增加了新的界面元素model3D、audio、video等,改进了性能以及提高了兼容性。截至发稿前,其最新版本已更新到4.37.2。
gradio的gitcode地址为:https://gitcode.com/jobily/gradio/overview,如下图:
Gradio的主要目标是使模型的测试和调试变得更加简单,同时也让非技术用户能够理解和使用这些模型。以下是Gradio的一些主要特性和关键技术:
Gradio的主要优势在于其易用性和灵活性,主要用于快速搭建和分享机器学习模型的交互式演示界面,使得非技术用户也能轻松理解并测试模型的功能,广泛应用于模型展示、教育及协作场景。以下是Gradio的一些主要使用场景:
Gradio的使用场景非常广泛,它降低了机器学习模型部署的门槛,使得更多的人能够参与到模型的开发、测试和应用中来。通过Gradio,开发者可以专注于模型的核心算法,而不必担心前端开发的复杂性。这种工具的普及,无疑将推动机器学习技术的快速发展和广泛应用。
随着机器学习的发展,便于展示模型训练效果的可视化框架也逐渐兴盛。当前比较流行的框架包括Gradio、NiceGui、StreamLit、Dash及PyWebIO等,它们是轻量级的Python前端框架,而传统的遵循MVC设计模式的Python Web框架如Flash、Django更适合大型复杂的项目。下面对5个轻量级框架进行简单比较和说明。
先看下图,图中对使用场景、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/6) | 30.1k | 7.9k | 32.7k | 20.7k | 4.4k |
总结:Gradio、NiceGui、Streamlit和Dash都是创建机器学习应用的优秀工具,但它们各有优劣。如果你需要快速创建一个简单应用或原型设计,Gradio、NiceGui和Streamlit都是比较好的选择 ,Streamlit提供较高的自由度,默认组件库更为精细和多样化,并且支持自定义组件及异步加载,支持更多的可视化展示例如Matplotlib、Vega Lite (2D charts) 和deck.gl (maps and 3D charts),因此无法支持Jupyter Notebook。Gradio相对而言更专注于深度学习模型的部署,对于模型的输入输出有一定要求,但在这个框架下,用户可以更专注于模型本身的迭代。NiceGui基于vue,在复杂性和易用性之间取得了平衡。如果你需要创建一个复杂的应用,或者你需要更多的控制权,Dash更合适,但它使用python编写前端+后端,代码会比较冗长。对于熟悉python的开发者,PyWebIO适合简单web或基于浏览器的GUI,另外它并没有针对机器学习的开发功能。如果你的项目更加复杂,需要更多的功能、定制性和可扩展性,可能需要考虑使用更强大的框架,比如PyQt、Tkinter(Python自带的GUI库)、wxPython或Kivy 等。
前端框架复杂多样,作者非专业前端人员,只是为介绍Gradio而查了一些资料,有补充或异议的朋友请留言告知。没有包治百病的灵丹妙药,同样也没有适合所有场景的框架,所以在选择具体框架之前,作者建议根据具体项目决定,通常需要考虑以下几个因素:
功能性:该框架是否具备你需要的所有功能?它是否支持你需要的所有控件和功能?
社区支持:如果你遇到问题或需要帮助,该框架的社区是否足够大和活跃,能够提供足够的支持和资源?
文档和学习资源:该框架的文档是否详尽?是否有足够的教程和学习资源?
兼容性和可移植性:该框架是否能在你需要支持的所有平台上运行?
长期维护:该框架的开发和维护是否足够活跃,能够持续提供新的功能和修复bug?
当开发具体项目时,需结合项目需求和上述因素来决定所用框架。
使用Gradio让机器学习模型交互起来
快速生成 AI 应用的框架对比:Gradio、Streamlit 和 Dash