使用 Docker 部署流#

使用 docker 部署流分为两个步骤

  1. 将流构建为 Docker 格式。

  2. 构建并运行 Docker 镜像。

将流构建为 Docker 格式#

使用以下命令将流构建为 Docker 格式

pf flow build --source <path-to-your-flow-folder> --output <your-output-dir> --format docker

在可视编辑器中,选择:img 点击下方按钮将流构建为 Docker 格式:img

请注意,所有依赖的连接必须在导出为 Docker 之前创建。

Docker 格式文件夹结构#

导出的 Dockerfile 及其依赖项位于同一文件夹中。结构如下

  • flow:包含所有流文件的文件夹

  • connections:包含用于创建所有相关连接的 yaml 文件的文件夹

  • Dockerfile:用于构建镜像的 Dockerfile

  • start.sh:DockerfileCMD 中用于启动服务的脚本

  • runit:包含所有 runit 脚本的文件夹

  • settings.json:一个 json 文件,用于存储 Docker 镜像的设置

  • README.md:文件的简单介绍

使用 Docker 部署#

我们将使用 web-classification 作为示例来演示如何使用 Docker 进行部署。

请确保您已 创建流所需的连接,如果没有,您可以参考 为 web-classification 设置连接

将流构建为 Docker 格式的应用程序#

使用以下命令将流构建为 Docker 格式的应用程序

pf flow build --source ../../flows/standard/web-classification --output dist --format docker

请注意,所有依赖的连接必须在导出为 Docker 之前创建。

构建 Docker 镜像#

与其他 Dockerfile 一样,您需要先构建镜像。您可以为镜像标记任意名称。在此示例中,我们使用 web-classification-serve

运行以下命令构建镜像

docker build dist -t web-classification-serve

运行 Docker 镜像#

运行 Docker 镜像将启动一个服务,用于在容器内部提供流服务。

连接#

如果服务涉及连接,所有相关连接将作为 yaml 文件导出并在容器中重新创建。连接中的密钥不会直接导出。相反,我们将它们导出为环境变量的引用。

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/OpenAIConnection.schema.json
type: open_ai
name: open_ai_connection
module: promptflow.connections
api_key: ${env:OPEN_AI_CONNECTION_API_KEY} # env reference

您需要在容器中设置环境变量以使连接正常工作。

使用 docker run 运行#

使用 flask 服务引擎运行#

您可以直接通过以下命令运行 Docker 镜像,这将默认使用 flask 服务引擎

# The started service will listen on port 8080.You can map the port to any port on the host machine as you want.
docker run -p 8080:8080 -e OPEN_AI_CONNECTION_API_KEY=<secret-value> -e PROMPTFLOW_WORKER_NUM=<expect-worker-num> -e PROMPTFLOW_WORKER_THREADS=<expect-thread-num-per-worker> web-classification-serve

请注意

  • PROMPTFLOW_WORKER_NUM:可选设置,它控制您的容器中启动多少个工作程序,默认值为 8。

  • PROMPTFLOW_WORKER_THREADS:可选设置,它控制一个工作程序中启动多少个线程,默认值为 1。此设置仅适用于 flask 引擎

使用 fastapi 服务引擎运行#

从 pf 1.10.0 开始,我们支持新的基于 fastapi 的服务引擎,您可以通过以下命令选择使用 fastapi 服务引擎

# The started service will listen on port 8080.You can map the port to any port on the host machine as you want.
docker run -p 8080:8080 -e OPEN_AI_CONNECTION_API_KEY=<secret-value> -e PROMPTFLOW_SERVING_ENGINE=fastapi -e PROMPTFLOW_WORKER_NUM=<expect-worker-num> web-classification-serve

请注意

  • PROMPTFLOW_WORKER_NUM:可选设置,它控制您的容器中启动多少个工作程序,默认值为 8。

  • PROMPTFLOW_SERVING_ENGINE:可选设置,它控制您的容器中使用哪个服务引擎,默认值为 flask,目前仅支持 flaskfastapi

测试端点#

启动服务后,您可以使用 curl 进行测试

curl https://:8080/score --data '{"url":"https://play.google.com/store/apps/details?id=com.twitter.android"}' -X POST  -H "Content-Type: application/json"

后续步骤#