Udostępnij za pośrednictwem


IBM Spectrum LSF

Począwszy od LSF 10.1 FixPack 9 (10.1.0.9) Azure CycleCloud jest natywnym dostawcą łącznika zasobów. Firma IBM udostępnia dokumentację. Te zasoby zawierają instrukcje dotyczące konfigurowania węzła głównego LSF w celu nawiązania połączenia z usługą CycleCloud.

LSF jest licencjonowanym produktem IBM; korzystanie z LSF w usłudze CycleCloud wymaga pliku uprawnień, który firma IBM udostępnia swoim klientom.

Uwaga

LSF jest licencjonowanym produktem IBM; korzystanie z LSF w usłudze CycleCloud wymaga pliku uprawnień, który firma IBM udostępnia swoim klientom. Pliki binarne LSF i plik uprawnień należy dodać do katalogu obiektów blob/ w celu korzystania z w pełni zautomatyzowanego klastra lub konstruktora obrazów maszyny wirtualnej w tym projekcie. Aby użyć w pełni zautomatyzowanego klastra lub konstruktora obrazów maszyny wirtualnej w tym projekcie plików binarnych LSF i pliku uprawnień, należy dodać do katalogu obiektów blob/.

Obsługiwane scenariusze typu klastra CycleCloud LSF

Rozwiązanie LSF może "pożyczyć" hosty z platformy Azure, aby uruchamiać zadania w sposób na żądanie, dodając i usuwając hosty zgodnie z potrzebami. Typ klastra LSF jest elastyczny do obsługi kilku scenariuszy w jednym klastrze:

  1. Zadania o wysokiej przepływności (procesor CPU & PROCESOR GPU)
  2. Ściśle powiązane (MPI, PROCESOR & GPU)
  3. Niski priorytet

Te scenariusze są obsługiwane przez konfigurację wielu właściwości nodearrays i LSF we koncercie. Środowisko nodearrays jest wstępnie skonfigurowane w usłudze CycleCloud. Właściwa konfiguracja LSF umożliwia korzystanie z różnych scenariuszy zadań.

W przypadku skonfigurowania LSF zgodnie z tymi zaleceniami bsub wymagania dotyczące -R zasobów mogą być używane w następujący sposób:

Użyj zasobu placementGroup, aby uruchomić zadanie z połączoną siecią InfiniBand.

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

W przypadku procesorów GPU zalecamy używanie obsługi LSF dla rozszerzonej składni procesora GPU. Zazwyczaj wymaga dodania dwóch atrybutów do pliku lsf.conf: LSB_GPU_NEW_SYNTAX=extend i LSF_GPU_AUTOCONFIG=Y. Obsługa rozszerzonej składni jest włączona, użyj elementu placementGroup wraz z -gpu poleceniem , aby uruchomić ściśle powiązane zadanie z przyspieszeniem procesora GPU.

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

Uruchom zadania z obsługą procesora GPU w sposób równoległy.

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

Uruchom duże zadanie serii na maszynach wirtualnych o niskiej wydajności.

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

Konfigurowanie LSF dla typu klastra CycleCloud LSF

Aby włączyć te scenariusze zgodnie z opisem, dodaj kilka typów zasobów udostępnionych do biblioteki 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)

Możliwe, że cyclecloudlowprio można pominąć, ale zapewnia dodatkowe sprawdzenie, czy zadania są uruchomione na zamierzonej dzierżawie maszyny wirtualnej.

Szablon dostawcy LSF dla usługi CycleCloud

Dostawca LSF CycleCloud udostępnia wiele konfiguracji za pośrednictwem szablonu dostawcy. Te konfiguracje są podzbiorem pełnej konfiguracji środowiska nodearray.

Oto przykładowy szablon LSF dla usługi Cyclecloud z 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"
}

Atrybuty szablonu LSF dla usługi CycleCloud

Nie wszystkie atrybuty nodearray są uwidocznione przez szablon dostawcy LSF. Można je uznać za zastąpienia konfiguracji nodearray CycleCloud. Jedynym wymaganym szablonem LSF są:

  • templateId
  • nodeArray

Inne są wnioskowane z konfiguracji CycleCloud, można pominąć lub w ogóle nie są konieczne.

  • imageId — obraz maszyny wirtualnej platformy Azure, np. "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" przesłonięć konfigurację klastra CycleCloud.
  • subnetId — podsieć platformy Azure, np. "resource_group/vnet/subnet" przesłonięć konfigurację klastra CycleCloud.
  • vmType — np. "Standard_HC44rs" przesłonięć konfigurację klastra CycleCloud.
  • keyPairLocation — np. "~/.ssh/id_rsa_beta" przesłonięć konfigurację klastra CycleCloud.
  • customScriptUri — np. "http://10.1.0.4/user_data.sh", brak skryptu, jeśli nie zostanie określony.
  • userData — np. "nodearray_name=gpumpi;placement_group_id=gpumpipg1" wartość pusta, jeśli nie zostanie określona.

Uwaga dotycząca grup umieszczania

Centra danych platformy Azure mają możliwość sieci Infiniband dla scenariuszy HPC. Te sieci, w przeciwieństwie do normalnego ethernetu, mają ograniczony zakres. Zakresy sieci Infiniband są opisane przez "PlacementGroups". Jeśli maszyny wirtualne znajdują się w tej samej grupie umieszczania i są specjalnymi typami maszyn wirtualnych z obsługą protokołu Infiniband, będą one współużytkowane w sieci Infiniband.

Te grupy umieszczania wymagają specjalnej obsługi w LSF i CycleCloud.

Oto przykładowy szablon LSF dla usługi Cyclecloud z 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"
}

Element placementGroupName w tym pliku może być dowolny, ale określi nazwę grupy umieszczania w usłudze CycleCloud. Wszystkie węzły pożyczone z usługi CycleCloud z tego szablonu będą znajdować się w tej grupie umieszczania, a jeśli są to maszyny wirtualne z obsługą sieci Infiniband, będą współużytkowane przez sieć IB.

Należy pamiętać, że placementGroupName pasuje do atrybutu placementgrouphosta , ten celowy i niezbędny. Ponadto parametr placement_group_id jest ustawiony userData na wartość , która ma być używana w user_data.sh w czasie rozpoczęcia hosta. Atrybut ondemandmpi może wydawać się nadmiarowy, ale służy do zapobiegania dopasowywaniu tego zadania na hostach, na których placementGroup nie jest zdefiniowana.

Często w przypadku używania grup umieszczania istnieje maksymalny rozmiar grupy umieszczania określony przez Azure.MaxScaleSetSize właściwość. Ta właściwość pośrednio ogranicza liczbę węzłów do grupy umieszczania, ale nie jest traktowana przez LSF. Dlatego ważne jest, aby zestaw MaxNumber szablonu LSF był równy Azure.MaxScaleSetSize w szablonie klastra.

user_data.sh

Szablon zawiera atrybuty do wykonywania skryptu user_data.sh ; customScriptUri i userData. Są to zmienne środowiskowe identyfikatora URI i niestandardowe skryptu zarządzanego przez użytkownika uruchomionego podczas uruchamiania węzła. Ten skrypt jest pobierany przez annonymiczne polecenie CURL, więc customScriptUri wymaganie uwierzytelniania kończy się niepowodzeniem. Użyj tego skryptu, aby:

  1. Konfigurowanie demonów LSF procesu roboczego; szczególnie LSF_LOCAL_RESOURCES i LSF_MASTER_LIST
    • Jeśli LSF_TOP znajduje się w udostępnionym systemie plików, może być przydatne utworzenie lokalnej kopii lsf.conf i ustawienie LSF_ENVDIR zmiennej przed uruchomieniem demonów.
  2. Rozpocznij lim, res i sbatch demonów.

Istnieją pewne domyślne zmienne środowiskowe ustawione przez dostawcę CycleCloud.

  • rc_account
  • template_id
  • Providername
  • nazwa klastra
  • cyclecloud_nodeid (zalecane, aby ustawić ten zasób)instanceId

Inne zmienne danych użytkownika, które mogą być przydatne w zarządzaniu zasobami u dostawcy CycleCloud, to:

  • nodearray_name
  • placement_group_id

Uwaga

Mimo że system Windows jest oficjalnie obsługiwaną platformą LSF, usługa CycleCloud nie obsługuje obecnie uruchamiania LSF w systemie Windows.