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¶
- Avoir un compte VALERIA.
- Avoir les accès de chercheur UL ou collaborateur.
- Se connecter à VALERIA
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
- L'environnement JupyterLab
- Un logiciel de transfert SCP/SFTP Lien à venir
- Le service Globus.
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:
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:
4- Lancer le programme
Maintenant que le logiciel est activé, il est possible de lancer le programme 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:
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:
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:
- VALERIA - Lancer un traitement en lot
- VALERIA - Aide-mémoire Slurm
- Calcul Canada - Exécuter des tâches
- Slurm - sbatch
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.