Aller au contenu principal

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.

attention

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​

EspaceUtilisation recommandée
$HOMEFichiers personnels, configurations et petits scripts
$PROJECTDonnées partagées avec les membres du projet sélectionné
$PROJECTSListe des répertoires de projets auxquels vous avez accès
$SCRATCHDIRDonnées temporaires et résultats intermédiaires
$TMPDIREspace 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.

remarque

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 $PROJECT pour les données partagées et les résultats du projet sélectionné.
  • Utilisez $SCRATCHDIR ou $TMPDIR pour 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.

Pages associées​