arvados-dispatch-lsf
is only relevant for on premises clusters that will spool jobs to LSF. Skip this section if you use Slurm or if you are installing a cloud cluster.
Containers can be dispatched to an LSF cluster. The dispatcher sends work to the cluster using LSF’s bsub
command, so it works in a variety of LSF configurations.
In order to run containers, you must choose a user that has permission to set up FUSE mounts and run Singularity/Docker containers on each compute node. This install guide refers to this user as the crunch
user. We recommend you create this user on each compute node with the same UID and GID, and add it to the fuse
and docker
system groups to grant it the necessary permissions. However, you can run the dispatcher under any account with sufficient permissions across the cluster.
Set up all of your compute nodes with Docker or Singularity.
Current limitations:
Arvados-dispatch-lsf reads the common configuration file at /etc/arvados/config.yml
.
Add a DispatchLSF entry to the Services section, using the hostname where arvados-dispatch-lsf
will run, and an available port:
Services:
DispatchLSF:
InternalURLs:
"http://hostname.zzzzz.arvadosapi.com:9007
": {}
Review the following configuration parameters and adjust as needed.
arvados-dispatch-lsf uses sudo
to execute bsub
, for example sudo -E -u crunch bsub [...]
. This means the crunch
account must exist on the hosts where LSF jobs run (“execution hosts”), as well as on the host where you are installing the Arvados LSF dispatcher (the “submission host”). To use a user account other than crunch
, configure BsubSudoUser
:
Containers:
LSF:
BsubSudoUser: lsfuser
Alternatively, you can arrange for the arvados-dispatch-lsf process to run as an unprivileged user that has a corresponding account on all compute nodes, and disable the use of sudo
by specifying an empty string:
Containers:
LSF:
# Don't use sudo
BsubSudoUser: ""
When arvados-dispatch-lsf invokes bsub
, you can add arguments to the command by specifying BsubArgumentsList
. You can use this to send the jobs to specific cluster partitions or add resource requests. Set BsubArgumentsList
to an array of strings.
Template variables starting with % will be substituted as follows:
%U uuid
%C number of VCPUs
%M memory in MB
%T tmp in MB
%G number of GPU devices (runtime_constraints.cuda.device_count
)
Use %% to express a literal %. The %%J in the default will be changed to %J, which is interpreted by bsub
itself.
For example:
Containers:
LSF:
BsubArgumentsList: ["-o", "/tmp/crunch-run.%%J.out", "-e", "/tmp/crunch-run.%%J.err", "-J", "%U", "-n", "%C", "-D", "%MMB", "-R", "rusage[mem=%MMB:tmp=%TMB] span[hosts=1]", "-R", "select[mem>=%MMB]", "-R", "select[tmp>=%TMB]", "-R", "select[ncpus>=%C]"]
Note that the default value for BsubArgumentsList
uses the -o
and -e
arguments to write stdout/stderr data to files in /tmp
on the compute nodes, which is helpful for troubleshooting installation/configuration problems. Ensure you have something in place to delete old files from /tmp
, or adjust these arguments accordingly.
If the container requests access to GPUs (runtime_constraints.cuda.device_count
of the container request is greater than zero), the command line arguments in BsubCUDAArguments
will be added to the command line after BsubArgumentsList
. This should consist of the additional bsub
flags your site requires to schedule the job on a node with GPU support. Set BsubCUDAArguments
to an array of strings. For example:
Containers:
LSF:
BsubCUDAArguments: ["-gpu", "num=%G"]
arvados-dispatch-lsf polls the API server periodically for new containers to run. The PollInterval
option controls how often this poll happens. Set this to a string of numbers suffixed with one of the time units s
, m
, or h
. For example:
Containers:
PollInterval: 10s
Extra RAM to reserve (in bytes) on each LSF job submitted by Arvados, which is added to the amount specified in the container’s runtime_constraints
. If not provided, the default value is zero.
Supports suffixes KB
, KiB
, MB
, MiB
, GB
, GiB
, TB
, TiB
, PB
, PiB
, EB
, EiB
(where KB
is 103, KiB
is 210, MB
is 106, MiB
is 220 and so forth).
Containers:
ReserveExtraRAM: 256MiB
Older Linux kernels (prior to 3.18) have bugs in network namespace handling which can lead to compute node lockups. This by is indicated by blocked kernel tasks in “Workqueue: netns cleanup_net”. If you are experiencing this problem, as a workaround you can disable use of network namespaces by Docker across the cluster. Be aware this reduces container isolation, which may be a security risk.
Containers:
CrunchRunArgumentsList:
- "-container-enable-networking=always"
- "-container-network-mode=host"
# yum install arvados-dispatch-lsf
# apt-get install arvados-dispatch-lsf
# systemctl enable --now arvados-dispatch-lsf
# systemctl status arvados-dispatch-lsf
[...]
If systemctl status
indicates it is not running, use journalctl
to check logs for errors:
# journalctl -n12 --unit arvados-dispatch-lsf
Make sure the cluster config file is up to date on the API server host then restart the API server and controller processes to ensure the configuration changes are visible to the whole cluster.
# systemctl restart nginx arvados-controller
The content of this documentation is licensed under the
Creative
Commons Attribution-Share Alike 3.0 United States licence.
Code samples in this documentation are licensed under the
Apache License, Version 2.0.