Gradio 月活用户突破一百万!

阅读更多
Gradio logo
  1. 其他教程
  2. 使用 Docker 部署 Gradio

使用 Docker 部署 Gradio 应用

介绍

Gradio 是一个强大且直观的 Python 库,专为创建展示机器学习模型的 Web 应用程序而设计。这些 Web 应用程序可以在本地运行,或者免费部署在 Hugging Face Spaces 上。或者,你可以将它们部署在 Docker 容器中的服务器上。Docker 化 Gradio 应用有以下几个好处

  • 一致性:Docker 通过将应用程序及其环境打包在一起,确保你的 Gradio 应用无论部署在哪里,都以相同的方式运行。
  • 可移植性:容器可以轻松地在不同的系统或云环境之间移动。
  • 可扩展性:Docker 与 Kubernetes 等编排系统配合良好,允许你的应用根据需求进行横向或纵向扩展。

如何 Docker 化 Gradio 应用

让我们通过一个简单的例子来理解如何使用 Docker 容器化 Gradio 应用。

步骤 1:创建你的 Gradio 应用

首先,我们需要一个简单的 Gradio 应用。让我们创建一个名为 app.py 的 Python 文件,内容如下

import gradio as gr

def greet(name):
    return f"Hello {name}!"

iface = gr.Interface(fn=greet, inputs="text", outputs="text").launch()

这个应用创建了一个简单的界面,可以通过姓名问候用户。

步骤 2:创建 Dockerfile

接下来,我们将创建一个 Dockerfile 来指定我们的应用应该如何在 Docker 容器中构建和运行。在与你的应用相同的目录中创建一个名为 Dockerfile 的文件,内容如下

FROM python:3.10-slim

WORKDIR /usr/src/app
COPY . .
RUN pip install --no-cache-dir gradio
EXPOSE 7860
ENV GRADIO_SERVER_NAME="0.0.0.0"

CMD ["python", "app.py"]

此 Dockerfile 执行以下步骤

  • 从 Python 3.10 slim 镜像开始。
  • 设置工作目录并将应用复制到容器中。
  • 安装 Gradio(你也应该安装所有其他依赖项)。
  • 暴露端口 7860(Gradio 的默认端口)。
  • 设置 GRADIO_SERVER_NAME 环境变量以确保 Gradio 监听所有网络接口。
  • 指定运行应用的命令。

步骤 3:构建并运行你的 Docker 容器

有了 Dockerfile,你可以构建并运行你的容器

docker build -t gradio-app .
docker run -p 7860:7860 gradio-app

你的 Gradio 应用现在应该可以在 http://localhost:7860 访问了。

重要注意事项

在 Docker 中运行 Gradio 应用程序时,有几件重要的事情需要记住

"0.0.0.0" 上运行 Gradio 应用并暴露端口 7860

在 Docker 环境中,将 GRADIO_SERVER_NAME="0.0.0.0" 设置为环境变量(或直接在您的 Gradio 应用的 launch() 函数中设置)对于允许从容器外部建立连接至关重要。 Dockerfile 中的 EXPOSE 7860 指令告诉 Docker 暴露容器上 Gradio 的默认端口,以便外部访问 Gradio 应用。

为多个副本启用粘性会话

当部署具有多个副本的 Gradio 应用时,例如在 AWS ECS 上,启用 sessionAffinity: ClientIP 的粘性会话非常重要。 这确保了来自同一用户的所有请求都被路由到同一个实例。 这很重要,因为 Gradio 的通信协议需要从前端到后端的多个独立连接,以便事件能够被正确处理。(如果您使用 Terraform,您需要在目标组定义中添加一个 stickiness block。)

在代理后部署

如果您在代理(如 Nginx)后部署 Gradio 应用,则正确配置代理至关重要。 Gradio 提供了一份指南,其中详细介绍了必要的步骤。 此设置确保您的应用可访问并在生产环境中表现良好。