Gradio 月活用户突破一百万!
阅读更多Gradio 月活用户突破一百万!
阅读更多Gradio 是一个强大且直观的 Python 库,专为创建展示机器学习模型的 Web 应用程序而设计。这些 Web 应用程序可以在本地运行,或者免费部署在 Hugging Face Spaces 上。或者,你可以将它们部署在 Docker 容器中的服务器上。Docker 化 Gradio 应用有以下几个好处
让我们通过一个简单的例子来理解如何使用 Docker 容器化 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()
这个应用创建了一个简单的界面,可以通过姓名问候用户。
接下来,我们将创建一个 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 执行以下步骤
GRADIO_SERVER_NAME
环境变量以确保 Gradio 监听所有网络接口。有了 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 提供了一份指南,其中详细介绍了必要的步骤。 此设置确保您的应用可访问并在生产环境中表现良好。