IBM Spectrum LSF
À partir de LSF 10.1 FixPack 9 (10.1.0.9), Azure CycleCloud est un fournisseur natif pour Resource Connector. IBM fournit de la documentation. Ces ressources fournissent des instructions sur la configuration du nœud maître LSF pour la connexion à CycleCloud.
LSF est un produit sous licence IBM ; L’utilisation de LSF dans CycleCloud nécessite un fichier de droits qu’IBM fournit à ses clients.
Notes
LSF est un produit sous licence IBM ; L’utilisation de LSF dans CycleCloud nécessite un fichier de droits qu’IBM fournit à ses clients. Les fichiers binaires et les droits DSF doivent être ajoutés au répertoire blobs/pour utiliser le cluster entièrement automatisé ou le générateur d’images de machine virtuelle dans ce projet. Pour utiliser le cluster entièrement automatisé ou le générateur d’images de machine virtuelle dans ce projet, les fichiers binaires et le fichier de droits d’utilisation LSF doivent être ajoutés au répertoire blobs/.
Scénarios pris en charge du type de cluster CycleCloud LSF
LSF peut « emprunter » des hôtes à Azure pour exécuter des travaux à la demande, en ajoutant et en supprimant des hôtes si nécessaire. Le type de cluster LSF est flexible pour gérer plusieurs scénarios dans un seul cluster :
- Travaux à haut débit (PROCESSEUR & GPU)
- Fortement couplé (MPI, PROCESSEUR & GPU)
- Faible priorité
Ces scénarios sont gérés par la configuration de plusieurs propriétés nodearrays et LSF de concert. Les nodearrays sont préconfigurés dans CycleCloud. Une configuration appropriée de LSF permet d’activer les différents scénarios de travail.
Lorsque LSF est configuré conformément à ces recommandations, bsub
les besoins -R
en ressources peuvent être utilisés de la manière suivante :
Utilisez la ressource placementGroup pour exécuter un travail avec le réseau connecté InfiniBand.
-R "span[ptile=2] select[nodearray=='ondemandmpi' && cyclecloudmpi] same[placementgroup]"
Pour les GPU, nous vous recommandons d’utiliser la prise en charge LSF de la syntaxe GPU étendue. Nécessite généralement l’ajout de deux attributs à lsf.conf : LSB_GPU_NEW_SYNTAX=extend
et LSF_GPU_AUTOCONFIG=Y
. Avec la prise en charge de la syntaxe étendue activée, utilisez le placementGroup avec -gpu
pour exécuter un travail étroitement couplé avec l’accélération GPU.
-R "span[ptile=1] select[nodearray=='gpumpi' && cyclecloudmpi] same[placementgroup]" -gpu "num=2:mode=shared:j_exclusive=yes"
Exécutez des travaux avec GPU de manière parallèle.
-R "select[nodearray=='gpu' && !cyclecloudmpi && !cyclecloudlowprio]" -gpu "num=1:mode=shared:j_exclusive=yes"
Exécutez un grand travail de rafale sur des machines virtuelles à faible niveau de priorité.
-J myArr[1000] -R "select[nodearray=='lowprio' && cyclecloudlowprio]"
Configuration de LSF pour le type de cluster LSF CycleCloud
Pour activer ces scénarios comme décrit, ajoutez un certain nombre de types de ressources partagées à lsb.shared.
cyclecloudhost Boolean () () (instances from Azure CycleCloud)
cyclecloudmpi Boolean () () (instances that support MPI placement)
cyclecloudlowprio Boolean () () (instances that low priority / interruptible from Azure CycleCloud)
nodearray String () () (nodearray from CycleCloud)
placementgroup String () () (id used to note locality of machines)
instanceid String () () (unique host identifier)
Il est possible que cyclecloudlowprio
cela puisse être laissé de côté, mais cela fournit un case activée supplémentaire que les travaux s’exécutent sur la location de machine virtuelle prévue.
Modèle de fournisseur LSF pour CycleCloud
Le fournisseur CycleCloud LSF expose un certain nombre de configurations via le modèle de fournisseur. Ces configurations sont un sous-ensemble de la configuration complète du nodearray.
Voici un exemple de modèle LSF pour Cyclecloud à partir de cyclecloudprov_templates.json :
{
"templateId": "ondemand",
"attributes": {
"type": ["String", "X86_64"],
"ncores": ["Numeric", "44"],
"ncpus": ["Numeric", "44"],
"mem": ["Numeric", "327830"],
"cyclecloudhost": ["Boolean", "1"],
"nodearray" : ["String", "ondemand"]
},
"priority" : 250,
"nodeArray": "ondemand",
"vmType" : "Standard_HC44rs",
"subnetId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Network/virtualNetworks/hpc-network/subnets/compute",
"imageId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Compute/images/lsf-worker-a4bc2f10",
"maxNumber": 500,
"keyPairLocation": "/opt/cycle_server/.ssh/id_rsa_admin.pem",
"customScriptUri": "https://aka.ms/user_data.sh",
"userData": "nodearray_name=ondemand"
}
Attributs de modèle LSF pour CycleCloud
Tous les attributs nodearray ne sont pas exposés par le modèle de fournisseur LSF. Ceux-ci peuvent être considérés comme des remplacements de la configuration du nœud CycleCloud. Le seul modèle LSF requis est :
- templateId
- nodeArray
D’autres sont déduits de la configuration CycleCloud, peuvent être omis ou ne sont pas nécessaires du tout.
- imageId - Image de machine virtuelle Azure, par exemple.
"/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f"
remplacement pour la configuration du cluster CycleCloud. - subnetId : sous-réseau Azure, par exemple.
"resource_group/vnet/subnet"
remplacement pour la configuration du cluster CycleCloud. - vmType : par exemple.
"Standard_HC44rs"
remplacement pour la configuration du cluster CycleCloud. - keyPairLocation : par exemple.
"~/.ssh/id_rsa_beta"
remplacement pour la configuration du cluster CycleCloud. - customScriptUri - par exemple. « http://10.1.0.4/user_data.sh", aucun script s’il n’est pas spécifié.
- userData - par exemple.
"nodearray_name=gpumpi;placement_group_id=gpumpipg1"
s’il n’est pas spécifié.
Remarque sur PlacementGroups
Les centres de données Azure disposent d’une fonctionnalité réseau Infiniband pour les scénarios HPC. Ces réseaux, contrairement à l’Ethernet normal, ont une portée limitée. Les étendues réseau Infiniband sont décrites par « PlacementGroups ». Si les machines virtuelles résident dans le même groupe de placement et sont des types de machines virtuelles spéciaux compatibles avec Infiniband, elles partageront un réseau Infiniband.
Ces groupes de placement nécessitent une gestion spéciale dans LSF et CycleCloud.
Voici un exemple de modèle LSF pour Cyclecloud à partir de cyclecloudprov_templates.json :
{
"templateId": "ondemandmpi-1",
"attributes": {
"nodearray": ["String", "ondemandmpi" ],
"zone": [ "String", "westus2"],
"mem": [ "Numeric", 8192.0],
"ncpus": [ "Numeric", 2],
"cyclecloudmpi": [ "Boolean", 1],
"placementgroup": [ "String", "ondemandmpipg1"],
"ncores": [ "Numeric", 2],
"cyclecloudhost": [ "Boolean", 1],
"type": [ "String", "X86_64"],
"cyclecloudlowprio": [ "Boolean", 0]
},
"maxNumber": 40,
"nodeArray": "ondemandmpi",
"placementGroupName": "ondemandmpipg1",
"priority": 448,
"customScriptUri": "https://aka.ms/user_data.sh",
"userData" : "nodearray_name=ondemandmpi;placement_group_id=ondemandmpipg1"
}
Dans placementGroupName
ce fichier peut être n’importe quoi, mais déterminera le nom du placementGroup dans CycleCloud. Tous les nœuds empruntés à CycleCloud à partir de ce modèle résideront dans ce groupe de placement et, s’il s’agit de machines virtuelles compatibles Avec Infiniband, partageront un réseau IB.
Notez que placementGroupName
correspond à l’attribut placementgroup
hôte , ce intentionnel et nécessaire. En outre, le placement_group_id
est défini dans userData
pour être utilisé dans user_data.sh au moment de début de l’hôte.
L’attribut ondemandmpi
peut sembler superflu, mais est utilisé pour empêcher ce travail de correspondre sur les hôtes où placementGroup
n’est pas défini.
Souvent, lors de l’utilisation de groupes de placement, la taille maximale du groupe de placement est déterminée par la Azure.MaxScaleSetSize
propriété . Cette propriété limite indirectement le nombre de nœuds qui peuvent être ajoutés à un groupe de placement, mais n’est pas prise en compte par LSF. Il est donc important de définir MaxNumber
le modèle LSF égal à Azure.MaxScaleSetSize
dans le modèle de cluster.
user_data.sh
Le modèle fournit des attributs pour l’exécution d’un script user_data.sh ; customScriptUri
et userData
. Il s’agit des variables d’URI et d’environnement personnalisées du script géré par l’utilisateur qui s’exécute au démarrage du nœud. Ce script étant téléchargé par la commande CURL annonyme, l’authentification customScriptUri
requise échoue. Utilisez ce script pour :
- Configurez les démons LSF worker ; en particulier
LSF_LOCAL_RESOURCES
etLSF_MASTER_LIST
- Si
LSF_TOP
se trouve sur un système de fichiers partagé, il peut être utile d’effectuer une copie locale de et delsf.conf
définir laLSF_ENVDIR
variable avant de démarrer les démons.
- Si
- Démarrez les démons lim, res et sbatch.
Certaines variables d’environnement par défaut sont définies par le fournisseur CycleCloud.
- rc_account
- template_id
- providerName
- clustername
- cyclecloud_nodeid (recommandé pour définir cette valeur sur
instanceId
ressource)
Les autres variables de données utilisateur qui peuvent être utiles dans la gestion des ressources dans le fournisseur CycleCloud sont les suivantes :
- nodearray_name
- placement_group_id
Notes
Même si Windows est une plateforme LSF officiellement prise en charge, CycleCloud ne prend pas en charge l’exécution de LSF sur Windows pour le moment.