Aller au contenu

SAS sur VALERIA

Il est possible de lancer des scripts SAS sur l'infrastructure de calcul de VALERIA. Vous devez toutefois fournir votre licence.

Vous pouvez donc développer vos scripts sur votre poste de travail et lancer des analyses d'envergure sur les serveurs de calcul de VALERIA.

Bien que l'environnement VALERIA n'offre actuellement pas d'interface de développement SAS comme SAS-Studio,

Prérequis

Lancement d'un traitement SAS

Voici les étapes à suivre afin de lancer un programme SAS sur VALERIA:

Transférer votre programme SAS sur le stockage de VALERIA

Afin d'être en mesure de lancer votre script, celui-ci doit être hébergé sur le stockage Lustre de VALERIA. Si vous avez des données à analyser, elles doivent également y être déposées.

Pour téléverser votre script et/ou vos données vers le stockage Lustre de VALERIA, vous pouvez utiliser

Lancer un script SAS sur l'infrastructure de calcul de VALERIA

Cette section présente comment lancer un script SAS affichant "hello world" sur VALERIA.

À titre d'exemple, nous utiliserons un programme nommé "sas-program1.sas" à déposer dans un dossier $HOME/sas/ et contenant le code SAS suivant:

# Programme sas-program1.sas dans $HOME/sas/
data _null_;
put "hello world";
run;

Voici les étapes détaillées:

1- Se connecter: Pour commencer, vous devez vous connecter à JupyterLab ou au noeud de connexion (SSH)

2- Se diriger dans le dossier: dans un terminal (JupyterLab ou SSH), vous diriger vers le dossier où est déposé votre programme SAS:

# Exemple - Commande 'cd' pour me diriger dans mon dossier $HOME/sas/ à partir du /home de mon stockage
cd sas/

3- Activer SAS: pour être utilisé sur VALERIA, le logiciel SAS doit être activé. Pour ce faire, lancer la commande suivante:

# Activer SAS
module load sas/9.4

4- Lancer le programme

Maintenant que le logiciel est activé, il est possible de lancer le programme SAS.

# Lancer le programme SAS
sas sas-program1.sas
Un fichier 'sas-program1.log' apparaîtra alors dans votre dossier $HOME/sas/ et vous remarquerez que le résultat "hello world" apparaît dans le fichier, en plus d'autres informations concernant le traitement.

L'image suivante présente un résumé des actions à poser pour lancer le programme sas-program1.sas à partir de l'interface JupyterLab:

Semantic description of image

Utilisation d'un script de soumission

Afin de faciliter l'exécution de vos programmes, l'approche à préconiser est d'utiliser des scripts de soumission. Cette approche permet d’être générique et favorise la réutilisation puisqu’on utilise un seul script de soumission.

Créer les scripts

Pour commencer, dans votre dossier $HOME/sas/, vous devez créer un dossier /target. Les résultats de vos analyses y seront automatiquement déposés.

Ensuite, vous devrez utiliser 3 scripts:

1- Script SAS (.sas)

Il contient de code SAS que vous souhaitez lancer pour analyse. Le programme "sas-program1.sas" utilisé dans la section précédente est un exemple:

# Programme sas-program1.sas dans $HOME/sas
data _null_;
put "hello world";
run;

2- Script de configuration (.sbatch)

Ce script permet de configurer tous les paramètres nécessaires qui serviront à soumettre la tâche d'analyse sur le serveur de calcul. Centraliser toutes les configurations dans ce script simplifie la soumission des tâches. Celui-ci est aussi réutilisable pour soumettre plusieurs codes .sas.

Vous pouvez manuellement créer un fichier .sbatch dans votre dossier $HOME/sas/ et y copier le contenu suivant:

#!/usr/bin/env bash

# Paramètres pour la soumission de la tâche
#
#SBATCH --partition=batch
#SBATCH --time=01:00:00
#SBATCH --cpus-per-task=2
#SBATCH --mem=6G
#SBATCH --output=target/%x.%j.out
#

# Activer SAS

module load sas/9.4

# Création de l'espace WORK pour SAS

WORK=$( mktemp -d -p ${SLURM_TMPDIR} 2>/dev/null || mktemp -d )

# Définir la partie commune du nom des fichiers (sans l'extension) qui seront générés

TARGET_DIR=target
TARGET_FILENAME=${TARGET_DIR}/${SLURM_JOB_NAME}.${SLURM_JOB_ID}

# Définir le programme à exécuter

PROGRAM=${SLURM_JOB_NAME}.sas

# Exécution du programme SAS

echo "[$(date --iso-8601=s)] Démarrage de SAS avec: ${PROGRAM}."

sas ${PROGRAM} \
    -batch \
    -nonotes -nonews -pagesize max \
    -work  ${WORK} \
    -print ${TARGET_FILENAME}.lst \
    -log   ${TARGET_FILENAME}.log

echo "[$(date --iso-8601=s)] Fin de l'exécution."

# Si désiré, placer un indicateur de fin

touch ${TARGET_FILENAME}.finished

3- Script de soumission (.sh)

L'utilisation seule du script .sbatch a l'inconvénient de devoir spécifier les paramètres sur la ligne de commande, ce qui rend le partage et la collaboration plus difficile.

Un moyen d'y remédier est de créer un ou des scripts de soumission (.sh) associés à chaque analyse. Ainsi, un simple script de soumission permet d'invoquer le script SAS (.sas) avec les paramètres désirés du script de configuration (.sbatch) et de lancer l'analyse sur le serveur de calcul. Voici un exemple de script de soumission .sh à créer dans votre dossier $HOME/sas/ et qui contient le contenu suivant:

#!/usr/bin/env bash
sbatch --job-name=sas-program1 --time=1-00:00:00 --partition=batch --cpus-per-task=2 --mem=6G sas-submitter.sbatch

Lancer l'analyse

Ainsi, pour lancer l'analyse du programme sas-program1.sas à l'aide du script de soumission, il suffit de:

  • Ouvrir un terminal;
  • Se diriger dans le dossier $HOME/sas/;
  • Lancer le script 'sas-program1.sh' à l'aide de la commande source sas-program1.sh.

Un message vous avise que la tâche est soumise.

Une fois l'analyse terminée, les résultats sont automatiquement envoyés vers le dossier /target.

Pour plus de détails sur la soumission de tâches, consulter la documentation:

Approche par vecteurs de tâches (avancé)

Une approche plus avancée permet de soumettre plusieurs tâches avec des paramètres différents.

Cette approche par vecteurs de tâches demande d'avoir :

  • Un bloc de code SAS commun contenu dans un fichier ;
  • La liste des invocations distinctes à effectuer dans un fichier, par exemple dans un fichier sas-program1.items.txt ;
  • Un script .sbatch qui utilise un vecteur de tâche (task array) et génère dynamiquement les fichiers .sas à exécuter en combinant le bloc de code commun et l'invocation distincte à la fin du fichier ;
  • Un script .sh pour soumettre la tâche.

Pour un exemple concret d'approche par vecteurs de tâches, veuillez visiter le dépôt task-array-1

Il est également possible d'utiliser le passage de paramètres. En résumé, cela permet de créer des programmes totalement dynamiques sans devoir concaténer un bloc de code commun avec les invocations spécifiques. Il ne suffit que d'avoir un seul code SAS qui récupère les paramètres passés en variables d'environnement et agit en conséquence.

L'exemple sur le dépôt task-array-2 montre comment:

  • Spécifier un ou des paramètres qui seront exportés en variables d'environnement ;
  • Récupérer ces variables d'environnement dans un script SAS.