使用 Docker 部署流#
使用 docker 部署流分为两个步骤
将流构建为 Docker 格式。
构建并运行 Docker 镜像。
将流构建为 Docker 格式#
使用以下命令将流构建为 Docker 格式
pf flow build --source <path-to-your-flow-folder> --output <your-output-dir> --format docker
在可视编辑器中,选择:
点击下方按钮将流构建为 Docker 格式:
请注意,所有依赖的连接必须在导出为 Docker 之前创建。
Docker 格式文件夹结构#
导出的 Dockerfile 及其依赖项位于同一文件夹中。结构如下
flow:包含所有流文件的文件夹
…
connections:包含用于创建所有相关连接的 yaml 文件的文件夹
…
Dockerfile:用于构建镜像的 Dockerfile
start.sh:
Dockerfile的CMD中用于启动服务的脚本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,目前仅支持flask和fastapi。
测试端点#
启动服务后,您可以使用 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"
后续步骤#
尝试 此处 的示例。
请参阅如何 使用 kubernetes 部署流。