

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 版本 3.7.x 中的 Slurm 动态节点分配策略
<a name="scheduler-dynamic-node-allocation-v3-3.7.x"></a>

ParallelCluster 使用 2 种类型的动态节点分配策略来扩展集群：
+ 

**根据可用的请求节点信息进行分配：**
  + **所有节点恢复**或**节点列表**扩展：

    ParallelCluster `ResumeProgram`运行时仅根据请求Slurm的节点列表名称Slurm来扩展集群。它仅按节点名称向节点分配计算资源。节点名称列表可以跨越多个作业。
  + **作业级别恢复**或**作业级别**扩展：

    ParallelCluster 根据每个作业的要求、当前分配给该任务的节点数以及需要恢复的节点来扩展集群。 ParallelCluster 从`SLURM_RESUME_FILE`环境变量中获取此信息。
+ 

**使用 Amazon EC2 启动策略进行分配：**
  + **最大努力**扩展：

    ParallelCluster 使用最小目标容量等于 1 的 Amazon EC2 启动实例 API 调用来扩展集群，启动支持请求的节点所需的部分但不一定是全部实例。
  + ll-or-nothing缩@@ **放**比例：

    ParallelCluster 使用 Amazon EC2 启动实例 API 调用扩展集群，只有在支持请求的节点所需的所有实例都启动后，该调用才会成功。在这种情况下，它调用 Amazon EC2 启动实例 API 时的最小目标容量等于请求的总容量。

默认情况下， ParallelCluster 使用**节点列表**扩展和尽力而为 Amazon **EC** 2 启动策略来启动支持请求的节点所需的部分实例，但不一定是全部实例。它会尝试预置尽可能多的容量来处理所提交的工作负载。

**从 3.7.0 ParallelCluster 版开始， ParallelCluster 使用**作业级**扩展和 **all-or-nothing**EC2 启动策略来处理以独占模式提交的任务。**当您在独占模式下提交作业时，该作业对其分配的节点拥有独占访问权限。有关更多信息，请参阅 Slurm 文档中的 [EXCLUSIVE](https://slurm.schedmd.com/slurm.conf.html#OPT_EXCLUSIVE)。

要以独占模式提交作业，请执行以下操作：
+ 向集群提交 Slurm 作业时传递独占标志。例如 `sbatch ... --exclusive`。

  或
+ 向 [`JobExclusiveAllocation`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-JobExclusiveAllocation) 设置为 `true` 的已配置集群队列提交作业。

以独占模式提交作业时：
+ ParallelCluster 目前批量启动请求最多包含 500 个节点。如果任务请求的节点超过 500 个， ParallelCluster 则为每组 500 个节点发出启动请求，为其余节点发出额外的启动请求。**all-or-nothing**
+ 如果节点分配在单个计算资源中， ParallelCluster 则为每组 500 个节点发出启动请求，为其余节点发出额外的启动请求。**all-or-nothing**如果启动请求失败， ParallelCluster 将终止所有启动请求创建的未使用容量。
+ 如果节点分配跨越多个计算资源，则 ParallelCluster 需要为每个计算资源发出**all-or-nothing**启动请求。这些请求也会进行批处理。如果其中一个计算资源的启动请求失败，则 ParallelCluster 会终止所有计算资源启动请求所创建的未使用容量。

使用**all-or-nothing**启动策略进行@@ **作业级**扩展已知局限性：
+ 当您在具有单一实例类型的计算资源中提交任务时，在跨越多个可用区的队列中，只有在单个可用区中可以提供所有容量时，**all-or-nothing**EC2 启动 API 调用才会成功。
+ 当您在具有多种实例类型的计算资源中提交任务时，在具有单个可用区的队列中，只有当所有容量均可由单个实例类型提供时，**all-or-nothing**Amazon EC2 启动 API 调用才会成功。
+ 当您在具有多种实例类型的计算资源中提交任务时，在跨越多个可用区的队列中，不支持 **all-or-nothing**Amazon EC2 启动 API 调用，而是 ParallelCluster执行**尽力**扩展。