lsb.applications
lsb.applications 文件定义应用程序概要文件。 使用应用程序概要文件来定义相同类型的作业的公共参数,包括应用程序的执行需求,它们需要的资源以及它们应该如何运行和管理。
此文件是可选的。 使用 lsb.params 文件中的 DEFAULT_APPLICATION 参数为所有作业指定缺省应用程序概要文件。 LSF 不会自动分配缺省应用程序概要文件。
缺省情况下,此文件安装在 LSB_CONFDIR/cluster_name/configdir 目录中。
更改 lsb.applications 配置
更改 lsb.applications 文件后,运行 badmin reconfig 命令以重新配置 mbatchd 守护程序。 配置更改仅适用于暂挂作业。 正在运行的作业不受影响。
lsb.applications 结构
每个应用程序概要文件定义都以行 Begin Application 开头,以行 End Application结尾。 必须指定应用程序名称。 所有其他参数都是可选的。
示例
Begin Application
NAME = catia
DESCRIPTION = CATIA V5
CPULIMIT = 24:0/hostA # 24 hours of host hostA
FILELIMIT = 20000
DATALIMIT = 20000 # jobs data segment limit
CORELIMIT = 20000
TASKLIMIT = 5 # job processor limit
REQUEUE_EXIT_VALUES = 55 34 78
End Application请参阅 lsb.applications 模板文件以获取其他应用程序概要文件示例。
#include
语法
#INCLUDE "path-to-file"
描述
将配置设置从另一个文件插入到当前位置。 使用此伪指令,通过向特定用户或用户组提供对所包含文件的写访问权,将部分配置的控制权专用于其他用户或用户组,并确保不同集群中配置文件设置的一致性 (如果您使用的是 LSF 多集群功能)。
更多信息,请参阅共享配置文件内容。
可以在本地配置文件中的任何位置插入 #INCLUDE 。
缺省值
尚未定义。
ABS运行限制
语法
ABS_RUNLIMIT=y | Y
描述
- 由 bsub 的 -W 或 -We 选项指定的运行时间限制或运行时间估计值
- lsb.queues 中的 RUNLIMIT 队列级别参数
- lsb.applications 中的 RUNLIMIT 应用程序级别参数
- ESTIMATED_ lsb.applications 中的 RUNTIME 参数
运行时估算值和限制未按主机 CPU 因子进行规范化。
缺省值
尚未定义。 运行限制和运行时估算已规范化。
绑定作业
BIND_JOB 指定在单个主机上运行的顺序和并行作业进程的处理器绑定策略。 在支持此功能的 Linux 执行主机上,作业进程硬绑定到所选处理器。
语法
BIND_JOB=NONE | BALANCE | PACK | ANY | USER | USER_CPU_LIST
描述
如果在 lsb.applications的应用程序概要文件中未使用 BIND_JOB 参数配置处理器绑定功能,那么 LSF_BIND_JOB 配置设置 lsf.conf 将生效。 处理器绑定的应用程序概要文件配置将覆盖 lsf.conf 配置。
- BIND_JOB=Y 解释为 BIND_JOB=BALANCE
- BIND_JOB=N 解释为 BIND_JOB=NONE
支持的平台
具有内核版本 2.6 或更高版本的 Linux
缺省值
尚未定义。 已禁用处理器绑定。
cgroup_cpu_shares_factor
语法
CGROUP_CPU_SHARES_FACTOR=整数百分比描述
从 Fix Pack 15 开始,管理员可以使用 CGROUP_CPU_SHARES_FACTOR 参数为 cpu.shares 和 cpu.weight Linux cgroup (v1 或 v2) 接口指定默认值的百分比,这样,CPU 密集度较低的作业就可以获得其他作业的 CPU 份额或权重的一部分,而不是获得与所有其他运行作业相同的 CPU 份额或权重。 如果配置, cpu.shares 和 cpu.weight 的初始值将按此 CGROUP_CPU_SHARES_FACTOR 值缩放。 CGROUP_CPU_SHARES_FACTOR 值可在应用程序配置文件和队列级别指定。 在多级定义时, LSF 使用最小值。 要使用 参数 CGROUP_CPU_SHARES_FACTOR ,请确保在 文件 lsf.conf 中将 LSB_CGROUP_CPU_SHARES_OLD_DEFAULT 参数设置为 N 或 n,或保持未定义(默认值)。
请指定一个小于100的正整数,因为该值代表一个百分比。 例如, CGROUP_CPU_SHARES_FACTOR=25 表示CPU共享因子占 cpu.shares 和 cpu.weight 值的25%。
缺省值
未定义
CHKPNT_DIR
语法
CHKPNT_DIR=检查点目录
描述
指定应用程序的自动检查点的检查点目录。 要对应用程序概要文件启用自动检查点,管理员必须在应用程序概要文件的配置中指定检查点目录。
如果在应用程序概要文件中设置了 CHKPNT_PERIOD , CHKPNT_INITPERIOD 或 CHKPNT_METHOD ,但未设置 CHKPNT_DIR ,那么将发出警告消息并忽略这些设置。
检查点目录是创建检查点文件的目录。 指定相对于作业的当前工作目录的绝对路径或路径。 请勿在目录路径中使用环境变量。
- 将合并应用程序级别和作业级别参数。 如果在作业级别和应用程序概要文件中都定义了相同的参数,那么作业级别值将覆盖应用程序概要文件值。
- 作业级别和应用程序概要文件设置的合并结果将覆盖队列级别配置。
要启用具有 LSF 多集群功能的作业的检查点,请在提交集群和执行集群的应用程序概要文件 (CHKPNT_DIR , CHKPNNT_PERIOD , CHKPNT_INITPERIOD , CHKPNT_METHOD in lsb.applications) 中定义检查点目录。 LSF 使用执行集群中指定的目录。
如果作业在租赁的主机上运行,那么不支持检查点。
对于 UNIX 和 Linux,检查点目录的文件路径最多可以包含 4000 个字符,对于 Windows ,最多可以包含 255 个字符,包括目录和文件名。
缺省值
未定义
chkpnt_initperiod
语法
CHKPNT_INITPERIOD=初始化检查点周期
描述
指定初始检查点时间段 (以分钟计)。 必须在应用程序概要文件中设置 CHKPNT_DIR 才能使此参数生效。 由 CHKPNT_PERIOD 指定的定期检查点直到初始时间段结束后才会发生。
指定正整数。
作业级别命令行值将覆盖应用程序概要文件配置。
如果管理员指定初始检查点时间段并且未指定检查点时间段 (CHKPNT_PERIOD) ,那么作业将仅检查点一次。
如果指定了作业的初始检查点时间段,并且您运行 bchkpnt 以在初始检查点时间段之前的某个时间对作业执行检查点操作,那么 bchkpnt不会更改初始检查点时间段。 第一个自动检查点仍在指定的分钟数之后发生。
缺省值
未定义
CHKPNT_PERIOD
语法
CHKPNT_PERIOD=周期
描述
指定应用程序的检查点时间段 (以分钟计)。 必须在应用程序概要文件中设置 CHKPNT_DIR 才能使此参数生效。 正在运行的作业会在每个检查点时间段自动检查点。
指定正整数。
作业级别命令行值将覆盖应用程序概要文件和队列级别配置。 应用程序概要文件级别配置将覆盖队列级别配置。
缺省值
未定义
CHKPNT_METHOD
语法
CHKPNT_METHOD=方法
描述
指定检查点方法。 必须在应用程序概要文件中设置 CHKPNT_DIR 才能使此参数生效。 作业级别命令行值将覆盖应用程序概要文件配置。
缺省值
未定义
容器
语法
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 exec 或 or apptainer exec 命令的奇异性或应用程序作业运行选项,这些选项将传递到作业容器。注:- 在命令行中运行 singularity exec --help 或 apptainer exec --help 以查看 singularity 或 apptainer 命令支持的选项。
- 在指定奇异性或App此类作业运行选项之前,请确保这些选项在命令行中与 singularity exec 或 apptainer 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()
- 可选。 从修复包15开始,如果为 Docker 作业设置了,则启用 LSF 在 Docker 容器内运行用户级别的执行前和执行后命令。 如果设置了,请指定容器_io()关键字。
示例
Begin Application
NAME = podmanapp
CONTAINER = podman[image(repository.example.com:5000/file/path/ubuntu:latest)]
DESCRIPTION = Podman User Service
End ApplicationBegin Application
NAME = dockerapp
CONTAINER = docker[image(repository.example.com:5000/file/path/ubuntu:latest)
container_io() job_pre_post()]
DESCRIPTION = Docker User Service
End ApplicationBegin Application
NAME = ndockerapp
CONTAINER = nvidia-docker[image(repository.example.com:5000/file/path/ubuntu:latest)]
DESCRIPTION = NVIDIA Docker User Service
End ApplicationBegin Application
NAME = shifterapp
CONTAINER = shifter[image(ubuntu:latest)]
DESCRIPTION = Shifter User Service
End ApplicationBegin Application
NAME = singapp
CONTAINER = singularity[image(/file/path/ubuntu.img)]
DESCRIPTION = Singularity User Service
End ApplicationBegin Application
NAME = apptainer
CONTAINER = apptainer[image(/share/apptainer/images/ubuntu_latest.sif)]
DESCRIPTION = Apptainer User Service
End ApplicationBegin Application
NAME = enrootapp
CONTAINER = enroot[image(repository.example.com:5000/file/path/ubuntu:latest)]
DESCRIPTION = Enroot User Service
End ApplicationBegin Application
NAME = dockerappoptions
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 ApplicationBegin Application
NAME = ndockerappoptions
CONTAINER = nvidia-docker[image(repository.example.com:5000/file/path/ubuntu:latest) options(@/share/usr/docker-options.sh)]
DESCRIPTION = NVIDIA Docker User Service with pre-execution script for options
End ApplicationBegin Application
NAME = shifterappoptions
CONTAINER = shifter[image(ubuntu:latest) options(@/share/usr/shifter-options.sh)]
DESCRIPTION = Shifter User Service
End ApplicationBegin Application
NAME = singappoptions
CONTAINER = singularity[image(/file/path/ubuntu.img) options(@/share/usr/sing-options.sh)]
DESCRIPTION = Singularity User Service
End ApplicationBegin Application
NAME = apptainer
CONTAINER = apptainer[image(/share/apptainer/images/ubuntu_latest.sif) options(@/share/usr/apptainer-options.sh)]
DESCRIPTION = Apptainer User Service
End ApplicationBegin Application
NAME = enrootappoptions
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 Application- 对于顺序作业,为 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 --runtime=nvidia /path/to/my/passwd:/etc/passwd)]
对于 UNIX 和 Linux 密码文件, passwd 文件必须采用标准格式,例如以下格式:
user1:x:10001:10001::: user2:x:10002:10002::: - 为了让用户在提交作业时为 Podman Docker Docker 和 Enroot 容器作业指定镜像名称,请在指定 image 关键字时使用 $LSB_CONTAINER_IMAGE 环境变量作为镜像名称。例如,在为 udocker 应用程序概要文件定义 CONTAINER 参数时,将 $LSB_CONTAINER_IMAGE 环境变量添加到映像规范中:
Begin Application 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 Application通过使用下列其中一种方法设置 $LSB_CONTAINER_IMAGE 环境,在作业提交时指定容器映像名称 (例如 ubuntu):- 根据 shell 环境指定 $LSB_CONTAINER_IMAGE 环境变量:
- 在 csh 或 tcsh中:
setenv LSB_CONTAINER_IMAGE ubuntu
- 在 sh, ksh或 bash中:
export LSB_CONTAINER_IMAGE=ubuntu
- 在 csh 或 tcsh中:
- 使用 bsub -env 选项:
bsub -env LSB_CONTAINER_IMAGE=ubuntu -app 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)" -app udocker a.out -in in.dat -out out.dat
- 根据 shell 环境指定 $LSB_CONTAINER_IMAGE 环境变量:
缺省值
未定义
核心限制
语法
CORELIMIT=整数
描述
属于此应用程序概要文件中的作业的所有进程的每个进程 (软) 核心文件大小限制 (请参阅 getrlimit(2))。 应用程序级别限制将覆盖队列中指定的任何缺省限制,但必须小于提交队列的硬限制。 作业级别核心限制 (bsub -C) 覆盖队列级别限制和应用程序级别限制。
缺省情况下,以 KB 为单位指定限制。 在 lsf.conf 中使用 LSF_UNIT_FOR_LIMITS 为限制指定更大的单元 (MB , GB , TB , PB 或 EB)。
缺省值
无限制
CPU_Frequency
语法
CPU_FREQUENCY=[float_number] [unit]描述
指定应用程序概要文件的 CPU 频率。 提交到应用程序概要文件的所有作业都需要指定的 CPU 频率。 值是具有单位 (GHz , MHz 或 KHz) 的正浮点数。 如果未设置单元,那么缺省值为 GHz。
也可以使用命令 bsub –freq来设置此值。
提交值将覆盖应用程序概要文件值,而应用程序概要文件值将覆盖队列值。
缺省值
未定义 (使用名义 CPU 频率)
CPULIMIT
语法
CPULIMIT=[[hour:]分钟[/host_name | /host_model]
描述
限制作业可以使用的总 CPU 时间。 此参数对于防止失控作业或使用过多资源的作业很有用。
当整个作业的总 CPU 时间达到限制时,会向属于该作业的所有进程发送 SIGXCPU 信号。 如果该作业没有 SIGXCPU 的信号处理程序,那么将立即终止该作业。 如果应用程序处理,阻塞或忽略 SIGXCPU 信号,那么在宽限期到期后, LSF 向作业发送 SIGINT , SIGTERM 和 SIGKILL 以将其终止。
如果作业动态地衍生进程,那么这些进程所使用的 CPU 时间将在作业的生命周期内累积。
可以忽略存在时间少于 30 秒的进程。
缺省情况下,在达到 CPU 限制时,提交到应用程序概要文件而没有作业级别 CPU 限制 (bsub -c) 的作业将终止。 应用程序级别限制将覆盖队列中指定的任何缺省限制。
分钟数可能大于 59。 例如,可以将三个半小时指定为 3:30 或 210。
如果未提供具有 CPU 时间的主机或主机模型,那么 LSF 将使用在队列级别定义的缺省 CPU 时间规范化主机 ( lsb.queues中的 DEFAULT_HOST_SPEC) (如果已配置) ,否则将使用在集群级别定义的缺省 CPU 时间规范化主机 ( lsb.params中的 DEFAULT_HOST_SPEC) ,否则将使用具有最大 CPU 因子的主机 (集群中的最快主机)。
在 Windows 上,在 CPU 时间限制下运行的作业最多可能超过该限制 SBD_SLEEP_TIME。 这是因为 sbatchd 会定期检查是否已超过限制。
在 UNIX 系统上, CPU 限制可由操作系统在进程级别实施。
您可以定义 CPU 限制是由操作系统实施的每个进程限制还是由 LSF 在 lsf.conf中使用 LSB_JOB_CPULIMIT 实施的每个作业限制。
缺省值
无限制
数据限制
语法
DATALIMIT=整数
描述
属于应用程序概要文件中运行的作业的所有进程的每个进程 (软) 数据段大小限制 (以 KB 为单位) (请参阅 getrlimit(2))。
缺省情况下,在达到数据限制时,将终止提交到应用程序概要文件的没有作业级别数据限制 (bsub -D) 的作业。 应用程序级别限制将覆盖队列中指定的任何缺省限制,但必须小于提交队列的硬限制。
缺省值
无限制
描述
语法
DESCRIPTION=文本
描述
应用程序概要文件的描述。 描述由 bapp -l显示。
描述应明确描述应用程序概要文件的服务功能,以帮助用户为每个作业选择正确的概要文件。
文本可以包含任何字符,包括空格。 文本可以通过以反斜杠 (\) 结束前一行来扩展至多行。 文本的最大长度为 512 个字符。
djob_commfail_action
语法
DJOB_COMMFAIL_ACTION="KILL_TASKS|IGNORE_COMMFAIL"
描述
定义 LSF 在检测到一个或多个远程并行或分布式任务的通信故障时应执行的操作。 如果定义为 "KILL_TASKS" ,那么 LSF 会尝试终止与通信故障关联的并行或分布式作业的所有当前任务。 如果使用 "IGNORE_COMMFAIL" 定义,那么将忽略失败并继续作业。 如果未定义,那么 LSF 将终止所有任务并关闭整个作业。
此参数仅适用于 blaunch 分布式应用程序框架。
在应用程序概要文件中定义时,将在对指定的应用程序运行 bsub -app 时设置 LSB_DJOB_COMMFAIL_ACTION 变量。
缺省值
尚未定义。 终止所有任务,并关闭整个作业。
DJOB_DISABLED
语法
DJOB_DISABLED=Y | N
描述
禁用 blaunch 分布式应用程序框架。
缺省值
尚未定义。 已启用分布式应用程序框架。
djob_env_script
语法
DJOB_ENV_SCRIPT=脚本名称
描述
定义用于设置和清除并行或分布式作业环境的用户定义脚本的名称。
指定的脚本必须支持 setup 自变量和清除自变量。 该脚本由 LSF 在启动并行或分布式作业之前使用 setup 自变量执行,并在作业完成后使用自变量 cleanup 执行。
脚本以用户身份运行,并且是作业的一部分。
如果指定了完整路径,那么 LSF 将使用路径名进行执行。 否则, LSF 将从 $LSF_BINDIR 中查找可执行文件。
此参数仅适用于 blaunch 分布式应用程序框架。
在应用程序概要文件中定义时,将在对指定应用程序运行 bsub -app 时设置 LSB_DJOB_ENV_SCRIPT 变量。
对于 UNIX 和 Linux,命令路径最多可以包含 4094 个字符,对于 Windows 最多可以包含 255 个字符,包括目录,文件名以及 %J (job_ID) 和 %I (index_ID) 的扩展值。
如果在 lsb.applications中设置了 DJOB_ENV_SCRIPT=openmpi_rankfile.sh ,那么 LSF 将创建主机列组文件并设置环境变量 LSB_RANK_HOSTFILE。
缺省值
尚未定义。
djob_hb_interval
语法
DJOB_HB_INTERVAL=秒
描述
用于计算并行或分布式作业的任务 RES 与作业 RES 之间的脉动信号间隔的值 (以秒计)。
此参数仅适用于 blaunch 分布式应用程序框架。
指定 DJOB_HB_INTERVAL 时,将根据作业中的任务数来缩放时间间隔:
max (DJOB_HB_INTERVAL , 10) + host_factor
其中,
host_factor = 0.01 * 分配给作业 的主机数
缺省值
尚未定义。 时间间隔是 LSB_DJOB_HB_INTERVAL的缺省值。
djob_resize_grace_period
语法
DJOB_RESIZE_GRACE_PERIOD = 秒描述
当可调整大小的作业释放资源时,如果已完全除去主机,那么 LSF 分布式并行作业框架将终止正在运行的任务。 DJOB_RESIZE_GRACE_PERIOD 为应用程序定义了一个宽限期 (以秒为单位) ,以便在 LSF 强制终止任务之前清除任务本身。
缺省值
没有宽限期
djob_ru_interval
语法
DJOB_RU_INTERVAL=秒
描述
用于计算并行或分布式作业任务的资源使用情况更新时间间隔的值 (以秒计)。
此参数仅适用于 blaunch 分布式应用程序框架。
当指定 DJOB_RU_INTERVAL 时,将根据作业中的任务数来缩放时间间隔:
max (DJOB_RU_INTERVAL , 10) + host_factor
其中,
host_factor = 0.01 * 分配给作业 的主机数
缺省值
尚未定义。 时间间隔是 LSB_DJOB_RU_INTERVAL的缺省值。
DJOB_TASK_BIND
语法
DJOB_TASK_BIND=Y | y | N | n描述
对于使用 blaunch 分布式应用程序框架启动的 CPU 和内存亲缘关系调度作业。
要使 LSF 能够将每个任务绑定到正确的 CPU 或 NUMA 节点,必须使用 blaunch 来启动任务。 在提交作业之前,必须在 lsb.applications 中设置 DJOB_TASK_BIND=Y 或在提交环境中设置 LSB_DJOB_TASK_BIND=Y。 设置时,将在每个任务的环境中仅设置分配给任务本身的 CPU 和内存绑定。
如果 DJOB_TASK_BIND=N 或 LSB_DJOB_TASK_BIND = N ,或者未设置它们,那么每个任务将在一个主机上具有相同的 CPU 或 NUMA 节点绑定。
如果不使用 blaunch 来启动任务,并且使用其他 MPI 机制 (例如 IBM® Spectrum LSF MPI 或 IBM Parallel Environment) ,那么不应设置 DJOB_TASK_BIND 或将其设置为 N。
缺省值
N
docker_image_affinity
语法
DOCKER_IMAGE_AFFINITY=Y | y | N | n描述
在调度基于 Docker的容器化作业时,将此参数设置为 y 或 Y 将使 LSF 能够为已具有所请求的 Docker 映像的执行主机提供首选项。 这将减少网络带宽和作业启动时间,因为执行主机不必从存储库中拉取 Docker 映像,并且作业可以立即在执行主机上启动。
启用此功能后, LSF 会在调度 Docker 作业时考虑 Docker 映像位置信息。 Docker 映像亲缘关系通过以下方式与主机首选项和 order[] 字符串请求进行交互:
- 如果指定了主机首选项,那么将首先采用主机首选项。 在具有相同首选项级别的主机中,将为具有请求的 Docker 映像的主机提供更高的优先级。
- 如果指定了 order[] 字符串,那么具有请求的 Docker 映像的主机首先具有更高优先级。 在所有具有请求的 Docker 映像的主机中,将采用 order[] 字符串。
必须为此参数定义 CONTAINER 参数才能使用此应用程序概要文件。
缺省值
尚未定义。
合格等待时间限制
语法
ELIGIBLE_PEND_TIME_LIMIT=[小时:]分钟
描述
指定作业的合格暂挂时间限制。
LSF 将应用程序级别合格暂挂时间限制配置发送到 IBM Spectrum LSF RTM,这将处理警报和触发的操作,例如用户通知 (例如,通知提交作业的用户和 LSF 管理员) 和作业控制操作 (例如,终止作业)。 IBM Spectrum LSF RTM 将作业的合格暂挂时间与合格暂挂时间限制进行比较,如果作业处于合格暂挂状态的时间超过此指定时间限制,那么 IBM Spectrum LSF RTM 将触发警报和操作。 此参数在不使用 IBM Spectrum LSF RTM的情况下工作,但 LSF 不会执行任何其他警报操作。
在 LSF 多集群功能的作业转发模型中,将在执行集群中忽略作业的合格暂挂时间限制,而提交集群根据本地设置合并作业的队列,应用程序和作业级别的合格暂挂时间限制。
符合条件的暂挂时间限制的格式为 [hour:]minute。 分钟可以指定为大于 59 的数字。 例如,可以将三个半小时指定为 3:30 或 210。
作业级别合格暂挂时间限制 (bsub -eptl) 将覆盖此处指定的应用程序级别限制,而应用程序级别限制将覆盖队列级别限制 ( lsb.queues中的ELIGIBLE_PEND_TIME_LIMIT )。
缺省值
尚未定义。
环境变量
语法
ENV_VARS=" name = 'value' [,name1='value1'] [,name2='value2' , ... ] "
描述
ENV_VARS 定义将由应用程序的作业使用的特定于应用程序的环境变量。 使用此参数可将 "名称/值" 对定义为环境变量。 这些环境变量也在执行前/执行后环境中使用。
定义值时,可以在单引号中包含空格。 逗号和双引号由 LSF 保留,不能用作环境变量名称或值的一部分。 如果在 ENV_VARS 中多次指定同一个环境变量并给出不同的值,那么列表中的最后一个值将是生效的值。 LSF 不允许环境变量包含要在执行端展开的其他环境变量。 请勿在 ENV_VARS中重新定义 LSF 环境变量。
要定义 NULL 环境变量,请使用内部无任何内容的单引号。 例如:
ENV_VARS="TEST_CAR=''"
用户环境中设置的任何变量都将覆盖 ENV_VARS中的值。 应用程序概要文件值将覆盖执行主机环境值。
更改此参数的值后,运行 badmin reconfig 以使更改生效。 这些更改仅适用于暂挂作业。 正在运行的作业不受影响。
缺省值
尚未定义。
ESTIMATED_RUNTIME
语法
ESTIMATED_RUNTIME=[hour:]分钟[/host_name | /host_model]
描述
此参数指定与应用程序关联的作业的估计运行时间。 LSF 仅将 ESTIMATED_RUNTIME 值用于调度目的,并且不会终止超过此值的作业,除非这些作业也超过定义的 RUNLIMIT。 运行时估计的格式与 RUNLIMIT 参数相同。
bsub -We 指定的作业级别运行时估算值将覆盖应用程序概要文件中的 ESTIMATED_RUNTIME 设置。 应用程序概要文件中的 ESTIMATED_RUNTIME 设置将覆盖队列和集群中的 ESTIMATED_RUNTIME 设置。
- 作业块
- 提前预留
- SLA
- 插槽预留
- 回填
- 分配策划员
缺省值
未定义
执行 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或 Enroot 容器作业的执行驱动程序框架。 此参数使用以下关键字:
- 用户
- 对于 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 Application
NAME = podmanapp
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/docker-starter.py] \
controller[/path/to/driver/podman-control.py] \
monitor[/path/to/driver/podman-monitor.py]
DESCRIPTION = Podman User Service
End Application
Begin Application
NAME = dockerapp
CONTAINER = docker[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(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 Application
Begin Application
NAME = enrootapp
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 Application
缺省值
Podman 和 Docker 作业的未定义 。
用于 Enroot 用户作业的 starter[$LSF_SERVERDIR/enroot-starter.py]
文件限制
语法
FILELIMIT=整数
描述
属于应用程序概要文件中运行的作业的所有进程的每个进程 (软) 文件大小限制 (以 KB 为单位) (请参阅 getrlimit(2))。 应用程序级别限制将覆盖队列中指定的任何缺省限制,但必须小于提交队列的硬限制。
缺省值
无限制
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]] [:aff=yes | no] [:j_exclusive=yes | no][:block=yes | no] [:gpack=yes | no] [:gvendor=amd | nvidia] [:gmodel=模型名称[#mem_size]] [:gtile=tile_num|'!'] [:gmem=mem_value] [:glink=yes] [:mig=GI_size[/CI_size]]"描述
- num=num_gpus [/task | host]
- 作业所需的物理 GPU 数。 缺省情况下,该数字是每个主机的数字。 您还可以通过在数字后指定 /task 来指定每个任务的数字。
如果 您指定了每个任务的编号, lsb.resources 文件中 ngpus_physical 资源的配置设置为 PER_TASK, 或者 lsb.params 文件中设置了 RESOURCE_RESERVE_PER_TASK=Y 参数,那么此编号是每个任务请求的计数。
- 模式=共享 | 独占进程
- 作业运行时的 GPU 方式 ( shared 或 exclusive_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_DEVICES 。 LSF 只是设置任务的 CUDA_VISIBLE_DEVICES<number> 环境变量,而不是 CUDA_VISIBLE_DEVICES。 LSF MPI 将 CUDA_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 配合使用,这可能会导致意外行为。 - 如果设置了 mps=yes ,那么 LSF 将对每个作业的每个主机启动一个 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=yes 和 block=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=yes 和 aff=yes ,那么 block=yes 设置优先,并且会禁用严格的 CPU-GPU 亲缘关系绑定 (即,会自动设置 aff=no )。 - gpack=yes | 否
- 仅适用于 共享 方式作业。 指定是否启用包调度。 如果设置为 yes,那么 LSF 会将多个共享方式 GPU 作业打包到已分配的 GPU。 LSF 按如下所示调度共享方式 GPU:
- LSF 根据已具有正在运行的作业的共享 GPU 数,然后按非互斥的 GPU 数对候选主机进行排序 (从最大到最小)。
如果在资源需求字符串中定义了 order [] 关键字,那么在对 order []进行排序之后, LSF 会按 gpack 策略 (先按已具有正在运行的作业的共享 GPU ,然后再按非互斥的 GPU 数) 对候选主机进行重新排序。 gpack 策略排序优先级高于 order [] 排序。
- LSF 根据正在运行的作业数对每个主机上的候选 GPU 进行排序 (从最大到最小)。
调度后,共享方式 GPU 作业打包到首先排序的已分配共享 GPU ,而不是新的共享 GPU。
如果启用了 Docker 属性亲缘关系,那么候选主机的顺序按 Docker 属性亲缘关系排序,然后再按 GPU 排序。
缺省情况下,设置了 gpack=no ,因此包调度处于禁用状态。
- LSF 根据已具有正在运行的作业的共享 GPU 数,然后按非互斥的 GPU 数对候选主机进行排序 (从最大到最小)。
- 供应商=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 内存大小由数字及其单元组成,其中包括 M, G, T, MB, GB和 TB (例如, 12G)。
要在每个主机上查找可用的 GPU 模型名称,请运行 lsload –gpuload, lshosts –gpu或 bhosts -gpu 命令。 模型名称字符串不包含空格字符。 此外,斜杠 (/) 和连字符 (-) 将替换为下划线字符 (_)。 例如, GPU 模型名称 "Tesla C2050 / C2070" 在 LSF中转换为 "TeslaC2050_C2070"。
- gmem=mem_value
指定作业所需的每个 GPU 上的 GPU 内存。 mem_value 的格式与其他资源值相同 (例如,mem或swap) 在作业资源需求 (-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_REQ_MERGE 参数在 lsb.params 文件中定义为 Y 或 y ,并且在多个级别 (至少两个缺省集群,队列,应用程序概要文件或作业级别需求) 指定 GPU 需求,那么将单独合并 GPU 需求的每个选项。 作业级别覆盖应用程序级别,这将覆盖队列级别,这将覆盖缺省集群 GPU 需求。 例如,如果在 -gpu 选项上定义了 GPU 需求的 mode 选项,并且在队列中定义了 mps 选项,那么将使用作业级别的方式和队列的 mps 值。
如果 GPU_REQ_MERGE 参数未在 lsb.params 文件中定义为 Y 或 y ,并且 在多个级别 (至少有两个缺省集群,队列,应用程序概要文件或作业级别需求) 指定了 GPU 需求,那么将替换整个 GPU 需求字符串。 整个作业级别 GPU 需求字符串将覆盖应用程序级别,这将覆盖队列级别,这将覆盖缺省 GPU 需求。
esub 参数 LSB_SUB4_GPU_REQ 修改 -gpu 选项的值。
LSF 首先选择满足拓扑需求的 GPU。 如果所选 GPU 的 GPU 方式不是所请求的方式,那么 LSF 会将 GPU 更改为所请求的方式。 例如,如果 LSF 将 exclusive_process GPU 分配给需要共享 GPU 的作业,那么 LSF 会在作业启动之前将 GPU 方式更改为共享,然后在作业完成时将方式更改回 exclusive_process 。
GPU 需求将转换为作业的 rusage 资源需求。 例如, num=2 将转换为rusage[ngpus_physical=2]. 使用 bjobs, bhist和 bacct 命令来查看合并的资源需求。
可能存在 bsub -gpu 选项和 GPU_REQ 参数语法无法涵盖的复杂 GPU 需求,包括复合 GPU 需求 (针对不同主机上的作业的不同 GPU 需求,或针对并行作业的不同部分的不同 GPU 需求) 和备用 GPU 需求 (如果要运行的作业可接受多组 GPU 需求)。 对于复杂的 GPU 需求,请使用 bsub -R 命令选项或 lsb.applications 或 lsb.queues 文件中的 RES_REQ 参数来定义资源需求字符串。
缺省值
未定义
另请参阅
- LSB_GPU_REQ
- bsub -gpu
HOST_POST_EXEC
语法
HOST_POST_EXEC=命令描述
在应用程序级别启用基于主机的执行后处理。 HOST_POST_EXEC 命令在作业完成后在所有执行主机上运行。 如果在队列级别/应用程序级别/作业级别定义了基于作业的执行后 POST_EXEC ,那么 HOST_POST_EXEC 命令将在任何级别的 POST_EXEC 之后运行。
- 应用程序级别命令
- 队列级别命令。
受支持的命令规则与队列部分的现有 POST_EXEC 相同。 请参阅 POST_EXEC 主题以获取详细信息。
无法在 Windows 平台上执行基于主机的执行后命令。 此参数不能用于配置基于作业的执行后处理。
缺省值
尚未定义。
主机预执行
语法
HOST_PRE_EXEC=命令描述
在应用程序级别启用基于主机的预执行处理。 在作业启动之前, HOST_PRE_EXEC 命令在所有执行主机上运行。 如果在队列级别/应用程序级别/作业级别定义了基于作业的预执行 PRE_EXEC ,那么 HOST_PRE_EXEC 命令将在任何级别的 PRE_EXEC 之前运行。
- 队列级别命令
- 应用程序级别命令。
受支持的命令规则与队列部分的现有 PRE_EXEC 相同。 请参阅 PRE_EXEC 主题以获取详细信息。
无法在 Windows 平台上执行基于主机的预执行命令。 此参数不能用于配置基于作业的执行前处理。
缺省值
尚未定义。
作业 CWD
语法
JOB_CWD=目录
描述
应用程序概要文件中作业的当前工作目录 (CWD)。 路径可以是绝对路径,也可以是相对于提交目录的路径。 路径可以包含以下动态模式 (区分大小写):
- %J-作业标识
- %JG-作业组 (如果未指定,将忽略该组)
- %I-作业索引 (缺省值为 0)
- %EJ-执行作业标识
- %EI-执行作业索引
- %P-项目名称
- %U-用户名
- %G-用户组
- %H-第一个执行主机名
不受支持的模式被视为文本。
如果更改了此参数,那么如果未定义 bsub -cwd ,那么具有 -app 选项的任何新提交的作业都将使用 CWD 的新值。
JOB_CWD 支持所有 LSF 路径约定,例如 UNIX , UNC 和 Windows 格式。 在混合 UNIX /Windows 集群中,可以使用一个 UNIX 值和另一个 Windows 值 (用管道字符 (|) 分隔) 来指定该值。
JOB_CWD=unix_path|windows_path
路径的第一部分必须用于 UNIX ,第二部分必须用于 Windows。 这两个路径都必须是完整路径。
缺省值
尚未定义。
作业 _CWD_TTL
语法
JOB_CWD_TTL=小时
描述
指定作业的当前工作目录 (CWD) 的生存时间 (TTL)。 LSF 在作业根据 TTL 值完成后清除创建的 CWD 目录。 如果 LSF 为作业创建了该目录,那么 LSF 将删除该作业的 CWD。 可用选项如下:
- 0-当与作业相关的所有进程完成时, sbatchd 将删除 CWD。
- 2147483647-从不删除作业的 CWD。
- 1 到 2147483646-在超时到期后删除作业的 CWD。
当多个作业共享某些父目录时,系统每 5 分钟检查一次目录列表,并仅删除路径的最后一个目录,以避免冲突。 TTL 将在执行后脚本完成后进行计算。 当 LSF (sbatchd) 启动时,它将检查目录列表文件并删除到期的 CWD。
如果未在应用程序概要文件中设置此参数的值,那么 LSF 会检查是否在集群范围级别设置此参数。 如果两者都未设置,那么将使用缺省值。
缺省值
尚未定义。 使用值 2147483647 ,表示未删除 CWD。
工作包含后置程序
语法
JOB_INCLUDE_POSTPROC=Y | N描述
- 阻止新作业在主机上启动,直到在该主机上完成执行后处理
- 包含与作业 CPU 和运行时间一起执行后处理的 CPU 和运行时间
- sbatchd 将作业完成状态 (DONE 或 EXIT) 和执行后处理状态 (POST_DONE 或 POST_ERR) 同时发送到 mbatchd
用户环境中的变量 LSB_JOB_INCLUDE_POSTPROC 会覆盖 lsb.applications 应用配置文件中的 JOB_INCLUDE_POSTPROC 值。 lsb.applications 中应用程序概要文件的 JOB_INCLUDE_POSTPROC 将覆盖 lsb.params中 JOB_INCLUDE_POSTPROC 的值。
对于 CPU 和内存亲缘关系作业,如果 JOB_INCLUDE_POSTPROC=Y,那么 LSF 在执行后处理完成之前不会释放亲缘关系资源,因为在执行后处理期间,作业仍占用插槽。
对于 SGI cpusets ,如果 JOB_INCLUDE_POSTPROC=Y,那么 LSF 在执行后处理完成之前不会释放 cpuset ,即使执行后进程未连接到 cpuset 也是如此。
缺省值
N。 执行后处理不会包含在作业中,并且可以在执行后处理完成之前在执行主机上启动新作业。
作业后进程超时
语法
JOB_POSTPROC_TIMEOUT=分钟描述
指定作业执行后处理的超时 (以分钟计)。 指定的超时必须大于零
如果执行后处理耗时超过超时,那么 sbatchd 将报告执行后失败 (POST_ERR 状态)。 在 UNIX 和 Linux上,它会终止作业的预执行进程的整个进程组。 在 Windows 上,只有在超时到期时才会终止预执行命令的父进程,不会终止预执行命令的子进程。
如果 JOB_INCLUDE_POSTPROC=Y,并且 sbatchd 由于已达到超时而终止执行后进程,那么执行后处理的 CPU 时间将设置为 0 ,并且作业的 CPU 时间不包括执行后处理的 CPU 时间。
在 lsb.applications 中的应用程序概要文件中定义的 JOB_POSTPROC_TIMEOUT 将覆盖 lsb.params中的值。 无法在用户环境中定义 JOB_POSTPROC_TIMEOUT 。
运行基于主机的执行后处理时,请将 JOB_POSTPROC_TIMEOUT 设置为一个值,该值为进程提供足够的运行时间。
缺省值
尚未定义。 执行后处理不会超时。
作业-PREPROC_TIMEOUT
语法
JOB_PREPROC_TIMEOUT=分钟描述
指定作业执行前处理的超时 (以分钟计)。 指定的超时必须是大于零的整数。 如果作业的执行前处理耗时超过超时,那么 LSF 将终止作业的执行前进程,终止具有预定义的退出值 98 的作业,然后将该作业重新排队到队列的头。 但是,如果执行前重试次数已达到执行前重试阈值,那么 LSF 将暂挂处于 PSUSP 状态的作业,而不是将其重新排队。
在 lsb.applications 的应用程序概要文件中定义的 JOB_PREPROC_TIMEOUT 将覆盖 lsb.params中的值。 无法在用户环境中定义 JOB_PREPROC_TIMEOUT。
在 UNIX 和 Linux上, sbatchd 会终止作业的预执行进程的整个进程组。
在 Windows 上,只有在超时到期时才会终止预执行命令的父进程,不会终止预执行命令的子进程。
缺省值
尚未定义。 执行前处理不会超时。 但是,运行基于主机的预执行处理时,不能使用无限值,否则将失败。 您必须配置合理的值。
作业 _ SIZE_LIST
语法
JOB_SIZE_LIST=默认大小 [大小...]
描述
此应用程序上允许的作业大小 (任务数) 的列表。
通过对 bsub 和 bmod使用 -n 或 -R 选项来提交作业或修改请求作业大小的暂挂作业时,请求的作业大小必须是与 JOB_SIZE_LIST 指定的其中一个值 (即此应用程序概要文件上允许的作业大小) 匹配的单个固定值。 如果请求的作业大小不在此列表中,那么 LSF 将拒绝该作业。 此外,使用 bswitch 将具有所请求作业大小的暂挂作业切换到另一个队列时,暂挂作业中的所请求作业大小还必须与新队列的 JOB_SIZE_LIST 中的其中一个值匹配。
此列表中的第一个值是缺省作业大小,这是在未请求作业的情况下提交作业时分配的作业大小请求。 其余值是队列中允许的其他作业大小,可以按任何顺序定义。
在队列 (lsb.queues) 和应用程序概要文件中定义时,作业大小请求必须同时满足这两个需求。 此外, JOB_SIZE_LIST 会覆盖在同一级别定义的任何 TASKLIMIT 参数。 作业大小需求不适用于没有作业大小列表的队列和应用程序概要文件,也不适用于其他级别的作业提交 (即主机级别或集群级别的作业提交)。
有效值
1 到 2147483646 之间的正整数的空格分隔列表。
缺省值
未定义
已启动 JOB_STARTER
语法
JOB_STARTER=入门模板 [入门模板] ["%USRCMD"] [入门模板]
描述
在执行之前为已提交的作业创建特定环境。 应用程序级别的作业启动程序将覆盖队列级别的作业启动程序。
starter 是可用于启动作业的任何可执行文件 (即,可以接受作业作为输入参数)。 (可选) 可以指定其他字符串。
缺省情况下,用户命令在作业启动程序之后运行。 可以使用特殊字符串 %USRCMD来表示用户的作业在作业启动程序命令行中的位置。 %USRCMD 字符串和任何其他命令必须用引号 (" ").
示例
JOB_STARTER=csh -c "%USRCMD;sleep 10"
bsub myjob arguments
csh -c "myjob arguments;sleep 10"
缺省值
尚未定义。 未使用任何作业启动程序,
位置 MAX_PREEXEC_RETRY
语法
LOCAL_MAX_PREEXEC_RETRY=整数
描述
尝试在本地集群上执行作业的预执行命令的最大次数。
达到此限制时,作业的缺省行为由 lsb.params, lsb.queues或 lsb.applications中的 LOCAL_MAX_PREEXEC_RETRY_ACTION 参数定义。
有效值
0 < max_preexec_retry < infinit_int
INFINIT_INT 在 lsf.h中定义。
缺省值
尚未定义。 预执行重试次数不受限制
另请参阅
lsb.params, lsb.queues和 lsb.applications中的 LOCAL_MAX_PREEXEC_RETRY_ACTION 。
本地最大预执行重试操作
语法
LOCAL_MAX_PREEXEC_RETRY_ACTION=SUSPEND | EXIT
描述
当作业达到在本地集群 ( lsb.params, lsb.queues或 lsb.applications中的LOCAL_MAX_PREEXEC_RETRY ) 上尝试其预执行命令的最大次数时,作业的缺省行为。
- 如果设置为 SUSPEND,那么将暂挂该作业,并且其状态将设置为 PSUSP。
- 如果设置为 EXIT,那么作业将退出并将其状态设置为 EXIT。 作业退出的退出代码与上次执行前失败退出代码相同。
该参数可在整个群集 (lsb.params)、队列级别 (lsb.queues) 和应用程序级别 (lsb.applications) 进行配置。 lsb.applications 中指定的操作会覆盖 lsb.queues ,而 lsb.queues 会覆盖 lsb.params 配置。
缺省值
尚未定义。 如果未在 lsb.queues 或 lsb.params中定义,那么缺省操作为 SUSPEND。
另请参阅
lsb.params, lsb.queues和 lsb.applications中的 LOCAL_MAX_PREEXEC_RETRY 。
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
语法
MAX_PREEXEC_RETRY=整数
描述
请改为使用 REMOTE_MAX_PREEXEC_RETRY。 仅为向后兼容性而维护此参数。
仅适用于 LSF 多集群功能 的作业转发模型。 尝试从远程集群执行作业的预执行命令的最大次数。
如果作业的执行前命令失败了所有尝试,那么该作业将返回到提交集群。
有效值
0 < max_preexec_retry < infinit_int
INFINIT_INT 在 lsf.h中定义。
缺省值
5
最大总抢占时间
语法
MAX_TOTAL_TIME_PREEMPT=整数
描述
累积抢占时间 (以分钟为单位) ,在此时间之后无法再次抢占作业,其中 minutes 是挂钟时间,而不是规范化时间。
在 lsb.applications 中设置此参数将覆盖 lsb.queues 和 lsb.params中同名的参数。
有效值
任何大于或等于 1 的正整数 (1)
缺省值
无限制
内存限制
语法
MEMLIMIT=整数
描述
属于应用程序概要文件中运行的作业的所有进程的每个进程 (软) 驻留的进程设置大小限制。
设置可分配给进程的最大物理内存量 (驻留集大小, RSS)。
缺省情况下,以 KB 为单位指定限制。 在 lsf.conf 中使用 LSF_UNIT_FOR_LIMITS 为限制指定更大的单元 (MB , GB , TB , PB 或 EB)。
缺省情况下,当达到内存限制时,将终止提交到应用程序概要文件且没有作业级别内存限制的作业。 应用程序级别限制将覆盖队列中指定的任何缺省限制,但必须小于提交队列的硬限制。
- 操作系统内存限制实施
- 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. 设置为 y 的 LSB_JOB_MEMLIMIT 与设置为 Y 的 LSB_MEMLIMIT_ENFORCED 之间的差异在于,使用 LSB_JOB_MEMLIMIT 时,仅启用 LSF 强制实施的每个作业的内存限制。 已禁用操作系统强制实施的每个进程的内存限制。 如果将LSB_MEMLIMIT_强制设置为 y ,那么将启用 LSF 强制实施的每个作业内存限制和操作系统强制实施的每个进程内存限制。
可用于 LSF 收集总内存使用情况的所有系统。
缺省值
无限制
内存限制类型
语法
MEMLIMIT_TYPE=JOB [PROCESS] [TASK]
MEMLIMIT_TYPE=PROCESS [JOB] [TASK]
MEMLIMIT_TYPE=TASK [PROCESS] [JOB]
描述
内存限制是允许作业使用的最大内存量。 超过此级别的作业将被终止。 您可以指定要实施的不同类型的内存限制。 使用 JOB , PROCESS 和 TASK 的任意组合。
通过在应用程序概要文件中指定值,将覆盖以下三个参数 :LSB_JOB_MEMLIMIT ,LSB_MEMLIMIT_实施和 LSF_HPC_EXTENSIONS (TASK_MEMLIMIT)。
- PROCESS: 通过操作系统进程应用内存限制,该限制由 服务器 主机上的操作系统实施 (作业正在其中运行)。 当分配给作业的一个进程的内存超过内存限制时, LSF 会终止该作业。
- TASK: 根据任务列表文件应用内存限制。 它由 LSF 实施。 如果任何单个任务超过内存和交换限制的限制设置,那么 LSF 将终止整个并行作业。
- JOB: 应用作业中标识并由 LSF 实施的内存限制。 当分配给作业的所有进程的内存总和超过内存限制时, LSF 将终止该作业。
- 进程任务: 启用由操作系统实施的进程级别内存限制和由 LSF 实施的任务级别内存限制。
- PROCESS JOB: 启用由操作系统实施的进程级别内存限制和由 LSF 实施的作业级别内存限制。
- TASK JOB: 启用由 LSF 实施的任务级别内存限制和由 LSF 实施的作业级别内存限制。
- 进程任务作业: 启用由操作系统实施的进程级别内存限制,由 LSF 实施的任务级别内存限制和由 LSF 实施的作业级别内存限制。
缺省值
尚未定义。 内存限制级别仍由 LSF_HPC_EXTENSIONS = TASK_MEMLIMIT , LSB_JOB_MEMLIMIT 和LSB_MEMLIMIT_强制实施控制
MIG
语法
MIG=分钟
描述
启用自动作业迁移,并指定可设置检查点或可重新运行的作业的迁移阈值 (以分钟计)。
LSF 会自动迁移处于 SSUSP 状态超过指定分钟数的作业。 值 0 指定立即迁移暂挂的作业。 迁移阈值适用于在主机上运行的所有作业。
作业级别命令行迁移阈值会覆盖应用程序概要文件和队列中的阈值配置。 应用程序概要文件配置将覆盖队列级别配置。
如果指定了主机迁移阈值,并且低于作业,队列或应用程序的值,那么将使用主机值。
可以迁移区块作业的成员。 将从作业块中除去处于 WAIT 状态的块作业,并将其置于 PEND 状态。
不影响具有转发到远程集群的作业。
缺省值
尚未定义。 LSF 不会自动迁移检查点或可重新运行的作业。
名称
语法
NAME=字符串
描述
必需。 应用程序概要文件的唯一名称。
指定长度最多为 60 个字符的任何 ASCII 字符串。 可以在名称中使用字母,数字,下划线 (_) ,短划线 (-) ,句点 (.) 或空格。 应用程序概要文件名称在集群中必须唯一。
NAME=myapp 1.0
缺省值
必须指定此参数才能定义应用程序概要文件。 LSF 不会自动分配缺省应用程序概要文件名称。
NICE
语法
NICE=整数
描述
调整应用程序中的作业执行的 UNIX 调度优先级。
值 0 (零) 将维护 UNIX 交互式作业的缺省调度优先级。 此值调整批处理作业的运行时优先级,以控制其对其他批处理或交互式作业的影响。 请参阅nice(1) 手动页面以获取更多详细信息。
- nice>=0对应于优先级类IDLE
- nice<0对应于优先级类NORMAL
Windows 上的 LSF 不支持HIGH或REAL-TIME优先级类。
设置时,此值将覆盖在 lsb.queues中的队列级别设置的 NICE 。
缺省值
尚未定义。
无抢占间隔
指定可抢占的作业在被抢占之前可以运行的分钟数。 如果可抢占作业的不间断运行时间比指定时间长,那么可以抢占该时间。
语法
NO_PREEMPT_INTERVAL=分钟minutes 的值是挂钟时间,而不是规范化时间。
描述
NO_PREEMPT_INTERVAL=0 参数允许在作业启动或恢复运行时立即抢占这些作业。
- 作业 B 和作业 C 的运行时间小于 NO_PREEMPT_INTERVAL 参数: 未抢占作业 B 和 C 。
- 作业 D 的运行时间大于或等于 NO_PREEMPT_INTERVAL 参数: 作业 D 处于抢占状态。
在 lsb.applications 中设置此参数将覆盖 lsb.queues 和 lsb.params 文件中同名的参数。
缺省值
0
无抢占结束时间
语法
NO_PREEMPT_FINISH_TIME=分钟 | 百分比描述
阻止抢占将在指定的分钟数或指定的估计运行时间百分比或运行限制内完成的作业。
指定不应抢占应在指定分钟数或作业持续时间百分比内完成的作业,其中 minutes 是挂钟时间,而不是规范化时间。 百分比必须大于 0 或小于 100% (介于 1% 与 99% 之间)。
例如,如果作业运行限制为 60 分钟,并且 NO_PREEMPT_FINISH_TIME=10%,那么在作业运行 54 分钟或更长时间之后,不能抢占该作业。
如果为 NO_PREEMPT_FINISH_TIME 指定百分比,那么需要运行时 (bsub -We 或 ESTIMATED_RUNTIME in lsb.applications) ,或者需要为作业指定运行限制 (bsub -W, lsb.queues中的 RUNLIMIT 或 lsb.applications中的 RUNLIMIT)
运行时间 (NO_PREEMPT_RUN_TIME)
语法
NO_PREEMPT_RUN_TIME=分钟 | 百分比描述
阻止抢占已运行了指定分钟数或指定百分比的估计运行时间或运行限制的作业。
指定不应抢占已运行指定分钟数或更长时间的作业,其中 minutes 是挂钟时间,而不是规范化时间。 百分比必须大于 0 或小于 100% (介于 1% 与 99% 之间)。
例如,如果作业运行限制为 60 分钟,并且 NO_PREEMPT_RUN_TIME=50%,那么在作业运行 30 分钟或更长时间之后,不能抢占该作业。
如果为 NO_PREEMPT_RUN_TIME 指定百分比,那么需要运行时 (bsub -We 或 ESTIMATED_RUNTIME in lsb.applications) ,或者需要为作业指定运行限制 (bsub -W, lsb.queues中的 RUNLIMIT 或 lsb.applications中的 RUNLIMIT)
等待时间限制
语法
PEND_TIME_LIMIT=[小时:]分钟
描述
指定作业的暂挂时间限制。
LSF 将应用程序级别暂挂时间限制配置发送到 IBM Spectrum LSF RTM,这将处理警报和触发的操作,例如用户通知 (例如,通知提交作业的用户和 LSF 管理员) 和作业控制操作 (例如,终止作业)。 IBM Spectrum LSF RTM 将作业的暂挂时间与暂挂时间限制进行比较,如果该作业的暂挂时间超过此指定时间限制,那么 IBM Spectrum LSF RTM 将触发警报和操作。 此参数在不使用 IBM Spectrum LSF RTM的情况下工作,但 LSF 不会执行任何其他警报操作。
在 LSF 多集群功能的作业转发模型中,将在执行集群中忽略作业的暂挂时间限制,而提交集群根据本地设置合并作业的队列,应用程序和作业级别暂挂时间限制。
暂挂时间限制的格式为 [hour:]minute。 分钟可以指定为大于 59 的数字。 例如,可以将三个半小时指定为 3:30 或 210。
作业级别暂挂时间限制 (bsub -ptl) 将覆盖此处指定的应用程序级别限制,而应用程序级别限制将覆盖队列级别限制 ( lsb.queues中的PEND_TIME_LIMIT )。
缺省值
尚未定义。
持久主机顺序
语法
PERSISTENT_HOST_ORDER=Y | yes | N | no描述
在 LSF 多集群功能中迁移并行作业时适用。 设置 PERSISTENT_HOST_ORDER=Y 可确保根据主机的字母名称在主机上重新启动作业,从而防止它们在迁移前运行的相同主机上重新启动。
缺省值
PERSISTENT_HOST_ORDER=N。 LSF 多集群功能 中的已迁移作业可以在之前运行的相同主机上运行。
计划
在启用 ALLOCATION_PLANNER 参数时使用。 用于标识作为计划候选者的作业。
语法
PLAN = Y | N | "<key>[value] ..."
描述
LSF 要求启用 ALLOCATION_PLANNER 参数以使用 PLAN=Y。
也在集群和队列级别定义。 优先顺序为 :application , queue 和 global。 例如,应用程序级别设置将覆盖队列级别设置。
支持以下键/值对:
| 键 | 值 | 缺省值 | 描述 |
|---|---|---|---|
| 延迟 | 正整数 | - | 在考虑在作业提交时间之后制定作业计划之前要延迟的分钟数。 |
| 最大作业数 | 正整数 | - | 可以同时具有计划的最大作业数。 |
启用 ALLOCATION_PLANNER 参数时, PLAN 参数将替换现有 SLOT_RESERVE 参数和 RESOURCE_RESERVE 参数。
缺省值
N
POST_EXEC
语法
POST_EXEC=命令描述
在应用程序级别启用执行后处理。 POST_EXEC 命令在作业完成后在执行主机上运行。 可以在作业,应用程序和队列级别配置执行后命令。
如果同时指定了应用程序级别 ( lsb.applications中的POST_EXEC ) 和作业级别的执行后命令,那么执行后作业级别将覆盖应用程序级别的执行后命令。 队列级别的执行后命令 ( lsb.queues中的POST_EXEC ) 在应用程序级别的执行后命令和作业级别的执行后命令之后运行。
POST_EXEC 命令使用与作业相同的环境变量值,并在提交作业的用户的用户帐户下运行。
当作业退出其中一个应用程序概要文件的 REQUEUE_EXIT_VALUES时, LSF 将重新排队该作业并设置环境变量 LSB_JOBPEND。 执行后命令在重新排队的作业完成后运行。
运行执行后命令时,环境变量 LSB_JOBEXIT_STAT 将设置为作业的退出状态。 如果无法设置作业的执行环境,那么 LSB_JOBEXIT_STAT 将设置为 0 (零)。
对于 UNIX 和 Linux,命令路径最多可以包含 4094 个字符,对于 Windows 最多可以包含 255 个字符,包括目录,文件名以及 %J (job_ID) 和 %I (index_ID) 的扩展值。
- 执行前和执行后命令在 /bin/sh -c下的 /tmp 目录中运行,这允许在命令中使用 shell 功能。 以下示例显示了有效的配置行:
PRE_EXEC= /usr/share/lsf/misc/testq_pre >> /tmp/pre.outPOST_EXEC= /usr/share/lsf/misc/testq_post | grep -v "Hey!" - LSF 将 PATH 环境变量设置为
PATH="/bin /usr/bin /sbin /usr/sbin" - stdin, stdout和 stderr 设置为 /dev/null
- 为了允许 UNIX 用户定义自己的执行后命令, LSF 管理员将环境变量 $USER_POSTEXEC 指定为 POST_EXEC 命令。 然后,用户定义执行后命令:
setenv USER_POSTEXEC /path_name注: 执行后命令的路径名必须是绝对路径。 此参数不能用于配置基于主机的执行后处理。
- 执行前和执行后命令在 cmd.exe /c 下运行
- 标准输入,标准输出和标准错误设置为 NULL
- PATH 由 LSF 服务的设置确定
对于在 Windows Server 2003 x64 Edition 平台上执行的执行后命令,用户必须具有 cmd.exe的读和执行特权。
缺省值
尚未定义。 没有任何执行后命令与应用程序概要文件相关联。
抢占延迟
语法
PREEMPT_DELAY=秒
描述
先发制人作业将从提交时间开始等待指定的秒数,然后再抢占任何低优先级的先发制人作业。 在宽限期内,将不会触发抢占,但该作业可以由其他调度策略进行调度和分派。
此功能可提供调整系统以减少抢占次数的灵活性。 获得更好的性能和作业吞吐量很有用。 当低优先级作业很短时,如果高优先级作业可以等待一段时间以使低优先级作业完成,那么可以避免抢占并提高集群性能。 如果在宽限期到期后作业仍处于暂挂状态,那么将触发抢占。
等待时间仅用于处于暂挂状态的抢先作业。 它不会影响暂挂的先发作业。
时间从作业的提交时间算起。 提交时间表示 mbatchd 接受作业的时间,该作业包括新提交的作业,重新启动的作业 (由 brestart) 或来自远程集群的转发作业。
当抢先作业正在等待时,暂挂原因为:
先发制人的作业允许先发制人之前的宽限期。
如果使用较低版本的 bjobs,那么暂挂原因为:
未知待处理原因代码 <6701>;
该参数在 lsb.params, lsb.queues (覆盖 lsb.params) 和 lsb.applications (覆盖 lsb.params 和 lsb.queues) 中定义。
运行 badmin reconfig 以使更改生效。
缺省值
未定义 (如果未在任何位置定义参数,那么先占即用)。
预执行
语法
PRE_EXEC=命令描述
在应用程序级别启用执行前处理。 PRE_EXEC 命令在作业启动之前在执行主机上运行。 如果 PRE_EXEC 命令退出时带有非零退出代码,那么 LSF 会将作业重新排队到队列的前面。
- 队列级别命令
- 应用程序级别或作业级别命令。 如果同时在应用程序级别和作业级别指定命令,那么作业级别命令将覆盖应用程序级别命令; 将忽略应用程序级别命令。
PRE_EXEC 命令使用与作业相同的环境变量值,并在提交作业的用户的用户帐户下运行。
对于 UNIX 和 Linux,命令路径最多可以包含 4094 个字符,对于 Windows 最多可以包含 255 个字符,包括目录,文件名以及 %J (job_ID) 和 %I (index_ID) 的扩展值。
- 执行前和执行后命令在 /bin/sh -c下的 /tmp 目录中运行,这允许在命令中使用 shell 功能。 以下示例显示了有效的配置行:
PRE_EXEC= /usr/share/lsf/misc/testq_pre >> /tmp/pre.outPOST_EXEC= /usr/share/lsf/misc/testq_post | grep -v "Hey!" - LSF 将 PATH 环境变量设置为
PATH="/bin /usr/bin /sbin /usr/sbin" - stdin, stdout和 stderr 设置为 /dev/null
- 执行前和执行后命令在 cmd.exe /c 下运行
- 标准输入,标准输出和标准错误设置为 NULL
- PATH 由 LSF 服务的设置确定
对于在 Windows Server 2003 x64 Edition 平台上执行的预执行命令,用户必须具有 cmd.exe的读和执行特权。 此参数不能用于配置基于主机的执行前处理。
缺省值
尚未定义。 没有任何预执行命令与应用程序概要文件相关联。
进程限制
语法
PROCESSLIMIT=整数
描述
限制可以作为作业一部分的并发进程数。
缺省情况下,当达到进程限制时,将终止提交到应用程序概要文件的没有作业级别进程限制的作业。 应用程序级别限制将覆盖队列中指定的任何缺省限制。
当达到限制时,会按顺序将 SIGINT , SIGTERM 和 SIGKILL 发送到作业。
缺省值
无限制
优先级
语法
PRIORITY =整数
描述
指定在计算绝对作业优先级调度 (APS) 的作业优先级时用作因子的优先级。
有效值
指定 0 到 2147483646 之间的整数。
缺省值
尚未定义。
如果为用户,用户组或应用程序概要文件启用了 APS ,那么缺省值为 0。
RC账户
将帐户名称 (标记) 分配给通过 LSF 资源连接器借入的主机,以便其他用户组,用户或作业无法使用这些主机。
语法
RC_ACCOUNT=帐户名称
描述
将作业提交到指定了 RC_ACCOUNT 参数的应用程序概要文件时,将使用 RC_ACCOUNT 参数的值来标记为运行作业而借用的主机。 对于具有不同 RC_ACCOUNT 参数值 (或者根本未定义 RC_ACCOUNT 参数) 的其他应用程序,无法使用借用的主机。
在借用的主机加入集群后,使用 lshosts -s 命令来查看主机的 RC_ACCOUNT 参数的值。
示例
RC_ACCOUNT=project1
缺省值
没有为应用程序概要文件定义帐户
rc_reclaim_action
控制在回收主机时, LSF 资源连接器如何对正在主机上运行的作业执行操作。
语法
RC_RECLAIM_ACTION = REQUEUE | TERMINATE
描述
指定下列其中一项操作:
- REQUEUE: 将正在回收的主机上运行的作业重新排队。
- TERMINATE: 终止正在回收的主机上运行的作业。
缺省值
TERMINATE 表示交互式作业。
REQUEUE 表示所有其他作业。
远程 MAX_PREEXEC_RETRY
语法
REMOTE_MAX_PREEXEC_RETRY=整数
描述
仅适用于 LSF 多集群功能 的作业转发模型。 尝试从远程集群执行作业的预执行命令的最大次数。
如果作业的执行前命令失败了所有尝试,那么该作业将返回到提交集群。
有效值
到 lsf.h中定义的 INFINIT_INT。
缺省值
5
退出值
语法
REQUEUE_EXIT_VALUES=[exit_code...] [EXCLUDE(exit_code...)]
描述
启用自动作业重新排队并设置 LSB_EXIT_REQUEUE 环境变量。 使用空格来分隔多个退出代码。 应用程序级别的退出值将覆盖队列级别的值。 作业级别的退出值 (bsub -Q) 覆盖应用程序级别和队列级别的值。
"[all] [~number ...] | [number ...]"
保留关键字 all 指定所有退出代码。 退出代码通常介于 0 和 255 之间。 使用波浪号 (~) 从列表中排除指定的退出代码。
将作业重新排队到队列的头。 未保存失败运行的输出,并且 LSF 不会通知用户。
将退出代码定义为 EXCLUDE (exit_code) 以启用互斥作业重新排队,从而确保作业不会在 samehost 上重新运行。 互斥作业重新排队不适用于并行作业。
对于将 LSF 多集群功能 转发到远程执行集群的作业,会将提交集群中使用 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 时,将禁用重新运行。 "是" 和 "否" 自变量不区分大小写。
区块作业的成员可重新运行。 如果执行主机变得不可用,那么将从作业块中除去可重新运行的块作业成员,并将其分派给其他执行主机。
作业级别重新运行 (bsub -r) 将覆盖应用程序概要文件中指定的 RERUNNABLE 值,这将覆盖队列规范。 bmod -rn 将使可重新运行的作业不可重新运行覆盖应用程序概要文件和队列。
缺省值
尚未定义。
资源请求
语法
RES_REQ=请求
描述
用于确定合格主机的资源需求。 照常指定资源需求字符串。 资源需求字符串允许您以比使用负载阈值更灵活的方式指定条件。
- 选择
- 用量
- 订单
- 跨度
- 相同
- cu
- 亲缘性
资源需求字符串可以是简单的 (应用于整个作业) ,复合的 (应用于指定数量的槽) ,也可以包含替代资源 (2 之间的替代项或更简单的和/或复合)。 在应用程序级别设置复合资源需求时,如果定义了任何作业级别资源需求 (简单或复合) ,那么将忽略该需求。
复合和备用资源需求遵循同一组规则,用于确定如何在作业,应用程序和队列级别之间合并资源需求。 如果未设置作业级资源需求,那么复合或备用应用程序级需求将通过以下方式与队列级资源需求字符串进行交互:
- 在应用程序级别设置复合资源需求时,如果定义了任何作业级别资源需求 (简单或复合) ,那么将忽略该复合资源需求。
- 如果未定义队列级别资源需求,或者定义了复合或备用队列级别资源需求,那么将使用应用程序级别需求。
- 如果定义了简单的队列级别需求,那么应用程序级别和队列级别需求的组合如下所示:
节 复合/备用应用程序和简单队列行为 选择 两个级别都满足; 队列需求适用于所有条款 相同 已忽略队列级别 订单 跨度
应用程序级别部分覆盖队列级别部分 (如果存在给定级别); 队列需求 (如果使用) 适用于所有术语 用量 - 两个级别合并
- 队列需求 (如果将基于作业的资源应用于第一个术语) ,否则将应用于所有术语
- 如果发生冲突,那么应用程序级别部分将覆盖队列级别部分。
例如: 如果应用程序级别需求是num1*{rusage[R1]} + num2*{rusage[R2]}并且队列级别需求为rusage[RQ]其中,RQ是作业资源,合并的需求是num1*{rusage[merge(R1,RQ)]} + num2*{rusage[R2]}
复合或备用资源需求不支持 cu 部分或 rusage 部分中的 | | 运算符。
备用资源字符串使用 | | 运算符作为每个备用资源的分隔符。
多个 -R 字符串不能与多阶段 rusage 资源需求配合使用。
对于内部负载指标和持续时间,如果作业在作业或应用程序级别指定超过队列中指定的需求的资源预留需求,那么将拒绝这些作业。
缺省情况下, select [] 和 rusage [] 部分中的内存 (mem) 和交换 (swp) 限制以 MB 为单位指定。 在 lsf.conf 中使用 LSF_UNIT_FOR_LIMITS 为这些限制 (GB , TB , PB 或 EB) 指定更大的单位。
选择部分中的资源需求字符串必须符合更严格的语法。 严格的资源需求语法仅适用于 select 部分。 它不适用于其他资源需求部分 (order, rusage, same, span, cu或 affinity)。 如果 rusage 部分包含不可使用的资源,那么 LSF 将拒绝资源需求字符串。
选择部分
对于简单的资源需求,select必须全部满足在应用程序,队列和作业级别定义的部分。
Rusage 部分
该rusage部分可以指定其他请求。 要执行此操作,请使用OR(||) 操作程序以分隔其他rusage字符串。 作业级别的 rusage 部分优先。
复合资源需求不支持在组件 rusage 简单资源需求中使用 | | 运算符。 多个 rusage 字符串不能与多阶段 rusage 资源需求配合使用。
当使用简单资源需求字符串定义作业级别和应用程序级别的 rusage 部分时,为作业定义的 rusage 部分将覆盖应用程序概要文件中定义的 rusage 部分。 将合并 rusage 定义,优先使用作业级别 rusage 。 然后,任何队列级别需求都将与该结果合并。
- 应用程序级别 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=20和decay=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 150):duration=(10 10):decay=(1),swap=100] ...对于多阶段作业提交:bsub -app app_name -R "rusage[mem=(600 350):duration=(20 10):decay=(0 1)]" ...作业的结果需求为:rusage[mem=(600 350):duration=(20 10):decay=(0 1),swap=100]mem, duration 和 decay 的作业级别值将覆盖应用程序级别值。 但是,swap=100由于作业未指定 Swap,因此将保留应用程序概要文件中的值。
- 具有多阶段应用程序级别 rusage 的应用程序级别 RES_REQ:
RES_REQ=rusage[mem=(200 150):duration=(10 10):decay=(1)] ...对于作业提交:bsub -app app_name -R "rusage[mem=200:duration=15:decay=0]" ...作业的结果需求为:rusage[mem=200:duration=15:decay=0]作业级别值将覆盖应用程序级别的多相 rusage 字符串。
注: 合并的应用程序级别和作业级别 rusage 可使用资源需求必须满足 lsb.queues中的参数 RESRSV_LIMIT 设置的任何限制,否则作业将被拒绝。
订单部分
对于简单资源需求,order在作业级别定义的部分将覆盖任何应用程序级别的订单部分。 应用程序级别的顺序部分覆盖队列级别规范。 该order如果在作业级别指定了任何资源需求,那么将忽略在应用程序级别定义的节。 如果无资源需求包含order部分,缺省顺序r15s:pg已使用。
命令语法为:
[!][-]resource_name [: [-]resource_name]
例如:
bsub -R "order[!ncpus:mem]" myjob
"!" 仅适用于可使用的资源,因为可以在 rusage [] 部分中指定资源,并且可以在调度周期 (例如,插槽或内存) 中更改其值。 在 LSF 调度程序中,可以在不同的调度阶段释放 RUN , SSUSP , USUP 和 RSV 下的时郄。 因此,槽值可能会在不同的调度周期中发生变化。
跨度部分
对于简单资源需求,span在作业级别定义的部分将覆盖应用程序级别的 span 部分,这将覆盖队列级别的 span 部分。
同一部分
对于简单资源需求,全部same在分派作业之前,将组合在作业级别,应用程序级别和队列级别定义的部分。
cu 部分
对于简单资源需求,作业级别的 cu 部分将覆盖应用程序级别,而应用程序级别的 cu 部分将覆盖队列级别。
亲缘部分
对于简单资源需求,作业级别亲缘关系部分将覆盖应用程序级别,而应用程序级别亲缘关系部分将覆盖队列级别。
缺省值
select[type==local] order[r15s:pg]
如果定义了此参数并且指定了主机模型或布尔资源,那么缺省类型为 any。
可调整大小的作业
语法
RESIZABLE_JOBS = [Y|N|auto]
描述
N|n: 在应用程序概要文件中禁用了可调整大小的作业功能。 在此设置下,连接到此应用程序概要文件的所有作业都不可调整大小。 将拒绝所有 bresize 和 bsub -ar 命令,并显示正确的错误消息。
Y|y: 在应用程序概要文件中启用了调整大小,缺省情况下属于该应用程序的所有作业都可调整大小。 在此设置下,用户可以运行 bresize 命令来取消作业的暂挂资源分配请求或从现有作业分配释放资源,或者使用 bsub 来提交可自动调整大小的作业。
必须使用将 RESIZABLE_JOBS 定义为 auto 或 Y的应用程序概要文件来提交可调整大小的作业。 如果应用程序定义了 RESIZABLE_JOBS=auto,但管理员将其更改为 N 并重新配置 LSF ,那么没有作业级别可自动调整大小属性的作业将不再可自动调整大小。 对于处于通知阶段中间的运行作业, LSF 使当前通知完成并停止调度。 更改 RESIZABLE_JOBS 配置不会影响具有作业级别可自动调整大小属性的作业 (此行为与队列级别的互斥作业 bsub -x和 EXCLUSIVE 参数相同)。
可调整大小的作业可以具有备用资源需求和复合资源需求。 使用 bresize release 从复合资源需求释放插槽时,只能释放由复合资源需求的最后一个术语表示的插槽。 要在较早的术语中释放槽,请重复运行 bresize release 以在后续的最后术语中释放槽。
缺省值
如果参数未定义,那么缺省值为 N。
另请参阅
lsb.params 中的 RESIZABLE_JOBS
调整大小
语法
RESIZE_NOTIFY_CMD = notification_command描述
定义发生调整大小事件时要在作业的第一个执行主机上调用的可执行命令。 通知命令的最大长度为 4 KB。
缺省值
尚未定义。 不调用调整大小通知命令。
恢复控制
语法
- signal 是 UNIX 信号名称。 将指定的信号发送到作业。 在所有 UNIX 系统上都不支持同一组信号。 要显示系统上支持的信号的符号名称列表 (不含 SIG 前缀) ,请使用 kill -l 命令。
- command 指定要调用的 /bin/sh 命令行。 请勿在操作定义中引用命令行。 请勿指定后跟触发相同信号的操作的信号。 例如,请勿指定RESUME_CONTROL=bresume. 这将导致信号与操作之间的死锁。
描述
- 运行操作的配置行的内容/bin/sh -c以便您可以在命令中使用 shell 功能。
- 该命令的标准输入,输出和错误将重定向到 NULL 设备,因此您无法直接判断该命令是否正确运行。 UNIX 上的缺省空设备为 /dev/null。
- 该命令以作业的用户身份运行。
- 还会为命令操作设置为作业设置的所有环境变量。 设置了以下其他环境变量:
- LSB_JOBPGIDS-作业的当前进程组标识列表
- LSB_JOBPIDS-作业的当前进程标识列表
- 如果命令失败, LSF 将保留原始作业状态。
对于 UNIX 和 Linux,命令路径最多可以包含 4094 个字符,对于 Windows 最多可以包含 255 个字符,包括目录,文件名以及 %J (job_ID) 和 %I (index_ID) 的扩展值。
缺省值
- 在 UNIX 上,缺省情况下, RESUME 发送 SIGCONT。
- 在 Windows 上,已实现相当于 UNIX 信号的操作来执行缺省作业控制操作。 作业控制消息会替换 SIGINT 和 SIGTERM 信号,但只有定制的应用程序才能够处理它们。
rtask_gone_action
语法
RTASK_GONE_ACTION="[KILLJOB_TASKDONE | KILLJOB_TASKEXIT] [IGNORE_TASKCRASH]"
描述
定义 LSF 在检测到并行或分布式作业的远程任务已消失时应执行的操作。
此参数仅适用于 blaunch 分布式应用程序框架。
- IGNORE_TASK崩溃
远程任务崩溃。 LSF 什么都不做 作业继续启动下一个任务。
- killjob_taskdone
远程任务以零值退出。 LSF 终止作业中的所有任务。
- killjob_taskexit
远程任务以非零值退出。 LSF 终止作业中的所有任务。
环境变量
在应用程序概要文件中定义时,将在对指定应用程序运行 bsub -app 时设置 LSB_DJOB_RTASK_GONE_ACTION 变量。
您还可以使用环境变量 LSB_DJOB_RTASK_GONE_ACTION 来覆盖应用程序概要文件中设置的值。
示例
RTASK_GONE_ACTION="IGNORE_TASKCRASH KILLJOB_TASKEXIT"
缺省值
尚未定义。 LSF 什么都不做
运行限制
语法
RUNLIMIT=[hour:]分钟[/host_name | /host_model]
描述
缺省运行限制。 主机或主机模型的名称指定要使用的运行时规范化主机。
缺省情况下,处于 RUN 状态超过指定运行限制的作业将被 LSF 终止。 您可以选择提供自己的终止作业操作以覆盖此缺省值。
当达到作业级别运行限制时,将终止使用小于运行限制的作业级别运行限制 (bsub -W) 提交的作业。 使用大于最大运行限制的运行限制提交的作业将被拒绝。 应用程序级别限制将覆盖队列中指定的任何缺省限制。
运行限制的格式为 [hour:]minute。 分钟可以指定为大于 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 因子最大的主机 (集群中的最快主机)。
对于具有 LSF 多集群功能的作业,如果未定义其他 CPU 时间规范化主机,并且有关提交主机的信息不可用,那么 LSF 将使用 CPU 因子最大的主机 (集群中最快的主机)。
如果 RUNLIMIT 大于 30 分钟,那么不会对提交到区块作业队列的作业进行分块。
缺省值
无限制
运行时间
不推荐使用此参数。 请改为使用 ESTIMATED_RUNTIME。
堆叠上限
语法
STACKLIMIT=整数
描述
属于此队列中某个作业的所有进程的每个进程 (软) 堆栈段大小限制 (请参阅 getrlimit(2))。 应用程序级别限制将覆盖队列中指定的任何缺省限制,但必须小于提交队列的硬限制。
缺省情况下,以 KB 为单位指定限制。 在 lsf.conf 中使用 LSF_UNIT_FOR_LIMITS 为限制指定更大的单元 (MB , GB , TB , PB 或 EB)。
缺省值
无限制
成功退出值
语法
SUCCESS_EXIT_VALUES=[exit_code ...]
描述
指定 LSF 用于确定作业是否成功完成的退出值。 使用空格来分隔多个退出代码。 使用 LSB_SUCCESS_EXIT_VALUES 环境变量指定的作业级别成功退出值将覆盖应用程序概要文件中的配置。
对使用非零值成功退出的应用程序使用 SUCCESS_EXIT_VALUES ,以便 LSF 不会将非零退出代码解释为作业失败。
exit_code 应该是 0 到 255 之间的值。 使用空格来分隔退出代码值。
如果使用相同的退出代码定义了 SUCCESS_EXIT_VALUES 和 REQUEUE_EXIT_VALUES ,那么 REQUEUE_EXIT_VALUES 将优先,并且作业将设置为 PEND 状态并重新排队。
缺省值
0
暂挂控制
语法
- signal 是 UNIX 信号名称 (例如 SIGTSTP)。 将指定的信号发送到作业。 在所有 UNIX 系统上都不支持同一组信号。 要显示系统上支持的信号的符号名称列表 (不含 SIG 前缀) ,请使用 kill -l 命令。
- command 指定要调用的 /bin/sh 命令行。
- 请勿在操作定义中引用命令行。
- 请勿指定后跟触发相同信号的操作的信号。 例如,请勿指定SUSPEND_CONTROL=bstop. 这将导致信号与操作之间的死锁。
- CHKPNT 是一项特殊操作,它会导致系统对作业进行检查点检查。 通过自动向作业发送 SIGSTOP 信号来检查该作业,然后停止该作业。
描述
- 运行操作的配置行的内容/bin/sh -c以便您可以在命令中使用 shell 功能。
- 该命令的标准输入,输出和错误将重定向到 NULL 设备,因此您无法直接判断该命令是否正确运行。 UNIX 上的缺省空设备为 /dev/null。
- 该命令以作业的用户身份运行。
- 还会为命令操作设置为作业设置的所有环境变量。 设置了以下其他环境变量:
- LSB_JOBPGIDS-作业的当前进程组标识列表
- LSB_JOBPIDS-作业的当前进程标识列表
- LSB_SUSP_REASON-一个整数,表示 lsbatch.h 中定义的暂挂原因的位图。暂挂原因可以允许命令根据暂挂作业的原因执行不同的操作。
- LSB_SUSP_SUB原因-表示导致作业暂挂的装入索引的整数
- 如果命令失败, LSF 将保留原始作业状态。
如果在 LSB_SUSP_REASON 中设置了暂挂原因 SUSP_LOAD_REASON (按装入暂挂) ,那么 LSB_SUSP_SUBREASON 将设置为 lsf.h中定义的其中一个装入索引值。
在定制作业控件中同时使用LSB_SUSP_策数和LSB_SUSP_SUB策数,以确定导致暂挂作业的确切装入阈值。
- 如果 SUSPEND 命令需要其他操作,那么该操作还应该向应用程序发送相应的信号。 否则,即使在被 LSF 暂挂后,作业也可以继续运行。 例如,SUSPEND_CONTROL=bkill $LSB_JOBPIDS; 命令
对于 UNIX 和 Linux,命令路径最多可以包含 4094 个字符,对于 Windows 最多可以包含 255 个字符,包括目录,文件名以及 %J (job_ID) 和 %I (index_ID) 的扩展值。
缺省值
- 在 UNIX 上,缺省情况下, SUSPEND 会针对并行或交互式作业发送 SIGTSTP ,针对其他作业发送 SIGSTOP。
- 在 Windows 上,已实现相当于 UNIX 信号的操作来执行缺省作业控制操作。 作业控制消息会替换 SIGINT 和 SIGTERM 信号,但只有定制的应用程序才能够处理它们。
隔板限制
语法
SWAPLIMIT=整数
描述
限制作业的总虚拟内存限制量。
无论作业可能包含多少个进程,此限制都适用于整个作业。 应用程序级别限制将覆盖队列中指定的任何缺省限制。
当作业超过其 SWAPLIMIT 或 PROCESSLIMIT 时所执行的操作是按顺序发送 SIGQUIT , SIGINT , SIGTERM 和 SIGKILL。 对于 CPULIMIT , SIGINT , SIGTERM 和 SIGKILL 之前发送 SIGXCPU。
缺省情况下,以 KB 为单位指定限制。 在 lsf.conf 中使用 LSF_UNIT_FOR_LIMITS 为限制指定更大的单元 (MB , GB , TB , PB 或 EB)。
缺省值
无限制
任务限制
语法
TASKLIMIT=[minimum_limit [default_limit]] maximum_limit
描述
可以分配给作业的最大任务数。 对于并行作业,这是可以分配给作业的最大任务数。
队列级别 TASKLIMIT 的优先级高于应用程序级别 TASKLIMIT 和作业级别 TASKLIMIT。 应用程序级别 TASKLIMIT 的优先级高于作业级别 TASKLIMIT。 作业级别限制必须在应用程序概要文件和队列的最大和最小限制内。
(可选) 指定作业任务的最小数目和缺省数目。 所有限制都必须是大于或等于 1 且满足以下关系的正数:
1 <= 最小 <= 缺省值 <= 最大
在 LSF 多集群功能的作业转发模型中,本地集群在转发作业之前会在远程集群上考虑接收队列的 TASKLIMIT 。 如果远程集群中接收队列的 TASKLIMIT 定义无法满足作业的任务需求,那么不会将该作业转发到该远程队列。
缺省值
无限制,缺省任务数为 1
终止控制
语法
- signal 是 UNIX 信号名称 (例如, SIGTERM)。 将指定的信号发送到作业。 在所有 UNIX 系统上都不支持同一组信号。 要显示系统上支持的信号的符号名称列表 (不含 SIG 前缀) ,请使用 kill -l 命令。
- command 指定要调用的 /bin/sh 命令行。
- 请勿在操作定义中引用命令行。
- 请勿指定后跟触发相同信号的操作的信号。 例如,请勿指定TERMINATE_CONTROL=bkill. 这将导致信号与操作之间的死锁。
- CHKPNT 是一项特殊操作,它会导致系统对作业进行检查点检查。 将自动对作业进行检查点和终止。
描述
- 运行操作的配置行的内容/bin/sh -c以便您可以在命令中使用 shell 功能。
- 该命令的标准输入,输出和错误将重定向到 NULL 设备,因此您无法直接判断该命令是否正确运行。 UNIX 上的缺省空设备为 /dev/null。
- 该命令以作业的用户身份运行。
- 还会为命令操作设置为作业设置的所有环境变量。 设置了以下其他环境变量:
- LSB_JOBPGIDS-作业的当前进程组标识列表
- LSB_JOBPIDS-作业的当前进程标识列表
对于 UNIX 和 Linux,命令路径最多可以包含 4094 个字符,对于 Windows 最多可以包含 255 个字符,包括目录,文件名以及 %J (job_ID) 和 %I (index_ID) 的扩展值。
缺省值
- 在 UNIX 上,缺省情况下, TERMINATE 按该顺序发送 SIGINT , SIGTERM 和 SIGILL。
- 在 Windows 上,已实现相当于 UNIX 信号的操作来执行缺省作业控制操作。 作业控制消息会替换 SIGINT 和 SIGTERM 信号,但只有定制的应用程序才能够处理它们。 终止由 TerminateProcess() 系统调用实现。
线程限制
语法
THREADLIMIT=整数
描述
限制可作为作业一部分的并发线程数。 超过限制会导致作业终止。 系统按顺序向属于作业的所有进程发送以下信号 :SIGINT , SIGTERM 和 SIGKILL。
缺省情况下,当达到线程限制时,提交到队列的没有作业级别线程限制的作业将被终止。 应用程序级别限制将覆盖队列中指定的任何缺省限制。
限制必须是正整数。
缺省值
无限制
每项任务的线程限制
语法
THREADLIMIT=线程数
描述
作业的线程限制值限制了作业中可同时存在的线程数量,该值在 THREADLIMIT 参数中定义。 超过限制会导致作业终止。 限制必须是正整数。
使用 THREADLIMIT_PER_TASK 参数计算作业的线程限制值,您可以根据作业的任务数量使用更精细的线程限制。 当指定时, LSF 通过将 THREADLIMIT_PER_TASK 值乘以作业的任务数来计算作业的线程限制。 因此,在整个工作申请过程中,线程限制不是一个固定值。
THREADLIMIT_PER_TASK 参数仅用于计算作业的线程限制,不会限制每个任务的线程数。
THREADLIMIT_PER_TASK 参数不能与 THREADLIMIT 参数配置在同一队列中。 如果您在同一应用程序中指定了这两个值,则仅使用 THREADLIMIT_PER_TASK 值,而 THREADLIMIT 值将被忽略。
- 工作和应用程序级别 THREADLIMIT 值不能超过 THREADLIMIT_PER_TASK 值乘以工作任务的数量。
- 应用程序级别 THREADLIMIT_PER_TASK 值不能超过队列级别 THREADLIMIT_PER_TASK 值。
- 应用程序级别 THREADLIMIT_PER_TASK 值不能超过队列级别 THREADLIMIT 值。
示例
THREADLIMIT_PER_TASK=10
缺省值
未定义
用户 PAM_CREDS
对此应用程序应用 PAM 限制。
语法
USE_PAM_CREDS=y | n | [limits] [session]
描述
USE_PAM_CREDS 仅在 Linux 系统上受支持。 如果执行主机未配置 PAM ,并且已启用此参数,那么作业将失败。
如果 USE_PAM_CREDS 设置为 y 或 limits,那么 LSF 可以在使用 PAM 将其作业分派到 Linux 主机时将 PAM 限制应用于应用程序 LSF。 LSF 作业未在 PAM 会话中运行。
- 如果在第一个执行主机上启动了作业,那么作业 RES 将为用户打开 PAM 会话,并在该会话中派生 RES 进程。 此 RES 进程将成为用户的作业。
- 如果任务由 blaunch 命令或 API 启动,那么任务 RES 将为用户打开 PAM 会话,并在该会话中执行 RES 进程。 此 RES 进程将成为用户的任务。
limits 关键字可与 session 关键字一起定义。
如果 LSF 限制比 PAM 限制更严格,那么将使用 LSF 限制,否则将使用 PAM 限制。 PAM 限制是 limits.conf 文件中定义的系统资源限制。
对于并行作业,仅当定义了 USE_PAM_CREDS=y 或 USE_PAM_CREDS=limits 时,才会在第一个执行主机上启动 PAM 会话。 如果定义了 USE_PAM_CREDS=session 或 USE_PAM_CREDS=limits session ,那么将对所有任务启动 PAM 会话。
- 如果 USE_PAM_CREDS 设置为 y 或 limits,那么 LSF 将假定已创建 Linux PAM 服务 "lsf"。
- 如果 USE_PAM_CREDS 设置为 session,那么 LSF 将假定已创建 Linux PAM 服务 "lsf-<clustername>"。
- 如果 USE_PAM_CREDS 设置为 limits session,那么 LSF 假定已创建 Linux PAM 服务 "lsf" 和 "lsf-<clustername>"。
作业 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 已禁用。
看守程序
语法
WATCHDOG=script[文件/路径/到/脚本] init[init_delay] period[start_interval]
描述
使 LSF 能够使用看守程序功能来定期运行外部脚本,以检查应用程序数据,日志和其他信息。 LSF 可以使用这些脚本来传递作业信息。
此参数使用以下关键字:
- 脚本
- 必需。 此关键字指定外部看守程序脚本的文件路径,以检查应用程序数据和其他信息。 此文件必须具有正确的许可权,作业提交用户才能执行脚本。
- 初始化
- 可选。 此关键字指定在作业启动后启动看守程序脚本的延迟 (以秒为单位)。 指定大于 30 秒的数字。 缺省值为 60 秒。
- 周期
- 可选。 此关键字指定在看守程序脚本上次启动后启动看守程序脚本的时间间隔 (以秒为单位)。 指定大于 30 秒的数字。 缺省值为 60 秒。
所有作业环境变量都可用于看守程序脚本。 此外,以下 LSF 作业级别资源使用环境变量可供看守程序脚本使用:
- LSB_GPU_ALLOC_INFO
- LSB_JOB_AVG_MEM
- LSB_JOB_CPU_TIME
- LSB_JOB_MAX_MEM
- LSB_JOB_MEM
- LSB_JOB_NTHREAD
- LSB_JOB_PGIDS
- LSB_JOB_PIDS
- LSB_JOB_RUN_TIME
- LSB_JOB_SWAP
缺省值
尚未定义。
基于时间的自动配置
使用 if-else 构造和时间表达式来定义文件中的时间窗口。 在时间窗口中定义的配置仅在指定的时间段内适用; 在任何时间窗口外部定义的配置在所有时间都适用。 编辑该文件后,运行 badmin reconfig 以重新配置集群。
文件中的时间表达式由 LSF 根据 mbatchd 守护程序开始时间每 10 分钟进行一次求值。 当表达式求值为 true 时, LSF 会实时更改配置,而不重新启动 mbatchd,从而提供持续的系统可用性。
根据集群组的共享配置 (使用 #include 参数) ,基于时间的配置还支持 LSF 多集群功能 配置。 您可以通过在本地配置文件中使用基于时间的功能来包含公共配置文件。
示例
Begin application
NAME=app1
#if time(16:00-18:00 EDT)
CPULIMIT=180/hostA
#else
CPULIMIT=60/hostA
#endif
End application
Begin application
NAME=app1
CPULIMIT=180/hostA
End application
Begin application
NAME=app1
CPULIMIT=60/hostA
End application
指定时区是可选的。 如果未指定时区,那么 LSF 将使用本地系统时区。 LSF 支持所有标准时区缩写。