Gradio 不仅仅是又一个 UI 库的 17 个理由

发布于 2025 年 4 月 16 日
在 GitHub 上更新

引言

“哦,Gradio?那是一个用来构建用户界面的 Python 库,对吧?”

我们经常听到这样的话。虽然 Gradio 确实能让你用最少的 Python 代码创建交互式用户界面,但将 Gradio 称为“UI 库”却忽略了其更宏大的愿景!Gradio 不仅仅是一个 UI 库——它是一个通过 UI 和 API 与机器学习模型交互的框架,为性能、安全性和响应性提供了强有力的保障。

在本文中,我们将介绍 Gradio 的独特功能,并解释它们对于构建强大的人工智能应用为何至关重要。我们会分享 Gradio 官方文档和发布说明的链接,如果你好奇的话可以进一步探索。

Comparison of Gradio with other frameworks

1. 通用 API 访问

所有的 Gradio 应用也都是 API!当你构建一个 Gradio 应用时,你也可以使用 Gradio 强大的客户端库,以编程方式访问这些 Gradio 应用。我们提供:

  • Python (gradio_client) 和 JavaScript (@gradio/client) 的官方 SDK,并支持 cURL API 访问。
  • 为你在 Gradio 应用中定义的每个事件自动生成 REST API 端点。
  • 自动生成的 API 文档,可通过“查看 API”链接访问。
  • 具有高级功能的客户端库,如文件处理、Hugging Face Space 复制等。

延伸阅读: 探索客户端库使用 Curl 查询 Gradio 应用

Gradio 的独特之处:

  • 大多数其他 Python 框架缺乏官方的 API 访问机制。
  • 传统的 Web 框架需要为 UI 和 API 端点分别实现,而 Gradio 仅通过一次实现就自动生成两者,并包含文档。

2. 用于开发的交互式 API 记录器

Gradio 在 4.26 版本中引入了“API 记录器”。这个强大的开发工具让开发者可以实时捕获他们的 UI 交互,并自动生成相应的 Python 或 JavaScript API 调用。

  • “API 记录器”可以在上面讨论的“查看 API”页面找到。
  • 它通过你自己的真实示例,帮助你记录 Gradio 应用的 API 使用方法。

延伸阅读: 探索 API 记录器

Gradio 的独特之处

  • 在大多数其他 Python 和 Web 框架中,你无法如此轻松地将 UI 交互脚本化。这是 Gradio 在 ML 工具领域独有的能力。
  • API 记录器与 Gradio Client 库的结合,使得从 UI 探索到使用 API 端点进行开发的过渡变得非常顺畅。

3. 通过服务器端渲染快速构建机器学习应用

Gradio 5.0 引入了服务器端渲染 (SSR),改变了机器学习应用的加载和执行方式。传统的 UI 框架依赖于客户端渲染,而 Gradio 的 SSR:

  • 消除了加载圈,显著减少了初始页面加载时间。
  • 在服务器上预渲染 UI,使用户能够立即进行交互。
  • 提高了已发布应用的 SEO。
  • 为 Hugging Face Spaces 部署自动启用,同时对本地开发保持可配置。

延伸阅读: 了解更多关于 Gradio 5 的 SSR

Gradio 的独特之处

  • 传统的 Python UI 框架仅限于客户端渲染,而在 JS Web 框架中实现 SSR 需要大量的全栈开发专业知识。
  • Gradio 提供了 Web 框架级别的性能,同时保持了纯 Python 的开发体验(注意:除了需要安装 Node!)。

4. 针对机器学习任务的自动队列管理

Gradio 提供了一个为机器学习应用量身定制的复杂排队系统,可以处理 GPU 密集型计算和高流量用户访问。

  • Gradio 的队列会自动处理你应用中定义的各种任务,无论是运行在 GPU 上的长时间预测、音视频流,还是非机器学习任务。
  • 你的应用可以扩展到数千个并发用户,而不会出现资源争用和系统过载。
  • 通过服务器发送事件 (Server-Side Events) 实时更新队列状态,向用户显示他们在队列中的当前位置。
  • 你可以配置并发限制以并行处理请求。
  • 你甚至可以使用 concurrency_id 让不同的事件通过共享队列池共享资源。

延伸阅读: 了解排队探索并发控制

Gradio 的独特之处

  • 大多数其他 Python 框架在运行并发会话时不提供资源管理。如果你使用流行的 Web 框架,你可能需要自己手动实现排队系统。
  • Gradio 的内置队列管理系统无需外部调度器,让你能够构建 GPU 密集型或病毒式传播的机器学习应用。

5. 针对实时机器学习输出的高性能流式处理

Gradio 的流式处理功能为现代机器学习应用提供了至关重要的实时、低延迟更新。该框架提供:

  • 简单的开发者体验:Gradio 通过使用 yield 语句的简单 Python 生成器提供流式处理。
  • 这支持逐个 token 的文本生成流、逐步骤的图像生成更新,甚至通过 HTTP Live Streaming (HLS) 协议实现平滑的音视频流。
  • 通过 FastRTC 实现的 WebRTC/WebSocket API,用于实时应用。

延伸阅读: 实现指南了解更多关于 Gradio 5 的流式处理改进

Gradio 的独特之处

  • 其他 Python 框架需要手动进行线程管理和轮询以实现流式更新。Web 框架同样需要自定义 WebSocket 或 WebRTC 实现来支持实时流。
  • 你可以使用 FastRTC 和 Gradio 完全在 Python 中创建实时音视频流应用。

6. 集成的多页面应用支持

Gradio 通过其原生的多页面支持,已经超越了单页面应用,使开发者能够构建全面的 AI/ML 应用。

  • 你可以在单个应用上下文中拥有多个页面。
  • Gradio 提供自动的 URL 路由和导航栏生成。
  • 后端资源,如队列,在页面间共享。
  • 开发者可以将代码拆分到多个文件中,同时保持单一的应用上下文。这有利于文件的可维护性和测试。

延伸阅读: 探索多页面应用了解页面组织

Gradio 的独特之处

  • 其他 Python 框架需要为每个页面编写单独的脚本,限制了页面间的状态共享。流行的 Web 框架也需要显式设置路由。
  • Gradio 使用简单的 Python 声明即可提供自动路由和导航栏!这一特性将 Gradio 从一个演示平台转变为一个强大的 Web 框架,用于构建功能齐全的机器学习应用。

7. 使用 Groovy 执行新的客户端函数

Gradio 5 引入了一个名为 Groovy 的自动 Python-to-JavaScript 转译库。这使得 UI 能够即时响应,无需服务器往返。

  • Python 函数可以使用 js=True 标志直接在浏览器内进行简单的 UI 更新。
  • 主要用于各种组件属性的即时更新。
  • 这消除了简单 UI 交互的延迟。
  • 减少了基本界面更新的服务器负载。对于流量大的托管应用或在高延迟连接下使用应用时尤其有用。
  • 使开发者无需 JavaScript 专业知识即可编写高响应性应用。

延伸阅读: 了解客户端函数

Gradio 的独特之处

  • 大多数其他 Python 框架的所有 UI 更新都需要服务器往返。流行的 Web 框架则为客户端逻辑实现单独的 JavaScript 代码库。
  • Gradio 自动将 Python 转译为 JavaScript,提供了单一语言的开发体验,同时实现了 Web 原生的性能——这是其他框架所不具备的组合。

8. 全面的主题系统和现代 UI 组件

Gradio 提供了一个复杂的主题系统,可以将你的机器学习应用转变为精致、专业的界面。

  • Gradio 拥有现成的主题预设,如 Monochrome、Soft、Ocean、Glass 等。这些主题也内置了暗黑模式支持。
  • 所有 Gradio 主题都是自动移动端响应的,并且我们确保你的 Gradio 应用对使用屏幕阅读器的人士是自动无障碍的。
  • Gradio 组件带有针对机器学习的 UI 选项,例如,我们为聊天界面提供撤销/重试/点赞按钮,为分割/遮罩用例提供 ImageEditor 和 AnnotatedImage 组件,为图像到图像转换提供 ImageSlider 等。
  • Gradio 最近在我们的聊天界面中引入了增强的 UI 功能,用于支持推理型大语言模型、智能体、多步智能体、嵌套思考和嵌套智能体,将 AI 智能体提升为聊天 UI 中的一等公民。

延伸阅读: 探索 Gradio 主题查看 UI 更新为智能体构建 UI

Gradio 的独特之处

  • 其他 Python 框架在没有全面主题系统的情况下,只提供非常有限的颜色定制。在所有流行的 Web 框架中,你都必须手动实现主题管理和 CSS。
  • 有了 Gradio,机器学习从业者可以创建专业外观的应用,而无需 Web 设计专业知识,同时在需要时仍能灵活地实现自定义品牌。

9. Gradio 的动态界面

随着 @gr.render() 装饰器的引入,你在 Gradio 应用中定义的组件和事件监听器不再是固定的——你可以根据用户交互和状态动态添加新的组件和监听器。

  • 你现在可以根据模型输出或你的工作流程即时渲染 UI 修改。
  • 请注意,Gradio 还提供了一个 .render() 方法,它与装饰器不同。它允许在另一个 Block 中渲染任何 Gradio Block。

延伸阅读: 探索渲染装饰器查看动态应用示例

Gradio 的独特之处

  • 其他 Python 框架的动态 UI 功能非常有限。Web 框架则需要 JavaScript 来实现任何形式的界面更新。
  • Gradio 允许动态 UI 操作。开发者可以使用简单的 Python 创建复杂且响应迅速的界面。

10. 使用 Gradio Sketch 进行可视化界面开发

Gradio Sketch 引入了一个可视化开发环境,为你带来了无代码的机器学习应用设计界面。它基本上是一个所见即所得 (WYSIWYG) 编辑器,帮助你使用 Gradio 组件构建界面布局,定义事件,并为这些事件附加函数。

  • 你可以选择并添加组件到你的界面,同时实时预览界面的变化。
  • 你甚至可以可视化地为组件添加事件监听器。整个应用代码会根据你的可视化界面设计自动生成。
  • Gradio Sketch 包含一个代码生成器功能,可以为你的推理函数创建代码。
  • 此外,用户可以迭代多个提示以获得他们想要的确切代码。

延伸阅读: 探索 Gradio Sketch

Gradio 的独特之处

  • 所有其他 Python 框架都需要你编写代码来构建布局。
  • Gradio Sketch 降低了非编码人员的学习曲线。它显著加速了所有人的应用开发过程,从而有助于 AI 的民主化。

11. 渐进式 Web 应用 (PWA) 支持

Gradio 提供渐进式 Web 应用 (PWA) 功能。PWA 是常规的网页或网站,但可以向用户显示为可安装的、平台特定的应用程序。

  • 你可以创建适用于移动和桌面端的机器学习应用,而无需提供额外的配置。

延伸阅读: 了解 PWA 支持

Gradio 的独特之处

  • 大多数其他 Python 框架缺乏原生的 PWA 支持。在大多数流行的 Web 框架中,你必须手动配置 PWA。
  • Gradio 的这一功能使机器学习应用更易于访问,拥有更广泛的用户。你可以立即创建一个带有你所选图标的移动应用,而无需额外的开发工作。

12. 使用 Gradio Lite 在浏览器内执行

Gradio Lite 通过 Pyodide (WebAssembly) 实现浏览器端执行。你可以使用客户端模型推理服务(如 Transformers.js 和 ONNX)来构建机器学习演示。

  • 增强的隐私性(所有数据都保留在用户的浏览器中)
  • 部署零服务器成本!
  • 可离线运行的模型推理

延伸阅读: 探索 Gradio Lite了解 Transformers.js 集成

Gradio 的独特之处

  • 大多数其他 Python 框架需要持续的服务器运行。同时,流行的 Web 框架需要为后端实现单独的 JavaScript 代码。
  • 有一些静态网站平台不需要服务器后端,但它们提供的交互性非常有限或基础。
  • Gradio 实现了 Python 机器学习应用的无服务器部署。有了 Gradio Lite,即使是静态文件托管服务(如 GitHub Pages)也可以托管完整的机器学习应用。Gradio Lite 使 Gradio 在设备上或边缘机器学习应用的交付中独树一帜。

13. 通过 AI 辅助工具加速开发

Gradio 引入了创新功能,极大地加速了机器学习应用的开发周期。

  • Gradio 提供了热重载功能,可在开发过程中即时更新你的 Gradio UI 中的代码。
  • 我们还提供 AI Playground,用于自然语言驱动的应用生成。
  • 你可以通过与 HuggingFace 和 推理服务提供商的集成,用一行代码快速构建应用原型。这对于任何与 OpenAI 兼容的 API 端点也同样适用。你只需使用 gr.load() 即可完成所有这些操作。

延伸阅读: 了解 Gradio 5 的最新创新使用 Huggingface 进行原型设计

Gradio 的独特之处

  • 大多数其他 Python 框架在开发应用时需要手动刷新以更新代码。大多数 Web 框架也是如此——你需要复杂的构建管道和开发服务器。
  • 借助 AI Playground,Gradio 提供了即时 UI 反馈和 AI 辅助开发。这种对快速开发和 AI 辅助工具的关注,使研究人员和开发人员能够快速创建和修改机器学习应用。

14. 无忧的应用分享

一旦你的 Gradio 应用准备就绪,你就可以分享它,而无需担心部署或托管的复杂性。

  • 你只需设置一个参数即可立即生成一个公共 URL:demo.launch(share=True)。应用可以在一个唯一的 xxxxx.gradio.live 格式的域名上访问,同时你的代码和模型仍在你的本地环境中运行。
  • 这些分享链接在 Gradio 的官方分享服务器上有 168 小时(1 周)的超时限制。
  • 你只需设置一个参数即可立即生成一个公共 URL:demo.launch(share=True) 。应用可在 *.gradio.live 域名上访问 1 周。
  • 分享链接通过 Gradio 的分享服务器,使用快速反向代理 (FRP),为你本地运行的应用创建一条安全的 TLS 隧道。
  • 对于企业部署或需要自定义域名或额外安全措施的情况,你可以托管自己的 FRP 服务器以避免 1 周的超时限制。

延伸阅读: 了解快速分享分享链接和分享服务器

Gradio 的独特之处

  • 其他 Python 框架需要云部署和大量配置才能与公众分享你的应用。对于一个 Web 框架,你需要手动的服务器设置和托管。
  • Gradio 提供了从你的本地开发环境即时分享的功能,无需创建任何部署管道、配置托管服务器或进行任何端口转发。这为社区提供了即时的协作或演示能力。
  • 任何时候都有超过 5000 个 Gradio 应用通过分享链接进行分享,这种方法非常适合快速原型设计和收集对你的机器学习应用的即时反馈。

15. 企业级安全和生产就绪

Gradio 已从一个原型工具发展成为一个具有全面安全措施的生产就绪框架。我们最近的增强功能包括:

  • 来自 Trail of Bits 的第三方安全审计和对 Gradio 构建应用的漏洞评估。
  • 根据我们安全审计员的反馈,我们加固了文件处理和上传控制。我们现在通过直观的环境变量提供可配置的安全设置。例如,你可以通过 GRADIO_ALLOWED_PATHS 控制文件路径访问,通过 GRADIO_SSR_MODE 控制服务器端渲染。

延伸阅读: 了解安全改进探索环境变量

Gradio 的独特之处

  • 大多数其他 Python 框架通常更关注开发场景而非生产安全。你典型的 Web 框架提供通用安全,但没有针对机器学习的特定考虑。
  • 使用 Gradio,你可以获得针对机器学习部署场景的专门安全保护,受保护的文件上传处理,以及经过净化的模型输入/输出处理。
  • 这些生产级别的改进使得 Gradio 适用于企业机器学习部署,同时保持了其快速开发的简便性。Gradio 框架现在提供了强大的安全默认设置,同时为特定的部署需求提供了精细的控制。

16. 增强的数据框组件

Gradio 更新后的数据框组件通过实用的改进,解决了机器学习应用中常见的数据可视化需求:

  • 多单元格选择
  • 行号和列固定,用于浏览大型数据集
  • 用于数据探索的搜索和筛选功能
  • 静态(不可编辑)列
  • 通过更好的键盘导航提高可访问性

延伸阅读: 介绍 Gradio 的新数据框!

Gradio 的独特之处

  • 其他框架通常需要 JavaScript 库来实现类似的功能。
  • Gradio 在实现这些功能的同时,保持了简单的 Python API。
  • 这些改进支持实际的机器学习工作流程,如数据探索和交互式仪表板。

17. 用于分享应用状态的深度链接

Gradio 的深度链接功能允许用户捕获并分享应用的确切状态。

  • 与他人分享你独特的模型输出。
  • 在特定时间点创建你应用的快照。
  • 通过单个 gr.DeepLinkButton 组件实现。
  • 适用于任何公共 Gradio 应用(托管的或使用 share=True 的)。

延伸阅读: 使用深度链接

Gradio 的独特之处

  • 大多数框架需要自定义状态管理代码来实现类似功能。
  • 深度链接自动适用于所有 Gradio 组件。
  • 无需额外的实现工作即可分享生成的输出!

结论

Gradio 已经从一个演示工具演变为一个以 AI 为中心的框架,让开发者可以在 Python 中构建完整的 Web 应用,而无需 Web 开发专业知识。

Gradio 4 和 5 中的创新,例如 Python 到 JavaScript 的转译、用于资源密集型模型的内置排队、使用 FastRTC 的实时音视频流以及服务器端渲染,提供了在其他框架中需要大量实现工作才能实现的功能。

通过处理 API 端点生成、安全漏洞和队列管理等基础设施问题,Gradio 使机器学习从业者能够专注于模型开发,同时仍能提供精美的用户界面。Gradio 框架通过同一套 Python 代码库支持快速原型设计和生产部署场景。

我们邀请您在下一个机器学习项目中尝试 Gradio,亲身体验为什么它远不止是又一个 UI 库。无论您是研究员、开发者还是机器学习爱好者,Gradio 都为每个人提供了工具。

探索 Gradio 的强大功能!

社区

你好,你在这里用的是哪个版本的 torch?https://huggingface.co/spaces/ysharma/Make_Custom_Voices_With_KokoroTTS/tree/main
我一直遇到这个错误
models.py", line 365, in build_model
for key, state_dict in torch.load(path, map_location='cuda', weights_only=False)['net'].items()
File ".pyenv/versions/3.10.16/lib/python3.10/site-packages/torch/serialization.py", line 1040, in load
return _legacy_load(opened_file, map_location, pickle_module, **pickle_load_args)
File ".pyenv/versions/3.10.16/lib/python3.10/site-packages/torch/serialization.py", line 1262, in _legacy_load
magic_number = pickle_module.load(f, **pickle_load_args)
_pickle.UnpicklingError: invalid load key, 'v'.

是否有可能深入到 CSS 或样式中,以便对美学有更精细的控制?我喜欢 Gradio 和它的鲁棒性,但我想给我的应用一个非常独特的风格和用户体验。

文章作者

是的,当然可以。

注册登录以发表评论