使用 AWS Batch
以下是一些有关在 AWS Batch 上运行 Metaflow 的有用提示和技巧。请查看我们的工程资源,以获取有关 为 Metaflow 设置和操作 AWS Batch 的附加信息。
我应该设置@timeout的值是多少?
Metaflow 设置了一个默认的超时为 5 天,以确保您的任务在 AWS Batch 上运行时不会无限期卡住。有关如何使用 @timeout 的更多详情,请阅读 this.
我可以请求多少 @resources?
以下是不同资源类型的当前默认值:
cpu: 1memory: 4000 (4GB)
在设置 @resources 时,请记住您 AWS Batch 计算环境的配置。如果 AWS 无法提供请求的资源,您的作业将停留在 RUNNABLE 状态。此外,作为一个好的措施,请勿请求超过您的工作流实际所需的资源。另一方面,切勿过早优化资源。
您可以通过使用 queue 参数将您的 AWS Batch 任务放置在特定的队列中。默认情况下,所有任务都在与启动流时所使用的 Python 解释器版本相对应的普通 python docker
image 上执行,且可以使用 image 参数进行覆盖。
您也可以在命令行中指定资源需求:
$ python BigSum.py run --with batch:cpu=4,memory=10000,queue=default,image=ubuntu:latest
使用AWS Batch的GPU和Trainium实例
要在AWS Batch上运行的Metaflow任务中使用GPU,您需要在一个作业队列中运行该流,该队列连接到一个带有GPU/Trainium实例的计算环境。
要设置此内容,您可以修改Metaflow AWS 部署模板中的允许实例,或从AWS控制台手动添加此计算环境。步骤如下:
- 创建一个带有GPU支持的EC2实例或Trainium实例的计算环境。
- 将计算环境附加到一个新的作业队列 - 例如命名为
my-gpu-queue。 - Run a flow with a GPU task in the
my-gpu-queuejob queue by- 设置
METAFLOW_BATCH_JOB_QUEUE环境变量,或 - 在您的 Metaflow 配置中设置
METAFLOW_BATCH_JOB_QUEUE值,或者 - (最明确)在
@batch装饰器中设置queue参数。
- 设置
将运行GPU任务的作业队列与不需要GPU(或Trainium实例)的作业队列分开是一种良好的做法。这使得跟踪硬件加速的工作流程变得更容易,这些流程可能会产生昂贵的费用,而独立于其他工作流程。只需添加一行像这样的内容
@batch(gpu=1, queue='my-gpu-queue')
在需要GPU的步骤中。
我的工作卡在 RUNNABLE 状态。 我应该怎么办?
您尝试在其中运行 Metaflow 任务的批处理作业队列是否具有带有请求资源的 EC2 实例的计算环境?例如,如果您的作业队列连接到一个只有 p3.2xlarge 作为 GPU 实例的计算环境,而用户请求 2 个 GPU,那么该作业将永远无法被调度,因为 p3.2xlarge 每个实例只有 1 个 GPU。
有关更多信息,请参见本文。
我的任务卡在 STARTING 状态。我该怎么办?
在您的Metaflow代码/命令中请求的资源是否足够?特别是使用自定义GPU镜像时,您可能需要增加请求的内存以将容器镜像拉入您的计算环境。
列出和终止 AWS Batch 任务
如果你中断了一个 Metaflow 运行,由该运行启动的任何 AWS Batch 任务将被 Metaflow 自动终止。即使在最后清理过程中出现了问题,这些任务最终也会完成并终止,最晚在它们达到 AWS Batch 任务允许的最大时间时终止。
如果您想确保没有正在运行的 AWS Batch 任务,或者您想手动管理它们,您可以使用 batch list 和 batch kill 命令。
您可以轻松查看您最新运行启动的 AWS Batch 任务
$ python myflow.py batch list
您可以终止最新运行启动的任务
$ python myflow.py batch kill
如果您已经开始了多个运行,您可以通过以下方式确保没有孤立的任务仍在运行
$ python myflow.py batch list --my-runs
您可以终止最新运行启动的任务
$ python myflow.py batch kill --my-runs
如果你看到多个运行中的任务,你可以选择特定的任务,例如 456,按照以下方式终止它
$ python myflow.py batch kill --run-id 456
如果你正在与其他人合作,你可以查看并终止与此流程相关的他们的任务,使用
$ python myflow.py batch kill --user willsmith
请注意,上述所有命令仅影响您脚本中定义的流程。您可以并行处理多个流程,并确信 kill 只会终止与您使用 kill 调用的流程相关的任务。
访问AWS Batch日志
作为一个便利功能,您还可以查看任何过去步骤的日志,如下所示:
$ python bigsum.py logs 15/end
磁盘空间
您可以通过使用带有自定义AMI的非托管计算环境,在AWS Batch实例上请求更高的磁盘空间。