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:
- Zadania o wysokiej przepływności (procesor CPU & PROCESOR GPU)
- Ściśle powiązane (MPI, PROCESOR & GPU)
- 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 placementgroup
hosta , 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:
- Konfigurowanie demonów LSF procesu roboczego; szczególnie
LSF_LOCAL_RESOURCES
iLSF_MASTER_LIST
- Jeśli
LSF_TOP
znajduje się w udostępnionym systemie plików, może być przydatne utworzenie lokalnej kopiilsf.conf
i ustawienieLSF_ENVDIR
zmiennej przed uruchomieniem demonów.
- Jeśli
- 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.