Add slurm-setup.md
This is the first slurm setup with GPU server in standalone machine
This commit is contained in:
215
slurm-setup.md
Normal file
215
slurm-setup.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# SLURM Setup SOP (Single Node CPU + GPU)
|
||||
|
||||
## Overview
|
||||
|
||||
This document is a **single-node SLURM cluster setup guide** where:
|
||||
- CPU + GPU scheduling is enabled
|
||||
- Munge authentication is used
|
||||
- Basic job submission is tested
|
||||
|
||||
---
|
||||
|
||||
## Architecture (High Level)
|
||||
|
||||
| Component | Detail |
|
||||
|---|---|
|
||||
| Controller + Compute Node | Same machine |
|
||||
| Scheduler | SLURM |
|
||||
| Auth | Munge |
|
||||
| GPU Support | GRES (Generic Resource Scheduling) |
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### OS Setup
|
||||
|
||||
```bash
|
||||
apt update && apt upgrade -y
|
||||
```
|
||||
|
||||
### GPU Driver Install
|
||||
|
||||
```bash
|
||||
ubuntu-drivers autoinstall
|
||||
reboot
|
||||
nvidia-smi
|
||||
```
|
||||
|
||||
> **Notes:**
|
||||
> - `ubuntu-drivers autoinstall` — automatically installs the best NVIDIA driver
|
||||
> - `nvidia-smi` — verifies that the GPU is being detected
|
||||
|
||||
---
|
||||
|
||||
## Munge Setup (Authentication Layer)
|
||||
|
||||
### Install + Configure
|
||||
|
||||
```bash
|
||||
sudo apt install munge -y
|
||||
|
||||
sudo mkdir -p /etc/munge
|
||||
sudo dd if=/dev/urandom of=/etc/munge/munge.key bs=1 count=1024
|
||||
|
||||
sudo chown munge:munge /etc/munge/munge.key
|
||||
sudo chmod 400 /etc/munge/munge.key
|
||||
|
||||
sudo systemctl enable --now munge
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```bash
|
||||
munge -n | unmunge
|
||||
```
|
||||
|
||||
> **Notes:**
|
||||
> - Munge = SLURM's authentication backbone
|
||||
> - A shared key establishes trust between nodes
|
||||
> - `munge -n | unmunge` — generates and verifies a token
|
||||
|
||||
---
|
||||
|
||||
## SLURM Installation
|
||||
|
||||
```bash
|
||||
sudo apt install slurm-wlm slurmd slurmctld slurm-client -y
|
||||
```
|
||||
|
||||
### Components
|
||||
|
||||
| Package | Role |
|
||||
|---|---|
|
||||
| `slurmctld` | Controller daemon (scheduler brain) |
|
||||
| `slurmd` | Node agent |
|
||||
| `slurm-client` | CLI tools (`sbatch`, `squeue`) |
|
||||
| `slurm-wlm` | Core workload manager |
|
||||
|
||||
---
|
||||
|
||||
## SLURM Configuration
|
||||
|
||||
### Main Config File — `/etc/slurm/slurm.conf`
|
||||
|
||||
```ini
|
||||
ClusterName=single
|
||||
SlurmctldHost=brilliant
|
||||
|
||||
SlurmUser=slurm
|
||||
SlurmdUser=root
|
||||
AuthType=auth/munge
|
||||
|
||||
StateSaveLocation=/tmp/slurmctld
|
||||
SlurmdSpoolDir=/tmp/slurmd
|
||||
|
||||
SelectType=select/cons_tres
|
||||
SelectTypeParameters=CR_Core
|
||||
SchedulerType=sched/backfill
|
||||
|
||||
GresTypes=gpu
|
||||
|
||||
NodeName=brilliant CPUs=4 RealMemory=32000 Gres=gpu:1 State=UNKNOWN
|
||||
PartitionName=debug Nodes=brilliant Default=YES State=UP
|
||||
```
|
||||
|
||||
### Config Reference
|
||||
|
||||
| Config | Meaning |
|
||||
|---|---|
|
||||
| `ClusterName` | Cluster name |
|
||||
| `SlurmctldHost` | Controller node hostname |
|
||||
| `SlurmUser` | SLURM service user |
|
||||
| `AuthType=auth/munge` | Munge-based authentication |
|
||||
| `StateSaveLocation` | Scheduler state store location |
|
||||
| `SlurmdSpoolDir` | Node job spool directory |
|
||||
| `SelectType=cons_tres` | Resource tracking (CPU, GPU, mem) |
|
||||
| `GresTypes=gpu` | Enables GPU resource |
|
||||
| `NodeName` | Node definition |
|
||||
| `CPUs` | Available CPU cores |
|
||||
| `RealMemory` | RAM in MB |
|
||||
| `Gres=gpu:1` | GPU count |
|
||||
| `PartitionName` | Job queue |
|
||||
|
||||
---
|
||||
|
||||
## Directory Setup
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /tmp/slurmctld /tmp/slurmd
|
||||
sudo chown -R slurm:slurm /tmp/slurmctld
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Service Fix (Common Issue)
|
||||
|
||||
```bash
|
||||
sudo nano /etc/default/slurmctld
|
||||
```
|
||||
|
||||
Uncomment the following line:
|
||||
|
||||
```
|
||||
SLURM_OPTIONS=""
|
||||
```
|
||||
|
||||
> **Note:** Without this fix, the SLURM daemon may fail to start due to missing default options.
|
||||
|
||||
---
|
||||
|
||||
## Restart Services
|
||||
|
||||
```bash
|
||||
sudo systemctl restart munge
|
||||
sudo systemctl restart slurmctld
|
||||
sudo systemctl restart slurmd
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Basic Test (CPU Job)
|
||||
|
||||
```bash
|
||||
sbatch --wrap="hostname; sleep 5"
|
||||
squeue
|
||||
```
|
||||
|
||||
> **Notes:**
|
||||
> - `sbatch` — submits a job
|
||||
> - `--wrap` — runs an inline command
|
||||
> - `squeue` — displays the job queue
|
||||
|
||||
---
|
||||
|
||||
## GPU Configuration
|
||||
|
||||
### GRES Config File — `/etc/slurm/gres.conf`
|
||||
|
||||
```ini
|
||||
NodeName=brilliant Name=gpu File=/dev/nvidia0
|
||||
```
|
||||
|
||||
> **Note:** This maps the GPU device to SLURM. `/dev/nvidia0` refers to the first GPU.
|
||||
|
||||
### GPU Validation
|
||||
|
||||
```bash
|
||||
scontrol show node
|
||||
```
|
||||
|
||||
**Expected output:**
|
||||
|
||||
```
|
||||
Gres=gpu:1
|
||||
```
|
||||
|
||||
### GPU Job Test
|
||||
|
||||
```bash
|
||||
sbatch --gres=gpu:1 --wrap="nvidia-smi"
|
||||
```
|
||||
|
||||
> **Notes:**
|
||||
> - `--gres=gpu:1` — allocates 1 GPU to the job
|
||||
> - `nvidia-smi` runs inside the job to confirm GPU access
|
||||
Reference in New Issue
Block a user