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 :

  1. Travaux à haut débit (PROCESSEUR & GPU)
  2. Fortement couplé (MPI, PROCESSEUR & GPU)
  3. 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 placementgrouphô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 :

  1. Configurez les démons LSF worker ; en particulier LSF_LOCAL_RESOURCES et LSF_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 de lsf.conf définir la LSF_ENVDIR variable avant de démarrer les démons.
  2. 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.