强制SGE使用多个服务器

问题描述 投票:2回答:1

TL; DR:有没有办法在调度作业时让SGE在服务器之间进行循环,而不是在可能的情况下将所有作业分配到同一服务器?

细节:

我有一个大型计算过程,包含许多较小的作业。我正在使用SGE在群集中的多个服务器之间分配工作。

该过程需要在不同时间点执行不同数量的任务(从技术上讲,它是作业的DAG)。有时并行作业的数量非常大(集群中每个CPU约1个),有时它要小得多(每个服务器约1个)。 DAG是动态的并且不是统一的,因此在任何给定点上都不容易知道有多少并行作业。

这些作业使用了大量的CPU,但也做了一些非常重要的IO(尤其是在作业启动和关闭时)。他们访问连接到所有计算服务器的共享NFS服务器。每个计算服务器具有较窄的连接(10Gb / s),但NFS服务器具有几个到通信交换机的宽连接(40Gbs)。不确定交换机主干的带宽是多少,但它是一个怪物,所以它应该很高。

为获得最佳性能,应尽可能在不同服务器上安排作业。也就是说,如果我有20台服务器,每台服务器有20个处理器,那么提交20个作业就应该分别运行一个作业。提交40个作业应该每个运行2个,等等。提交400个作业会使整个集群饱和。

但是,SGE反对最小化我的I / O性能。提交20个作业将在一台服务器上安排所有这些作业。因此,当19个带宽为190Gb的其他机器处于空闲状态时,它们都争夺单个10Gb网络连接。

我可以强制SGE以多种方式在不同的服务器上执行每个作业(使用资源,使用特殊队列,使用我的并行环境并指定'-t 1-'等)。但是,这意味着我只能在每个服务器上运行一个作业。当DAG打开并产生许多作业时,作业将停止等待完全免费的服务器,而每台机器的20个处理器中的19个将保持空闲状态。

我需要的是一种告诉SGE将每个作业分配给下一个具有循环顺序的可用插槽的服务器的方法。更好的方法是将作业分配给负载最小的服务器(未使用的插槽的最大数量,或未使用的插槽的最大部分,或最小的已用插槽数量等)。但是一个死的简单循环法可以解决这个问题。

与SGE在同一台服务器上运行每项工作的策略相比,这似乎是一种更为明智的策略,这与我之前的工作相比,这只是最糟糕的策略。

我查看了SGE的配置选项,但我找不到任何修改调度策略的方法。也就是说,SGE的文档并不容易导航,所以我很容易错过一些东西。

有没有人知道如何让SGE将其调度策略更改为循环或最少负载或沿着这些线路的任何内容?

谢谢!

parallel-processing cluster-computing sungridengine
1个回答
1
投票

只需将allocation_rule更改为$round_robin即可获得SGE并行环境(sge_pe文件):

allocation_rule

     The allocation rule is interpreted by the  scheduler  thread
     and helps the scheduler to decide how to distribute parallel
     processes among the available machines. If, for instance,  a
     parallel environment is built for shared memory applications
     only, all parallel processes have to be assigned to a single
     machine, no matter how much suitable machines are available.
     If, however, the parallel environment  follows  the  distri-
     buted  memory  paradigm,  an  even distribution of processes
     among machines may be favorable.
     The current version of the scheduler  only  understands  the
     following allocation rules:

<int>:    An integer number fixing the number  of  processes
           per  host.  If the number is 1, all processes have
           to reside  on  different  hosts.  If  the  special
           denominator  $pe_slots  is used, the full range of
           processes as specified with the qsub(1) -pe switch
           has  to  be  allocated on a single host (no matter
           which value belonging  to  the  range  is  finally
           chosen for the job to be allocated).

$fill_up: Starting from the best  suitable  host/queue,  all
          available  slots  are allocated. Further hosts and
          queues are "filled up" as  long  as  a  job  still
          requires slots for parallel tasks.

$round_robin:
          From all suitable hosts a single slot is allocated
          until  all tasks requested by the parallel job are
          dispatched. If more tasks are requested than suit-
          able hosts are found, allocation starts again from
          the  first  host.  The  allocation  scheme   walks
          through  suitable  hosts  in a best-suitable-first
          order.

资料来源:http://gridscheduler.sourceforge.net/htmlman/htmlman5/sge_pe.html

© www.soinside.com 2019 - 2024. All rights reserved.