Comment utiliser Mathematica dans un cluster haute performance géré ?
Informations générales
Les grands clusters de calcul se composent de nombreux nœuds, chaque nœud étant composé de plusieurs cœurs d’unité centrale. En outre, des logiciels spéciaux tels que Mathematica sont souvent disponibles sur le cluster. Les utilisateurs demandent ces ressources en se connectant à un nœud principal et en soumettant des travaux par lots au gestionnaire du cluster. Le travail s’exécute lorsque les ressources deviennent disponibles. Les deux gestionnaires de clusters les plus courants sont TORQUE et Slurm.
La parallélisation dans Mathematica utilise le modèle en étoile (hub-and-spoke) dans lequel un noyau de contrôle gère un certain nombre de noyaux subordonnés (sous-noyaux). Dans un environnement de cluster, le client exécute le noyau de contrôle et les hôtes fournissent les sous-noyaux. Le gestionnaire du cluster détermine quel nœud agit en tant que client et quels nœuds agissent en tant qu’hôtes.
Les avantages de l’exécution de Mathematica sur un cluster sont de deux ordres : le nombre de cœurs d’unité centrale disponibles, même sur un seul nœud, est généralement plus élevé que sur un environnement de bureau d’ordinateur, et la vitesse de chaque cœur d’unité centrale est individuellement plus rapide que celle d’un environnement de bureau d’ordinateur.
Exécution d’une interface utilisateur Mathematica distante
Une interface utilisateur à distance exige que l’utilisateur garde le contrôle des ressources du travail. C’est ce que l’on appelle une session interactive.
Bien que la vitesse du processeur soit généralement supérieure à celle d’un environnement de bureau d’ordinateur, l’interface utilisateur via une session interactive est plus lente que l’exécution d’une version locale de l’interface utilisateur. Cela s’explique par le fait que l’interface utilisateur fonctionne sur le cluster tandis que l’interface est transmise à l’ordinateur de l’utilisateur distant.
Une session interactive n’est pas destinée à exécuter des calculs intensifs sur l’unité centrale, mais elle sert plutôt à tester et à diagnostiquer le code. Il est typique de ne demander les ressources que d’un seul nœud.
- Connectez-vous au nœud principal via SSH avec la redirection X Windows activée.
- Lancez une session interactive, en demandant toutes les ressources sur un seul nœud.
- Démarrez une session Mathematica.
Depuis un notebook Mathematica, utiliser la commande LaunchKernels[], ou toute autre fonctionnalité parallèle, va maintenant inclure des sous-noyaux s’exécutant depuis le cluster.
Exécution d’un script Mathematica distant
On suppose que :
- vous connaissez le concept de lancement de sous-noyaux distants,
- le cluster est un environnement Linux,
- le cluster utilise un système de fichiers cloné de sorte que Mathematica est exécuté par le même fichier exécutable sur tous les nœuds.
Si l’une des hypothèses ci-dessus n’est pas vraie, il faudra modifier ce qui suit, mais le schéma général reste le même :
- interroger le système pour trouver les noms des nœuds qui sont affectés à la tâche,
- interroger le système pour connaître le nombre de cœurs disponibles par nœud,
- lancer manuellement les noyaux distants.
Slurm
Pour Slurm, dans un script Mathematica ou Wolfram Language, vous pourriez avoir :
(* get host names *)
hosts = ReadList["!scontrol show hostname $SLURM_JOB_NODELIST", String]
masternode = Environment["SLURM_NODENAME"]
njobs = ToExpression[Environment["SLURM_CPUS_ON_NODE"]]
hosts = DeleteCases[hosts, masternode]; Length[hosts]
(* launch kernels on each host *)
kernels =
KernelConfiguration[#, "KernelCount" -> njobs] & /@ hosts;
LaunchKernels[kernels]
Lors de l’acquisition des noms de nœuds, vous pouvez également utiliser SLURM_NODELIST
au lieu de SLURM_JOB_NODELIST
pour des raisons de rétrocompatibilité.
Le format renvoyé du nombre de tâches par nœud n’est pas adapté à l’interprétation de Wolfram Language. L’expression est donc analysée manuellement en une expression de liste.
TORQUE
Pour TORQUE, dans un script Mathematica ou Wolfram Language, vous pourriez avoir :
(* get association of resources *)
hosts = Counts[ReadList[Environment["PBS_NODEFILE"], "String"]];
(* launch subkernels and connect them to the controlling Wolfram Kernel *)
kernels=
Map[KernelConfiguration[#,"KernelCount" -> hosts[#]] &, Keys[hosts]]
LaunchKernels[kernels]
PBS_NODEFILE
est une variable système qui liste le nom de chaque nœud une fois par cœur de processeur disponible. Counts convertit cette liste en une instance d’association, avec le nom du nœud comme clé et le nombre de cœurs de processeur comme valeur. Pour des raisons de simplicité, tous les sous-noyaux sont traités comme des noyaux distants, même si certains s’exécutent sur le même nœud que l’instance locale de Mathematica.
Mettre de l’ordre après le calcul
Lorsque le code parallèle est terminé, il est bon de fermer les noyaux Wolfram :
CloseKernels[];
[English]
Contacter l'assistance
Vous avez une question sur la facturation, l'activation ou quelque chose de plus technique, nous sommes prêts à vous aider.
1-800-WOLFRAM (+1-217-398-0700 pour les appels internationaux)
Assistance clients
Du lundi au vendredi
De 8 h à 17 h, heure du Centre des États-Unis
- Enregistrement ou activation du produit
- Informations avant la vente et commande
- Aide à l'installation et au premier lancement
Assistance technique avancée (pour les clients admissibles)
Du lundi au jeudi
De 8 h à 19 h, heure du Centre des États-Unis
Le vendredi
De 8 h 30 à 10 h et de 11 h à 17 h, heure du Centre des États-Unis
- Assistance technique prioritaire
- Assistance produits par des experts Wolfram
- Aide avec la programmation en Wolfram Language
- Assistance installation avancée