Merge branch '8784-dir-listings'
[arvados.git] / doc / install / crunch2-slurm / install-slurm.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Set up SLURM
5 ...
6 {% comment %}
7 Copyright (C) The Arvados Authors. All rights reserved.
8
9 SPDX-License-Identifier: CC-BY-SA-3.0
10 {% endcomment %}
11
12 h2(#slurm). Set up SLURM
13
14 On the API server, install SLURM and munge, and generate a munge key.
15
16 On Debian-based systems:
17
18 <notextile>
19 <pre><code>~$ <span class="userinput">sudo /usr/bin/apt-get install slurm-llnl munge</span>
20 ~$ <span class="userinput">sudo /usr/sbin/create-munge-key</span>
21 </code></pre>
22 </notextile>
23
24 On Red Hat-based systems:
25
26 <notextile>
27 <pre><code>~$ <span class="userinput">sudo yum install slurm munge slurm-munge</span>
28 </code></pre>
29 </notextile>
30
31 Now we need to give SLURM a configuration file.  On Debian-based systems, this is installed at @/etc/slurm-llnl/slurm.conf@.  On Red Hat-based systems, this is installed at @/etc/slurm/slurm.conf@.  Here's an example @slurm.conf@:
32
33 <notextile>
34 <pre>
35 ControlMachine=uuid_prefix.your.domain
36 SlurmctldPort=6817
37 SlurmdPort=6818
38 AuthType=auth/munge
39 StateSaveLocation=/tmp
40 SlurmdSpoolDir=/tmp/slurmd
41 SwitchType=switch/none
42 MpiDefault=none
43 SlurmctldPidFile=/var/run/slurmctld.pid
44 SlurmdPidFile=/var/run/slurmd.pid
45 ProctrackType=proctrack/pgid
46 CacheGroups=0
47 ReturnToService=2
48 TaskPlugin=task/affinity
49 #
50 # TIMERS
51 SlurmctldTimeout=300
52 SlurmdTimeout=300
53 InactiveLimit=0
54 MinJobAge=300
55 KillWait=30
56 Waittime=0
57 #
58 # SCHEDULING
59 SchedulerType=sched/backfill
60 SchedulerPort=7321
61 SelectType=select/linear
62 FastSchedule=0
63 #
64 # LOGGING
65 SlurmctldDebug=3
66 #SlurmctldLogFile=
67 SlurmdDebug=3
68 #SlurmdLogFile=
69 JobCompType=jobcomp/none
70 #JobCompLoc=
71 JobAcctGatherType=jobacct_gather/none
72 #
73 # COMPUTE NODES
74 NodeName=DEFAULT
75 PartitionName=DEFAULT MaxTime=INFINITE State=UP
76
77 NodeName=compute[0-255]
78 PartitionName=compute Nodes=compute[0-255] Default=YES Shared=YES
79 </pre>
80 </notextile>
81
82 h3. SLURM configuration essentials
83
84 Whenever you change this file, you will need to update the copy _on every compute node_ as well as the controller node, and then run @sudo scontrol reconfigure@.
85
86 *@ControlMachine@* should be a DNS name that resolves to the SLURM controller (dispatch/API server). This must resolve correctly on all SLURM worker nodes as well as the controller itself. In general SLURM is very sensitive about all of the nodes being able to communicate with the controller _and one another_, all using the same DNS names.
87
88 *@NodeName=compute[0-255]@* establishes that the hostnames of the worker nodes will be compute0, compute1, etc. through compute255.
89 * There are several ways to compress sequences of names, like @compute[0-9,80,100-110]@. See the "hostlist" discussion in the @slurm.conf(5)@ and @scontrol(1)@ man pages for more information.
90 * It is not necessary for all of the nodes listed here to be alive in order for SLURM to work, although you should make sure the DNS entries exist. It is easiest to define lots of hostnames up front, assigning them to real nodes and updating your DNS records as the nodes appear. This minimizes the frequency of @slurm.conf@ updates and use of @scontrol reconfigure@.
91
92 Each hostname in @slurm.conf@ must also resolve correctly on all SLURM worker nodes as well as the controller itself. Furthermore, the hostnames used in the configuration file must match the hostnames reported by @hostname@ or @hostname -s@ on the nodes themselves. This applies to the ControlMachine as well as the worker nodes.
93
94 For example:
95 * In @slurm.conf@ on control and worker nodes: @ControlMachine=uuid_prefix.your.domain@
96 * In @slurm.conf@ on control and worker nodes: @NodeName=compute[0-255]@
97 * In @/etc/resolv.conf@ on control and worker nodes: @search uuid_prefix.your.domain@
98 * On the control node: @hostname@ reports @uuid_prefix.your.domain@
99 * On worker node 123: @hostname@ reports @compute123.uuid_prefix.your.domain@
100
101 h3. Automatic hostname assignment
102
103 The API server will choose an unused hostname from the set given in @application.yml@, which defaults to @compute[0-255]@.
104
105 If it is not feasible to give your compute nodes hostnames like compute0, compute1, etc., you can accommodate other naming schemes with a bit of extra configuration.
106
107 If you want Arvados to assign names to your nodes with a different consecutive numeric series like @{worker1-0000, worker1-0001, worker1-0002}@, add an entry to @application.yml@; see @/var/www/arvados-api/current/config/application.default.yml@ for details. Example:
108 * In @application.yml@: <code>assign_node_hostname: worker1-%<slot_number>04d</code>
109 * In @slurm.conf@: <code>NodeName=worker1-[0000-0255]</code>
110
111 If your worker hostnames are already assigned by other means, and the full set of names is known in advance, have your worker node bootstrapping script (see "Installing a compute node":install-compute-node.html) send its current hostname, rather than expect Arvados to assign one.
112 * In @application.yml@: <code>assign_node_hostname: false</code>
113 * In @slurm.conf@: <code>NodeName=alice,bob,clay,darlene</code>
114
115 If your worker hostnames are already assigned by other means, but the full set of names is _not_ known in advance, you can use the @slurm.conf@ and @application.yml@ settings in the previous example, but you must also update @slurm.conf@ (both on the controller and on all worker nodes) and run @sudo scontrol reconfigure@ whenever a new node comes online.