Gradio Agents & MCP 黑客马拉松

获奖者
Gradio logo
  1. 其他教程
  2. 使用 Docker 部署 Gradio

使用 Docker 部署 Gradio 应用

简介

Gradio 是一个功能强大且直观的 Python 库,旨在创建展示机器学习模型的 Web 应用。这些 Web 应用可以在本地运行,也可以免费部署到 Hugging Face Spaces。或者,您也可以将它们部署到您的服务器上的 Docker 容器中。将 Gradio 应用 Docker 化具有以下几个优势:

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

如何将 Gradio 应用 Docker 化

让我们通过一个简单的例子来了解如何使用 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 来指定如何构建和运行我们的应用。在与应用相同的目录中创建一个名为 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 应用现在应该可以通过 https://: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,您需要将一个 粘性块 添加到您的目标组定义中。)

在代理后部署

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