Bump loofah from 2.2.3 to 2.3.1 in /apps/workbench
[arvados.git] / doc / install / crunch2-slurm / install-dispatch.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Install the SLURM dispatcher
5
6 ...
7 {% comment %}
8 Copyright (C) The Arvados Authors. All rights reserved.
9
10 SPDX-License-Identifier: CC-BY-SA-3.0
11 {% endcomment %}
12
13 The SLURM dispatcher can run on any node that can submit requests to both the Arvados API server and the SLURM controller.  It is not resource-intensive, so you can run it on the API server node.
14
15 h2. Install the dispatcher
16
17 First, "add the appropriate package repository for your distribution":{{ site.baseurl }}/install/install-manual-prerequisites.html#repos.
18
19 On Red Hat-based systems:
20
21 <notextile>
22 <pre><code>~$ <span class="userinput">sudo yum install crunch-dispatch-slurm</span>
23 ~$ <span class="userinput">sudo systemctl enable crunch-dispatch-slurm</span>
24 </code></pre>
25 </notextile>
26
27 On Debian-based systems:
28
29 <notextile>
30 <pre><code>~$ <span class="userinput">sudo apt-get install crunch-dispatch-slurm</span>
31 </code></pre>
32 </notextile>
33
34 h2. Configure the dispatcher (optional)
35
36 Crunch-dispatch-slurm reads the common configuration file at @/etc/arvados/config.yml@.  The essential configuration parameters will already be set by previous install steps, so no additional configuration is required.  The following sections describe optional configuration parameters.
37
38 h3(#PollPeriod). Containers.PollInterval
39
40 crunch-dispatch-slurm 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 @ns@, @us@, @ms@, @s@, @m@, or @h@.  For example:
41
42 <notextile>
43 <pre>
44 Clusters:
45   zzzzz:
46     Containers:
47       <code class="userinput">PollInterval: <b>3m30s</b>
48 </code></pre>
49 </notextile>
50
51 h3(#ReserveExtraRAM). Containers.ReserveExtraRAM: Extra RAM for jobs
52
53 Extra RAM to reserve (in bytes) on each SLURM 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.  Helpful when using @-cgroup-parent-subsystem@, where @crunch-run@ and @arv-mount@ share the control group memory limit with the user process.  In this situation, at least 256MiB is recommended to accomodate each container's @crunch-run@ and @arv-mount@ processes.
54
55 Supports suffixes @KB@, @KiB@, @MB@, @MiB@, @GB@, @GiB@, @TB@, @TiB@, @PB@, @PiB@, @EB@, @EiB@ (where @KB@ is 10[^3^], @KiB@ is 2[^10^], @MB@ is 10[^6^], @MiB@ is 2[^20^] and so forth).
56
57 <notextile>
58 <pre>
59 Clusters:
60   zzzzz:
61     Containers:
62       <code class="userinput">ReserveExtraRAM: <b>256MiB</b></code>
63 </pre>
64 </notextile>
65
66 h3(#MinRetryPeriod). Containers.MinRetryPeriod: Rate-limit repeated attempts to start containers
67
68 If SLURM is unable to run a container, the dispatcher will submit it again after the next PollPeriod. If PollPeriod is very short, this can be excessive. If MinRetryPeriod is set, the dispatcher will avoid submitting the same container to SLURM more than once in the given time span.
69
70 <notextile>
71 <pre>
72 Clusters:
73   zzzzz:
74     Containers:
75       <code class="userinput">MinRetryPeriod: <b>30s</b></code>
76 </pre>
77 </notextile>
78
79 h3(#KeepServiceURIs). Containers.SLURM.SbatchEnvironmentVariables
80
81 Some Arvados installations run a local keepstore on each compute node to handle all Keep traffic.  To override Keep service discovery and access the local keep server instead of the global servers, set ARVADOS_KEEP_SERVICES in SbatchEnvironmentVariables:
82
83 <notextile>
84 <pre>
85 Clusters:
86   zzzzz:
87     Containers:
88       SLURM:
89         <span class="userinput">SbatchEnvironmentVariables:
90           ARVADOS_KEEP_SERVICES: "http://127.0.0.1:25107"</span>
91 </code></pre>
92 </notextile>
93
94 h3(#PrioritySpread). Containers.SLURM.PrioritySpread
95
96 crunch-dispatch-slurm adjusts the "nice" values of its SLURM jobs to ensure containers are prioritized correctly relative to one another. This option tunes the adjustment mechanism.
97 * If non-Arvados jobs run on your SLURM cluster, and your Arvados containers are waiting too long in the SLURM queue because their "nice" values are too high for them to compete with other SLURM jobs, you should use a smaller PrioritySpread value.
98 * If you have an older SLURM system that limits nice values to 10000, a smaller @PrioritySpread@ can help avoid reaching that limit.
99 * In other cases, a larger value is beneficial because it reduces the total number of adjustments made by executing @scontrol@.
100
101 The smallest usable value is @1@. The default value of @10@ is used if this option is zero or negative. Example:
102
103 <notextile>
104 <pre>
105 Clusters:
106   zzzzz:
107     Containers:
108       SLURM:
109         <code class="userinput">PrioritySpread: <b>1000</b></code></pre>
110 </notextile>
111
112 h3(#SbatchArguments). Containers.SLURM.SbatchArgumentsList
113
114 When crunch-dispatch-slurm invokes @sbatch@, you can add arguments to the command by specifying @SbatchArguments@.  You can use this to send the jobs to specific cluster partitions or add resource requests.  Set @SbatchArguments@ to an array of strings.  For example:
115
116 <notextile>
117 <pre>
118 Clusters:
119   zzzzz:
120     Containers:
121       SLURM:
122         <code class="userinput">SbatchArgumentsList:
123           - <b>"--partition=PartitionName"</b></code>
124 </pre>
125 </notextile>
126
127 Note: If an argument is supplied multiple times, @slurm@ uses the value of the last occurrence of the argument on the command line.  Arguments specified through Arvados are added after the arguments listed in SbatchArguments.  This means, for example, an Arvados container with that specifies @partitions@ in @scheduling_parameter@ will override an occurrence of @--partition@ in SbatchArguments.  As a result, for container parameters that can be specified through Arvados, SbatchArguments can be used to specify defaults but not enforce specific policy.
128
129 h3(#CrunchRunCommand-cgroups). Containers.CrunchRunArgumentList: Dispatch to SLURM cgroups
130
131 If your SLURM cluster uses the @task/cgroup@ TaskPlugin, you can configure Crunch's Docker containers to be dispatched inside SLURM's cgroups.  This provides consistent enforcement of resource constraints.  To do this, use a crunch-dispatch-slurm configuration like the following:
132
133 <notextile>
134 <pre>
135 Clusters:
136   zzzzz:
137     Containers:
138       <code class="userinput">CrunchRunArgumentsList:
139         - <b>"-cgroup-parent-subsystem=memory"</b></code>
140 </pre>
141 </notextile>
142
143 The choice of subsystem ("memory" in this example) must correspond to one of the resource types enabled in SLURM's @cgroup.conf@. Limits for other resource types will also be respected.  The specified subsystem is singled out only to let Crunch determine the name of the cgroup provided by SLURM.  When doing this, you should also set "ReserveExtraRAM":#ReserveExtraRAM .
144
145 {% include 'notebox_begin' %}
146
147 Some versions of Docker (at least 1.9), when run under systemd, require the cgroup parent to be specified as a systemd slice.  This causes an error when specifying a cgroup parent created outside systemd, such as those created by SLURM.
148
149 You can work around this issue by disabling the Docker daemon's systemd integration.  This makes it more difficult to manage Docker services with systemd, but Crunch does not require that functionality, and it will be able to use SLURM's cgroups as container parents.  To do this, "configure the Docker daemon on all compute nodes":install-compute-node.html#configure_docker_daemon to run with the option @--exec-opt native.cgroupdriver=cgroupfs@.
150
151 {% include 'notebox_end' %}
152
153 h3(#CrunchRunCommand-network). Containers.CrunchRunArgumentList: Using host networking for containers
154
155 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.
156
157 <notextile>
158 <pre>
159 Clusters:
160   zzzzz:
161     Containers:
162       <code class="userinput">CrunchRunArgumentsList:
163         - <b>"-container-enable-networking=always"</b>
164         - <b>"-container-network-mode=host"</b></code>
165 </pre>
166 </notextile>
167
168 h2. Restart the dispatcher
169
170 {% include 'notebox_begin' %}
171
172 The crunch-dispatch-slurm package includes configuration files for systemd.  If you're using a different init system, you'll need to configure a service to start and stop a @crunch-dispatch-slurm@ process as desired.  The process should run from a directory where the @crunch@ user has write permission on all compute nodes, such as its home directory or @/tmp@.  You do not need to specify any additional switches or environment variables.
173
174 {% include 'notebox_end' %}
175
176 Restart the dispatcher to run with your new configuration:
177
178 <notextile>
179 <pre><code>~$ <span class="userinput">sudo systemctl restart crunch-dispatch-slurm</span>
180 </code></pre>
181 </notextile>