使用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: 一个用于存储docker镜像设置的json文件

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

使用Docker部署#

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

请确保您已经创建了流程所需的连接,如果没有,您可以参考为网络分类设置连接

构建一个流作为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 http://localhost:8080/score --data '{"url":"https://play.google.com/store/apps/details?id=com.twitter.android"}' -X POST  -H "Content-Type: application/json"

下一步#