Stockage sur les nœuds de calcul
Pendant un job, vous pouvez utiliser les espaces de stockage partagés du cluster et, selon le nœud, un espace temporaire local.
Le stockage local est destiné aux fichiers de travail temporaires. Il peut être supprimé à la fin du job ou lorsque le nœud est réutilisé. Copiez les résultats à conserver vers un espace partagé avant la fin du job.
Ne stockez pas de données importantes uniquement sur le nœud de calcul.
Les fichiers présents dans un répertoire temporaire local ne sont pas garantis après la fin du job.
Espaces disponibles
| Espace | Utilisation recommandée |
|---|---|
$HOME | Fichiers personnels, configurations et petits scripts |
$PROJECT | Données partagées avec les membres du projet sélectionné |
$PROJECTS | Liste des répertoires de projets auxquels vous avez accès |
$SCRATCHDIR | Données temporaires et résultats intermédiaires |
$TMPDIR | Espace temporaire défini pour le job, lorsqu’il est disponible |
Les données d’un projet sont partagées avec les personnes qui ont accès au répertoire du projet. Les espaces temporaires ne doivent pas servir à l’archivage.
Choisir un projet
La commande cproj permet de sélectionner un projet et de se placer dans son répertoire. Par exemple :
cproj <project>
Vérifiez le projet sélectionné et le répertoire courant :
echo "$PROJECT"
pwd
Résultat attendu :
/project/<project>
/project/<project>
Pour afficher les projets disponibles, lancez cproj sans argument :
cproj
La commande et les variables associées sont configurées automatiquement. Vous n’avez rien à installer ni à modifier dans votre configuration personnelle.
Vérifier les chemins
Depuis une session de calcul, vous pouvez afficher les espaces associés à votre compte :
echo "HOME: ${HOME:-non défini}"
echo "SCRATCHDIR: ${SCRATCHDIR:-non défini}"
echo "PROJECTS: ${PROJECTS:-aucun projet disponible}"
echo "PROJECT: ${PROJECT:-aucun projet sélectionné}"
echo "TMPDIR: ${TMPDIR:-non défini}"
Pour vérifier l’espace disponible :
df -h "$HOME"
[[ -n "${SCRATCHDIR:-}" ]] && df -h "$SCRATCHDIR"
[[ -n "${PROJECT:-}" ]] && df -h "$PROJECT"
[[ -n "${TMPDIR:-}" ]] && df -h "$TMPDIR"
N’utilisez pas un chemin temporaire supposé sans vérifier qu’il existe et qu’il est accessible depuis le job.
Utiliser un espace temporaire
Pour les fichiers de travail d’un job, vous pouvez utiliser $TMPDIR s’il est défini. Sinon, utilisez un sous-répertoire propre au job dans $SCRATCHDIR.
if [[ -n "${TMPDIR:-}" ]]; then
workdir="${TMPDIR}/mon-job-${SLURM_JOB_ID:-local}"
else
workdir="${SCRATCHDIR:?SCRATCHDIR n'est pas défini}/mon-job-${SLURM_JOB_ID:-local}"
fi
mkdir -p "$workdir"
Les fichiers importants ne doivent pas rester uniquement dans $TMPDIR ou sur le stockage local du nœud. Copiez-les vers $PROJECT ou un autre espace partagé avant la fin du job.
Exemple de job Slurm
Cet exemple travaille dans un répertoire temporaire, puis copie les résultats vers le projet sélectionné.
#!/bin/bash
#SBATCH --job-name=calcul-temp
#SBATCH --partition=std
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --time=01:00:00
#SBATCH --output=logs/%x-%j.out
#SBATCH --error=logs/%x-%j.err
set -euo pipefail
mkdir -p logs
# Select the project used to store the results
cproj <project>
# Use the job temporary directory when available.
# Otherwise, create a job-specific directory in SCRATCHDIR.
if [[ -n "${TMPDIR:-}" ]]; then
workdir="${TMPDIR}/mon-job-${SLURM_JOB_ID}"
else
workdir="${SCRATCHDIR:?SCRATCHDIR n'est pas défini}/mon-job-${SLURM_JOB_ID}"
fi
results_dir="${PROJECT}/results/mon-job-${SLURM_JOB_ID}"
mkdir -p "$workdir" "$results_dir"
cp -a input/. "$workdir/"
cd "$workdir"
# Replace this command with your application
./mon-programme input.dat
# Copy results to the selected project before the job ends
cp -a results/. "$results_dir/"
# Remove temporary files if the work directory is in SCRATCHDIR
if [[ "$workdir" == "${SCRATCHDIR:-}/"* ]]; then
rm -rf "$workdir"
fi
Adaptez <project>, le nom de la partition, les ressources demandées, les chemins d’entrée et la commande de calcul à votre situation.
Si le script de soumission est lancé depuis un répertoire qui ne contient pas input/ ou logs/, adaptez les chemins en chemins absolus ou créez les répertoires nécessaires avant la soumission.
Bonnes pratiques
- Utilisez
$PROJECTpour les données partagées et les résultats du projet sélectionné. - Utilisez
$SCRATCHDIRou$TMPDIRpour les fichiers temporaires et intermédiaires. - Copiez les résultats à conserver vers un espace partagé avant la fin du job.
- Créez un répertoire de travail distinct pour chaque job, par exemple avec
$SLURM_JOB_ID. - Vérifiez l’espace disponible et les permissions avant de lancer un calcul volumineux.
- Ne supposez pas que le stockage local d’un nœud est disponible sur tous les nœuds.
En cas de problème
Si un répertoire est introuvable ou inaccessible, vérifiez d’abord les variables et les permissions :
printf 'PROJECT=%s\nSCRATCHDIR=%s\nTMPDIR=%s\n' \
"${PROJECT:-}" "${SCRATCHDIR:-}" "${TMPDIR:-}"
ls -ld "$PROJECT" "$SCRATCHDIR" "${TMPDIR:-/tmp}" 2>/dev/null
df -h
Si une copie vers le projet échoue, vérifiez que le projet est sélectionné avec cproj, que le répertoire de destination existe, que vous disposez des permissions nécessaires et que l’espace disponible est suffisant.