分布式部署

本主题介绍如何在分布式系统中部署Kedro。

分布式应用指的是在网络中多台计算机上同时运行的软件,可以存储在服务器或通过云计算部署。与在单台机器上运行的传统应用不同,分布式应用同时在多个系统上运行以完成单个任务或作业。

如果您的Kedro流水线计算密集度很高,可以选择使用分布式系统,以利用云的弹性和可扩展性来管理计算资源。

作为一种分布式部署策略,我们推荐以下步骤序列:

1. 容器化流水线

为了更好的依赖管理,我们建议您将整个流水线/项目容器化。我们推荐使用Docker,但您也可以自由选择任何偏好的容器解决方案。在本教程中,我们将假设使用Docker工作流。

首先通过运行以下命令确保您的项目需求是最新的

pip-compile --output-file=<project_root>/requirements.txt --input-file=<project_root>/requirements.txt

我们推荐使用Kedro-Docker插件来简化镜像构建流程。具体使用说明请参阅该插件的README.md文件

在本地为项目构建Docker镜像后,通常需要将镜像传输到容器注册表(如DockerHub或AWS Elastic Container Registry),以便在远程服务器上拉取该镜像。具体操作步骤可参考我们的单机部署指南

2. 将您的Kedro流水线转换为目标平台原语

Kedro流水线得益于一种通常易于(至少在语义上)转换为不同平台能理解语言的结构。由nodes组成的有向无环图可转换为一组任务,其中每个节点映射为独立任务——无论是Kubeflow操作器、AWS Batch作业等,其依赖关系与Pipeline.node_dependencies中映射的完全一致。

要以编程方式执行转换,您需要开发一个脚本。确保将所有目录条目保存到远程位置,并充分利用管道中的节点names作为tags来简化流程。例如,您应该为所有节点命名,并使用程序员友好的命名约定。

3. 参数化运行

一个node通常对应一个计算单元,可以通过参数化基础的kedro run来运行:

kedro run --nodes=<node_name>

我们鼓励您根据需求尝试不同的参数化运行方式。优先使用名称、标签和自定义标志,而非修改代码来实现不同行为。所有作业/任务/操作器等都应使用相同版本的代码(即相同的Docker镜像)来运行。

4. (可选) 创建启动器

如果您经常需要在类似环境或平台上部署,可以选择构建自己的Kedro启动器。该启动器能让您复用步骤2中编写的任何部署脚本。