gpt4 book ai didi

python - 如何动态扩展 StarCluster/qsub/EC2 以跨多个节点运行并行作业

转载 作者:可可西里 更新时间:2023-11-01 16:18:09 26 4
gpt4 key购买 nike

我不熟悉使用 Startcluster/qsub/grid engine 来运行并行作业,我尝试阅读其他几篇与此相关的文章。我仍然不确定如何为我的特定要求构建可扩展的解决方案。在继续进行相同的操作之前,我想听取更多建议。

这是我的要求:

  1. 我有一个巨大的 tar 文件 [~40 - 50 GB,最大可达 100GB]-----> 我在这里无能为力。我接受了一个巨大的单个 tar 文件作为输入。

  2. 我必须解压缩它----->我运行 tar xvf tarfilename.tar | parallel pbzip -d 解压和解压缩相同的。

  3. 这个解压缩的输出是几十万个文件,大约 500,000 个文件。

  4. 必须处理这些未压缩的文件。我有模块化代码,可以接收每个文件并对其进行处理并输出 5 个不同的文件。

Tar 文件 ----- 并行解压缩 ---> 解压缩文件 ----- 并行处理 ---> 每个处理文件 5 个输出文件

  1. 我目前有一个并行 python 脚本,它在 16 核、16GB 内存上运行,接收未压缩文件列表并并行处理它们。

  2. 问题是我如何无缝扩展。例如,如果我的代码运行了 10 个小时,我想再给它添加一台 8 核机器,我不能用并行 python 来做,因为我必须提前知道处理器的数量。

  3. 同时,当我向当前集群动态添加更多节点时,数据访问和读写操作如何?

因此,我开始阅读 starcluster 和 qsub 并进行基本实验。虽然我看到我可以通过 qsub 提交多个作业,但我将如何从未压缩的输入文件夹中获取输入文件?

例如,我是否可以编写一个 script.sh,在 for 循环中一个一个地选择文件名并将其提交给 qsub 命令?还有其他有效的解决方案吗?

比如说,如果有 3 台机器,每台机器有 16 个 CPU,如果我向队列提交 48 个作业,qsub 会在集群的不同 CPU 中自动启动它们,还是我必须使用并行环境参数,如 -np orte 命令分别设置每个集群的CPU数量。是否有必要使我的 python 脚本 MPI 可执行?

总而言之,我有几十万个文件作为输入,我想将它们提交给多核机器的作业队列。如果我动态添加更多机器,作业应该自动分配。

另一个主要挑战是我需要在最后汇总 500,000 次奇数操作的所有输出吗?是否有关于如何在写出输出时聚合并行作业输出的建议?

我正在测试运行几个场景,但我想知道是否有人对类似场景进行过实验。

有什么使用 Hadoop 插件的建议吗? http://star.mit.edu/cluster/docs/0.93.3/plugins/hadoop.html

提前致谢卡西克

最佳答案

  1. I/O 和数据共享。如果你的 I/O 很低,你可以将你的数据留在你的主节点上并使用 nfs 在你的节点之间共享它。如果您有大量 I/O,我建议您使用 S3 存储桶。

  2. 分发:启动多个 qsub 的 bash 脚本是正确的做法。对单个文件或同时对几个文件调用它取决于您。

  3. 扩展:将集群上运行的并行作业视为不同的任务。您可以在每个节点上运行 1 个或多个应用程序实例。例如:如果您使用 cr1.8xlarge 节点,则您有 32 个核心。您可以使用 32 个内核启动应用程序的 1 个实例,或者使用 8 个内核启动应用程序的 4 个实例。请参阅 Open Grid Engine 中每个节点的“插槽”配置。 (如果你更愿意运行你的应用程序的一个大实例,结合多个节点的核心,我从来没有这样做过,所以我不能帮助你。)然后,要添加一个节点,你可以使用“addnode”来自 StarCluster 的命令。一旦节点启动,OGS 也会自动在那里分发作业。您还可以使用 StarCluster 负载均衡器自动添加/删除节点。

所以,这是我的建议。1. 将您的文件解压缩到 S3。2.启动StarCluster3. 使用你的 bashscript,每几个文件 qsub 一个作业(对于一个作业来说,处理 10 个文件可能比对每个文件都有一个作业更有效)4. 您的应用程序必须 I/O 到 s3。5. 当队列为空时,使用脚本查看结果以确保所有作业运行良好。当输出丢失时,您可以重新安排作业。

  • 我不知道您的聚合是如何完成的,所以我无法判断。
  • 我从来没有用过 hadoop,所以我也帮不上忙。
  • 您无需使您的 python 脚本 MPI 可执行。
  • 如果您使用异构集群,那么您从一开始就知道每个节点上有多少核心可用。
  • 如果您将具有 32 个核心的节点定义为具有 4 个插槽,那么您应该让每个作业最多使用 8 个核心。

关于python - 如何动态扩展 StarCluster/qsub/EC2 以跨多个节点运行并行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15334429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com