IBM Spectrum LSF

A partir de LSF 10.1 FixPack 9 (10.1.0.9) Azure CycleCloud es un proveedor nativo para Resource Connector. IBM proporciona documentación. Estos recursos proporcionan instrucciones sobre cómo configurar el nodo maestro LSF para conectarse a CycleCloud.

LSF es un producto con licencia de IBM; el uso de LSF en CycleCloud requiere un archivo de derechos que IBM proporciona a sus clientes.

Nota

LSF es un producto con licencia de IBM; el uso de LSF en CycleCloud requiere un archivo de derechos que IBM proporciona a sus clientes. Los archivos binarios y derechos de LSF deben agregarse al directorio blobs o para usar el clúster totalmente automatizado o el generador de imágenes de máquina virtual en este proyecto. Para usar el clúster totalmente automatizado, o el generador de imágenes de máquina virtual en este archivo de derechos y archivos binarios LSF de proyecto deben agregarse al directorio blobs o .

Escenarios admitidos del tipo de clúster LSF cycleCloud

LSF puede "pedir prestados" hosts de Azure para ejecutar trabajos de forma a petición, agregando y quitando hosts según sea necesario. El tipo de clúster LSF es flexible para controlar varios escenarios en un único clúster:

  1. Trabajos de alto rendimiento (CPU & GPU)
  2. Estrechamente acoplado (MPI, CPU & GPU)
  3. Prioridad baja

Estos escenarios se controlan mediante la configuración de varias propiedades nodearrays y LSF en concierto. Los nodearrays están preconfigurados en CycleCloud. La configuración adecuada de LSF permite los distintos escenarios de trabajo.

Cuando LSF se configura de acuerdo con estas recomendaciones, bsub los requisitos -R de recursos se pueden usar de la siguiente manera:

Use el recurso placementGroup para ejecutar un trabajo con la red conectada infiniBand.

-R "span[ptile=2] select[nodearray=='ondemandmpi' && cyclecloudmpi] same[placementgroup]"

En el caso de las GPU, se recomienda usar la compatibilidad con LSF para la sintaxis extendida de GPU. Normalmente requiere agregar dos atributos a lsf.conf: LSB_GPU_NEW_SYNTAX=extend y LSF_GPU_AUTOCONFIG=Y. Con la compatibilidad con la sintaxis extendida habilitada, use placementGroup junto con -gpu para ejecutar un trabajo estrechamente acoplado con aceleración de GPU.

-R "span[ptile=1] select[nodearray=='gpumpi' && cyclecloudmpi] same[placementgroup]" -gpu "num=2:mode=shared:j_exclusive=yes"

Ejecute trabajos habilitados para GPU de forma paralela.

-R "select[nodearray=='gpu' && !cyclecloudmpi && !cyclecloudlowprio]" -gpu "num=1:mode=shared:j_exclusive=yes"

Ejecute un trabajo de ráfaga grande en máquinas virtuales de baja disponibilidad.

-J myArr[1000] -R "select[nodearray=='lowprio' && cyclecloudlowprio]"

Configuración de LSF para el tipo de clúster LSF cycleCloud

Para habilitar estos escenarios como se describe, agregue una serie de tipos de recursos compartidos a 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)

Es posible que cyclecloudlowprio se pueda dejar fuera, pero proporciona una comprobación adicional de que los trabajos se ejecutan en su inquilino de máquina virtual previsto.

Plantilla de proveedor LSF para CycleCloud

El proveedor LSF CycleCloud expone una serie de configuraciones a través de la plantilla de proveedor. Estas configuraciones son un subconjunto de la configuración completa de nodearray.

Este es un ejemplo de plantilla LSF para Cyclecloud desde 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"
}

Atributos de plantilla LSF para CycleCloud

La plantilla de proveedor LSF expone no todos los atributos nodearray. Estos se pueden considerar invalidaciones de la configuración de nodearray de CycleCloud. La única plantilla LSF necesaria es:

  • templateId
  • nodeArray

Otros se deducen de la configuración de CycleCloud, se pueden omitir o no son necesarios en absoluto.

  • imageId: imagen de máquina virtual de Azure, por ejemplo, "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" invalidación de la configuración del clúster de CycleCloud.
  • subnetId: subred de Azure, por ejemplo, "resource_group/vnet/subnet" invalidación de la configuración del clúster de CycleCloud.
  • vmType: por ejemplo, "Standard_HC44rs" invalidación de la configuración del clúster de CycleCloud.
  • keyPairLocation: p. ej. "~/.ssh/id_rsa_beta" invalidación de la configuración del clúster de CycleCloud.
  • customScriptUri: por ejemplo, "http://10.1.0.4/user_data.sh", sin script si no se especifica.
  • userData: por ejemplo, "nodearray_name=gpumpi;placement_group_id=gpumpipg1" vacío si no se especifica.

Nota sobre PlacementGroups

Los centros de datos de Azure tienen funcionalidad de red Infiniband para escenarios de HPC. Estas redes, a diferencia de la ethernet normal, tienen un intervalo limitado. Las extensiones de red infiniband se describen mediante "PlacementGroups". Si las máquinas virtuales residen en el mismo grupo de selección de ubicación y son tipos de vm especiales habilitados para Infiniband, compartirán una red Infiniband.

Estos grupos de selección de ubicación requieren un control especial en LSF y CycleCloud.

Este es un ejemplo de plantilla LSF para Cyclecloud desde 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"
}

El placementGroupName en este archivo puede ser cualquier cosa, pero determinará el nombre del placementGroup en CycleCloud. Los nodos prestados de CycleCloud de esta plantilla residirán en este placementGroup y, si son máquinas virtuales habilitadas para Infiniband, compartirán una red IB.

Tenga en cuenta que placementGroupName coincide con el atributo placementgrouphost , esto intencionado y necesario. Además, placement_group_id se establece en para que se use en userDatauser_data.sh en la hora de inicio del host. El ondemandmpi atributo puede parecer extraño, pero se usa para evitar que este trabajo coincida en hosts donde placementGroup no está definido.

A menudo, al usar grupos de selección de ubicación, habrá un tamaño máximo de grupo de selección de ubicación determinado por la Azure.MaxScaleSetSize propiedad . Esta propiedad limita indirectamente el número de nodos que se pueden agregar a un grupo de selección de ubicación, pero LSF no lo considera. Por lo tanto, es importante establecer MaxNumber la plantilla LSF igual a Azure.MaxScaleSetSize en la plantilla de clúster.

user_data.sh

La plantilla proporciona atributos para ejecutar un script de user_data.sh ; customScriptUri y userData. Estos son los URI y las variables de entorno personalizadas del script administrado por el usuario que se ejecuta en el inicio del nodo. El comando CURL annonymous descarga este script, por lo que customScriptUri se produce un error de autenticación. Use este script para:

  1. Configurar los demonios LSF de trabajo; especialmente LSF_LOCAL_RESOURCES y LSF_MASTER_LIST
    • Si LSF_TOP está en un sistema de archivos compartido, puede ser útil realizar una copia local de lsf.conf y establecer la LSF_ENVDIR variable antes de iniciar los demonios.
  2. Inicie los demonios lim, res y sbatch.

El proveedor CycleCloud establece algunas variables de entorno predeterminadas.

  • rc_account
  • template_id
  • providerName
  • clustername
  • cyclecloud_nodeid (recomendado para establecer este instanceId en recurso)

Otras variables de datos de usuario que pueden ser útiles para administrar recursos en el proveedor CycleCloud son:

  • nodearray_name
  • placement_group_id

Nota

Aunque Windows es una plataforma LSF compatible oficialmente, CycleCloud no admite la ejecución de LSF en Windows en este momento.