Move NVIDIA MIG configuration to pure systemd with templating, and colon seperating GPU indexs instead of spaces
Signed-off-by: root <root@warewulf>
This commit is contained in:
@@ -1,13 +0,0 @@
|
||||
[Unit]
|
||||
DefaultDependencies=no
|
||||
Description=Configure NVIDIA MIG (Multi-Instance GPU) partitions at boot time
|
||||
Before=nvidia-persistenced.service nvidia-dcgm.service dcgm_exporter.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/local/sbin/_config_mig "{{ .Tags.gpuMigType | default "2,2" }}"
|
||||
ExecStop=sh -c 'nvidia-smi mig -dci ; nvidia-smi mig -dgi ; nvidia-smi -mig 0'
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -0,0 +1,32 @@
|
||||
[Unit]
|
||||
DefaultDependencies=no
|
||||
Description=Configure NVIDIA MIG (Multi-Instance GPU) partitions via Warewulf
|
||||
Before=nvidia-persistenced.service nvidia-dcgm.service dcgm_exporter.service nvsm.service nvsm-core.service
|
||||
ConditionPathExists=/usr/bin/nvidia-smi
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStartPre=-/usr/bin/nvidia-smi -pm 1
|
||||
ExecStartPre=/usr/bin/nvidia-smi -mig 1
|
||||
{{- $rawMigProfiles := default "2,2" .Tags.gpuMigProfiles -}}
|
||||
{{- $migProfiles := splitList ":" $rawMigProfiles -}}
|
||||
{{- if gt (len $migProfiles) 1 -}}
|
||||
{{- range $gpuIndex, $migProfile := $migProfiles -}}
|
||||
{{- if ne $migProfile "" }}
|
||||
ExecStart=/usr/bin/nvidia-smi mig -cgi {{$migProfile}} -i {{$gpuIndex}} -C
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- else }}
|
||||
ExecStart=/usr/bin/nvidia-smi mig -cgi {{$rawMigProfiles}} -C
|
||||
{{- end }}
|
||||
ExecStartPost=-/usr/bin/nvidia-smi -L
|
||||
ExecStartPost=-/usr/bin/sh /usr/local/sbin/mig2gres
|
||||
ExecStop=-/usr/bin/nvidia-smi mig -dci
|
||||
ExecStop=-/usr/bin/nvidia-smi mig -dgi
|
||||
ExecStop=/usr/bin/nvidia-smi -mig 0
|
||||
TimeoutStartSec=300
|
||||
TimeoutStopSec=300
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -1,37 +0,0 @@
|
||||
#!/usr/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# This script configures NVIDIA MIG (Multi-Instance GPU) partitions based on the provided
|
||||
# gpuMigType string argument. It supports both a single configuration for all GPUs or
|
||||
# individual configurations per GPU.
|
||||
# Example inputs:
|
||||
# "14,14,14,15" # single config for all GPUs
|
||||
# "14,14,14,15 7,7,7,8" # per-GPU configs for GPU0 and GPU1
|
||||
|
||||
# See https://docs.nvidia.com/datacenter/tesla/mig-user-guide/supported-mig-profiles.html for details on supported MIG profiles
|
||||
|
||||
# Get the gpuMigType string from the first argument
|
||||
MIG_STRING="${1}"
|
||||
if [[ -z "$MIG_STRING" ]]; then
|
||||
echo "Usage: $0 <gpuMigType string>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if nvidia-smi command exists
|
||||
if ! command -v nvidia-smi &> /dev/null; then
|
||||
echo "Error: nvidia-smi command not found" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# enable MIG mode
|
||||
nvidia-smi -mig 1
|
||||
|
||||
# per-GPU space-separated list (one token per GPU), otherwise single-string common case
|
||||
if [[ "$MIG_STRING" == *" "* ]]; then
|
||||
read -a PER_GPU_MIG_CONFIGS <<< "$MIG_STRING"
|
||||
for gpu_index in "${!PER_GPU_MIG_CONFIGS[@]}"; do
|
||||
nvidia-smi mig -cgi "${PER_GPU_MIG_CONFIGS[$gpu_index]}" -i "$gpu_index" -C
|
||||
done
|
||||
else
|
||||
nvidia-smi mig -cgi "$MIG_STRING" -C
|
||||
fi
|
||||
@@ -14,6 +14,21 @@ if ! command -v nvidia-smi &> /dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v grep &> /dev/null; then
|
||||
echo "Error: grep command not found" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v awk &> /dev/null; then
|
||||
echo "Error: awk command not found" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v hostname &> /dev/null; then
|
||||
echo "Error: hostname command not found" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
hostname=$(hostname -s)
|
||||
|
||||
nvidia-smi mig -lgi | grep -E '^\|' | grep -v '===' | grep -v 'GPU.*Name' | while read line; do
|
||||
@@ -25,6 +40,7 @@ nvidia-smi mig -lgi | grep -E '^\|' | grep -v '===' | grep -v 'GPU.*Name' | whil
|
||||
|
||||
pattern="gpu${gpu}/gi${gi}/access"
|
||||
minor=$(grep "^${pattern} " /proc/driver/nvidia-caps/mig-minors | awk '{print $2}')
|
||||
device_file="/dev/nvidia-caps/nvidia-cap${minor}"
|
||||
|
||||
echo "NodeName=${hostname} Name=gpu Type=${name} File=/dev/nvidia-caps/nvidia-cap${minor}"
|
||||
echo "NodeName=${hostname} Name=gpu Type=${name} File=${device_file}"
|
||||
done
|
||||
Reference in New Issue
Block a user