定义自定义图像
所有 远程执行的任务 都在容器中运行, 无论是在 Kubernetes 还是在 AWS Batch 中。因此,远程任务的默认环境是由所使用的容器(Docker)镜像定义的。
默认情况下,Metaflow使用一个默认的Python镜像,该镜像除了Python本身不包含任何库。当需要额外的库时,一个简单的选择是使用 @pypi和@conda装饰器,它们会在基础镜像的基础上动态安装库。
或者,您可以使用任何其他您选择的图像。许多现成的图像可以在不修改的情况下与Metaflow一起使用,或者您可以构建一个自定义图像。
构建自定义镜像
主要要求是确保安装了python版本的图像。
有关构建自定义镜像的更多信息,请参见 此外部操作指南页面。
配置自定义镜像
选择图像有三种方法,具体取决于您希望多大范围地使用该图像。 选项按照从最广泛到最具体的顺序列出:
1. 定义一个默认图像
如果你想在所有远程任务中默认使用替代图像,请在 Metaflow 配置文件 中指定两个变量:
METAFLOW_DEFAULT_CONTAINER_REGISTRY控制 Metaflow 用于选择镜像的注册表。默认为 DockerHub,但也可以是 AWS 上一个公共或私有 ECR 存储库的 URL。METAFLOW_DEFAULT_CONTAINER_IMAGE决定了 Metaflow 应该使用的默认容器镜像。
2. 定义特定步骤的图像
要在特定步骤中使用特定图像,请在@batch或@kubernetes装饰器中指定image参数。
3. 使用自定义镜像执行一个运行
您可以测试特定的镜像而不改变配置或代码。只需将 :image=repo/image:version 添加到 --with batch 或 --with kubernetes。
例如,您可以像这样使用最新的Ubuntu镜像:
python helloflow.py run --with kubernetes:image=hub.docker.com/ubuntu:latest
使用 @pypi 或 @conda 的自定义镜像
您可以使用自定义图像以及 @pypi 或 @conda。
如往常一样, @pypi 和 @conda 确保环境的隔离,这意味着安装在图像中的包在步骤中不会可见,除非 您明确禁用该步骤的环境。
如果图像中除了包之外还有其他资产需要被步骤访问,这种组合是有益的。步骤可以访问图像中的所有文件,例如配置文件,后台进程照常工作,并且您可以启动特定于图像的子进程。
这样,你可以设计一个包含非库资产的基础镜像,让开发者独立处理库,使用 @pypi 或 @conda。