1. 其他教程
  2. 理解 Gradio 分享链接

分享链接和分享服务器

您可能已经知道,通过在 .launch() 方法中设置 share=True,您可以分享任何您构建的 Gradio 应用。换句话说,如果您这样做:

import gradio as gr

with gr.Blocks() as demo:
    ...

demo.launch(share=True)

这会立即为您的 Gradio 应用创建一个公开可访问的分享链接(看起来像:https://xxxxx.gradio.live),让您可以与任何人分享您的应用(同时将代码和模型保留在您的本地环境中运行)。该链接创建在 Gradio 的分享服务器上,该服务器不托管您的 Gradio 应用,而是创建一个到您本地运行的 Gradio 应用的隧道

这在您进行原型设计并希望立即获得机器学习应用的反馈时特别有用,而无需处理托管或部署应用的麻烦。

在任何给定时间,都有超过 5,000 个 Gradio 应用通过分享链接进行分享。但这个链接是如何创建的,以及您如何创建自己的分享服务器?继续阅读!

Fast Reverse Proxy (FRP)

Gradio 的分享链接由 Fast Reverse Proxy (FRP) 提供支持,这是一个开源隧道解决方案。工作原理如下:

当您创建具有 share=True 的 Gradio 应用时,FRP 客户端会自动下载到您的本地机器(如果尚未安装)。此客户端与 Gradio 的分享服务器建立安全的 TLS 隧道。分享服务器承载 FRP 服务器组件,该组件能够处理数千个并发连接。

隧道建立后,Gradio 的分享服务器会在 xxxxx.gradio.live 格式的唯一域下将您本地运行的应用程序暴露给互联网。当您使用 share=True 启动 Gradio 应用时,整个过程会在后台发生。

接下来,我们将深入探讨 Gradio 使用的 FRP 客户端和 FRP 服务器。

FRP 客户端

我们使用一个修改版的 FRP 客户端,它在您的机器上运行。我们打包了最常见操作系统的二进制文件,当您首次在机器上创建分享链接时,会下载适用于您系统的 FRP 客户端。

代码:

  • 客户端的完整 Go 代码可以在这个目录中找到。
  • 我们使用这个Makefile 脚本将 Go 代码打包成适用于每个操作系统的二进制文件。

故障排除:某些杀毒软件(特别是 Windows Defender)会阻止下载 FRP 客户端。在这种情况下,您会看到一条消息,其中包含有关如何手动安装文件的详细信息,类似如下:

Could not create share link. Missing file: /Users/.../frpc_darwin_arm64_v0.3. 

Please check your internet connection. This can happen if your antivirus software blocks the download of this file. You can install manually by following these steps: 

1. Download this file: https://cdn-media.huggingface.co/frpc-gradio-0.3/frpc_darwin_arm64
2. Rename the downloaded file to: frpc_darwin_arm64_v0.3
3. Move the file to this location: /Users/...

如果这不起作用,您可能需要将此文件添加到杀毒软件的白名单才能使用分享链接。

FRP 服务器

Gradio 运行一个分享服务器,它是 FRP 服务器的一个修改版本。该服务器负责处理隧道的面向公众的一端,接收来自互联网的入站连接,并将它们路由到您本地机器上运行的相应 FRP 客户端。

官方 Gradio 分享服务器托管在 gradio.live,我们尽最大努力确保其始终可靠运行。当您在 Gradio 应用中设置 share=True 时,默认使用的是此服务器。您可以在 https://status.gradio.app/ 查看官方 Gradio 分享服务器的当前运行状态。

如果愿意,您也可以托管自己的 FRP 服务器。这可以让您完全控制隧道基础设施,对于企业部署或需要自定义域名或附加安全措施的情况非常有用,或者如果您想避免 Gradio 官方分享服务器创建的链接强制执行的 72 小时超时。以下是运行您自己的Gradio 分享服务器的说明。

代码:

  • 客户端的完整 Go 代码可以在这个目录中找到。
  • 用于启动FRP 服务器的 Dockerfile 可以在这里找到。

故障排除:尽管我们尽最大努力确保 Gradio 分享服务器的运行,但它有时仍会发生故障。如果状态页面显示 Gradio 服务器已关闭,我们会努力修复它,无需创建 issue!