docker 使用ECS任务扫描参数空间的最佳方法是什么?

0vvn1miw  于 2023-05-06  发布在  Docker
关注(0)|答案(1)|浏览(144)

我如何用不同的参数触发相同任务的N次执行,以系统地扫描3D参数空间?
我定义了AWS ECS Fargate任务。它们通过命令行接受多个args,或者作为docker镜像,运行args到entrypoint。因此,下面将训练我的模型,测试它们,为我的合奏设置“411”:

docker run -it my_image -s train -a test -e 411

现在在ECS上,参数是任务定义的一部分

-s,train,-a,test,-e,411

现在,我想扫过-e 411的许多变体,以及4-5个其他维度。出于可伸缩性的原因,我不想在应用程序中扫描参数空间(如果我这样做,它实际上只是一组嵌套的for循环)。这些任务都将具有相同的(a)代码,(B)docker镜像,(c)任务设置,包括CPU和RAM要求,(d)彼此绝对独立,(e)除了我想要改变/探索的4-5个参数。
最好的方法是什么,在一个地方保持参数整洁,有一个非常简单的方法来启动这些任务,并保持它可管理的快速未来的变化?

  • 定义~100个任务,并将参数写入这些任务定义中?然后我可以通过调用任务来启动它们,但是维护任务是一场噩梦(许多任务有许多参数要跟踪和更新)
  • 用“overwrite”启动~100个任务,每个任务都从命令行开始,所以一个单独的for循环来关闭所有任务?如果是这样的话,“启动器批处理作业”在哪里运行-通过aws cli在本地机器上运行,或者只是启动生产性“任务”容器的另一个ECS容器?
  • 定义一个“服务”,并将大约100个参数变量硬编码到该服务中,以便该服务启动任务?至少参数都在一个地方,但启动/调度变得相当复杂。
  • 使用AWS Batch?我该如何控制这里的参数空间呢?我只看到我可以用一个参数替换一个占位符,但没有为占位符上的循环创建任务的选项。
bttbmeg0

bttbmeg01#

我会选择这种方法:
用“overwrite”启动~100个任务,每个任务都从命令行开始,所以用一个单独的for循环来启动所有的任务?如果是这样的话,“启动器批处理作业”在哪里运行--通过aws cli在本地机器上运行,还是另一个ECS容器只是为了启动生产性的“任务”容器?
您可以使用ECS Container Overrides更改每个ECS任务的参数。
在哪里运行这个脚本来启动ECS任务并不重要。 Package 从本地计算机运行的AWS CLI命令的脚本就可以了。如果你需要从云端以某种自动化的方式运行它,我会考虑从AWS Lambda函数中执行,并使用AWS SDK而不是CLI。我看到你用python标记了这个问题,所以我会用Python AWS Lambda函数和boto 3来完成。

相关问题