lsb.queues

lsb.queues 文件定义批处理队列。 在队列级别提供了许多控件,以允许集群管理员定制站点策略。

此文件是可选的。 如果未配置任何队列,那么 LSF 将创建名为default,将所有参数设置为缺省值。

缺省情况下,此文件安装在 LSB_CONFDIR/cluster_name/configdir中。

更改 lsb.queues 配置

更改 lsb.queues后,运行 badmin reconfig 以重新配置 mbatchd 守护程序。

除非在作业执行主机上运行 mbatchd restartsbatchd restart ,否则某些参数 (例如,运行时窗口和运行时限制) 不会对正在运行的作业立即生效。

lsb.queues 结构

每个队列定义以行 开始队列 开始,以行 结束队列结束。 必须指定队列名称; 所有其他参数都是可选的。

#include

语法

#INCLUDE "path-to-file"

描述

将配置设置从另一个文件插入到当前位置。 使用此伪指令,通过向特定用户或用户组提供对所包含文件的写访问权,将部分配置的控制权专用于其他用户或用户组,并确保不同集群中配置文件设置的一致性 (如果您使用的是 LSF 多集群功能)。

有关更多信息,请参阅 共享配置文件内容

可以在本地配置文件中的任何位置插入 #INCLUDE

缺省值

尚未定义。

管理员

指定以空格分隔的队列管理员列表。 队列管理员可以对队列中的任何用户作业以及队列本身进行操作。

语法

ADMINISTRATORS=user_name | user_group...

描述

要指定 Windows 用户账户或用户组,请使用大写字母包含域名(域名\用户名域名\用户组)。

缺省值

尚未定义。 您必须是集群管理员才能对此队列进行操作。

APS_PRIORITY

指定绝对优先级调度 (APS) 的计算因子。 队列中的暂挂作业根据计算的 APS 值进行排序。

语法

APS_PRIORITY=WEIGHT[[factor, value] [subfactor, value] ...] ...] LIMIT[[factor, value] [subfactor, value] ...] ...] GRACE_PERIOD[[factor, value] [subfactor, value] ...] ...]

描述

如果定义了子因子的权重,但未定义父因子的权重,那么父因子权重设置为 1。

WEIGHT 和 LIMIT 因子是浮点值。 为 GRACE_PERIOD 指定 (以秒为单位) (values) ,分钟 (valuem) 或小时 (valueh)。

APS_PRIORITY 的最大值为 1000000.00。

宽限期的缺省单位是小时。

以下是要指定的因子和子因子的名称:

因子 子因子 指标
FS (基于用户的公平份额因子) 现有公平分享功能调整动态用户优先级 公平份额因子根据动态用户优先级自动调整 APS 值。

必须在队列中定义 FAIRSHARE 参数。 对于非公平共享队列,将忽略 FS 因子。

FS 因子受 lsb.queueslsb.params 文件中定义的以下公平共享参数的影响:

  • CPU_TIME_FACTOR
  • FWD_JOB_FACTOR
  • RUN_TIME_FACTOR
  • RUN_JOB_FACTOR
  • HIST_HOURS
RSRC (资源因子) PROC 请求的任务最大为 bsub -n min_taskmax_taskbsub -n min的最小值或 lsb.queues 文件中 TASKLIMIT 参数的值。
MEM 请求的实内存总量 (以 MB 为单位或在 lsf.conf 文件的 LSF_UNIT_FOR_LIMITS 参数中设置的单位)。

在 APS 计算中,将忽略出现在用法字符串中 || 符号右边的内存请求。

对于多相内存预留, APS 值基于预留内存的第一阶段。

SWAP 请求的交换空间总量 (以 MB 为单位,或以 lsf.conf 文件中的 LSF_UNIT_FOR_LIMITS 参数中设置的单元为单位)。

MEM一样,将忽略在用法字符串中 || 符号右边显示的交换空间请求。

WORK (作业属性) JPRIORITY 由以下对象指定的作业优先级:
  • lsb.params 文件中 MAX_USER_PRIORITY 参数值的一半指定的缺省值
  • 具有 bsub -spbmod -sp 的用户
  • 使用 lsb.params 文件中的 JOB_PRIORITY_OVER_TIME 参数自动升级优先级

如果 lsb.params 文件中的 TRACK_ELIGIBLE_PENDINFO 参数设置为 Yy,那么只要符合调度条件, LSF 就会增加暂挂作业的作业优先级。 LSF 不会增加不合格暂挂作业的作业优先级。

QPRIORITY 提交队列的优先级。
APP   通过在 lsb.applications 文件中指定 PRIORITY 参数,在应用程序概要文件级别设置优先级因子。 APP_PRIORITY 因子将添加到计算的 APS 值以更改因子值。 APP_PRIORITY 因子适用于整个作业。
USER   通过在 lsb.users 文件的 User 部分中指定 PRIORITY 参数,为用户设置优先级因子。 USER_PRIORITY 因子将添加到计算的 APS 值以更改因子值。 USER_PRIORITY 因子适用于整个作业。
UG   通过在 lsb.users 文件的 UserGroup 部分中指定 PRIORITY 参数来设置用户组的优先级因子。 UG_PRIORITY 因子将添加到计算的 APS 值以更改因子值。 UG_PRIORITY 因子适用于整个作业。 LSF 使用 bsub -G 选项中指定的用户组优先级。
ADMIN   管理员使用 bmod -aps 为每个作业设置此子因子值。 正值将增大 APS。 负值将减少 APS。 ADMIN 因子将添加到计算的 APS 值以更改因子值。 ADMIN 因子适用于整个作业。 不能配置单独的权重,限制或宽限期因素。 ADMIN 因子在设置后立即生效。
例如,下面为 MEM 因子设置了 10 小时的宽限期,为 JPRIORITY 因子设置了 10 分钟的宽限期,为 QPRIORITY 因子设置了 10 秒的宽限期,为 RSRC 因子设置了 10 小时 (缺省值) 的宽限期:
GRACE_PERIOD[[MEM,10h] [JPRIORITY, 10m] [QPRIORITY,10s] [RSRC, 10]]

不能为任何因子或子因子的 WEIGHTLIMITGRACE_PERIOD 指定 0 (零)。

APS 队列无法配置跨队列公平共享 (FAIRSHARE_QUEUES)。 QUEUE_GROUP 参数将替换 FAIRSHARE_QUEUE ,这在 LSF 7.0中已过时。

暂挂的 (bstop) 作业和迁移的作业 (bmig) 始终调度在暂挂作业之前。 对于迁移的作业, LSF 会保留现有作业优先级信息。

如果在 lsf.conf中配置了 LSB_RECEUE_TO_BOTTOM 和 LSB_MIG2PEND ,那么迁移的作业将保留其 APS 信息。 配置 LSB_RECEUE_TO_BOTTOM 和 LSB_MIG2PEND 时,迁移的作业需要根据 APS 值与其他暂挂作业竞争。 要重置 APS 值,请使用 brequeue,而不是 bmig

缺省值

未定义

备份

对队列启用回填调度。

语法

BACKFILL=Y | N

描述

将此参数设置为 Y 以启用队列的回填调度。

如果同时指定了 BACKFILLPREEMPTION ,那么可能存在冲突。 如果在 lsb.params 文件中设置了 PREEMPT_JOBTYPE = BACKFILL ,那么可以抢占回填队列。 否则,无法抢占回填队列。 如果启用了 BACKFILL ,请勿同时指定 PREEMPTION = PREEMPTABLE

BACKFILL 对于可中断的回填队列是必需的 (INTERRUPTIBLE_BACKFILL=seconds)。

为同一队列定义 MAX_SLOTS_IN_POOLSLOT_RESERVEBACKFILL 时,队列中的作业无法使用同一队列中其他作业保留的插槽进行回填。

缺省值

尚未定义。 无回填。

cgroup_cpu_shares_factor

语法

CGROUP_CPU_SHARES_FACTOR=整数百分比

描述

从 Fix Pack 15 开始,管理员可以使用 CGROUP_CPU_SHARES_FACTOR 参数为 cpu.sharescpu.weight Linux cgroup (v1v2) 接口指定默认值的百分比,这样,CPU 密集度较低的作业就可以获得其他作业的 CPU 份额或权重的一部分,而不是获得与所有其他运行作业相同的 CPU 份额或权重。 如果配置, cpu.sharescpu.weight 的初始值将按此 CGROUP_CPU_SHARES_FACTOR 值缩放。 CGROUP_CPU_SHARES_FACTOR 值可在应用程序配置文件和队列级别指定。 在多级定义时, LSF 使用最小值。 要使用 参数 CGROUP_CPU_SHARES_FACTOR ,请确保在 文件 lsf.conf 中将 LSB_CGROUP_CPU_SHARES_OLD_DEFAULT 参数设置为 Nn,或保持未定义(默认值)。

指定一个小于 100 的正整数,因为该值表示百分比。 例如, CGROUP_CPU_SHARES_FACTOR=25 表示 CPU 共享系数为 cpu.sharescpu.weight 值的 25%。

缺省值

未定义

CHKPNT

对队列启用自动检查点。 提交到队列的所有作业都是可设置检查点的。

语法

CHKPNT=chkpnt_dir [chkpnt_period] [chkpnt_period] [chkpnt_period] [chkpnt_period

描述

检查点目录是创建检查点文件的目录。 指定绝对路径或相对于 CWD 的路径,请勿使用环境变量。

指定可选检查点时间段 (以分钟为单位)。

只能对正在运行的区块作业成员执行检查点操作。

如果在队列和应用程序概要文件中都指定了与检查点相关的配置,那么应用程序概要文件设置将覆盖队列级别配置。

在队列,应用程序概要文件和作业级别指定的与检查点相关的配置具有以下效果:
  • 将合并应用程序级别和作业级别参数。 如果在作业级别和应用程序概要文件中都定义了相同的参数,那么作业级别值将覆盖应用程序概要文件值。
  • 作业级别和应用程序概要文件设置的合并结果将覆盖队列级别配置。

要启用多集群作业的检查点,请同时在提交集群和执行集群的 send-jobs 和 receive-jobs 队列 ( lsb.queues中的 CHKPNT) 或应用程序概要文件 (CHKPNT_DIR , CHKPPNT_PERIOD , CHKPNT_INITPERIOD , CHKPNT_METHOD in lsb.applications) 中定义检查点目录。 LSF 使用执行集群中指定的目录。

要使多集群作业可设置检查点,提交队列和执行队列都必须启用检查点,并且执行集群上的应用程序概要文件或队列设置确定检查点目录。 如果作业在租赁的主机上运行,那么不支持检查点。

对于 UNIX 和 Linux,检查点目录的文件路径最多可以包含 4000 个字符,对于 Windows ,最多可以包含 255 个字符,包括目录和文件名。

缺省值

未定义

承诺运行时间因子

指定已落实的运行时加权因子。 仅用于公平共享调度。

语法

COMMITTED_RUN_TIME_FACTOR=数字

描述

在计算用户动态优先级时,此因素确定已落实运行时在计算中的相对重要性。 如果在作业提交时未指定 bsub-W 选项,并且没有为队列设置 RUNLIMIT ,那么不会考虑已落实的运行时。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

有效值

0.0 到 1.0 之间的任何正数

缺省值

尚未定义。

容器

语法

CONTAINER=podman[image(image_name) options(podman_run_options)]

CONTAINER=docker[image(image_name) options(docker_run_options) container_io() job_pre_post()]

CONTAINER=nvidia-docker[image(image_name) options(docker_run_options)]

CONTAINER=shifter[image(image_name) options(container_options)]

CONTAINER=singularity[image(image_name) options(container_options)]

CONTAINER=apptainer[image(image_name) options(apptainer_options]

CONTAINER=enroot[image(image_name) options(enroot_start_options)]

描述

使 LSF 能够将受支持的容器用于提交到此队列的作业。 此参数使用以下关键字:

艄公 | 码头工人 | nvidia-码头工人 | 换挡杆 | 奇点 装修商| 装修商 | 生根
必需。 使用下列其中一个关键字来指定要用于提交到此队列的作业的容器类型。
图像
必需。 此关键字指定正在运行的作业中使用的映像名称。

对于 Podman Docker NVIDIA Docker 和 Enroot 作业,请使用 $LSB_CONTAINER_IMAGE 环境变量,以便用户在提交作业时为容器作业指定镜像名称。 在作业提交时,用户可以通过指定 $LSB_CONTAINER_IMAGE 环境变量的值来指定指定存储库服务器中的特定映像名称。

选项
可选。 此关键字指定容器的作业运行选项。

要使预执行脚本能够运行,请指定执行主机必须能够访问的脚本的 at 符号 (@) 和完整文件路径。 在容器作业运行之前, LSF 使用 LSF 管理员特权运行此脚本。 当脚本运行时,作业的环境变量将传递到脚本。 当脚本完成运行时,输出将用作容器启动选项。 脚本必须在一行上提供此输出。 处理容器作业的方法取决于预执行脚本的结果:

  • 如果预执行脚本失败,那么容器作业将使用来自该脚本的相同退出代码进行退出。 此外,将发送外部状态消息以通知用户作业由于脚本执行失败而退出。
  • 如果脚本执行成功,但输出包含超过 512 个选项,那么 LSF 仅保留前 512 个选项,其余选项将被忽略。
  • 如果脚本执行成功并且输出有效,那么输出是容器作业运行选项的一部分。 来自脚本的输出在选项中的位置正是用户在选项字段中配置脚本的位置。
对于 Docker 和 Docker 容器,此关键字指定 docker run 命令的 Docker 作业运行选项,这些选项将传递给作业容器。
注:
  • 在指定 Docker 作业运行选项之前,请确保这些选项在命令行中使用 docker run 命令。
  • -- cgroup-parent-- user (或 -u) 选项保留供 LSF 内部使用。 请勿在选项关键字配置中使用这些选项,否则作业将失败。

    如果指定了预执行脚本,并且此脚本的输出包含 -- cgroup-parent-- user-u,那么容器作业也将失败。

  • 将自动为 LSF设置 -w-- ulimit 选项。 请勿在选项关键字配置中使用这些选项,因为这些规范将覆盖 LSF 设置。
  • -v 选项由 LSF 自动用于安装 LSF 所需的工作目录,例如当前工作目录,作业假脱机目录, bsub -f 命令的目标文件, tmp 目录, LSF_TOP以及随需应变的检查点目录。
  • 您可以在 options 关键字配置中配置 -- rm 选项,以在作业完成后自动除去容器。
  • 您可以启用 LSF ,以便在创建 Docker 容器时自动将名称分配给 Docker 容器。 要启用此功能,请在 lsfdockerlib.py 文件中将 ENABLE_CONTAINER_NAME 参数设置为 True

    容器名称使用以下命名约定:

    • 正常作业和 blaunch 并行作业容器: <cluster_name>.job.<job_id>
    • 阵列作业和阵列 blaunch 并行作业容器: <cluster_name>.job.<job_id>.<job_index>
    • blaunch 并行作业任务容器: <cluster_name>.job.<job_id>.task.<task_id>
    • 数组 blaunch 并行作业任务容器: <cluster_name>.job.<job_id>.<job_index>.task.<task_id>
  • 限制: 如果使用 -d 选项,那么 LSF 会错误地将 Docker 作业的状态作为DONE.
对于 Shifter 容器,此关键字指定 shifter 命令的 Shifter 作业运行选项,这些选项将传递到作业容器。
注:
  • 在命令行中运行 shifter --help 以查看 shifter 命令支持的选项。
  • 在指定 Shifter 作业运行选项之前,请确保这些选项在命令行中使用 shifter 命令。
  • 将根据 Shifter 用于工作的 setuid 位来清除 $LD_LIBRARY_PATH 目录。 因此,对于依赖于 $LD_LIBRARY_PATH 工作的程序 (例如 openmpi) ,请通过将 LD_LIBRARY_PATH 添加到 udiRoot.conf 文件的 siteEnvAppend 部分,确保可以在容器内正确设置 setuid 位。
对于奇异性或应用程序容器,此关键字指定 singularity execor apptainer exec 命令的奇异性或应用程序作业运行选项,这些选项将传递到作业容器。
注:
  • 在命令行中运行 singularity exec --helpapptainer exec --help 以查看 singularityapptainer 命令支持的选项。
  • 在指定奇异性或App此类作业运行选项之前,请确保这些选项在命令行中与 singularity execapptainer exec 命令配合使用。
  • 将根据 "奇异性" 或 "应用程序" 用于工作的 setuid 位来清除 $LD_LIBRARY_PATH 目录。 因此,对于依赖于 $LD_LIBRARY_PATH 工作的程序 (例如 openmpi) ,通过将 LD_LIBRARY_PATH 添加到 ld.so.conf 文件并运行 ldconfig 命令,确保可以在容器内正确设置 setuid 位。
对于 Podman 容器,此关键字指定 podman run 命令的 Podman 作业运行选项,这些选项将传递到作业容器。
注:
  • 在指定 Podman 作业运行选项之前,请确保这些选项在命令行中与 podman run 命令配合使用。
  • -- user (或 -u) 选项保留供 LSF 内部使用。 请勿在选项关键字配置中使用这些选项,否则作业将失败。

    如果指定了执行前脚本,并且此脚本的输出包含 -- user-u,那么容器作业也将失败。

  • 将自动为 LSF设置 -w-- ulimit 选项。 请勿在选项关键字配置中使用这些选项,因为这些规范将覆盖 LSF 设置。
  • -v 选项由 LSF 自动用于安装 LSF 所需的工作目录,例如当前工作目录,作业假脱机目录, bsub -f 命令的目标文件, tmp 目录, LSF_TOP以及随需应变的检查点目录。
  • 您可以在 options 关键字配置中配置 -- rm 选项,以在作业完成后自动除去容器。
  • 限制: 如果使用 -d 选项,那么 LSF 会错误地将 Docker 作业的状态作为DONE.
对于 Enroot 容器,此关键字指定 enroot start 命令的 Enroot 作业运行选项,这些选项将传递到作业容器。
注: 在指定 Enroot 作业运行选项之前,请确保这些选项在命令行中与 enroot start 命令配合使用。
容器输入输出函数
可选。 从 Fix Pack 15 开始,对于 Docker 作业, LSF 会将输出文件写入 Docker 容器文件系统。 如果设置了该关键字,还需指定 job_pre_post() 关键字。
job_pre_post()
可选。 从 Fix Pack 15 开始,对于 Docker 作业,如果设置了该选项,则可使 LSF 在 Docker 容器内运行用户级执行前和执行后命令。 如果设置了,还需指定 container_io() 关键字。

示例

要指定用于容器作业的 Ubuntu 映像,而不指定任何可选关键字:
Begin Queue
QUEUE_NAME = podmanq
CONTAINER = podman[image(repository.example.com:5000/file/path/ubuntu:latest)]
DESCRIPTION = Podman User Service
End Queue
Begin Queue
QUEUE_NAME = dockerq
CONTAINER = docker[image(repository.example.com:5000/file/path/ubuntu:latest)
container_io() job_pre_post()]
DESCRIPTION = Docker User Service
End Queue
Begin Queue
QUEUE_NAME = ndockerq
CONTAINER = nvidia-docker[image(repository.example.com:5000/file/path/ubuntu:latest)]
DESCRIPTION = NVIDIA Docker User Service
End Queue
Begin Queue
QUEUE_NAME = shifterq
CONTAINER = shifter[image(ubuntu:latest)]
DESCRIPTION = Shifter User Service
End Queue
Begin Queue
QUEUE_NAME = singq
CONTAINER = singularity[image(/file/path/ubuntu.img)]
DESCRIPTION = Singularity User Service
End Queue
Begin Queue
QUEUE_NAME = apptainerq
CONTAINER = apptainer[image(/share/apptainer/images/ubuntu_latest.sif)]
DESCRIPTION = Apptainer User Service
End Queue
Begin Queue
QUEUE_NAME = enrootq
CONTAINER = enroot[image(repository.example.com:5000/file/path/ubuntu:latest)]
DESCRIPTION = Enroot User Service
End Queue
要在 /share/usr/ 目录中指定预执行脚本,这将生成容器启动选项:
Begin Queue
QUEUE_NAME = dockerqoptions
CONTAINER = docker[image(repository.example.com:5000/file/path/ubuntu:latest) options(@/share/usr/docker-options.sh)
container_io() job_pre_post()]
DESCRIPTION = Docker User Service with pre-execution script for options
End Queue
Begin Queue
QUEUE_NAME = ndockerqoptions
CONTAINER = nvidia-docker[image(repository.example.com:5000/file/path/ubuntu:latest) options(@/share/usr/ndocker-options.sh)]
DESCRIPTION = NVIDIA Docker User Service with pre-execution script for options
End Queue
Begin Queue
QUEUE_NAME = shifterqoptions
CONTAINER = shifter[image(ubuntu:latest) options(@/share/usr/shifter-options.sh)]
DESCRIPTION = Shifter User Service
End Queue
Begin Queue
QUEUE_NAME = singqoptions
CONTAINER = singularity[image(/file/path/ubuntu.img) options(@/share/usr/sing-options.sh)]
DESCRIPTION = Singularity User Service
End Queue
Begin Queue
QUEUE_NAME = apptainerq
CONTAINER = apptainer[image(/share/apptainer/images/ubuntu_latest.sif) options(@/share/usr/apptainer-options.sh)]
DESCRIPTION = Apptainer User Service
End Queue
Begin Queue
QUEUE_NAME = podmanqoptions
CONTAINER = podman[image(repository.example.com:5000/file/path/ubuntu:latest) options(@/share/usr/podman-options.sh)]
DESCRIPTION = Podman User Service with pre-execution script for options
End Queue
Begin Queue
QUEUE_NAME = dockerqoptions
CONTAINER = docker[image(repository.example.com:5000/file/path/ubuntu:latest) options(@/share/usr/podman-options.sh)
container_io() job_pre_post()]
DESCRIPTION = Docker User Service with pre-execution script for options
End Queue
Begin Queue
QUEUE_NAME = enrootqoptions
CONTAINER = enroot[image(repository.example.com:5000/file/path/ubuntu:latest) options(@/share/usr/enroot-options.sh)]
DESCRIPTION = Enroot User Service with pre-execution script for options
End Queue
  • 对于顺序作业,为 LSF 指定以下 CONTAINER 参数值以在作业完成后自动除去容器:

    CONTAINER = docker[image(image-name) options(--rm)]

  • 对于并行作业,网络和 IPC 必须跨容器工作才能使 blaunch 工作。 必须将执行用户标识和用户名映射文件安装到容器以进行 blaunch 认证。

    因此,请为 LSF 指定以下 CONTAINER 参数值,以配置容器 IPC 和网络参数,以便 blaunch 可以跨多个容器工作,为 blaunch 认证配置容器密码文件,并在作业完成后自动除去容器:

    CONTAINER=docker[image(image-name) options(--rm --network=host --ipc=host -v /path/to/my/passwd:/etc/passwd)]

    对于 UNIX 和 Linux 密码文件, passwd 文件必须采用标准格式,例如以下格式:

    user1:x:10001:10001:::
    user2:x:10002:10002:::
  • 为了让用户在提交作业时为 Podman Docker NVIDIA 和 Enroot 容器作业指定镜像名称,请在指定 image 关键字时使用 $LSB_CONTAINER_IMAGE 环境变量作为镜像名称。
    例如,为 udockerGPU 队列定义 CONTAINER 参数时,请将 $LSB_CONTAINER_IMAGE 环境变量添加到映像规范中:
    Begin Queue
    QUEUE_NAME = udockerGPU
    CONTAINER = docker[image(repository.example.com:5000/$LSB_CONTAINER_IMAGE) \
                options(--rm --net=host --ipc=host  -v --runtime=nvidia /gpfs/u/fred:/data )
                container_io() job_pre_post()]
    DESCRIPTION = Docker User Service
    End Queue
    通过使用下列其中一种方法设置 $LSB_CONTAINER_IMAGE 环境,在作业提交时指定容器映像名称 (例如 ubuntu):
    • 根据 shell 环境指定 $LSB_CONTAINER_IMAGE 环境变量:
      • cshtcsh中:

        setenv LSB_CONTAINER_IMAGE ubuntu

      • shkshbash中:

        export LSB_CONTAINER_IMAGE=ubuntu

    • 使用 bsub -env 选项:

      bsub -env LSB_CONTAINER_IMAGE=ubuntu -q udocker a.out -in in.dat -out out.dat

    • 使用 esub 脚本设置 LSB_CONTAINER_IMAGE 环境变量,然后使用 bsub 命令调用 esub
      例如,在 $LSF_SERVERDIR 目录中创建具有以下内容的 esub.docker 脚本:
      #!/bin/sh
      exec 1>&2
      echo "LSB_CONTAINER_IMAGE=∖"$1∖"" >> $LSB_SUB_MODIFY_ENVFILE
      通过运行以下命令,提交作业以调用 esub.docker 脚本:
      bsub -a "docker(ubuntu)" -q dockerq a.out -in in.dat -out out.dat

缺省值

未定义

核心限制

指定此队列中所有作业进程的每个进程核心文件大小限制。

语法

CORELIMIT=整数

描述

指定此参数以对属于此队列中的作业的所有进程施加每个进程的硬核心文件大小限制 (以 KB 为单位) (请参阅 getrlimit(2))。

缺省值

无限制

CPU_Frequency

指定队列的 CPU 频率。

语法

CPU_FREQUENCY=[float_number] [unit]

描述

提交到队列的所有作业都需要指定的 CPU 频率。 值是具有单位 (GHz , MHz 或 KHz) 的正浮点数。 如果未设置单元,那么缺省值为 GHz。

您还可以使用 bsub -freq 来设置此值。

提交值将覆盖应用程序概要文件值,而应用程序概要文件值将覆盖队列值。

缺省值

未定义 (使用名义 CPU 频率)

CPULIMIT

指定在此队列中运行的作业的所有进程所允许的最大规范化 CPU 时间以及 (可选) 缺省规范化 CPU 时间。 主机或主机模型的名称指定要使用的 CPU 时间规范化主机。

语法

CPULIMIT=[默认限制 ] 最大限制

其中 default_limitmaximum_limit 由以下公式定义:

[hour:]分钟[/host_name |/host_model]

描述

限制作业可以使用的总 CPU 时间。 此参数对于防止失控作业或使用过多资源的作业很有用。

当整个作业的总 CPU 时间达到限制时,会向属于该作业的所有进程发送 SIGXCPU 信号。 如果该作业没有针对 SIGXCPU的信号处理程序,那么将立即终止该作业。 如果应用程序处理,阻塞或忽略 SIGXCPU 信号,那么在宽限期到期后, LSF 会向作业发送 SIGINTSIGTERMSIGKILL 以终止该信号。

如果作业动态创建进程,那么这些进程所使用的 CPU 时间将在作业的生命周期内累积。

存在时间少于 30 秒的进程可能会被忽略。

缺省情况下,如果指定了缺省 CPU 限制,那么当达到缺省 CPU 限制时,将终止提交到队列的没有作业级别 CPU 限制的作业。

如果仅指定一个限制,那么它是最大或硬 CPU 限制。 如果指定两个限制,第一个是缺省 CPU 限制或软 CPU 限制,第二个是最大 CPU 限制。

如果未提供具有 CPU 时间的主机或主机模型,那么 LSF 将使用在队列级别 ( lsb.queues中的 DEFAULT_HOST_SPEC) 定义的缺省 CPU 时间规范化主机 (如果已配置)。 否则,将使用在集群级别定义的缺省 CPU 时间规范化主机 ( lsb.params中的 DEFAULT_HOST_SPEC) (如果已配置)。 否则,将使用 CPU 因子最大的主机 (集群中最快的主机)。

由于 sbatchd 会定期检查是否超过了 CPU 时间限制,因此在 CPU 时间限制下运行的 Windows 作业最多可以超过该限制 SBD_SLEEP_TIME。

在 UNIX 系统上, CPU 限制可由操作系统在进程级别实施。

您可以定义 CPU 限制是由操作系统实施的每个进程限制,还是由 LSF 在 lsf.conf中使用 LSB_JOB_CPULIMIT 实施的每个作业限制。

如果 CPULIMIT 大于 30 分钟,那么不会对提交到区块作业队列的作业进行分块。

缺省值

无限制

CPU 时间因子

指定 CPU 时间加权因子。 仅用于公平共享调度。

语法

CPU_TIME_FACTOR=数字

描述

在计算用户动态共享优先级时,此因子确定用户的作业所使用的累积 CPU 时间的相对重要性。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

缺省值

0.7

CSM_REQ

指定 CSM bsub 作业提交选项的必需值。 这些设置覆盖作业级别 CSM 选项,并将系统级别分配标志附加到作业级别分配标志。

语法

CSM_REQ= [jsm=y | n | d] [:step_cgroup=y | n] [: [core_isolation 0 | 1 | 2 | 3 | 4 | 5 | 6] [:cn_mem=mem_value]] [:alloc_flags "flag1 [flag2 ...] [:smt=smt_value]"]

描述

使用冒号 (:) 来分隔多个 CSM 作业选项。 这些选项可以按任何顺序显示,而不需要任何选项。 对于 alloc_flags 关键字,指定标志的字母数字字符串,并使用空格分隔多个标志。 字符串不能包含冒号 (:)。

示例

CSM_REQ=jsm=n:step_cgroup=y:core_isolation 3:cn_mem=1024

缺省值

尚未定义。

数据限制

指定此队列中所有作业进程的每个进程数据段大小限制。

语法

DATALIMIT=[ default_limit] maximum_limit

描述

设置此参数以针对属于此队列中的作业的所有进程设置每个进程的数据段大小限制 (以 KB 为单位) (请参阅 getrlimit(2))。

缺省情况下,如果指定了缺省数据限制,那么当达到缺省数据限制时,将终止提交到队列的没有作业级别数据限制的作业。

如果仅指定一个限制,那么它是最大或硬数据限制。 如果指定两个限制,那么第一个是缺省数据限制或软数据限制,第二个是最大数据限制。

缺省值

无限制

数据传输

将队列配置为 LSF 数据管理器的数据传输队列。

语法

DATA_TRANSFER=Y | N

描述

DATA_TRANSFER=Y 参数支持通过 LSF 数据管理器进行数据传输的队列。

集群中只有一个队列可以是数据传输队列。 数据管理器提交的任何传输作业都将转至此队列。 如果 lsf.datamanager 文件存在,那么必须至少有一个队列定义 DATA_TRANSFER 参数。 如果设置了此参数,那么必须存在相应的 lsf.datamanager 文件。

通过 bsub 提交到此队列的常规作业将被拒绝。

使用 bstopbresumebkill 命令在数据传输队列中停止,恢复和终止您自己的传输作业。 LSF 管理员和队列管理员还可以使用 btopbbot 命令来移动队列中的传输作业。 将拒绝数据传输队列中作业上的所有其他命令。 不能使用 bswitch 命令将作业从其他队列切换到数据传输队列。

如果更改此参数,那么先前队列中的 LSF 数据管理器传输作业将保留在该队列中,并按正常方式进行调度和运行。 LSF 数据管理器将收到成功或失败的通知。

以下队列参数不能与定义 DATA_TRANSFER 参数的队列一起使用:
  • 交互式=仅
  • RCVJOBS_FROM
  • max_rsched_time
  • 成功退出值
  • 可再运行

数据传输队列不能显示在由 lsb.params 文件中的 DEFAULT_QUEUE 参数定义的缺省队列列表中。 提交到数据传输队列的作业不会附加到 lsb.params 文件中的 DEFAULT_APPLICATION 参数所指定的应用程序。

缺省值

N

缺省值 EXTSCHED

指定队列的缺省外部调度选项。

语法

DEFAULT_EXTSCHED=外部调度程序选项

描述

bsub 命令上的 -extsched 选项与 DEFAULT_EXTSCHED 选项合并,并且 -extsched 选项将覆盖 DEFAULT_EXTSCHED 设置的任何冲突队列级别选项。

缺省值

未定义

缺省值: HOST_SPEC

指定队列的缺省 CPU 时间规范化主机。

语法

DEFAULT_HOST_SPEC=主机名 | 主机型号

描述

指定主机或主机模型的 CPU 因子用于规范化队列中所有作业的 CPU 时间限制,除非在作业级别指定 CPU 时间规范化主机。

缺省值

尚未定义。 队列使用 lsb.params中定义的 DEFAULT_HOST_SPEC。 如果在两个文件中均未定义 DEFAULT_HOST_SPEC,LSF 将使用集群中速度最快的静态服务器主机。

描述

指定由 bqueues -l显示的作业队列的描述。

语法

DESCRIPTION=文本

描述

使用明确描述此队列的服务功能的描述来帮助用户为每个作业选择正确的队列。

文本可以包含任何字符,包括空格。 文本可以扩展到多行,方法是在前一行以反斜线结束(\)。文本最大长度为 512 个字符。

DISPATCH_BY_QUEUE (已废弃)

此参数在 LSF V 10.1 FP10 中已过时,将由 lsb.params 文件中的 JOB_DISPATCH_PACK_SIZE 参数替换。

语法

DISPATCH_BY_QUEUE=Y|y|N|n

描述

允许发布指定队列的调度决策,而无需等待整个调度会话完成。

设置此参数以提高队列响应能力。 指定队列中的作业的调度决策是最终的,不能在同一调度周期内抢占这些作业。

提示: 仅针对最高优先级队列 (例如,对于交互式队列) 设置此参数,以确保此队列具有最高响应能力。

缺省值

N

有争议的订单

定义有序的跨队列公平共享集,该集指示将根据队列优先级的顺序先分派作业,然后再分派用户公平共享优先级。

语法

DISPATCH_ORDER=QUEUE

描述

缺省情况下,用户在 队列中具有相同的优先级。 如果同一用户向这些队列提交多个作业,那么将通过考虑用户跨 - 集提交的所有作业来计算用户优先级。

如果在 队列中设置了 DISPATCH_ORDER=QUEUE ,那么将首先根据队列优先级来分派作业,然后再根据用户优先级来分派作业。 在较低优先级队列中的作业之前,将分派具有较高优先级队列中的暂挂作业的具有较低公平共享优先级的用户的作业。 此行为可避免让具有较高公平共享优先级的用户从低优先级队列中获取分派的作业。

将根据用户优先级分派具有相同优先级的队列中的作业。

不属于跨队列公平共享的队列可以具有任何优先级; 它们不限于位于跨队列公平共享队列的优先级范围之外。

缺省值

未定义

分派窗口

指定分派此队列中的作业的时间窗口。 分派作业后,这些作业不再受分派窗口影响。

语法

DISPATCH_WINDOW=时间窗口...

描述

此队列中的作业不会在分派窗口外部分派。

缺省值

尚未定义。 分派窗口始终处于打开状态。

docker_image_affinity

语法

DOCKER_IMAGE_AFFINITY=Y | y | N | n

描述

在调度基于 Docker的容器化作业时,将此参数设置为 yY 将使 LSF 能够为已具有所请求的 Docker 映像的执行主机提供首选项。 这将减少网络带宽和作业启动时间,因为执行主机不必从存储库中拉取 Docker 映像,并且作业可以立即在执行主机上启动。

启用此功能后, LSF 会在调度 Docker 作业时考虑 Docker 映像位置信息。 Docker 映像亲缘关系通过以下方式与主机首选项和 order[] 字符串请求进行交互:

  • 如果指定了主机首选项,那么将首先采用主机首选项。 在具有相同首选项级别的主机中,将为具有请求的 Docker 映像的主机提供更高的优先级。
  • 如果指定了 order[] 字符串,那么具有请求的 Docker 映像的主机首先具有更高优先级。 在所有具有请求的 Docker 映像的主机中,将采用 order[] 字符串。

必须为此参数定义 CONTAINER 参数才能使用此队列。

缺省值

尚未定义。

合格等待时间限制

指定作业的合格暂挂时间限制。

语法

ELIGIBLE_PEND_TIME_LIMIT=[小时:]分钟

描述

LSF 将队列级别合格暂挂时间限制配置发送到 IBM® Spectrum LSF RTM (LSF RTM) ,这将处理警报和触发的操作,例如用户通知 (例如,通知提交作业的用户和 LSF 管理员) 和作业控制操作 (例如,终止作业)。 LSF RTM 将作业的合格暂挂时间与合格暂挂时间限制进行比较,如果作业处于合格暂挂状态的时间超过此指定时间限制,那么 LSF RTM 将触发警报和操作。 此参数在不使用 LSF RTM的情况下工作,但 LSF 不会执行任何其他警报操作。

在多集群作业转发方式中,将在执行集群中忽略作业的合格暂挂时间限制,而提交集群根据本地设置合并作业的队列,应用程序和作业级别的合格暂挂时间限制。

符合条件的暂挂时间限制的格式为 [hour:]minute。 分钟可以指定为大于 59 的数字。 例如,可以将三个半小时指定为 3:30 或 210。

作业级别合格暂挂时间限制 (bsub -eptl) 将覆盖应用程序级别限制 ( lsb.applications中的ELIGIBLE_PEND_TIME_LIMIT ) ,而应用程序级别限制将覆盖此处指定的队列级别限制。

缺省值

尚未定义。

启用 GPU 历史运行时间

支持在计算公平份额调度优先级时使用历史 GPU 运行时间。 仅用于公平共享调度。

语法

ENABLE_GPU_HIST_RUN_TIME=y | Y | n | N

描述

如果设置为 Y ,那么允许在计算公平共享调度优先级时使用历史 GPU 运行时。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

缺省值

尚未定义。

启用历史运行时间

支持在计算公平共享调度优先级时使用历史运行时。 仅用于公平共享调度。

语法

ENABLE_HIST_RUN_TIME=y | Y | n | N

描述

如果设置为 Y ,那么允许在计算公平共享调度优先级时使用历史运行时。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

缺省值

尚未定义。

ESTIMATED_RUNTIME

语法

ESTIMATED_RUNTIME=[hour:]分钟[/host_name | /host_model]

描述

此参数指定与队列关联的作业的估计运行时间。 LSF 仅将 ESTIMATED_RUNTIME 值用于调度目的,并且不会终止超过此值的作业,除非这些作业也超过定义的 RUNLIMIT。 运行时估计的格式与 RUNLIMIT 参数相同。

bsub -We 指定的作业级别运行时估算值或应用程序中的 ESTIMATED_RUNTIME 设置将覆盖队列中的 ESTIMATED_RUNTIME 设置。 队列中的 ESTIMATED_RUNTIME 设置将覆盖集群范围的 ESTIMATED_RUNTIME 设置。

以下 LSF 功能部件使用 ESTIMATED_RUNTIME 值来调度作业:
  • 作业块
  • 提前预留
  • SLA
  • 插槽预留
  • 回填
  • 分配策划员

缺省值

未定义

EXCLUSIVE

指定互斥队列和计算单元类型。

语法

EXCLUSIVE=Y | | N CU[cu_type ]

描述

如果设置为 Y ,那么指定互斥队列。

如果设置为 CU , CU [] 或 CU [cu_type] ,那么指定独占队列以及独占类型为 cu_type 的计算单元 (如 lsb.params中所定义) 的队列。 如果未指定类型,那么将使用缺省计算单元类型。

提交到具有 bsub -x 的互斥队列的作业仅被分派到没有其他正在运行的作业的主机。 提交到具有 bsub -R "cu[excl]" 的计算单元互斥队列的作业仅在没有其他正在运行的作业的计算单元上运行。

对于在多集群资源租赁模型下共享的主机,不会将作业分派给具有正在运行的作业的主机,即使这些作业来自另一个集群也是如此。

注: 当在 亲缘关系 [] 资源需求字符串的 exclusive 选项中指定了 alljobs 作用域时,必须配置 EXCLUSIVE=Y 或 EXCLUSIVE=CU [cu_type] 以使亲缘关系作业能够独占使用 CPU。

缺省值

N

执行 DRIVER

语法

Podman : EXEC_DRIVER=context[user(user_name)] starter[/file_path_serverdir/podman-starter.py] controller[/file_path/to/serverdir/podman-control.py] monitor[/file_path/to/serverdir/podman-monitor.py]

Docker工作: EXEC_DRIVER=context[user(user_name path(/path/path1:/path/path2)] starter[/file_path_serverdir/docker-starter.py] controller[/file_path/to/serverdir/docker-control.py] monitor[/file_path/to/serverdir/docker-monitor.py]

Enroot职位: EXEC_DRIVER=starter[/file_path_serverdir/enroot-starter.py]

file_path/to/serverdir 替换为 LSF_SERVERDIR 目录的实际文件路径。

描述

对于 Enroot 作业是可选的。 指定此队列中 Podman 或 Docker 容器作业的执行驱动程序框架。 此参数使用以下关键字:

用户
对于 Docker 作业,可选 ,对于 Enroot 作业,将忽略。 此关键字指定用于启动脚本的用户帐户。 配置的值是用户名,而不是用户标识。 对于 Docker 作业,此用户必须是 Docker 用户组的成员。 对于 Podman 作业,用户名必须设置为 "default"。

缺省情况下,这是 LSF 主管理员。

注: 这不能是 root 用户。

LSF 包含三个执行驱动程序脚本,用于启动作业 (docker-starter.py) ,监视作业 (docker-monitor.py) 的资源以及向作业 (docker-control.py) 发送信号。 这些脚本位于 LSF_SERVERDIR 目录中。 将脚本文件的所有者更改为上下文用户,并将文件许可权更改为 700 或 500 ,然后在 EXEC_DRIVER 参数中使用这些文件。

入门模板脚本是必需的。 对于 Docker 容器作业,如果 cgroupfs 驱动程序为 systemd,那么监视器和控制脚本是必需的,如果 cgroupfs 驱动程序为 cgroupfs,那么监视器和控制脚本是可选的。 对于 Podman 容器作业,当需要控制脚本时,监视器脚本是可选的。 对于 Enroot 容器作业,需要启动脚本,而忽略所有其他脚本。

Podman, Docker或 Enroot 作业的 CONTAINER 参数交互

对于 Podman Docker 或Enroot 作业, EXEC_DRIVER 参数与 CONTAINER 参数中的以下关键字交互:

  • image,用于指定指定脚本名称时支持映像名称 ($LSB_CONTAINER_IMAGE 环境变量)。
  • 支持带有运行时选项和选项脚本的 options

示例

Begin Queue
QUEUE_NAME = podmanq
CONTAINER = podman[image(repository.example.com:5000/file/path/ubuntu:latest)
            options(--rm --network=host --ipc=host -v /path/to/my/passwd:/etc/passwd)]
EXEC_DRIVER = context[user(default)] starter[/path/to/driver/podman-starter.py]
              controller[/path/to/driver/podman-control.py]
              monitor[/path/to/driver/podman-monitor.py]
DESCRIPTION = Podman User Service
End Queue
Begin Queue
QUEUE_NAME = dockerq
CONTAINER = docker[image(repository.example.com:5000/file/path/ubuntu:latest)
            options(--rm --network=host --ipc=host -v /path/to/my/passwd:/etc/passwd)
            container_io() job_pre_post()]
EXEC_DRIVER = context[user(user-name) path(/path/one:/path/two)] starter[/path/to/driver/docker-starter.py]
              controller[/path/to/driver/docker-control.py]
              monitor[/path/to/driver/docker-monitor.py]
DESCRIPTION = Docker User Service
End Queue
Begin Queue
QUEUE_NAME = enrootq
CONTAINER = enroot[image(repository.example.com:5000/file/path/ubuntu:latest)
            options(--mount /mydir:/mydir2]
EXEC_DRIVER = starter[/path/to/driver/enroot-starter.py]
DESCRIPTION = Enroot User Service
End Queue

缺省值

Podman 和 Docker 作业的未定义

用于 Enroot 用户作业的 starter[$LSF_SERVERDIR/enroot-starter.py]

可扩展运行限制

如果具有相同或更高优先级的队列中的其他作业不需要此作业所占用的资源,那么允许 LSF 分配计划程序通过更改其软运行限制来扩展作业的运行限制。 可以扩展软运行限制,而不能扩展硬运行限制。 分配计划程序将查看其他作业的作业计划,以确定是否有其他作业需要此作业的资源。

语法

EXTENDABLE_RUNLIMIT=BASE[minutes] INCREMENT[minutes] GRACE[minutes] REQUEUE[Y|N]

描述

如果已配置,那么此参数会将可扩展的运行限制策略应用于具有队列中的计划的作业。 分派具有计划的作业时, LSF 会为该作业设置初始软运行限制。 每当作业达到软运行限制时, LSF 都会考虑另一个作业是否对资源进行了计划分配。 如果没有, LSF 将扩展作业的软运行限制。 否则, LSF 将为作业设置硬运行限制。 每当作业达到硬运行限制时, LSF 就会终止或重新排队该作业。

此参数使用以下关键字:

BASE[分钟]
对队列中的作业施加的初始软运行限制。 每当作业达到软运行限制时,分配计划程序都会通过查看其他作业的计划来考虑队列中的另一个作业是否需要该作业所持有的资源。 如果不需要这些资源,那么 LSF 将扩展作业的软运行限制。 否则, LSF 会设置硬运行限制。

指定初始软运行限制的整数值。

INCREMENT[分钟]
可选。 如果 LSF 决定延长作业的软运行限制,那么此关键字指定 LSF 延长软运行限制的时间量。

指定软运行限制扩展时间的整数值。 缺省值是 BASE[] 关键字的值。

GRACE[分钟]
可选。 如果 LSF 决定不延长作业的软运行限制,那么将为从决策时间开始的此分钟数设置硬运行限制。

缺省值为 0 (作业将立即终止或重新排队)。

REQUEUE[Y | N]
可选。 指定 LSF 在作业达到其硬运行限制时执行的操作。 如果设置为 N,那么 LSF 将终止作业。 如果设置为 Y LSF ,那么将使作业重新排队。

缺省值为 N (一旦作业达到其硬运行限制,LSF 将终止该作业)。

缺省值

尚未定义。

达到指定的运行限制时间 (由 RUNLIMIT 参数或 -W 选项指定) 的作业将被检查点 (如果是可检查点) ,然后终止,而不考虑资源是否可用。

公平共享

启用基于队列级别用户的公平共享并指定共享分配。

语法

FAIRSHARE=USER_SHARES[[用户, number_shares] ...]
  • 至少指定一个用户共享分配。
  • 将列表括在方括号中,如下所示。
  • 将每个用户共享分配括在方括号中,如下所示。
  • user: 指定也配置为使用队列的用户。 您可以将共享分配给以下类型的用户:
    • 单个用户 (指定 user_name)。 要指定 Windows 用户账户,请使用大写字母包含域名 (域名\用户名)。
    • 组中的用户,单独 (指定 group_name@) 或集体 (指定 group_name)。 要指定 Windows 用户组,请使用大写字母包含域名(域名\组名)。
    • 未包含在任何其他共享分配中的用户,单独 (指定关键字 default) 或集体 (指定关键字 others)。 缺省情况下,当资源被集体分配到组时,组成员将先到先得 (FCFS) 地争夺资源。 您可以使用分层公平共享来进一步划分组成员之间的共享。

      将资源单独分配给组的成员时,共享分配是递归的。 该组的成员和所有子组的成员始终根据 FCFS 调度来争夺资源,而不考虑分层公平共享策略。

  • 数字共享
    • 指定一个正整数,表示分配给用户的集群资源的共享数。
    • 仅当您将分配给每个用户的共享数与分配给其他用户的共享数或共享总数进行比较时,分配给每个用户的共享数才有意义。 股份总数只是每次股份分配中分配的所有股份的总和。

描述

启用基于队列级别用户的公平共享,并指定可选的共享分配。 如果指定了共享分配,那么只有具有共享分配的用户才能向队列提交作业。

兼容性

请勿将集群中的主机配置为在队列和主机级别使用公平共享。 但是,您可以同时配置基于用户的公平共享和基于队列的公平共享。

缺省值

尚未定义。 没有公平的份额。

FAIRSHARE_ADJUMENT_FACTOR

指定公平份额调整插件加权因子。 仅用于公平共享调度。

语法

FAIRSHARE_ADJUSTMENT_FACTOR=数字

描述

在计算用户动态共享优先级时,此因子确定在公平共享插件 (libfairshareadjust.*) 中进行的用户定义调整的相对重要性。

正浮点数既启用公平共享插件,又充当加权因子。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

缺省值

尚未定义。

FAIRSHARE_QUEUE

定义跨队列公平共享。

语法

FAIRSHARE_QUEUES=队列名称 [队列名称...]

描述

定义此参数时:
  • 在其中定义此参数的队列将变为 "管理"。
  • 使用此参数列出的队列是 队列 ,并继承 队列的公平共享策略。
  • 用户在 队列中具有相同的优先级。 如果同一用户向这些队列提交多个作业,那么将通过考虑用户在 -child 集合中提交的所有作业来计算用户优先级。

注意

  • 缺省情况下,为跨队列公平共享中的队列定义的 PRIORITY 范围不能与任何其他队列一起使用。 例如,您有四个队列: queue1queue2queue3queue4。 分配以下跨队列公平共享: 优先级
    • queue1 优先级: 30
    • queue2 优先级: 40
    • queue3 优先级: 50
  • 缺省情况下, queue4 的优先级 (不是跨队列公平共享的一部分) 不能介于跨队列公平共享队列 (30-50) 的优先级范围之间。 可以是 29 或高于 50 的任何数字。 无论 queue4 是公平共享队列还是 FCFS 队列,都无关紧要。 如果在 队列中设置了 DISPATCH_ORDER=QUEUE ,那么 queue4 的优先级 (不是跨队列公平共享的一部分) 可以是任何数字,包括介于跨队列公平共享队列的优先级范围 (30-50) 之间的优先级。
  • 必须在 队列中定义 FAIRSHARE 。 如果还在 FAIRSHARE_QUEUES中列出的队列中定义了该值,那么将忽略该值。
  • 可以在 lsb.queues中多次定义跨队列公平共享。 您可以定义多组 - 队列。 但是,队列不能属于多个 -child set。 例如,可以定义:
    • 排队中normal:FAIRSHARE_QUEUES=short
    • 排队中priority:FAIRSHARE_QUEUES=night owners
      限制: 但是,不能定义night,owners,或priority 作为队列中的 子代normal; 或normalshort作为 子代priority队列; 或short,night,owners作为他们自己的 队列。
  • 跨队列公平共享不能与主机分区公平共享一起使用。 它是队列级别公平共享的一部分。
  • 跨队列公平共享不能与绝对优先级调度配合使用。

缺省值

未定义

文件限制

指定此队列中所有作业进程的每个进程文件大小限制。

语法

FILELIMIT=整数

描述

设置此参数以针对属于此队列中的作业的所有进程设置每个进程的硬文件大小限制 (以 KB 为单位) (请参阅 getrlimit(2))。

缺省值

无限制

FWD_JOB_FACTOR

转发的作业槽加权因子。 仅用于公平共享调度。

语法

FWD_JOB_FACTOR=数字

描述

在计算用户的动态共享优先级时,此因子确定用户在使用 LSF 多集群功能时保留并正在使用的转发作业槽数的相对重要性。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

缺省值

尚未定义。

另请参阅

RUN_JOB_FACTOR

用户

指定在使用 LSF 多集群功能时可以将作业转发到此队列中的远程集群的用户名或用户组的空格分隔列表。

语法

FWD_USERS=all [~user_name...] [~user_group...] | [user_name...] [user_group [~user_group...]...]..

描述

如果指定了用户组,那么组中的每个用户都可以将作业转发到此队列中的远程集群。 指定用户组时使用本地用户组。

用户名必须是有效的登录名。 要指定 Windows 用户账户,请使用大写字母包含域名 (域名\用户名)。

用户组名可以是 LSF 用户组,也可以是 UNIX 和 Windows 用户组。 要指定 Windows 用户组,请使用大写字母包含域名 (域名\用户组)。

使用关键字 all 来指定集群中的所有用户或用户组。

使用 not 运算符 (~) 从 all 规范或用户组中排除用户。 如果您有大量用户,但只想从队列定义中排除一些用户或组,那么这很有用。

非运算符 (~) 只能与 all 关键字配合使用或用于从用户组中排除用户。

缺省值

all (所有用户都可以将作业转发到队列中的远程集群)

示例

  • FWD_USERS=user1 user2
  • FWD_USERS=all ~user1 ~user2
  • FWD_USERS=all ~ugroup1
  • FWD_USERS=groupA ~user3 ~user4

GPU_REQ

在一个语句中同时指定 GPU 需求。

语法

GPU_REQ = "[num=gpus 数量[/task | host]] [:mode=shared | exclusive_process] [:mps=yes[,shared][,nocvd] | no | per_socket[,shared][,nocvd] | per_gpu[,shared][,nocvd]] [:j_exclusive=yes | no] [:gvendor=amd | nvidia] [:gmodel=模型名称[#mem_size]] [:gtile=tile_num|'!'] [:gmem=mem_value] [:glink=yes][:aff=yes | no][:block=yes | no] [:gpack=yes | no]"

描述

GPU_REQ 参数采用以下参数:
num=num_gpus [/task | host]
作业所需的物理 GPU 数。 缺省情况下,该数字是每个主机的数字。 您还可以通过在数字后指定 /task 来指定每个任务的数字。

如果 您指定了每个任务的编号, lsb.resources 文件中 ngpus_physical 资源的配置设置为 PER_TASK 或者 lsb.params 文件中设置了 RESOURCE_RESERVE_PER_TASK=Y 参数,那么此编号是每个任务请求的计数。

模式=共享 | 独占进程
作业运行时的 GPU 方式 ( sharedexclusive_process)。 缺省方式为 shared

共享 方式对应于 Nvidia 或 AMD DEFAULT 计算方式。 exclusive_process 方式对应于 Nvidia EXCLUSIVE_PROCESS 计算方式。

注: 使用 AMD GPU 时 (即,指定 gvendor=amd 时) ,请勿指定 exclusive_process
mps=yes[, nocvd][, shared] | per_socket[, shared][, nocvd] | per_gpu[, shared][, nocvd] | no
对分配给作业的 GPU 启用或禁用 Nvidia Multi-Process Service (MPS)。 有效使用 MPS 会导致 EXCLUSIVE_PROCESS 方式的行为与所有 MPS 客户机的 DEFAULT 方式相似。 MPS 始终允许多个客户机通过 MPS 服务器使用 GPU。
注: 要避免不一致的行为,请不要在使用 AMD GPU 时 (即,指定 gvendor=amd 时) 启用 mps 。 如果在集群,队列,应用程序和作业级别合并 GPU 需求的结果是 gvendor=amd ,并且启用了 mps (例如,如果在作业级别指定了 gvendor=amd 而未指定 mps=no,但在应用程序,队列或集群级别指定了 mps=yes ) ,那么 LSF 将忽略 mps 需求。

MPS 对于共享和独占过程 GPU 都很有用,并允许更有效地共享 GPU 资源和更好的 GPU 利用率。 请参阅 Nvidia 文档以获取更多信息和限制。

使用 MPS 时,请使用 EXCLUSIVE_PROCESS 方式来确保只有单个 MPS 服务器在使用 GPU ,这提供了额外的保险,即 MPS 服务器是该 GPU 的所有 CUDA 进程之间的单点仲裁。

您还可以通过添加 share 关键字 (使用逗号且没有空格) 来启用 MPS 守护程序共享 (例如, mps=yes,shared 在主机上启用 MPS 守护程序共享)。 如果启用共享,那么具有相同资源需求的同一用户提交的所有作业将共享主机,套接字或 GPU 上的同一 MPS 守护程序。

LSF 根据 mps 关键字的值,在每个主机,每个套接字或每个 GPU 的基础上启动 MPS 守护程序:

  • 如果设置了 mps=yes ,那么 LSF 将对每个作业的每个主机启动一个 MPS 守护程序。

    启用共享 (即,如果设置了 mps=yes,shared ) 时,对于同一用户提交的具有相同资源需求的所有作业, LSF 将对每个主机启动一个 MPS 守护程序。 这些作业都在主机上使用相同的 MPS 守护程序。

    禁用 CUDA_VISIBLE_DEVICES 环境变量 (即,如果设置了 mps=yes,nocvd ) 时, LSF 不会为任务设置 CUDA_VISIBLE_DEVICES<number> 环境变量,因此 LSF MPI 不会为任务设置 CUDA_VISIBLE_DEVICESLSF 只是设置任务的 CUDA_VISIBLE_DEVICES<number> 环境变量,而不是 CUDA_VISIBLE_DEVICESLSF MPICUDA_VISIBLE_DEVICES<number> 环境变量转换为 CUDA_VISIBLE_DEVICES 并为任务设置这些变量。

  • 如果设置了 mps=per_socket ,那么 LSF 将针对每个作业的每个套接字启动一个 MPS 守护程序。 当启用了共享 (即,如果设置了 mps=per_socket,shared ) 时, LSF 将针对具有相同资源需求的同一用户提交的所有作业,针对每个套接字启动一个 MPS 守护程序。 这些作业都对套接字使用相同的 MPS 守护程序。
  • 如果设置了 mps=per_gpu ,那么 LSF 将针对每个作业的每个 GPU 启动一个 MPS 守护程序。 启用共享时 (即,如果设置了 mps=per_gpu,shared ) , LSF 将针对同一用户提交的具有相同资源需求的所有作业,针对每个 GPU 启动一个 MPS 守护程序。 这些作业都对 GPU 使用相同的 MPS 守护程序。
重要信息: 不支持将 EXCLUSIVE_THREAD 方式与 MPS 配合使用,这可能会导致意外行为。
j_exclusive=yes | 否
指定分配的 GPU 是否可供其他作业使用。 当方式设置为 exclusive_process时,将自动设置 j_exclusive=yes 选项。
aff=yes | 否
指定是否强制实施严格的 GPU-CPU 亲缘关系绑定。 如果设置为 no,那么 LSF 将在维护 CPU 亲缘关系时放宽 GPU 亲缘关系。 缺省情况下, aff=yes 设置为保持严格的 GPU-CPU 亲缘关系绑定。
注: aff=yes 设置与 block=yes 冲突 (当任务数大于请求的 GPU 数时,将已分配的 GPU 作为块分发)。 这是因为严格的 CPU-GPU 绑定根据 CPU NUMA 标识将 GPU 分配给任务,这与分配的 GPU 作为块的分布相冲突。 如果在 GPU 需求字符串中同时指定了 aff=yesblock=yes ,那么 block=yes 设置优先,并且会禁用严格的 CPU-GPU 亲缘关系绑定 (即,会自动设置 aff=no )。
block=yes | 否
指定是否启用块分发,即,当任务数大于请求的 GPU 数时,将作业的已分配 GPU 作为块分发。 如果设置为 yes,那么当任务数大于请求的 GPU 数时, LSF 会将作业的所有已分配 GPU 作为块分发。 缺省情况下,设置了 block=no ,因此不会将已分配的 GPU 作为块分发。

例如,如果 GPU 作业请求在具有 4 GPU 和 40 个任务的主机上运行,那么块分发会为列组 0-9 分配 GPU0 ,为列组 10-19 分配 GPU1 ,为坦克 20-29 分配 GPU2 ,为列组 30-39 分配 GPU3 。

注: block=yes 设置与 aff=yes (严格的 CPU-GPU 亲缘关系绑定) 冲突。 这是因为严格的 CPU-GPU 绑定根据 CPU NUMA 标识将 GPU 分配给任务,这与分配的 GPU 作为块的分布相冲突。 如果在 GPU 需求字符串中同时指定了 block=yesaff=yes ,那么 block=yes 设置优先,并且会禁用严格的 CPU-GPU 亲缘关系绑定 (即,会自动设置 aff=no )。
gpack=yes | 否
仅适用于 共享 方式作业。 指定是否启用包调度。 如果设置为 yes,那么 LSF 会将多个共享方式 GPU 作业打包到已分配的 GPU。 LSF 按如下所示调度共享方式 GPU:
  1. LSF 根据已具有正在运行的作业的共享 GPU 数,然后按非互斥的 GPU 数对候选主机进行排序 (从最大到最小)。

    如果在资源需求字符串中定义了 order [] 关键字,那么在对 order []进行排序之后, LSF 会按 gpack 策略 (先按已具有正在运行的作业的共享 GPU ,然后再按非互斥的 GPU 数) 对候选主机进行重新排序。 gpack 策略排序优先级高于 order [] 排序。

  2. LSF 根据正在运行的作业数对每个主机上的候选 GPU 进行排序 (从最大到最小)。

调度后,共享方式 GPU 作业打包到首先排序的已分配共享 GPU ,而不是新的共享 GPU。

如果启用了 Docker 属性亲缘关系,那么候选主机的顺序按 Docker 属性亲缘关系排序,然后再按 GPU 排序。

缺省情况下,设置了 gpack=no ,因此包调度处于禁用状态。

供应商=AMD | nvidia
指定 GPU 供应商类型。 LSF 分配具有指定供应商类型的 GPU。

指定 amd 以请求 AMD GPU ,或指定 nvidia 以请求 Nvidia GPU。

缺省情况下, LSF 请求 Nvidia GPU。

gmodel=model_name [-mem_size] ( -mem_size )
指定具有特定模型名称和 (可选) 其总 GPU 内存的 GPU。 缺省情况下, LSF 分配具有相同模型的 GPU (如果可用)。

gmodel 关键字支持以下格式:

gmodel=模型名称
请求具有指定品牌和型号名称 (例如, TeslaK80) 的 GPU。
gmodel=short_model_name
请求具有特定品牌名称的 GPU (例如, Tesla , Quadro , NVS ,) 或模型类型名称 (例如, K80, P100)。
gmodel= 模型名称 - 内存大小
请求具有指定品牌名称和总 GPU 内存大小的 GPU。 GPU 内存大小由数字及其单元组成,其中包括 MGTMBGBTB (例如, 12G)。

要在每个主机上查找可用的 GPU 模型名称,请运行 lsload –gpuloadlshosts –gpubhosts -gpu 命令。 模型名称字符串不包含空格字符。 此外,斜杠 (/) 和连字符 (-) 将替换为下划线字符 (_)。 例如, GPU 模型名称 "Tesla C2050 / C2070" 在 LSF中转换为 "TeslaC2050_C2070"。

gmem=mem_value

指定作业所需的每个 GPU 上的 GPU 内存。 mem_value 的格式与其他资源值相同 (例如,memswap) 在作业资源需求 (-R) 的 rusage 部分中。

gtile=!| tile_num
指定每个套接字的 GPU 数。 指定一个数字以显式定义主机上每个套接字的 GPU 数,或者指定惊叹号 (!) 以允许 LSF 自动计算该数字,这将沿着主机上的所有套接字平均划分 GPU。 LSF 保证即使是亲缘关系作业也满足 gtile 需求。 这意味着当无法满足 gtile 需求时, LSF 可能不会将 GPU 的亲缘关系分配给已分配的 CPU。

如果没有为亲缘关系作业指定 gtile 关键字,那么 LSF 会尝试在分配了 GPU 的套接字上分配足够的 GPU。 如果最佳套接字上没有足够的 GPU ,那么作业无法转至此主机。

如果未对非亲缘关系作业指定 gtile 关键字,那么 LSF 会尝试在同一套接字上分配足够的 GPU。 如果此属性不可用,那么 LSF 可能会在单独的 GPU 上分配 GPU。

nvlink=yes
LSFV 10.1 FP11 中已废弃。 请改为使用 glink 关键字。 对 GPU 之间的 NVLink 连接启用作业实施。 LSF 分配具有有效 NVLink 连接的 GPU。
闪烁=是
对 GPU 之间的特殊连接启用作业实施。 LSF 必须使用特定于 GPU 供应商的特殊连接来分配 GPU。

如果作业请求 AMD GPU ,那么 LSF 必须分配具有 xGMI 连接的 GPU。 如果作业请求 Nvidia GPU ,那么 LSF 必须使用 NVLink 连接来分配 GPU。

请勿将 glink 与过时的 nvlink 关键字一起使用。

缺省情况下,当没有足够的 GPU 具有这些连接时, LSF 可以分配没有特殊连接的 GPU。

mig=GI_size [ /CI_size ]
指定 Nvidia Multi-Instance GPU (迁移) 设备需求。

指定 MIG 作业所需的 GPU 实例大小。 有效的 GPU 实例大小为 1、2、3、4、7。

可选择在指定的 GPU 实例大小和斜线字符 (/) 之后指定所请求的计算实例大小。请求的计算实例大小必须小于或等于请求的 GPU 实例大小。 此外, Nvidia 联格不支持以下 GPU/ 计算实例大小组合: 4/3,7/5,7/6。 如果未指定此值,那么缺省计算实例大小为 1。

-gpu 选项中 GPU 需求的语法与 lsf.conf 文件中的 LSB_GPU_REQ 参数以及 lsb.queueslsb.applications 文件中的 GPU_REQ 参数中的语法相同。
注: bjobs 输出不显示aff=yes即使在 bsub -gpu 选项中指定了 aff=yes

如果 GPU_REQ_MERGE 参数在 lsb.params 文件中定义为 Yy ,并且在多个级别 (至少两个缺省集群,队列,应用程序概要文件或作业级别需求) 指定 GPU 需求,那么将单独合并 GPU 需求的每个选项。 作业级别覆盖应用程序级别,这将覆盖队列级别,这将覆盖缺省集群 GPU 需求。 例如,如果在 -gpu 选项上定义了 GPU 需求的 mode 选项,并且在队列中定义了 mps 选项,那么将使用作业级别的方式和队列的 mps 值。

如果 GPU_REQ_MERGE 参数未在 lsb.params 文件中定义为 Yy ,并且 在多个级别 (至少有两个缺省集群,队列,应用程序概要文件或作业级别需求) 指定了 GPU 需求,那么将替换整个 GPU 需求字符串。 整个作业级别 GPU 需求字符串将覆盖应用程序级别,这将覆盖队列级别,这将覆盖缺省 GPU 需求。

esub 参数 LSB_SUB4_GPU_REQ 修改 -gpu 选项的值。

LSF 首先选择满足拓扑需求的 GPU。 如果所选 GPU 的 GPU 方式不是所请求的方式,那么 LSF 会将 GPU 更改为所请求的方式。 例如,如果 LSFexclusive_process GPU 分配给需要共享 GPU 的作业,那么 LSF 会在作业启动之前将 GPU 方式更改为共享,然后在作业完成时将方式更改回 exclusive_process

GPU 需求将转换为作业的 rusage 资源需求。 例如, num=2 将转换为rusage[ngpus_physical=2]. 使用 bjobsbhistbacct 命令来查看合并的资源需求。

可能存在 bsub -gpu 选项和 GPU_REQ 参数语法无法涵盖的复杂 GPU 需求,包括复合 GPU 需求 (针对不同主机上的作业的不同 GPU 需求,或针对并行作业的不同部分的不同 GPU 需求) 和备用 GPU 需求 (如果要运行的作业可接受多组 GPU 需求)。 对于复杂的 GPU 需求,请使用 bsub -R 命令选项或 lsb.applicationslsb.queues 文件中的 RES_REQ 参数来定义资源需求字符串。

重要信息: 只能使用 -gpu 选项, lsf.conf 文件中的 LSB_GPU_REQ 参数或 lsb.queueslsb.applications 文件中的 GPU_REQ 参数来定义 modej_exclusivemps 选项。 不能将这些选项与 bsub -R 命令选项中的 rusage 资源需求字符串或 lsb.queueslsb.applications 文件中的 RES_REQ 参数配合使用。

缺省值

未定义

另请参阅

  • LSB_GPU_REQ
  • bsub -gpu

运行时间因子

指定 GPU 运行时加权因子。 仅用于公平分配计划。

语法

GPU_RUN_TIME_FACTOR=数字

描述

在计算用户的动态共享优先级时,这一因素决定了用户运行 GPU 作业的总 GPU 运行时间的相对重要性。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

缺省值

尚未定义。

小时

确定累积 CPU 时间,运行时间和历史运行时间的衰减率。 仅用于公平共享调度。

语法

HIST_HOURS=小时

描述

为了计算动态用户优先级, LSF 使用衰减因子来缩放实际 CPU 时间和运行时间。 最近使用的 1 小时时间相当于经过指定小时数后的 0.1 小时。

为了计算具有衰变运行时间和历史运行时间的动态用户优先级, LSF 使用相同的衰变因子来缩放已完成作业的累积运行时间和运行作业的运行时间,以便最近使用的时间中有一小时相当于经过指定小时数后的 0.1 小时。

设置为 HIST_HOURS=0时,不会衰减运行作业所累积的 CPU 时间和运行时。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

缺省值

尚未定义。

HJOB_LIMIT

指定每个主机的作业插槽限制。

语法

HJOB_LIMIT=整数

描述

此参数定义此队列可以在任何主机上使用的最大作业槽数。 此限制是针对每个主机配置的,而不考虑它可能具有的处理器数。

注: 定义 LSB_ENABLE_HPC_ALLOCATION=Y 时,必须将执行主机上的所有插槽分配给互斥作业。 如果队列的 HJOB_LIMIT 值小于执行主机上的最大插槽数,那么提交到此队列的作业将无限期保持暂挂状态。 这是因为 LSF 无法为此主机中的专属作业分配所有插槽。

示例

以下队列在每个队列上最多运行一个作业hostA,hostBhostC:
Begin Queue 
... 

HJOB_LIMIT = 1 

HOSTS=hostA hostB hostC 
... 

End Queue

缺省值

无限制

HOST_POST_EXEC

在队列级别启用基于主机的执行后处理。

语法

HOST_POST_EXEC=命令

描述

HOST_POST_EXEC 命令在作业完成后在所有执行主机上运行。 如果在队列级别,应用程序级别或作业级别定义了基于作业的执行后 POST_EXEC ,那么 HOST_POST_EXEC 命令将在任何级别的 POST_EXEC 之后运行。

可以在队列和应用程序级别配置基于主机的执行后命令,并按以下顺序运行:
  1. 应用程序级别命令
  2. 队列级别命令。

受支持的命令规则与队列部分的现有 POST_EXEC 相同。 请参阅 POST_EXEC 主题以获取详细信息。

注: 基于主机的执行后命令无法在 Windows 系统上运行。 此参数不能用于配置基于作业的执行后处理。

缺省值

尚未定义。

主机预执行

在队列级别启用基于主机的执行前处理。

语法

HOST_PRE_EXEC=命令

描述

在作业启动之前, HOST_PRE_EXEC 命令在所有执行主机上运行。 如果在队列级别/应用程序级别/作业级别定义了基于作业的预执行 PRE_EXEC ,那么 HOST_PRE_EXEC 命令将在任何级别的 PRE_EXEC 之前运行。

可以在队列和应用程序级别配置基于主机的预执行命令,并按以下顺序运行:
  1. 队列级别命令
  2. 应用程序级别命令。

受支持的命令规则与队列部分的现有 PRE_EXEC 相同。 请参阅 PRE_EXEC 主题以获取详细信息。

注: 无法在 Windows 平台上执行基于主机的预执行命令。 此参数不能用于配置基于作业的执行前处理。

缺省值

尚未定义。

hostlimit_per_job

指定每个作业的主机限制。

语法

HOSTLIMIT_PER_JOB=整数

描述

此参数定义此队列中的作业可以使用的最大主机数。 LSF 在调度的分配阶段验证主机限制。 如果为并行作业请求的主机数超过此限制,并且 LSF 无法满足最小请求插槽数,那么该并行作业将暂挂。 但是,对于已恢复的并行作业,即使作业的主机分配超过此参数中指定的每个作业主机限制,此参数也不会阻止作业恢复。

缺省值

无限制

主机

指定可以在其上运行此队列中的作业的主机的空间分隔列表。

语法

HOSTS=主机列表 | none
  • host_list 是以下项的空格分隔列表:
    • host_name[@cluster_name] [[!] | +pref_level]
    • 主机分区 [ + pref_level]
    • 主机组 [[!] | + 偏好级别 ]
    • 计算单元 [[!] | + 首选项级别 ]
    • [~ ]host_name
    • [~ ]host_group
    • [~ ]compute_unit
  • 该列表只能包含以下项一次:
    • 其他[+pref_level]
    • 全部
    注: 不推荐使用 allremoteall@cluster_name 关键字,在将来的 LSF版本中可能会将其除去。
  • none 关键字仅与多集群作业转发模型配合使用,以指定仅远程队列。

描述

如果计算单元,主机组或主机分区包含在列表中,那么作业可以在单元,组或分区中的任何主机上运行。 主机列表的所有成员都应该属于单个主机分区或不属于任何主机分区。 否则,作业调度可能会受到影响。

某些项可以后跟加号 (+) 和正数,以指示将作业分派到该主机的首选项。 数字越大表示首选项越高。 如果未指定主机首选项,那么假定其为 0。 如果有多个候选主机,那么 LSF 会将作业分派给具有最高首选项的主机; 处于相同首选项级别的主机按负载排序。

如果为计算单元,主机组或主机分区分配了首选项,那么单元,组或分区中的每个主机都具有相同的首选项。

使用关键字 others 来包含所有未显式列出的主机。

使用关键字 allremote hostgroup_name 将租约包括在主机中。

使用非运算符 (~) 从队列中的 all 规范中排除主机。 如果您有一个大型集群,但只想从队列定义中排除几个主机,那么这很有用。

非运算符只能与 all 关键字配合使用。 对于关键字 othersnone,它 无效

非运算符 (~) 可用于排除主机组。

对于并行作业,如果要确保主机具有必需的资源或运行时环境来处理在第一个执行主机上运行的进程,请指定第一个执行主机候选者。

要指定一个或多个主机,主机组或计算单元作为第一个执行主机候选者,请在名称后添加感叹号 (!) 符号。

指定第一个执行主机候选项时,请遵循以下准则:
  • 如果指定计算单元或主机组,那么必须首先在文件 lsb.hosts中定义单元或组。
  • 请勿将动态主机组指定为第一个执行主机。
  • 不要指定全部其他主机,也不要指定主机分区作为第一执行主机。
  • 请勿指定由 (!) 标识为第一个执行主机候选者的主机的首选项 (+)。
  • 对于每个并行作业,指定足够的常规主机以满足作业的 CPU 需求。 一旦 LSF 为当前作业选择了第一个执行主机,那么其他第一个执行主机候选者
    • 不可用于当前作业
    • 作为常规或第一个执行主机,仍可供其他作业使用
  • 使用 brun 命令时,不能指定第一个执行主机候选项。
限制: 如果已启用 EGO ,那么将不采用主机组和计算单元。
限制: 参与基于队列的公平共享的主机不能位于主机分区中。

具有主机交集的行为

bsub 指定的主机首选项-m与排队规范、提前预约主机智能结合。 这些作业在作业提交时指定的主机上运行,并且属于队列或具有提前预留。

示例 1

HOSTS=hostA+1 hostB hostC+1 hostD+3

此示例定义三个级别的首选项: 运行作业hostD尽可能多的,否则运行在任一hostAhostC如果可能,否则运行于hostB. 作业不应在以下时间运行:hostB除非所有其他主机都太忙,无法接受更多作业。

示例 2

HOSTS=hostD+1 others

运行作业hostD尽可能多地运行作业,否则在可用负载最小的主机上运行作业。

示例 3

HOSTS=all ~hostA

在集群中的所有主机上运行作业,但hostA.

示例 4

HOSTS=Group1 ~hostA hostB hostC

运行作业hostB,hostC以及所有主机Group1除了hostA.

示例 5

HOSTS=hostA! hostB+ hostC hostgroup1!

使用下列其中一项来运行并行作业:hostA或在以下主机中定义的主机hostgroup1作为第一个执行主机。 如果第一个执行主机由于资源需求而无法运行整个作业,请在以下位置运行该作业的其余部分:hostB. 如果hostB太忙而无法接受作业,或者如果hostB没有足够的资源来运行整个作业,运行该作业的其余部分hostC.

示例 6

HOSTS=computeunit1! hostB hostC

使用主机运行并行作业computeunit1作为第一个执行主机。 如果第一个执行主机由于资源需求而无法运行整个作业,请在以下主机中的其他主机上运行该作业的其余部分:computeunit1后跟hostB最后hostC.

示例 7

HOSTS=hostgroup1! computeunitA computeunitB computeunitC

使用主机运行并行作业hostgroup1作为第一个执行主机。 如果需要其他主机,请在与第一个执行主机相同的计算单元中的其他主机上运行该作业的其余部分,然后按在 lsb.hosts ComputeUnit 部分中定义的顺序运行其余计算单元中的主机。

缺省值

all (队列可以使用集群中的所有主机,并且每个主机都具有相同的首选项)

忽略截止日期

禁用截止期限约束调度。

语法

IGNORE_DEADLINE=Y

描述

如果设置为 Y ,那么 LSF 将忽略截止期限约束调度并启动所有作业,而不考虑截止期限约束。

IMPT_JOBBKLG

指定接收作业队列的多集群暂挂作业限制。 仅与多集群作业转发模型配合使用。

语法

IMPT_JOBBKLG=整数 |infinit

描述

此参数表示队列中可暂挂的最大多集群作业数; 一旦达到限制,队列将停止接受来自远程集群的作业。

使用关键字 infinit 使队列接受数量不限的暂挂多集群作业。

缺省值

50

IMPT_JOBLIMIT

指定可以在接收作业队列中配置的来自远程集群的多集群启动作业数。 仅与多集群作业转发模型配合使用。

语法

IMPT_JOBLIMIT=整数 |infinit

描述

此参数表示可以在队列中启动的多集群远程作业的最大数目; 一旦达到限制,队列将停止从队列分派远程作业。

指定 0 或任何正整数作为作业数。

使用关键字 infinit 使队列接受数量不限的启动多集群作业。

缺省值

infinit (队列接受数量不限的启动多集群作业任务。)

IMPT_TASKBKLG

指定接收作业队列的多集群暂挂作业任务限制。 仅与多集群作业转发模型配合使用。

语法

IMPT_TASKBKLG=整数 |infinit

描述

在提交集群中,如果请求的作业任务总数和接收队列中导入的暂挂任务数大于 IMPT_TASKBKLG,那么队列将停止接受来自远程集群的作业,并且不会将该作业转发到接收队列。

指定 0 到 2147483646 之间的整数作为任务数。

使用关键字 infinit 使队列接受数量不限的暂挂多集群作业任务。

IMPT_TASKBKLG 设置为 0 以禁止将任何作业转发到接收队列。

注: IMPT_SLOTBKLG 已更改为 IMPT_TASKBKLG ,并且从 LSF 9.1.3开始,概念已从插槽更改为任务。

缺省值

infinit (队列接受数量不限的暂挂多集群作业任务。)

IMPT_TASKLIMIT

指定可以在接收作业队列中配置的来自远程集群的多集群启动作业任务数。 仅与多集群作业转发模型配合使用。

语法

IMPT_TASKLIMIT=整数 |infinit

描述

在提交集群中,如果请求的作业任务总数和接收队列中导入的启动任务数大于 IMPT_TASKLIMIT,那么队列将停止从队列分派远程作业,并且该作业不会转发到接收队列。

为作业任务数指定任何正整数。

IMPT_TASKLIMIT 设置为 0 以禁止将任何作业任务转发到接收队列。

使用关键字 infinit 使队列接受数量不限的启动多集群作业任务。

缺省值

infinit (队列接受数量不限的启动多集群作业任务。)

INTERACTIVE

指定队列是接受交互式作业还是非交互式作业。

语法

INTERACTIVE=YES | NO | ONLY

描述

如果设置为 YES ,那么将使队列同时接受交互式和非交互式批处理作业。

如果设置为 NO ,那么将导致队列拒绝交互式批处理作业。

如果设置为 ONLY ,那么将导致队列接受交互式批处理作业并拒绝非交互式批处理作业。

交互式批处理作业通过 bsub -I提交。

缺省值

是。 队列接受交互式和非交互式作业。

可中断回填

配置可中断的回填调度策略,该策略允许保留作业槽由低优先级的小型作业使用,这些作业在较高优先级的大型作业即将启动时终止。

语法

INTERRUPTIBLE_BACKFILL=

描述

只能有一个可中断的回填 queue.It 应该是集群中的最低优先级队列。

指定要考虑用于 backfilling.This 最小时间片取决于特定作业属性; 它必须比作业的至少一个有用迭代长。 如果站点具有不同类的作业,那么可以创建多个队列。

可中断的回填作业:
  • 作为常规作业启动,并在其超过队列运行时限制时终止,或者
  • 每当存在比指定的最短时间更长的回填时间片时启动回填,并在即将启动槽预留作业之前终止

队列 RUNLIMIT 对应于回填的最大时间片,应该进行配置,以便用户可以接受提交到队列的新作业的等待周期。 10 分钟的运行时是一个公共值。

应该为可中断的回填队列配置 REQUEUE_EXIT_VALUES。

必须在队列中配置 BACKFILL 和 RUNLIMIT。 如果未配置 BACKFILL 和 RUNLIMIT ,那么将禁用队列。

假设和限制:

  • 可中断的回填作业保持槽预留作业开始,直到其计算的开始时间为止,与常规回填作业相同。 可中断的回填作业不会以任何方式被抢占,除了在其时间到来时被杀死之外。
  • 在队列中检查可中断回填,回填和运行时规范的一致性时,不会验证或自动执行重排出口值子句。 根据站点策略配置重新排队退出值。
  • 可中断回填作业必须能够执行至少一个有用计算单元,并在最小时间片内保存其数据,并且能够在重新启动后继续其计算
  • 可中断的回填范例不会明确禁止运行分布在多个节点上的并行作业; 但是,此类作业成功的机会接近于零。

缺省值

尚未定义。 无可中断的回填。

工作接受间隔

指定在将作业分派到主机之后,将第二个作业分派到同一主机之前要等待的时间量。

语法

JOB_ACCEPT_INTERVAL=整数

描述

此参数值乘以 lsb.params MBD_SLEEP_TIME 的值 (缺省情况下为 60 秒)。 计算的结果是在将作业分派到主机之后,将第二个作业分派到同一主机之前等待的秒数。

如果设置为 0 (零) ,那么主机可以在每个分派轮次中接受多个作业。 缺省情况下,可以在主机上运行的作业总数没有限制,因此如果此参数设置为 0 ,那么可能会一次性将大量作业全部分派给主机。 这可能会使系统超负荷,以至于无法创建更多进程。 建议不要将此参数设置为 0。

在队列级别 (lsb.queues) 设置的 JOB_ACCEPT_INTERVAL 将覆盖在集群级别 (lsb.params) 设置的 JOB_ACCEPT_INTERVAL。

注:

仅当主机上存在正在运行的作业时,参数 JOB_ACCEPT_INTERVAL 才适用。 运行在 JOB_ACCEPT_INTERVAL 过去之前完成的短作业的主机可以接受新作业而无需等待。

缺省值

尚未定义。 队列使用 lsb.params中定义的 JOB_ACCEPT_INTERVAL ,缺省值为 1。

工作警告时间

指定发生作业控制操作之前要执行作业警告操作的时间量。

语法

JOB_ACTION_WARNING_TIME=[小时:]分钟

描述

作业操作警告时间未规范化。

必须使用作业警告操作 ( JOB_WARNING_ACTION 参数) 指定作业操作警告时间,才能使作业警告生效。

bsub -wt 选项指定的警告时间将覆盖队列中的 JOB_ACTION_WARNING_TIME 。 当未指定命令行选项时,将使用 JOB_ACTION_WARNING_TIME 作为缺省值。

示例

JOB_ACTION_WARNING_TIME=2
JOB_WARNING_ACTION=URG

在作业达到运行时限制或终止截止期限之前 2 分钟,或者队列的运行窗口已关闭,将向作业发送 URG 信号。

缺省值

未定义

作业控制

更改 LSF 中 SUSPEND , RESUME 和 TERMINATE 操作的行为。

语法

JOB_CONTROLS=SUSPEND[signal | 命令 | CHKPNT] RESUME[signal | 命令] TERMINATE[signal | 命令 | CHKPNT]
  • signal 是 UNIX 信号名称 (例如, SIGTSTP 或 SIGTERM)。 将指定的信号发送到作业。 在所有 UNIX 系统上都不支持同一组信号。 要显示系统上支持的信号的符号名称列表 (不含 SIG 前缀) ,请使用 kill -l 命令。
  • command 指定要调用的 /bin/sh 命令行。
    限制:

    请勿在操作定义中引用命令行。 请勿指定后跟触发相同信号的操作的信号。 例如,请勿指定JOB_CONTROLS=TERMINATE[bkill]JOB_CONTROLS=TERMINATE[brequeue]. 这将导致信号与操作之间的死锁。

  • CHKPNT 是一项特殊操作,它会导致系统对作业进行检查点检查。 仅对 SUSPEND 和 TERMINATE 操作有效:
    • 如果 SUSPEND 操作是 CHKPNT ,那么将对该作业进行检查点检查,然后通过自动向该作业发送 SIGSTOP 信号来停止该作业。
    • 如果 TERMINATE 操作为 CHKPNT ,那么将自动检查并终止作业。

描述

  • 运行操作的配置行的内容/bin/sh -c以便您可以在命令中使用 shell 功能。
  • 该命令的标准输入,输出和错误将重定向到 NULL 设备,因此您无法直接判断该命令是否正确运行。 UNIX 上的缺省空设备为 /dev/null
  • 该命令以作业的用户身份运行。
  • 还会为命令操作设置为作业设置的所有环境变量。 设置了以下其他环境变量:
    • LSB_JOBPGIDS: 作业的当前进程组标识的列表
    • LSB_JOBPIDS: 作业的当前进程标识列表
  • 对于 SUSPEND 操作命令,还会设置以下环境变量:
    • LSB_SUSP_育-一个整数,表示 lsbatch.h中定义的暂挂原因的位图。 暂挂原因可以允许命令根据暂挂作业的原因执行不同的操作。
    • LSB_SUSP_SUB不行-表示导致作业暂挂的装入索引的整数。 如果在 LSB_SUSP_REASON 中设置了暂挂原因 SUSP_LOAD_REASON (按装入暂挂) ,那么 LSB_SUSP_SUBREASON 将设置为 lsf.h中定义的其中一个装入索引值。 在定制作业控件中同时使用LSB_SUSP_策数和LSB_SUSP_SUB策数,以确定导致暂挂作业的确切装入阈值。
  • 如果 SUSPEND 命令需要其他操作,那么该操作还应该向应用程序发送相应的信号。 否则,即使在被 LSF 暂挂后,作业也可以继续运行。 例如,JOB_CONTROLS=SUSPEND[kill $LSB_JOBPIDS; 命令]
  • 如果作业控制命令失败,那么 LSF 将保留原始作业状态。
  • 如果使用使用 IBM Spectrum LSF License Scheduler的信号 SIGTSTP 设置抢占,请在 lsf.conf 中定义 LIC_SCHED_PREEMPT_STOP=Y 以使 License Scheduler 抢占生效。
注: 使用 blaunch 在多个主机上运行并行作业时, lsb.queues 中的 JOB_CONTROLS 中定义的作业控制操作仅在第一个执行主机上生效。 队列中定义的作业控制操作不会影响在其他主机上运行的任务。 如果定义了 JOB_CONTROLS ,那么 LSF (SUSPEND , RESUME , TERMINATE) 的缺省作业控制信号不会到达每个执行主机上的每个任务。

缺省值

在 UNIX 上,缺省情况下, SUSPEND 会针对并行或交互式作业发送 SIGTSTP ,针对其他作业发送 SIGSTOP。 RESUME 发送 SIGCONT。 TERMINATE 按该顺序发送 SIGINT , SIGTERM 和 SIGILL。

在 Windows 上,已实现相当于 UNIX 信号的操作来执行缺省作业控制操作。 作业控制消息会替换 SIGINT 和 SIGTERM 信号,但只有定制的应用程序才能够处理它们。 终止实施TerminateProcess( )系统调用。

作业标识

指定空闲作业异常处理的阈值。

语法

JOB_IDLE=数字

描述

该值应该是表示 CPU 时间/运行时的 0.0 到 1.0 之间的数字。 如果作业空闲因子小于指定的阈值,那么 LSF 会调用 LSF_SERVERDIR/eadmin 以触发作业空闲异常的操作。

lsb.params中, mbatchd 报告作业空闲之前的最小作业运行时间定义为 DETECT_IDLE_JOB_AFTER

有效值

0.0 到 1.0 之间的任何正数

示例

JOB_IDLE=0.10

对于空闲值 (CPU 时间/运行时) 小于 0.10的作业,将触发作业空闲异常。

缺省值

尚未定义。 未检测到任何作业空闲异常。

工作超时

指定作业过速异常处理的阈值。

语法

JOB_OVERRUN=运行时

描述

如果作业运行时间超过指定的运行时间,那么 LSF 将调用 LSF_SERVERDIR/eadmin 以触发针对作业过速异常的操作。

示例

JOB_OVERRUN=5

对于运行时间超过 5 分钟的作业,将触发作业过速异常。

缺省值

尚未定义。 未检测到作业过速异常。

作业 _ SIZE_LIST

指定此队列上允许的作业大小 (任务数) 列表。

语法

JOB_SIZE_LIST=默认大小 [大小...]

描述

当提交作业或通过对 bsubbmod使用 -n-R 选项来修改请求作业大小的暂挂作业时,请求的作业大小必须是与 JOB_SIZE_LIST 指定的其中一个值 (即此队列上允许的作业大小) 匹配的单个固定值。 如果请求的作业大小不在此列表中,那么 LSF 将拒绝该作业。 此外,使用 bswitch 将具有所请求作业大小的暂挂作业切换到另一个队列时,暂挂作业中的所请求作业大小还必须与新队列的 JOB_SIZE_LIST 中的其中一个值匹配。

此列表中的第一个值是缺省作业大小,这是在未请求作业的情况下提交作业时分配的作业大小请求。 其余值是队列中允许的其他作业大小,可以按任何顺序定义。

在队列和应用程序概要文件 (lsb.applications) 中定义时,作业大小请求必须同时满足这两个需求。 此外, JOB_SIZE_LIST 会覆盖在同一级别定义的任何 TASKLIMIT 参数。 作业大小需求不适用于没有作业大小列表的队列和应用程序概要文件,也不适用于其他级别的作业提交 (即主机级别或集群级别的作业提交)。

注: 独占作业可能会在主机上分配更多插槽,因此任务需要这些插槽。 例如,如果 JOB_SIZE_LIST=8 和请求 -n8 的互斥作业在 16 个插槽主机上运行,那么所有 16 个插槽都将分配给该作业。 作业按预期运行,因为为作业指定的 8 任务与作业大小列表相匹配。

有效值

1 到 2147483646 之间的正整数的空格分隔列表。

缺省值

未定义

已启动 JOB_STARTER

在执行之前为已提交的作业创建特定环境。

语法

JOB_STARTER=入门模板 [入门模板] ["%USRCMD"] [入门模板]

描述

starter 是可用于启动作业的任何可执行文件 (即,可以接受作业作为输入参数)。 (可选) 可以指定其他字符串。

缺省情况下,用户命令在作业启动程序之后运行。 可以使用特殊字符串 %USRCMD来表示用户的作业在作业启动程序命令行中的位置。 %USRCMD 字符串和任何其他命令必须用引号 (" ") 括起来。

如果作业启动脚本在 Windows 执行主机上运行并包含符号(如 & 或 |),则可以在 lsf.conf 中使用 JOB_STARTER_EXTEND=preservestarter 参数,并在 lsb.queues 中设置 JOB_STARTER=preservestarter 。 还可以使用定制的 userstarter

示例

JOB_STARTER=csh -c "%USRCMD;sleep 10"
在这种情况下,如果用户提交作业
% bsub myjob arguments
实际运行的命令为:
% csh -c "myjob arguments;sleep 10"

缺省值

尚未定义。 未使用任何作业启动程序。

作业 (JOB_UNDERRUN)

指定作业运行不足异常处理的阈值。

语法

JOB_UNDERRUN=运行时

描述

如果作业在指定的分钟数之前退出,那么 LSF 将调用 LSF_SERVERDIR/eadmin 以触发针对作业运行不足异常的操作。

示例

JOB_UNDERRUN=2

对于运行时间少于 2 分钟的作业,将触发作业运行不足异常。

缺省值

尚未定义。 未检测到任何作业运行不足异常。

工作警告行动

指定在执行作业控制操作之前要执行的作业操作。

语法

JOB_WARNING_ACTION=信号

描述

必须使用作业操作警告时间 ( JOB_ACTION_WARNING_TIME 参数) 指定作业警告操作才能使作业警告生效。

如果指定了 JOB_WARNING_ACTION ,那么 LSF 将在执行实际控制操作之前向作业发送警告操作。 这允许作业时间在被作业控制操作终止之前保存其结果。

bsub -wa 选项指定的警告操作将覆盖队列中的 JOB_WARNING_ACTION 。 当未指定命令行选项时,将使用 JOB_WARNING_ACTION 作为缺省值。

示例

JOB_ACTION_WARNING_TIME=2
JOB_WARNING_ACTION=URG

在作业达到运行时限制或终止截止期限之前 2 分钟,或者队列的运行窗口已关闭,将向作业发送 URG 信号。

缺省值

未定义

装入索引

指定指定动态负载指标的调度和暂挂阈值。

语法

加载索引=加载计划[/停止加载]

指定io,it,ls,mem,pg,r15s,r1m,r15m,swp,tmp,ut或非共享定制外部装入索引。 指定多行以配置多个负载指标的阈值。

指定io,it,ls,mem,pg,r15s,r1m,r15m,swp,tmp,ut或作为列的非共享定制外部装入索引。 指定多个列以配置多个装入索引的阈值。

描述

loadSched必须先满足条件,然后才能将作业分派到主机。 如果未指定 RESUME_COND ,那么loadSched还必须满足条件,才能恢复暂挂的作业。

如果loadStop满足条件,将暂挂主机上的作业。

loadSchedloadStop阈值允许使用简单 AND/OR 逻辑指定条件。 没有已配置阈值的任何装入索引都不会影响作业调度。

如果作业是在主机上运行的唯一批处理作业,并且机器以交互方式空闲,那么 LSF 不会暂挂作业 (it>0).

r15s,r1mr15m将 CPU 运行队列长度条件与 lsload -E报告的有效队列长度进行比较,对于多处理器主机,该值已规范化。 应在单个处理器主机的相应级别设置这些参数的阈值。

示例

MEM=100/10 

SWAP=200/30
这两条线转化为loadSched条件
mem>=100 && swap>=200 
和 aloadStop条件
mem < 10 || swap < 30

缺省值

未定义

位置 MAX_PREEXEC_RETRY

指定尝试在本地集群上执行作业的预执行命令的最大次数。

语法

LOCAL_MAX_PREEXEC_RETRY=整数

描述

达到此限制时,作业的缺省行为由 lsb.paramslsb.queueslsb.applications中的 LOCAL_MAX_PREEXEC_RETRY_ACTION 参数定义。

有效值

0 < max_preexec_retry < infinit_int

INFINIT_INT 在 lsf.h中定义。

缺省值

尚未定义。 预执行重试次数不受限制

另请参阅

lsb.paramslsb.queueslsb.applications中的 LOCAL_MAX_PREEXEC_RETRY_ACTION

本地最大预执行重试操作

当作业达到在本地集群上尝试其预执行命令的最大次数时,该作业的缺省行为。

语法

LOCAL_MAX_PREEXEC_RETRY_ACTION=SUSPEND | EXIT

描述

此参数指定当作业达到在本地集群上尝试其预执行命令的最大次数 (由 lsb.paramslsb.queueslsb.applications中的 LOCAL_MAX_PREEXEC_RETRY 指定) 时,该作业的缺省行为。

  • 如果设置为 SUSPEND,那么将暂挂本地或租赁的作业,并且其状态将设置为 PSUSP
  • 如果设置为 EXIT,那么本地或租赁的作业出口及其状态将设置为 EXIT。 作业退出的退出代码与上次执行前失败退出代码相同。

该参数可在整个群集 (lsb.params)、队列级别 (lsb.queues) 和应用程序级别 (lsb.applications) 进行配置。 lsb.applications 中指定的操作会覆盖 lsb.queues ,而 lsb.queues 会覆盖 lsb.params 配置。

缺省值

尚未定义。 如果未在 lsb.params中定义,那么缺省操作为 SUSPEND。

另请参阅

lsb.paramslsb.queueslsb.applications中的 LOCAL_MAX_PREEXEC_RETRY

强制退出

指定队列的必需外部调度选项。

语法

MANDATORY_EXTSCHED=外部调度程序选项

描述

bsub 命令上的 -extsched 选项与 MANDATORY_EXTSCHED 选项合并, MANDATORY_EXTSCHED 选项覆盖 -extsched设置的任何冲突作业级别选项。

缺省值

未定义

max_job_preempt

指定可以抢占作业的最大次数。 仅适用于基于队列的抢占。

语法

MAX_JOB_PREEMPT=整数

有效值

0 < max_job_preempt < infinit_int

INFINIT_INT 在 lsf.h中定义。

缺省值

尚未定义。 抢占次数是无限的。

max_job_requeue

指定自动重新排队作业的最大次数。

语法

MAX_JOB_REQUEUE=整数

有效值

0 < max_job_requeue < infinit_int

INFINIT_INT 在 lsf.h中定义。

缺省值

尚未定义。 重新排队次数不受限制

max_prexec_retry

请改为使用 REMOTE_MAX_PREEXEC_RETRY。 保留此参数是为了实现向后兼容性。 尝试从远程集群执行作业的预执行命令的最大次数。 仅与多集群作业转发模型配合使用。

语法

MAX_PREEXEC_RETRY=整数

描述

如果作业的执行前命令失败了所有尝试,那么该作业将返回到提交集群。

有效值

0 < max_preexec_retry < infinit_int

INFINIT_INT 在 lsf.h中定义。

缺省值

5

max_rsched_time

确定多集群作业在返回到提交集群之前在执行集群中处于暂挂状态的时间长度。 仅与多集群作业转发模型配合使用。

语法

MAX_RSCHED_TIME=整数 | infinit

描述

远程超时限制 (以秒计) 为:
MAX_RSCHED_TIME * MBD_SLEEP_TIME=timeout

指定 infinit 以禁用远程超时 (作业始终以正确的 FCFS 顺序分派,因为多集群作业从不重新调度,但多集群作业可以在接收作业队列中永久暂挂,而不是重新调度到更好的队列)。

注:

应用于提交集群中的队列 (仅适用于)。 接收队列将忽略此参数。

远程超时限制从不影响高级预留作业

使用提前预留的作业的行为始终与远程超时处于禁用状态一样。

缺省值

20 (缺省情况下为 20 分钟)

最大总抢占时间

指定累积抢占时间,在此时间之后不能再次抢占作业。

语法

MAX_TOTAL_TIME_PREEMPT=分钟

其中 minutes 是挂钟时间,而不是规范化时间。

描述

lsb.applications 中设置相同名称的参数将覆盖此参数; 设置此参数将覆盖 lsb.params中相同名称的参数。

有效值

任何大于或等于 1 的正整数 (1)

缺省值

无限制

mc_forward_delay

使用 LSF 多集群功能时,指定作业转发行为以及 LSF 的作业提交和调度还原为缺省作业转发行为后的时间量。

语法

MC_FORWARD_DELAY=[-]

描述

如果此值为正数,那么 LSF 不会将作业转发到远程集群,而仅在指定的时间量 (以秒计) 内尝试本地主机。

如果此值为负数,那么 LSF 会将作业转发到远程集群,并且不会在指定的时间量 (以秒计) 内尝试本地主机。

此指定的延迟时间在 LSF 提交并调度作业后开始。 在此时间量之后,此参数将不再生效,并且 LSF 将还原为缺省作业转发行为,即先尝试本地主机,然后在此操作失败时将作业转发到远程集群。

如果 LSF 由于 MAX_RSCHED_TIME 参数设置而重新调用了远程集群中的作业,那么 LSF 会重复这些步骤。 如果 LSF 重新排队,暂挂或恢复作业,或者调度程序守护程序重新启动,那么 LSF 也会重复这些步骤。

有效值

任何正整数或负整数。 如果设置为 0 ,那么将禁用此参数。

缺省值

0。此参数已禁用。

内存限制

指定此队列中所有作业进程的每个进程驻留大小限制。

语法

MEMLIMIT=[ default_limit] maximum_limit

描述

设置此参数以针对属于此队列中的作业的所有进程设置每个进程的硬进程驻留集大小限制 (以 KB 为单位) (请参阅 getrlimit(2))。

设置可分配给进程的最大物理内存量 (驻留集大小, RSS)。

缺省情况下,如果指定了缺省内存限制,那么当达到缺省内存限制时,将终止提交到队列的没有作业级别内存限制的作业。

如果仅指定一个限制,那么它是最大或硬内存限制。 如果指定两个限制,第一个限制是缺省内存限制或软内存限制,第二个限制是最大内存限制。

LSF 有两种强制内存使用的方法:
  • 操作系统内存限制实施
  • LSF 内存限制实施

操作系统内存限制实施

操作系统内存限制实施是缺省 MEMLIMIT 行为,不需要进一步配置。 操作系统实施通常允许进程最终运行至完成。 LSF 将 MEMLIMIT 传递给将其用作系统调度程序和内存分配器的指南的操作系统。 如果有剩余,那么系统可能会将更多内存分配给进程。 当内存不足时,系统将从内存中获取内存,并降低已超过其声明的 MEMLIMIT 的进程的调度优先级 (重新处理)。 仅在支持 setrlimit()RLIMIT_RSS 的系统上可用。

以下位置不支持:
  • 太阳 Solaris 2.x
  • Windows

LSF 内存限制实施

要启用 LSF 内存限制实施,请将 lsf.conf 中的LSB_MEMLIMIT_实施设置为 y。 LSF 内存限制实施会显式地发送一个信号,以在已分配内存超过 MEMLIMIT 时终止正在运行的进程。

您还可以通过将 lsf.conf 中的 LSB_JOB_MEMLIMIT 设置为 y 来启用 LSF 内存限制实施。 设置为 y 的 LSB_JOB_MEMLIMIT 与设置为 Y 的 LSB_MEMLIMIT_ENFORCED 之间的差异是,使用 LSB_JOB_MEMLIMIT 时,仅启用 LSF 强制实施的每个作业的内存限制。 已禁用操作系统强制实施的每个进程的内存限制。 如果将LSB_MEMLIMIT_强制设置为 y ,那么将启用 LSF 强制实施的每个作业内存限制和操作系统强制实施的每个进程内存限制。

可用于 LSF 收集总内存使用情况的所有系统。

示例

以下配置定义了内存限制为 5000 KB 的队列:
Begin Queue 
QUEUE_NAME  = default 
DESCRIPTION = Queue with memory limit of 5000 kbytes 
MEMLIMIT    = 5000 
End Queue

缺省值

无限制

MIG

启用自动作业迁移,并指定可设置检查点或可重新运行的作业的迁移阈值。

语法

MIG=分钟

描述

LSF 会自动迁移处于 SSUSP 状态超过指定分钟数的作业。 指定值 0 以在暂挂时立即迁移作业。 迁移阈值适用于在主机上运行的所有作业。

作业级别命令行迁移阈值会覆盖应用程序概要文件和队列中的阈值配置。 应用程序概要文件配置将覆盖队列级别配置。

如果指定了主机迁移阈值,并且该阈值低于作业,队列或应用程序的值,那么将使用主机值。

可以迁移区块作业的成员。 将从作业块中除去处于 WAIT 状态的块作业,并将其置于 PEND 状态。

不影响转发到远程集群的多集群作业。

缺省值

尚未定义。 LSF 不会自动迁移检查点或可重新运行的作业。

新任务延迟

指定新作业在被调度之前等待的秒数。

语法

NEW_JOB_SCHED_DELAY=

描述

值为零 (0) 表示调度作业时没有任何延迟。 调度程序仍会定期从 mbatchd访存作业。 一旦获得作业,调度程序就会毫无延迟地调度这些作业。 这可能会加快作业调度的速度,但也会产生一些通信开销。 因此,对于小型工作负载的高优先级,紧急或交互式队列,应仅将其设置为 0。

如果 NEW_JOB_SCHED_DELAY 设置为非零值,那么调度程序将定期从 mbatchd访存新作业,然后将作业调度时间设置为作业提交时间 + NEW_JOB_SCHED_DELAY

缺省值

0 秒

NICE

调整此队列中的作业执行的 UNIX 调度优先级。

语法

NICE=整数

描述

缺省值 0 (零) 将维护 UNIX 交互式作业的缺省调度优先级。 此值将逐个队列地调整批处理作业的运行时优先级,以控制其对其他批处理或交互式作业的影响。 请参阅nice(1) 手动页面以获取更多详细信息。

在 Windows 上,此值映射到 Windows 进程优先级类,如下所示:
  • nice>=0对应于优先级类IDLE
  • nice<0对应于优先级类NORMAL

Windows 上的 LSF 不支持HIGHREAL-TIME优先级类。

此值将被 lsb.applications中的 NICE 设置覆盖 (如果已定义)。

缺省值

0(零)

无抢占间隔

指定可抢占的作业在被抢占之前可以运行的分钟数。 如果可抢占作业的不间断运行时间比指定时间长,那么可以抢占该时间。

语法

NO_PREEMPT_INTERVAL=分钟

minutes 的值是挂钟时间,而不是规范化时间。

描述

NO_PREEMPT_INTERVAL=0 参数允许在作业启动或恢复运行时立即抢占这些作业。

例如,如果作业 A 需要抢占其他候选可抢占的作业BCD,那么 NO_PREEMPT_INTERVAL 参数将确定抢占的作业:
  • 作业 B 和作业 C 的运行时间小于 NO_PREEMPT_INTERVAL 参数: 未抢占作业 BC
  • 作业 D 的运行时间大于或等于 NO_PREEMPT_INTERVAL 参数: 作业 D 处于抢占状态。

lsb.applications 文件中同名的参数将覆盖此参数。 此参数将覆盖 lsb.params 文件中同名的参数。

缺省值

0

等待时间限制

指定作业的暂挂时间限制。

语法

PEND_TIME_LIMIT=[小时:]分钟

描述

LSF 将队列级别暂挂时间限制配置发送到 IBM Spectrum LSF RTM (LSF RTM) ,这将处理警报和触发的操作,例如用户通知 (例如,通知提交作业的用户和 LSF 管理员) 和作业控制操作 (例如,终止作业)。 LSF RTM 将作业的暂挂时间与暂挂时间限制进行比较,如果该作业的暂挂时间超过此指定时间限制,那么 LSF RTM 将触发警报和操作。 此参数在不使用 LSF RTM的情况下工作,但 LSF 不会执行任何其他警报操作。

在多集群作业转发方式下,将在执行集群中忽略作业的暂挂时间限制,而提交集群根据本地设置合并作业的队列,应用程序和作业级别暂挂时间限制。

暂挂时间限制的格式为 [hour:]minute。 分钟可以指定为大于 59 的数字。 例如,可以将三个半小时指定为 3:30 或 210。

作业级别暂挂时间限制 (bsub -ptl) 将覆盖应用程序级别限制 ( lsb.applications中的PEND_TIME_LIMIT ) ,而应用程序级别限制将覆盖此处指定的队列级别限制。

缺省值

尚未定义。

PJOB_LIMIT

指定队列的每个处理器作业插槽限制。

语法

PJOB_LIMIT=浮点

描述

此队列可以在任何处理器上使用的最大作业插槽数。 此限制是按处理器配置的,因此多处理器主机会自动运行更多作业。

缺省值

无限制

计划

在启用 ALLOCATION_PLANNER 参数时使用。 用于标识作为计划候选者的作业。

语法

PLAN = Y | N | "<key>[value] ..."

描述

LSF 要求启用 ALLOCATION_PLANNER 参数以使用 PLAN=Y

也在集群和应用程序级别定义。 优先顺序为 :application , queue 和 global。 例如,应用程序级别设置将覆盖队列级别设置。

支持以下键/值对:

表 1. PLAN 的键/值对
缺省值 描述
延迟 正整数 - 在考虑在作业提交时间之后制定作业计划之前要延迟的分钟数。
最大作业数 正整数 - 可以同时具有计划的最大作业数。
注:

启用 ALLOCATION_PLANNER 参数时, PLAN 参数将替换现有 SLOT_RESERVE 参数和 RESOURCE_RESERVE 参数。

缺省值

N

POST_EXEC

在队列级别启用执行后处理。

语法

POST_EXEC=命令

描述

POST_EXEC 命令在作业完成后在执行主机上运行。 可以在应用程序和队列级别配置执行后命令。 应用程序级别的执行后命令运行 before 队列级别的执行后命令。

POST_EXEC 命令使用与作业相同的环境变量值,缺省情况下,在提交作业的用户的用户帐户下运行。 要在其他用户帐户 (例如 root for privileged operations) 下运行执行后命令,请在 lsf.sudoers中配置参数 LSB_PRE_POST_EXEC_USER

当作业退出其中一个队列的 REQUEUE_EXIT_VALUES时, LSF 将重新排队该作业并设置环境变量 LSB_JOBPEND。 执行后命令在重新排队的作业完成后运行。

运行执行后命令时,环境变量 LSB_JOBEXIT_STAT 将设置为作业的退出状态。 如果无法设置作业的执行环境,那么 LSB_JOBEXIT_STAT 将设置为 0 (零)。

对于 UNIX 和 Linux,命令路径最多可以包含 4094 个字符,对于 Windows 最多可以包含 255 个字符,包括目录,文件名以及 %J (job_ID) 和 %I (index_ID) 的扩展值。

对于 UNIX:
  • 执行前和执行后命令在 /bin/sh -c下的 /tmp 目录中运行,这允许在命令中使用 shell 功能。 以下示例显示了有效的配置行:
    PRE_EXEC= /usr/share/lsf/misc/testq_pre >> /tmp/pre.out
    
    POST_EXEC= /usr/share/lsf/misc/testq_post | grep -v "Hey!"
    
  • LSF 将 PATH 环境变量设置为
    PATH='/bin /usr/bin /sbin /usr/sbin'
    
  • stdinstdoutstderr 设置为 /dev/null
  • 为了允许 UNIX 用户定义自己的执行后命令, LSF 管理员将环境变量 $USER_POSTEXEC 指定为 POST_EXEC 命令。 然后,用户定义执行后命令:
    setenv USER_POSTEXEC /path_name
    
    注: 执行后命令的路径名必须是绝对路径。 当 LSB_PRE_POST_EXEC_USER=root时,请勿定义 POST_EXEC=$USER_POSTEXEC 。 此参数不能用于配置基于主机的执行后处理。
对于 Windows:
  • 执行前和执行后命令在 cmd.exe /c 下运行
  • 标准输入,标准输出和标准错误设置为 NULL
  • PATHLSF 服务的设置确定
注:

对于在 Windows Server 2003 x64 Edition 平台上执行的执行后命令,用户必须具有 cmd.exe的读和执行特权。

缺省值

尚未定义。 没有与队列关联的执行后命令。

预执行

在队列级别启用执行前处理。

语法

PRE_EXEC=命令

描述

PRE_EXEC 命令在作业启动之前在执行主机上运行。 如果 PRE_EXEC 命令退出时带有非零退出代码,那么 LSF 会将作业重新排队到队列的前面。

可以在队列,应用程序和作业级别配置预执行命令,并按以下顺序运行:
  1. 队列级别命令
  2. 应用程序级别或作业级别命令。 如果同时在应用程序级别和作业级别指定命令,那么作业级别命令将覆盖应用程序级别命令; 将忽略应用程序级别命令。

PRE_EXEC 命令使用与作业相同的环境变量值,并在提交作业的用户的用户帐户下运行。 要在其他用户帐户 (例如 root for privileged operations) 下运行执行前命令,请在 lsf.sudoers中配置参数 LSB_PRE_POST_EXEC_USER

对于 UNIX 和 Linux,命令路径最多可以包含 4094 个字符,对于 Windows 最多可以包含 255 个字符,包括目录,文件名以及 %J (job_ID) 和 %I (index_ID) 的扩展值。

对于 UNIX:
  • 执行前和执行后命令在 /bin/sh -c下的 /tmp 目录中运行,这允许在命令中使用 shell 功能。 以下示例显示了有效的配置行:
    PRE_EXEC= /usr/share/lsf/misc/testq_pre >> /tmp/pre.out
    
    POST_EXEC= /usr/share/lsf/misc/testq_post | grep -v "Hey!"
    
  • LSF 将 PATH 环境变量设置为
    PATH='/bin /usr/bin /sbin /usr/sbin'
    
  • stdinstdoutstderr 设置为 /dev/null
对于 Windows:
  • 执行前和执行后命令在 cmd.exe /c 下运行
  • 标准输入,标准输出和标准错误设置为 NULL
  • PATH 由 LSF 服务的设置确定
注:

对于在 Windows Server 2003 x64 Edition 平台上执行的预执行命令,用户必须具有 cmd.exe的读和执行特权。 此参数不能用于配置基于主机的执行前处理。

缺省值

尚未定义。 没有与队列关联的预执行命令。

预占

启用先发制人调度,并将此队列定义为先发制人或可先发制人。

语法

PREEMPTION=PREEMPTIVE[[低队列名称 [+偏好级别 ] ...] ] PREEMPTION=PREEMPTABLE[[ hi_queue_name...] ] PREEMPTION=PREEMPTIVE[[低队列名称 [+偏好级别 ] ...] ] PREEMPTABLE [[ hi_queue_name...] ]

描述

方案

启用先发制人调度,并将此队列定义为先发制人。 此队列中的作业会先从指定的低优先级队列或所有低优先级队列中抢占作业 (如果未指定任何队列名称)。 PREEMP告 可以与 PREEMPTABLE 组合使用,以指定此队列中的作业可以抢占低优先级队列中的作业,并且可以被高优先级队列中的作业抢占。

可预操作表

启用先发制人调度,并将此队列定义为可先发制人。 此队列中的作业可被指定的高优先级队列或所有高优先级队列中的作业抢占先机,即使高优先级队列并非抢占先机。 可以将 PREEMP告PREEMP告 结合使用,以指定此队列中的作业可以被高优先级队列中的作业抢占,并且可以抢占低优先级队列中的作业。

低队列名称

指定可以抢占的低优先级队列的名称。

要指定多个队列,请使用空格分隔队列名称,并将列表括在一组方括号中。

+pref_level

指定先抢占此队列,然后再抢占其他队列。 当使用首选项级别指示多个队列时,将指示首选项顺序: 在设置了较低相对首选项级别的队列之前,将抢占具有较高相对首选项级别的队列。

高优先级队列名称

指定可以抢占此队列中作业的高优先级队列的名称。

要指定多个队列,请使用空格分隔队列名称,并将列表括在一组方括号中。

示例: 配置跨队列的选择性有序抢占

以下示例定义了四个队列,如下所示:
    • 具有最高相对优先级 99
    • 此队列中的作业可以抢占所有其他队列中的作业
  • 介质
    • 具有第二高的相对优先级 (10)
    • 此队列中的作业可以抢占作业normallow队列,从作业开始low,如首选项 (+ 1) 所示
  • 正常
    • 具有第二低的相对优先级,位于 5
    • 此队列中的作业可以抢占作业low,并且可以被来自两者的作业抢占先机highmedium队列
    • 具有最低相对优先级,也就是缺省优先级,位于 1
    • 此队列中的作业可由所有抢占队列中的作业抢占,即使未设置 PREEMPTABLE 关键字也是如此
Begin Queue
QUEUE_NAME=high
PREEMPTION=PREEMPTIVE
PRIORITY=99
End Queue
Begin Queue
QUEUE_NAME=medium
PREEMPTION=PREEMPTIVE[normal low+1]
PRIORITY=10
End Queue
Begin Queue
QUEUE_NAME=normal
PREEMPTION=PREEMPTIVE[low]
PREEMPTABLE[high medium]
PRIORITY=5
End Queue
Begin Queue
QUEUE_NAME=low
PRIORITY=1
End Queue

抢占延迟

先发制人作业将从提交时间开始等待指定的秒数,然后再抢占任何低优先级的先发制人作业。

语法

PREEMPT_DELAY=

描述

在宽限期内,将不会触发抢占,但该作业可以由其他调度策略进行调度和分派。

此功能可提供调整系统以减少抢占次数的灵活性。 获得更好的性能和作业吞吐量很有用。 当低优先级作业很短时,如果高优先级作业可以等待一段时间以使低优先级作业完成,那么可以避免抢占并提高集群性能。 如果在宽限期到期后作业仍处于暂挂状态,那么将触发抢占。

等待时间仅用于处于暂挂状态的抢先作业。 它不会影响暂挂的先发作业。

时间从作业的提交时间算起。 提交时间表示 mbatchd 接受作业的时间,该作业包括新提交的作业,重新启动的作业 (由 brestart) 或来自远程集群的转发作业。

当抢先作业正在等待时,暂挂原因为:

先发制人的作业允许先发制人之前的宽限期。

如果使用较低版本的 bjobs,那么暂挂原因为:

未知待处理原因代码 <6701>;

该参数在 lsb.paramslsb.queues (覆盖 lsb.params) 和 lsb.applications (覆盖 lsb.paramslsb.queues) 中定义。

运行 badmin reconfig 以使更改生效。

缺省值

未定义 (如果未在任何位置定义参数,那么先占即用)。

优先级

指定分派作业的相对队列优先级。 值越大表示相对于其他队列的作业分派优先级越高。

语法

PRIORITY=整数

描述

LSF 一次从一个队列调度作业,从优先级最高的队列开始。 如果多个队列具有相同的优先级,那么 LSF 会按先到先得的顺序调度这些队列中的所有作业。

LSF 队列优先级独立于用于时间共享进程的 UNIX 调度程序优先级系统。 在 LSF 中, NICE 参数用于设置批处理作业的 UNIX 分时优先级。

整数

指定大于或等于 1 的数字,其中 1 是最低优先级。

缺省值

1

进程限制

限制可以作为作业一部分的并发进程数。

语法

PROCESSLIMIT=[默认限制 ] 最大限制

描述

缺省情况下,如果指定了缺省进程限制,那么在达到缺省进程限制时,将终止提交到队列的没有作业级别进程限制的作业。

如果仅指定一个限制,那么它是最大或硬进程限制。 如果指定两个限制,第一个是缺省进程限制或软进程限制,第二个是最大进程限制。

缺省值

无限制

QJOB_LIMIT

指定队列的作业槽限制。

语法

QJOB_LIMIT=整数

描述

此参数指定此队列可以使用的作业槽总数。

缺省值

无限制

队列组

配置跨多个队列的绝对优先级调度 (APS)。

语法

QUEUE_GROUP=queue1, queue2 ...

描述

在具有 APS_PRIORITY的队列中启用 APS 时,将忽略 FAIRSHARE_QUEUES 参数。 QUEUE_GROUP 参数将替换 FAIRSHARE_QUEUES,这在 LSF 7.0中已过时。

缺省值

未定义

QUEUE_NAME

必需。 指定队列的名称。

语法

QUEUE_NAME=字符串

描述

指定长度不超过 59 个字符的任何 ASCII 字符串。 可以使用字母,数字,下划线 (_) 或短划线 (-)。 不能使用空格。 不能指定保留名称default.

缺省值

必须指定此参数以定义队列。 LSF 自动创建的缺省队列已命名default.

RC账户

将帐户名称 (标记) 分配给通过 LSF 资源连接器借入的主机,以便其他用户组,用户或作业无法使用这些主机。

语法

RC_ACCOUNT=帐户名称

描述

将作业提交到指定了 RC_ACCOUNT 参数的队列时,将使用 RC_ACCOUNT 参数的值来标记为运行作业而借用的主机。 借用的主机不能由具有不同 RC_ACCOUNT 参数值 (或未定义 RC_ACCOUNT 参数) 的其他队列使用。

在借用的主机加入集群后,使用 lshosts -s 命令来查看主机的 RC_ACCOUNT 参数的值。

示例

RC_ACCOUNT=project1

缺省值

字符串 "default"-表示没有为队列定义帐户。

rc_demand_policy

定义用于确定是否触发需求以通过资源连接器为队列中的所有作业借入资源的阈值条件。 只要队列中的暂挂作业至少满足一个阈值条件, LSF 就会向资源连接器表达触发借用的需求。

语法

RC_DEMAND_POLICY = THRESHOLD[ [ num_pend_jobs[,duration]] ... ]

描述

RC_DEMAND_POLICY 参数定义的需求策略可以在 OR 关系中包含多个条件。 条件定义为 [ num_pend_jobs[,duration]]。 队列具有超过指定数量的合格暂挂作业,这些作业预计将至少运行指定的持续时间 (以分钟计)。 num_pend_jobs 选项是必需的,并且持续时间是可选的。 缺省持续时间为 0 分钟。

LSF 考虑策略的合格暂挂作业。 不合格的暂挂作业 (例如,尚未满足作业依赖关系) 保持暂挂状态,即使主机可用也是如此。 无论作业需要多少任务或时段,该策略都会计算作业的资格。 每个作业元素都计为一个作业。 不会对可调整大小的作业的暂挂需求进行计数,尽管 LSF 可以将借用的资源分配给可调整大小的作业。

LSF 在每个需求计算周期评估策略,并在满足 num_pend_jobs 选项时累积持续时间。 mbschd 守护程序在重新启动时或在过去两分钟内未对该条件进行求值时,会重置该条件的持续时间。 例如,如果集群中没有暂挂作业,那么在两分钟内, mbschd 将停止对这些作业进行求值。

示例

在以下示例中,如果队列在过去 10 分钟内有 5 个或更多个暂挂作业,或者在过去 60 分钟内有一个或多个暂挂作业,或者有 100 个或更多个暂挂作业,那么 LSF 会计算需求。
RC_DEMAND_POLICY = THRESHOLD[ [ 5, 10] [1, 60] [100] ]

缺省值

未针对队列定义

RC_HOSTS

使 LSF 资源连接器能够从资源提供程序借用特定主机类型。

语法

RC_HOSTS=string

RC_HOSTS = none | | all host_type [host_type...]

描述

host_type 标志是一个布尔资源,它是 lsf.conf 文件中 LSB_RC_EXTERNAL_HOST_FLAG 参数中定义的主机资源列表的成员。

如果未在队列中定义 RC_HOSTS 参数,那么其缺省值为 none。 对于显式定义 RC_HOSTS=none的任何队列,将禁用借款,即使在 lsf.conf 文件中定义了 LSB_RC_EXTERNAL_HOST_FLAG 参数也是如此。

如果未在任何队列中定义 RC_HOSTS 参数,那么无法对任何作业进行借用。

注: lsb.queues 文件中的 HOSTS 参数和 bsub -m 选项不适用于通过资源连接器管理的主机。 要指定可供队列使用的资源连接器主机类型,必须在该队列中指定 RC_HOSTS 参数。

示例

RC_HOSTS=awshost

缺省值

none -禁用来自资源提供程序的主机借用,并且队列不能使用借用的主机。

RCVJOBS_FROM

定义 LSF 多集群功能的接收作业队列。

语法

RCVJOBS_FROM=集群名称 ... | allclusters

描述

指定以空格分隔的集群名称。 每个远程集群的管理员确定该集群中的哪些队列将作业转发到本地集群。

如果在执行集群中启用了 LSF 数据管理器数据传输队列作为远程发送作业队列 (即,如果将队列从提交集群添加到执行集群的 lsb.queues 文件中的 SNDJOBS_TO 参数) ,那么必须在相应的提交集群中的 RCVJOBS_FROM 参数中包含执行集群。

使用关键字 allclusters 来指定任何远程集群。

示例

以下队列接受来自集群 2 , 4 和 6 的远程作业。

RCVJOBS_FROM=cluster2 cluster4 cluster6

LSF 数据管理器的示例

如果执行集群 clusterELSF 数据管理器传输队列 data_transfer 设置为远程发送作业队列到提交集群中的 receive_q 队列 clusterS,那么根据 clusterE 集群的以下配置:

Begin Queue
QUEUE_NAME=data_transfer
DATA_TRANSFER=Y
SNDJOBS_TO=receive_q@clusterS
HOSTS=hostS1 hostS2 # Transfer nodes in the execution cluster
End Queue

您必须为提交集群 clusterS 中的 receive_q 队列定义 RCVJOBS_FROM 参数,以接受来自 (并将数据推送到) 执行集群 clusterE的作业,如 clusterS 集群的以下配置中所示:

Begin Queue
QUEUE_NAME=receive_q
RCVJOBS_FROM=clusterE
PRIORITY=40
HOSTS=hostS1 hostS2 # Transfer nodes in the submission cluster
RES_REQ=select[type==any]
End Queue

或者,您可以定义 RCVJOBS_FROM=allclusters 以接受来自所有集群 (包括执行集群) 的作业。

放松工作分配顺序

允许 LSF 偏离标准作业优先级划分策略,以提高集群利用率。

语法

RELAX_JOB_DISPATCH_ORDER=Y | y | N | n | ALLOC_REUSE_DURATION[ [ 最小 ] 最大] [SHARE[ [user ][group ][project ]] ]

描述

启用此参数时, LSF 允许具有公共资源需求的多个作业在同一分配上连续运行。 每当作业完成时, LSF 都会尝试将其快速替换为具有相同资源需求的暂挂作业。 为确保不违反限制, LSF 会选择属于同一用户且具有其他公共属性的暂挂作业。

由于 LSF 会绕过作业之间的大多数标准调度逻辑,因此复用资源分配可帮助提高集群利用率。 在具有多个较短作业 (即,从几秒到几分钟运行的作业) 的集群中,这种改进最为明显。

为了确保标准作业优先级划分策略是近似值的,对每个分配可复用的时间长度有限制。 LSF 自动设置此时间限制以实现高水平的资源利用率。 缺省情况下,此复用时间不能超过 30 分钟。 如果指定最大复用时间和可选的最小复用时间 (通过使用 ALLOC_REUSE_DURATION) ,那么 LSF 会调整此指定范围内的时间限制以达到最高资源利用率级别。

使用 SHARE[] 关键字可进一步放宽哪些类型的暂挂作业可以复用已完成作业的资源分配的约束。 这允许更多作业复用资源分配,但可能导致暂时违反资源限制和策略,因为这些限制和策略已放宽。 SHARE[] 关键字指定在确定哪些暂挂作业可以复用已完成作业的资源分配时, mbatchd 守护程序不再需要应用的约束。 如果作业已完成,并且 LSF 找不到具有相同用户或其他公共属性的任何暂挂作业,那么 LSF 将考虑 SHARE[] 关键字中的规范。 在 SHARE[] 中为 LSF 指定一个或多个以下关键字,以同时考虑以下暂挂作业:
用户
未与已完成作业具有相同作业所有者的暂挂作业。
未与已完成作业所在的公平共享组 (bsub -G 命令选项) 关联的暂挂作业。
项目
未分配给与已完成作业相同的项目 (bsub -P 命令选项) 的暂挂作业。
如果使用 LSF 多集群功能,那么 SHARE[] 仅适用于作业转发方式。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

示例

  • RELAX_JOB_DISPATCH_ORDER=Y
    

    可以在 0 到 30 分钟之间复用已完成作业的资源分配。

  • RELAX_JOB_DISPATCH_ORDER=ALLOC_REUSE_DURATION[45]

    已完成作业的资源分配可以从 0 复用到 45 分钟。

  • RELAX_JOB_DISPATCH_ORDER=ALLOC_REUSE_DURATION[5 45]

    已完成作业的资源分配可以从 5 复用到 45 分钟。

  • RELAX_JOB_DISPATCH_ORDER=SHARE[user]

    可以在 0 到 30 分钟之间复用已完成作业的资源分配。 如果没有具有相同公共属性的暂挂作业,那么属于不同用户的暂挂作业也可以复用资源分配。

  • RELAX_JOB_DISPATCH_ORDER=SHARE[user group]

    可以在 0 到 30 分钟之间复用已完成作业的资源分配。 如果没有具有相同公共属性的暂挂作业,那么属于不同用户且与不同公平共享组相关联的暂挂作业也可以复用资源分配。

  • RELAX_JOB_DISPATCH_ORDER=ALLOC_REUSE_DURATION[45] SHARE[user group]

    已完成作业的资源分配可以从 0 复用到 45 分钟。 如果没有具有相同公共属性的暂挂作业,那么属于不同用户且与不同公平共享组相关联的暂挂作业也可以复用资源分配。

缺省值

尚未定义。

远程 MAX_PREEXEC_RETRY

定义尝试从远程集群执行作业的预执行命令的最大次数。 仅与多集群作业转发模型配合使用。

语法

REMOTE_MAX_PREEXEC_RETRY=整数

描述

此参数适用于执行集群。

有效值

0-INFINIT_INT

INFINIT_INT 在 lsf.h中定义。

缺省值

5

退出值

启用自动作业重新排队并设置 LSB_EXIT_REQUEUE 环境变量。

语法

REQUEUE_EXIT_VALUES=[exit_code...] [EXCLUDE(exit_code...)]

描述

使用空格来分隔多个退出代码。 应用程序级别的退出值将覆盖队列级别的值。 作业级别的退出值 (bsub -Q) 覆盖应用程序级别和队列级别的值。

exit_code 具有以下格式:
"[all] [~number ...] | [number ...]"

保留关键字 all 指定所有退出代码。 退出代码通常介于 0 和 255 之间。 使用波浪号 (~) 从列表中排除指定的退出代码。

将作业重新排队到队列的头。 未保存失败运行的输出,并且 LSF 不会通知用户。

将退出代码定义为 EXCLUDE (exit_code) 以启用互斥作业重新排队,从而确保作业不会在 samehost 上重新运行。 互斥作业重新排队不适用于并行作业。

对于转发到远程执行集群的多集群作业,使用 EXCLUDE 关键字在提交集群中指定的退出值将被视为非互斥值。

如果作业被信号终止,那么还可以对作业进行重新排队。

如果作业被信号杀死,那么退出值为 128 +signal_value。 128 和信号值的总和可以用作参数 REQUEUE_EXIT_VALUES 中的退出代码。

例如,如果您希望作业在被信号 9 (SIGKILL) 杀死时重新运行,那么退出值将为 128 + 9 = 137。 您可以配置以下重新排队退出值,以允许作业在被信号 9 杀死时重新排队:

REQUEUE_EXIT_VALUES=137

在 Windows 中,如果作业被信号杀死,那么退出值为 signal_value。 信号值可以用作参数 REQUEUE_EXIT_VALUES 中的退出代码。

例如,如果要在使用信号 7 (SIGKILL) 将作业终止后重新运行该作业,那么退出值将为 7。 您可以配置以下重新排队退出值,以允许作业在被信号 7 杀死后重新排队:

REQUEUE_EXIT_VALUES=7

您可以配置以下重排出口值,以允许作业在被终止后针对 Linux 和 Windows 进行重排:

REQUEUE_EXIT_VALUES=137 7

如果重新启动 mbatchd ,那么它不会记住作业从其中退出的先前主机具有互斥重新排队退出代码。 在这种情况下,可以将作业分派给先前已使用互斥退出代码退出该作业的主机。

应该为可中断的回填队列配置 REQUEUE_EXIT_VALUES (INTERRUPTIBLE_BACKFILL=seconds)。

示例

REQUEUE_EXIT_VALUES=30 排除 (20)

表示具有出口代码 30 的作业被重新排队,具有出口代码 20 的作业被重新排队,具有任何其他出口代码的作业被重新排队。

缺省值

尚未定义。 不重新排队作业。

可再运行

为此队列中的作业启用自动重新运行。

语法

RERUNNABLE=yes | no

描述

如果设置为 yes ,那么将启用自动作业重新运行 (重新启动)。

当 RERUNNABLE 设置为 no时,将禁用重新运行。 yesno 自变量不区分大小写。

对于多集群作业,将使用提交队列中的设置,而忽略执行队列中的设置。

区块作业的成员可重新运行。 如果执行主机变得不可用,那么将从作业块中除去可重新运行的块作业成员,并将其分派给其他执行主机。

缺省值

资源保留

为此队列的暂挂作业启用处理器保留和内存保留。

语法

RESOURCE_RESERVE=MAX_RESERVE_TIME[整数]

描述

指定作业可保留作业插槽和内存的分派轮次数 (MAX_RESERVE_TIME)。

覆盖 SLOT_RESERVE 参数。 如果在同一队列中同时定义了 RESOURCE_RESERVE 和 SLOT_RESERVE ,那么在重新配置集群时将显示错误,并且将忽略 SLOT_RESERVE。 如果在 lsb.modules 文件中配置了资源预留和并行批处理作业 (schmod_parallelschmod_reserve) 的 LSF 调度程序插件模块名称: schmod_parallel 名称 必须 位于 lsb.modules中的 schmod_reserve 之前,那么 RESOURCE_RESERVE 将启用并行作业的作业槽预留。

如果作业在 MAX_RESERVE_TIME 到期时没有累积足够的内存或作业槽来启动,那么它将释放其所有保留的作业槽或内存,以便其他暂挂作业可以运行。 保留时间到期后,作业无法为一个调度会话保留内存或插槽,因此其他作业有机会被分派。 在一次调度会话之后,作业可以在 MAX_RESERVE_TIME 指定的另一个时间段内再次保留可用内存和作业插槽。

如果在队列中配置了 BACKFILL ,并且在 bsub 上使用 -W 或在队列中使用 RUNLIMIT 指定了运行限制,那么回填作业可以使用队列中其他作业保留的累积内存,只要回填作业可以在具有保留的作业的预测开始时间之前完成。

与仅适用于并行作业的槽预留不同,内存预留和内存回填适用于顺序和并行作业。

示例

RESOURCE_RESERVE=MAX_RESERVE_TIME[5]

此示例指定作业最多具有 5 个分派轮,以保留足够的作业槽或内存 (缺省情况下为 5 分钟)。

缺省值

尚未定义。 不保留任何作业插槽或内存。

资源请求

指定用于确定合格主机的资源需求。

语法

RES_REQ=请求

描述

照常指定资源需求字符串。 资源需求字符串允许您以比使用负载阈值更灵活的方式指定条件。 资源需求字符串可以是简单的 (应用于整个作业) ,复合的 (应用于指定数量的槽) ,也可以包含替代资源 (2 之间的替代项或更简单的和/或复合)。 对于备用资源,如果找不到满足第一个资源需求的第一个资源,那么将尝试下一个资源需求,依此类推,直到满足该需求为止。

复合和备用资源需求遵循同一组规则,用于确定如何在作业,应用程序和队列级别之间合并资源需求。

为队列设置复合或备用资源需求时,将忽略该需求,除非它是指定的唯一资源需求 (在作业级别或应用程序级别未设置任何资源需求)。

如果为队列设置了简单资源需求,并且在作业级别或应用程序级别设置了复合资源需求,那么队列级别需求将像它们针对简单资源需求那样进行合并。 但是,队列中定义的任何基于作业的资源仅适用于合并的复合资源需求的第一个术语。

选择部分中的资源需求字符串必须符合更严格的语法。 严格的资源需求语法仅适用于 select 部分。 它不适用于其他资源需求部分 (orderrusagesamespancuaffinity)。 如果 rusage 部分包含不可使用的资源,那么 LSF 将拒绝资源需求字符串。

对于简单的资源需求,select必须满足来自所有级别的部分,并且将来自所有级别的 相同 部分组合在一起。 cuorderspan 部分在作业级别覆盖那些在应用程序级别覆盖那些在队列级别覆盖那些的部分。 将合并多个 rusage 定义,其中作业级别 rusage 优先于应用程序级别,而应用程序级别优先于队列级别。

简单资源需求rusage部分可以指定其他请求。 要执行此操作,请使用OR(||) 操作程序以分隔其他rusage字符串。 多个 -R 选项不能与多相 rusage 资源需求配合使用。

对于简单资源需求,作业级别的 亲缘关系 部分将覆盖应用程序级别,而应用程序级别的亲缘关系部分将覆盖队列级别。

注:
  • 复合和备用资源需求不支持在 rusage 部分或 cu 部分中使用 | | 运算符。
  • RES_REQ 耗材资源需求必须满足 lsb.queues中的参数 RESRSV_LIMIT 设置的任何限制,否则将忽略 RES_REQ
  • lsb.queues 中为可使用资源设置 RES_REQRESRSV_LIMIT 时,队列级别 RES_REQ 不再充当合并的 RES_REQ 的硬限制rusage来自作业和应用程序级别的值。 在这种情况下,必须仅满足 RESRSV_LIMIT 设置的限制,并且队列级别 RES_REQ 充当缺省值。
例如:
队列级别 RES_REQ:
RES_REQ=rusage[mem=200:lic=1] ...
对于作业提交:
bsub -R'rusage[mem=100]' ...
作业的结果需求是
rusage[mem=100:lic=1]

其中,mem=100由作业覆盖指定mem=200由队列指定。 但是,lic=1由于作业未指定该队列,因此将保留该队列。

队列级别 RES_REQ 阈值:
RES_REQ = rusage[bwidth =2:threshold=5] ...
对于作业提交:
bsub -R "rusage[bwidth =1:threshold=6]" ...

作业的结果需求是

rusage[bwidth =1:threshold=6]
定义了衰减和持续时间的队列级别 RES_REQ:
RES_REQ=rusage[mem=200:duration=20:decay=1] ...
对于没有衰减或持续时间的作业提交:
bsub -R'rusage[mem=100]' ...
作业的结果需求为:
rusage[mem=100:duration=20:decay=1]

队列级别持续时间和衰减与作业级别规范合并,以及mem=100用于作业覆盖mem=200由队列指定。 但是,duration=20decay=1将保留来自队列的值,因为作业未指定这些值。

具有资源预留方法的队列级别 RES_REQ:
RES_REQ=rusage[mem=200/host:duration=20:decay=1] ...
对于没有衰减或持续时间的作业提交:
bsub -R'rusage[mem=100/task]' ...
作业的结果需求为:
rusage[mem=100/task:duration=20:decay=1]
具有多阶段作业级别 rusage 的队列级别 RES_REQ:
RES_REQ=rusage[mem=200:duration=20:decay=1] ...
对于没有衰减或持续时间的作业提交:
bsub -R'rusage[mem=(300 200 100):duration=(10 10 10)]' ...
作业的结果需求为:
rusage[mem=(300 200 100):duration=(10 10 10)]
作业提交中的多相 rusage 值将覆盖队列指定的单相。
  • 如果在 lsb.queues 中定义了 RESRSV_LIMIT ,并且最大内存限制为 300 MB 或更大,那么将接受此作业。
  • 如果在 lsb.queues 中定义了 RESRSV_LIMIT ,并且最大内存限制小于 300 MB ,那么将拒绝此作业。
  • 如果 lsb.queues 中未定义 RESRSV_LIMIT ,并且队列级别 RES_REQ 值 200 MB 充当上限,那么将拒绝此作业。
队列级别多阶段 rusage RES_REQ:
RES_REQ=rusage[mem=(350 200):duration=(20):decay=(1)] ...
对于没有衰减或持续时间的单阶段作业提交:
bsub -q q_name -R'rusage[mem=100:swap=150]' ...
作业的结果需求为:
rusage[mem=100:swap=150]

作业级别的 rusage 字符串将覆盖队列级别的多相 rusage 字符串。

order在作业级别定义的部分将覆盖在应用程序级别或队列级别指定的任何资源需求。 该order在应用程序级别定义的部分将覆盖在队列级别指定的任何资源需求。 The defaultorder字符串为r15s:pg.

如果在队列级别定义了 RES_REQ ,并且未定义任何装入阈值,那么 bjobs不会显示每个单独装入索引的暂挂原因。

span在队列级别定义的部分将被忽略。span部分也在作业级别或应用程序概要文件中定义。

注: 在应用程序概要文件或 bsub -R 资源需求字符串中定义范围 [hosts=-1] ,以覆盖队列中的范围部分设置。

缺省值

选择 [type == local] order [r15s:pg]。 如果定义了此参数并且指定了主机模型或布尔资源,那么缺省类型为 any

RESRSV_LIMIT

设置 RES_REQ 资源的允许值范围。

语法

RESRSV_LIMIT=[res1= {min1,} max1] [res2= {min2,} max2] ...

其中 res 是可使用的资源名称, min 是可选的最小值, max 是允许的最大值。 maxmin 都必须是介于 0 和 2147483647 之间的浮点数,并且 min 不能大于 max

描述

队列级别 RES_REQ rusage 值 (在 lsb.queues中设置) 必须在 RESRSV_LIMIT设置的范围内,否则将忽略队列级别 RES_REQ 。 已合并 RES_REQrusage作业和应用程序级别的值必须在 RESRSV_LIMIT范围内,否则作业将被拒绝。

使用 bmod -R 对正在运行的作业的 rusage 值所作的更改不能超过 RESRSV_LIMIT的最大值,但可以低于最小值。

lsb.queues 中为可使用资源设置 RES_REQRESRSV_LIMIT 时,队列级别 RES_REQ 不再充当合并的 RES_REQ 的硬限制rusage来自作业和应用程序级别的值。 在这种情况下,必须仅满足 RESRSV_LIMIT 设置的限制,并且队列级别 RES_REQ 充当缺省值。

对于多集群,作业必须满足为提交集群中的发送作业队列设置的 RESRSV_LIMIT 范围。 转发作业后,还会根据针对执行集群中接收作业队列设置的 RESRSV_LIMIT 范围来检查资源需求。

注:

只能在 RESRSV_LIMIT中设置可使用的资源限制。 将忽略其他资源。

缺省值

尚未定义。

如果定义了 max ,但未定义可选的 min ,那么 min 的缺省值为 0。

恢复第二

指定 LSF 在此队列中自动恢复已暂挂 (SSUSP) 作业的条件。

语法

RESUME_COND=请求

使用select用于指定装入阈值的资源需求字符串的部分。 将忽略所有其他部分。

描述

如果主机上的负载满足指定的条件,那么 LSF 会自动恢复此队列中的已暂挂 (SSUSP) 作业。 这些条件仅支持负载指数和静态布尔资源。

如果未定义 RESUME_COND ,那么将使用 loadSched 阈值来控制作业的恢复。 如果定义了 RESUME_COND ,那么在恢复作业时将忽略 loadSched 阈值。

缺省值

尚未定义。 loadSched 阈值用于控制作业的恢复。

运行作业因子

作业槽权重因子。 仅用于公平共享调度。

语法

RUN_JOB_FACTOR=数字

描述

在计算用户的动态共享优先级时,此因素确定用户保留和正在使用的作业槽数的相对重要性。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

缺省值

尚未定义。

运行时间 _TIME_DECAY

以与 HIST_HOURS 为累积 CPU 时间和历史运行时间设置的衰减相同的速率对运行时间启用衰减。 仅用于公平共享调度。

语法

RUN_TIME_DECAY=Y | y | N | n

描述

在计算用户的动态共享优先级时,此因素确定是否已衰减运行时间。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

限制

在作业运行期间运行 badmin reconfig 或重新启动 mbatchd 会导致重新计算衰减的运行时间。

当使用运行时衰变的暂挂作业恢复时,衰变时间基于耗用时间。

缺省值

未定义

运行时间因素

指定运行时加权因子。 仅用于公平共享调度。

语法

RUN_TIME_FACTOR=数字

描述

在计算用户的动态共享优先级时,此因素确定用户运行作业的总运行时间的相对重要性。

如果未定义,那么将使用相同名称的 lsb.params 参数中的集群范围值。

缺省值

尚未定义。

运行窗口

指定允许队列中的作业运行的时间段。

语法

RUN_WINDOW=时间窗口...

描述

当窗口关闭时, LSF 将暂挂在队列中运行的作业,并停止从队列中分派作业。 当窗口重新打开时, LSF 将恢复暂挂的作业并开始分派其他作业。

缺省值

尚未定义。 队列始终处于活动状态。

运行限制

指定最大运行限制和 (可选) 缺省运行限制。 主机或主机模型的名称指定要使用的运行时规范化主机。

语法

RUNLIMIT=[ default_limit] maximum_limit

其中 default_limitmaximum_limit 为:

[hour:]分钟[/host_name |/host_model]

描述

缺省情况下,处于运行状态 (但未处于执行前或执行后) 的作业超过指定的最大运行限制的时间将被 LSF 终止。 您可以选择提供自己的终止作业操作以覆盖此缺省值。

当达到作业级别运行限制时,将终止使用小于最大运行限制的作业级别运行限制 (bsub -W) 提交的作业。 使用大于最大运行限制的运行限制提交的作业将被队列拒绝。

如果指定了缺省运行限制,那么当达到缺省运行限制时,将终止提交到队列的没有作业级别运行限制的作业。 缺省运行限制用于并行作业的回填调度。
注:

如果要为调度目的提供估算的运行时间,而不终止超出估算值的作业,请在应用程序概要文件中定义 RUNTIME 参数而不是运行限制 (请参阅 lsb.applications 以获取详细信息)。

如果仅指定一个限制,那么它是最大或硬运行限制。 如果指定两个限制,那么第一个是缺省或软运行限制,第二个是最大运行限制。

运行限制的格式为 [hour:] 分钟。 分钟可以指定为大于 59 的数字。 例如,可以将三个半小时指定为 3:30 或 210。

您指定的运行限制是规范化运行时。 这样做是为了使作业执行大致相同的处理量,即使将其发送到具有更快或更慢 CPU 的主机也是如此。 每当给定规范化运行时间时,执行主机上的实际时间都是指定时间乘以规范化主机的 CPU 因子,然后除以执行主机的 CPU 因子。

如果在 lsb.params中定义了 ABS_RUNLIMIT=Y ,那么主机 CPU 因子不会规范化运行时限制。 绝对挂钟运行时间用于所有提交到已配置运行限制的队列的作业。

(可选) 您可以提供在 LSF 中定义的主机名或主机模型名称。 必须插入 "/' 在运行限制与主机名或模型名称之间。 (请参阅 lsinfo(1) 以获取主机模型信息。)

如果未提供主机或主机模型,那么 LSF 将使用在队列级别定义的缺省运行时规范化主机 ( lsb.queues中的 DEFAULT_HOST_SPEC) (如果已配置); 否则, LSF 将使用在集群级别定义的缺省 CPU 时间规范化主机 ( lsb.params中的 DEFAULT_HOST_SPEC); 否则,将使用 CPU 因子最大的主机 (集群中的最快主机)。

对于多集群作业,如果未定义其他 CPU 时间规范化主机,并且有关提交主机的信息不可用,那么 LSF 将使用具有最大 CPU 因子 (集群中最快的主机) 的主机。

如果 RUNLIMIT 大于 30 分钟,那么不会对提交到区块作业队列的作业进行分块。

使用 INTERRUPTIBLE_BACKFILL 配置的队列需要 RUNLIMIT。

缺省值

无限制

SLA_保证忽略

仅适用于 SLA 保证。 允许队列中的作业访问所有有保证的资源。

语法

SLA_GUARANTEES_IGNORE=Y| y | N | n

描述

SLA_GUARANTEES_IGNORE=Y 允许队列中的作业访问所有保证的资源。 因此,有些担保可能无法兑现。 如果队列未设置此参数,那么此队列中的作业无法触发 SLA 作业的抢占。 如果 SLA 作业已暂挂 (例如,通过 bstop) ,那么没有参数集的队列中的作业仍可以使用暂挂作业释放的槽。

注: 使用 SLA_IGNORE=Y 会使保证资源的目的失败。 这仅应用于低流量队列。

缺省值

未定义 (N)。 在分派作业时,队列必须遵守资源保证。

槽位重置

为队列启用处理器预留,并指定预留时间。

语法

SLOT_RESERVE=MAX_RESERVE_TIME[整数]

描述

指定关键字 MAX_RESERVE_TIME ,并在方括号中指定作业可预留作业槽的 MBD_SLEEP_TIME 周期数。 MBD_SLEEP_TIME 在 lsb.params中定义; 缺省值为 60 秒。

如果作业未累积足够的作业槽以在预留到期之前启动,那么它将释放其所有预留的作业槽,以便其他作业可以运行。 然后,该作业无法为一个调度会话预留插槽,因此其他作业有机会被分派。 在一次调度会话之后,作业可以在 SLOT_RESERVE 指定的另一个时间段内再次保留作业槽。

SLOT_RESERVE 被 RESOURCE_RESERVE 参数覆盖。

如果在同一队列中定义了 RESOURCE_RESERVE 和 SLOT_RESERVE ,那么将启用作业槽预留和内存预留,并在重新配置集群时显示错误。 将忽略 SLOT_RESERVE。

如果在 lsb.modules 文件中配置了资源预留和并行批处理作业 (schmod_parallelschmod_reserve) 的 LSF 调度程序插件模块名称: schmod_parallel 名称 必须 位于 lsb.modules中的 schmod_reserve 之前,那么 RESOURCE_RESERVE 将启用并行作业的作业槽预留。

如果在队列中配置了 BACKFILL ,并且在作业级别 (bsub -W) ,应用程序级别 ( lsb.applications中的 RUNLIMIT) 或队列级别 ( lsb.queues中的 RUNLIMIT) 指定了运行限制,或者如果在应用程序级别 ( lsb.applications中的 RUNTIME) 指定了估算运行时间,那么回填并行作业可以使用其他作业保留的作业槽,只要回填作业可以在保留作业的预测开始时间之前完成。

与同时适用于顺序和并行作业的内存保留不同,插槽保留仅适用于并行作业。

示例

SLOT_RESERVE=MAX_RESERVE_TIME[5]

此示例指定并行作业最多具有 5 个 MBD_SLEEP_TIME 周期 (缺省情况下为 5 分钟) ,以保留足够的作业槽来启动。

缺省值

尚未定义。 未保留任何作业槽。

SNDJOBS_TO

定义 IBM Spectrum LSF 多集群功能的发送作业队列。

语法

SNDJOBS_TO=[queue@]cluster_name[+preference] ...

描述

queue_name@cluster_name[+preference]格式指定以空格分隔的远程队列名称。

如果 lsb.queues HOSTS 指定远程 (借用) 资源,那么将忽略此参数。

队列首选项是在提交集群的 SNDJOBS_TO 中针对接收转发作业的每个相应执行集群队列的队列级别定义的。

您可以在执行集群中启用 LSF 数据管理器数据传输队列作为远程发送作业队列。

如果在执行集群中的数据传输队列中使用 SNDJOBS_TO 参数指定远程队列,那么 FILE_TRANSFER_CMD 参数的路径必须存在于提交集群中。 此外,必须将提交集群中的相应远程队列配置为接收数据传输作业 (即,提交集群中远程队列的 RCVJOBS_FROM 参数值包含此执行集群,或者设置为 allclusters)。 这将确保提交集群可以将数据文件推送回执行集群。

示例

SNDJOBS_TO=queue2@cluster2+1 queue3@cluster2+2

LSF 数据管理器的示例

执行集群 clusterE 上的以下配置将 LSF 数据管理器传输队列 data_transfer 设置为到提交集群 clusterS中的 receive_q 队列的远程发送作业队列:

Begin Queue
QUEUE_NAME=data_transfer
DATA_TRANSFER=Y
SNDJOBS_TO=receive_q@clusterS
HOSTS=hostS1 hostS2 # Transfer nodes in the execution cluster
End Queue

您还必须为提交集群 clusterS 中的 receive_q 队列定义 RCVJOBS_FROM 参数,以接受来自 (并将数据推送到) 执行集群 clusterE的作业,如 clusterS 集群中的以下配置中所示:

Begin Queue
QUEUE_NAME=receive_q
RCVJOBS_FROM=clusterE
PRIORITY=40
HOSTS=hostS1 hostS2 # Transfer nodes in the submission cluster
RES_REQ=select[type==any]
End Queue

或者,您可以定义 RCVJOBS_FROM=allclusters 以接受来自所有集群 (包括执行集群) 的作业。

堆叠上限

指定此队列中所有作业进程的每个进程堆栈段大小限制。

语法

STACKLIMIT=整数

描述

指定此参数以对属于此队列中的作业的所有进程施加每个进程的硬堆栈段大小限制 (以 KB 为单位) (请参阅 getrlimit(2))。

缺省值

无限制

停止秒数

指定 LSF 自动暂挂此队列中正在运行的作业的条件。

语法

STOP_COND=请求

使用select用于指定装入阈值的资源需求字符串的部分。 将忽略所有其他部分。

描述

如果主机上的负载满足指定的条件,那么 LSF 会自动暂挂此队列中正在运行的作业。 这些条件仅支持负载指数和静态布尔资源。
  • 如果机器以交互方式空闲,那么 LSF 不会暂挂在主机上运行的唯一作业 (it > 0).
  • LSF 不会暂挂强制作业 (brun -f)。
  • 如果机器以交互方式空闲,那么 LSF 不会因为调页速率而暂挂作业。

如果在队列中指定了 STOP_COND 并且没有装入阈值,那么 bjobs不会显示每个单独装入索引的暂挂原因。

示例

STOP_COND= select[((!cs && it < 5) || (cs && mem < 15 && swp < 50))]

在此示例中,假定 "cs" 是指示主机是计算机服务器的布尔资源。 在计算机服务器上运行的作业的停止条件基于交换内存的可用性。 在其他类型的主机上运行的作业的停止条件基于空闲时间。

成功退出值

指定 LSF 用于确定作业是否成功完成的退出值。

语法

SUCCESS_EXIT_VALUES=[退出代码...]

描述

使用 lsb.applications 中的 SUCCESS_EXIT_VALUES 定义的应用程序级别成功退出值将覆盖 lsb.queues中定义的配置。 使用 LSB_SUCCESS_EXIT_VALUES 环境变量指定的任务级成功退出值覆盖 lsb.queueslsb.applications 中的配置。

使用 SUCCESS_EXIT_VALUES 将作业提交到使用非零值成功退出的特定队列,以便 LSF 不会将非零退出代码解释为作业失败。

如果在 SUCCESS_EXIT_VALUESREQUEUE_EXIT_VALUES 中定义了相同的退出代码,任何带有该退出代码的作业都会被重新排队,而不会被标记为 DONE,因为 sbatchd 会在成功退出值之前处理 requeue 退出值。

在多集群作业转发方式下, LSF 使用远程集群中的 SUCCESS_EXIT_VALUES

在多集群资源租赁环境中, LSF 使用使用者集群中的 SUCCESS_EXIT_VALUES

exit_code 应该是介于 0 与 255 之间的值。 使用空格来分隔多个退出代码。

您对 SUCCESS_EXIT_VALUES 所作的任何更改都不会影响正在运行的作业。 只有暂挂作业才会使用新的 SUCCESS_EXIT_VALUES 定义,即使您运行 badmin reconfigmbatchd restart 来应用更改也是如此。

缺省值

尚未定义。

隔板限制

指定此队列中作业的总虚拟内存限制量 (以 KB 为单位)。

语法

SWAPLIMIT=整数

描述

无论作业可能包含多少个进程,此限制都适用于整个作业。

当作业超过其 SWAPLIMIT 或 PROCESSLIMIT 时所执行的操作是按顺序发送 SIGQUIT , SIGINT , SIGTERM 和 SIGKILL。 对于 CPULIMIT , SIGINT , SIGTERM 和 SIGKILL 之前发送 SIGXCPU。

缺省值

无限制

任务限制

指定可以分配给作业的最大任务数。 对于并行作业,这是可以分配给作业的最大任务数。

语法

TASKLIMIT=[minimum_limit [default_limit]] maximum_limit

描述

注: 从 LSF 9.1.3起, TASKLIMIT 将替换 PROCLIMIT

队列级别 TASKLIMIT 的优先级高于应用程序级别 TASKLIMIT 和作业级别 TASKLIMIT。 应用程序级别 TASKLIMIT 的优先级高于作业级别 TASKLIMIT。 作业级别限制必须在应用程序概要文件和队列的最大和最小限制内。

注: 如果您还在定义了 TASKLIMIT的同一队列中定义了 JOB_SIZE_LIST ,那么将忽略 TASKLIMIT 参数。

(可选) 指定作业任务的最小数目和缺省数目。

所有限制都必须是大于或等于 1 且满足以下关系的正数:

1 <= 最小 <= 缺省值 <= 最大

如果队列中的 RES_REQ 定义为块大小为 (span[block=value])的复合资源需求,那么 TASKLIMIT 的缺省值应该是块的倍数。

例如,将接受此配置:

队列级别 RES_REQ="1*{type==any } + {type==local span[block=4]}"

TASKLIMIT = 5 9 13

例如,将不接受此配置。 执行 badmin reconfig时将显示错误消息:

队列级别 RES_REQ="1*{type==any } + {type==local span[block=4]}"

TASKCLIMIT = 4 10 12

在多集群作业转发模型中,本地集群在转发作业之前会在远程集群上考虑接收队列的 TASKLIMIT 。 如果远程集群中接收队列的 TASKLIMIT 定义无法满足远程队列的作业任务需求,那么不会将该作业转发到集群中的该远程队列。

缺省值

无限制,缺省任务数为 1

何时终止

指定队列在何种情况下调用 TERMINATE 操作而不是 SUSPEND 操作。

语法

TERMINATE_WHEN=[LOAD] [PREEMPT] [WINDOW]

描述

配置队列以在指定的情况下调用 TERMINATE 操作而不是 SUSPEND 操作:
  • LOAD: 当负载超过暂挂阈值时终止作业。
  • PREEMPT: 终止正在抢占的作业。
  • WINDOW: 在运行窗口关闭时终止作业。

如果将 TERMINATE_WHEN 作业控制操作应用于区块作业,那么 sbatchd 会终止正在运行的区块作业元素,并将其余等待元素置于暂挂状态,以便稍后重新调度。

示例

将 TERMINATE_WHEN 设置为 WINDOW 以定义在运行窗口关闭时终止作业的夜间队列:
Begin Queue
QUEUE_NAME           = night
RUN_WINDOW     = 20:00-08:00 EDT
TERMINATE_WHEN = WINDOW
JOB_CONTROLS   = TERMINATE[kill -KILL $LS_JOBPGIDS; mail - s "job $LSB_JOBID 
                 killed by queue run window" $USER < /dev/null]
End Queue

指定时区是可选的。 如果未指定时区,那么 LSF 将使用本地系统时区。

线程限制

限制可作为作业一部分的并发线程数。 超过限制会导致作业终止。

语法

THREADLIMIT=[ default_limit] maximum_limit

描述

系统按顺序向属于作业的所有进程发送以下信号 :SIGINT , SIGTERM 和 SIGKILL。

缺省情况下,如果指定了缺省线程限制,那么当达到缺省线程限制时,将终止提交到队列的没有作业级别线程限制的作业。

如果仅指定一个限制,那么它是最大或硬线程限制。 如果指定两个限制,那么第一个是缺省或软线程限制,第二个是最大线程限制。

缺省值和最大限制都必须是正整数。 缺省限制必须小于最大限制。 如果缺省限制大于最大限制,那么将忽略该缺省限制。

示例

THREADLIMIT=6

未指定缺省线程限制。 值 6 是缺省值和最大线程限制。

THREADLIMIT=6 8

第一个值 (6) 是缺省线程限制。 第二个值 (8) 是最大线程限制。

缺省值

无限制

每个任务的线程限制

语法

THREADLIMIT=线程数

描述

作业的线程限制值用于限制作业的并发线程数,该值在 THREADLIMIT 参数中定义。 超过限制会导致作业终止。 限值必须是正整数。

使用 THREADLIMIT_PER_TASK 参数计算作业的线程限制值,可以根据作业的任务数使用更精细的线程限制。 指定后, LSF 会通过 THREADLIMIT_PER_TASK 值乘以作业的任务数来计算作业的线程限制。 这样,作业的线程限制就不是整个作业队列的固定值。

THREADLIMIT_PER_TASK 参数仅用于计算任务的线程限制,不会限制每个任务的线程数。

THREADLIMIT_PER_TASK 参数不能与 THREADLIMIT 参数一起配置到同一队列中。 如果在同一队列中指定这两个值,则只使用 THREADLIMIT_PER_TASK 值,而忽略 THREADLIMIT 值。

使用 THREADLIMIT_PER_TASK 参数时,请注意以下线程限值规则:
  • 工作和应用程序级别 THREADLIMIT 值不能超过 THREADLIMIT_PER_TASK 值乘以工作任务数。
  • 应用级 THREADLIMIT_PER_TASK 值不能超过队列级 THREADLIMIT_PER_TASK 值。
  • 应用级 THREADLIMIT_PER_TASK 值不能超过队列级 THREADLIMIT 值。
提示: 对于可调整大小的任务,当任务运行时, LSF 使用当前任务数乘以 THREADLIMIT_PER_TASK 值。 对于已提交但尚未运行的作业, LSF 会使用 MAX 值乘以 THREADLIMIT_PER_TASK 值来计算作业的线程限制值,并合并作业、应用程序和队列级别的线程限制。

示例

THREADLIMIT_PER_TASK=10

缺省值

未定义

UJOB_LIMIT

指定队列的每个用户作业插槽限制。

语法

UJOB_LIMIT=整数

描述

此参数指定每个用户可以在此队列中使用的最大作业槽数。

UJOB_LIMIT 必须在 TASKLIMITbsub -n (如果使用) 设置的范围内或大于该范围,否则将拒绝作业。

缺省值

无限制

用户 PAM_CREDS

对此队列应用 PAM 限制。

语法

USE_PAM_CREDS=y | n | [limits] [session]

描述

USE_PAM_CREDS 仅在 Linux 系统上受支持。 如果执行主机未配置 PAM ,并且已启用此参数,那么作业将失败。

如果 USE_PAM_CREDS 设置为 ylimits,那么当使用 PAM 将其作业分派到 Linux 主机时, LSF 可以将 PAM 限制应用于队列。 LSF 作业未在 PAM 会话中运行。

如果 USE_PAM_CREDS 设置为 session:
  • 如果在第一个执行主机上启动了作业,那么作业 RES 将为用户打开 PAM 会话,并在该会话中派生 RES 进程。 此 RES 进程将成为用户的作业。
  • 如果任务由 blaunch 命令或 API 启动,那么任务 RES 将为用户打开 PAM 会话,并在该会话中执行 RES 进程。 此 RES 进程将成为用户的任务。

limits 关键字可与 session 关键字一起定义。

如果 LSF 限制比 PAM 限制更严格,那么将使用 LSF 限制,否则将使用 PAM 限制。 PAM 限制是 limits.conf 文件中定义的系统资源限制。

对于并行作业,仅当定义了 USE_PAM_CREDS=yUSE_PAM_CREDS=limits 时,才会在第一个执行主机上启动 PAM 会话。 如果定义了 USE_PAM_CREDS=sessionUSE_PAM_CREDS=limits session ,那么将对所有任务启动 PAM 会话。

注: 配置要与 LSF配合使用的 Linux PAM 时,必须配置 Linux PAM ,这样它不会要求用户输入其密码,因为作业通常不是交互式的。
根据 USE_PAM_CREDS 参数设置, LSF 假定已创建以下 Linux PAM 服务:
  • 如果 USE_PAM_CREDS 设置为 ylimits,那么 LSF 将假定已创建 Linux PAM 服务 "lsf"。
  • 如果 USE_PAM_CREDS 设置为 session,那么 LSF 将假定已创建 Linux PAM 服务 "lsf-<clustername>"。
  • 如果 USE_PAM_CREDS 设置为 limits session,那么 LSF 假定已创建 Linux PAM 服务 "lsf" 和 "lsf-<clustername>"。
还假定 "lsf" 服务与 /etc/security/limits.conf 文件结合使用。

作业 sbatchd 守护程序检查 lsf 服务,作业或任务 RES 守护程序检查 lsf-<clustername> 服务。

覆盖 MEMLIMIT_TYPE=Process

LSB_JOB_CPULIMIT=y覆盖 (仅针对 CPU 限制)。

LSB_JOB_MEMLIMIT=y覆盖 (仅适用于内存限制)。

lsb.applications 中的 USE_PAM_CREDS 值将覆盖 lsb.queues中的 USE_PAM_CREDS 值。

缺省值

n. USE_PAM_CREDS 已禁用。

用户

指定可以向队列提交作业的用户名或用户组的空格分隔列表。

语法

USERS=all [~user_name...] [~user_group...] | [user_name...] [user_group [~user_group...]...]..

描述

LSF 集群管理员将自动包含在用户列表中。 LSF 集群管理员可以将作业提交到此队列,或者将 (bswitch) 任何用户的作业切换到此队列。

如果指定了用户组,那么组中的每个用户都可以将作业提交到此队列。 如果此队列中还定义了 FAIRSHARE ,那么只有由这两个参数定义的用户才能提交作业,因此 LSF 管理员无法使用此队列 (如果它们未包含在共享分配中)。

用户名必须是有效的登录名。 要指定 Windows 用户账户,请使用大写字母包含域名 (域名\用户名)。

用户组名可以是 LSF 用户组,也可以是 UNIX 和 Windows 用户组。 要指定 Windows 用户组,请使用大写字母包含域名 (域名\用户组)。

使用关键字 all 来指定集群中的所有用户或用户组。

使用 not 运算符 (~) 从 all 规范或用户组中排除用户。 如果您有大量用户,但只想从队列定义中排除一些用户或组,那么这很有用。

非运算符 (~) 只能与 all 关键字配合使用或用于从用户组中排除用户。

警告:
非运算符 (~) 不会从队列定义中排除 LSF 管理员。

缺省值

all (所有用户都可以向队列提交作业)

示例

  • USERS=user1 user2
  • USERS=all ~user1 ~user2
  • USERS=all ~ugroup1
  • USERS=groupA ~user3 ~user4

基于时间的自动配置

变量配置用于根据时间窗口自动更改 LSF 配置。

您可以使用 if-else 构造和时间表达式在 lsb.queues 中定义自动配置更改。 更改文件后,使用 badmin reconfig 命令重新配置集群。

LSF 根据 mbatchd 开始时间每 10 分钟对表达式求值一次。 当表达式求值为 true 时, LSF 会根据关联的配置语句动态更改配置。 在不重新启动 mbatchd的情况下实时完成重新配置,从而提供持续的系统可用性。

示例

Begin Queue
... 
#if time(8:30-18:30 EDT)   
INTERACTIVE  = ONLY  # interactive only during day shift #endif
#endif
... 
End Queue

指定时区是可选的。 如果未指定时区,那么 LSF 将使用本地系统时区。 LSF 支持所有标准时区缩写。