共用方式為


IBM Spectrum LSF

從 LSF 10.1 FixPack 9 (10.1.0.9) 開始, Azure CycleCloud 是 Resource Connector 的原生提供者。 IBM 提供 文件。 這些資源提供設定 LSF 主要節點以連線到 CycleCloud 的指示。

LSF 是 IBM 授權產品。 若要在 CycleCloud 中使用 LSF,您需要 IBM 提供給其客戶的權利檔案。

備註

  • LSF 是 IBM 授權產品。 若要在 CycleCloud 中使用 LSF,您需要 IBM 提供給其客戶的權利檔案。 將 LSF 二進位檔及授權檔 blobs/ 新增至目錄,以在此專案中使用全自動叢集或 VM 映像檔建置器。
  • 若要在此專案中使用全自動叢集或 VM 映像檔建置器,請將 LSF 二進位檔及授權檔 blobs/ 新增至目錄。
  • LSF 需要依賴於最新版本 Azure HPC 映像中預設未安裝的 ed 套件。 如果您選取的 VM 映像檔不包含 ed,則建議您使用 cloud-init 來新增套件。 例如,在 RedHat Enterprise Linux、AlmaLinux 或 CentOS 上,您可以將下列專案新增至叢集範本 (或透過 [叢集編輯] 對話方塊在 CycleCloud GUI) 中:
[node defaults]
CloudInit = '''#!/bin/bash
yum install -y ed
'''

CycleCloud LSF 叢集類型的支援案例

LSF 可以從 Azure 「借用」主機,以隨需應變方式執行工作,並視需要新增及移除主機。 LSF 叢集類型可彈性地處理單一叢集中的數個實務範例:

  1. 高輸送量作業 (CPU 和 GPU)
  2. 緊密耦合(MPI、CPU 和 GPU)
  3. 低優先級

透過配置多個節點陣列和 LSF 屬性來處理這些場景。 CycleCloud 會預先設定節點陣列。 LSF 的適當配置可啟用各種工作實務範例。

當您根據這些建議配置 LSF 時,您可以以下列方式使用 bsub 資源需求 -R

使用資源 placementGroup 來執行具有 InfiniBand 連線網路的工作。

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

對於 GPU,建議您使用 LSF 支援來延伸 GPU 語法。 一般而言,您會將下列屬性新增至 lsf.confLSB_GPU_NEW_SYNTAX=extendLSF_GPU_AUTOCONFIG=Y。 啟用擴充語法支援後,使用 placementGroup 及 -gpu,可執行具有 GPU 加速的緊密耦合工作。

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

以平行方式執行已啟用 GPU 的工作。

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

在低優先順序的 VM 上執行大型高載工作。

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

設定 CycleCloud LSF 叢集類型的 LSF

若要啟用這些實務範例,請將共用資源類型新增至 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)

您可能可以不使用 cyclecloudlowprio,但它可提供額外的檢查,以確保作業在正確的 VM 租用環境中運行。

適用於 CycleCloud 的 LSF 提供者範本

LSF CycleCloud 提供者會透過提供者範本公開配置。 這些配置是節點陣列完整配置的子集。

以下是來自 cyclecloudprov_templates.json的 Cyclecloud 的範例 LSF 範本:

{
    "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"
}

CycleCloud 的 LSF 範本屬性

LSF 提供者範本不會公開所有 nodearray 屬性。 這些屬性會被視為覆寫 CycleCloud nodearray 設定。 唯一必要的 LSF 範本屬性是:

  • templateId
  • nodeArray

您可以省略其他屬性,或者它們可能根本不需要。 CycleCloud 會推斷這些屬性:

  • imageId - Azure VM 映像,例如,"/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" - 覆寫 CycleCloud 叢集設定。
  • subnetId - Azure 子網路,例如,"resource_group/vnet/subnet" - 覆寫 CycleCloud 叢集設定。
  • vmType - 例如,"Standard_HC44rs" - 覆寫 CycleCloud 叢集設定。
  • keyPairLocation - 例如,"~/.ssh/id_rsa_beta" - 覆寫 CycleCloud 叢集設定。
  • customScriptUri - 例如, http://10.1.0.4/user_data.sh. 如果未指定,則沒有腳本。
  • userData - 例如, "nodearray_name=gpumpi;placement_group_id=gpumpipg1". 如果未指定,則為空。

關於 PlacementGroups 的說明

Azure 資料中心具有適用於 HPC 案例的 InfiniBand 網路功能。 與普通以太網不同,這些網絡的跨度有限。 「PlacementGroups」描述 InfiniBand 網路範圍。 如果虛擬機器位於相同的置放群組中,且是已啟用 InfiniBand 的特殊虛擬機器類型,則它們會共用 InfiniBand 網路。

LSF 和 CycleCloud 需要對這些放置群組進行特殊管理。

以下是來自 cyclecloudprov_templates.json的 CycleCloud 範例 LSF 範本:

{
  "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"
}

此檔案中的 placementGroupName 可以是任意內容,但它會決定 CycleCloud 中 placementGroup 的名稱。 從此範本從 CycleCloud 借用的任何節點都位於此 placementGroup 中,如果它們是已啟用 InfiniBand 的 VM,則會共用 IB 網路。

屬性符合 placementGroupName 主機屬性 placementgroup。 這場比賽是有意的,也是必要的。 在主機啟動時,將placement_group_id屬性設為userData以在user_data.sh中使用。 ondemandmpi 屬性可能看似多餘,但可用來防止此工作在未定義 placementGroup 的主機上進行比對。

當您使用置放群組時,屬性的 Azure.MaxScaleSetSize 值會決定置放群組大小上限。 此內容會間接限制您可以新增至置放群組的節點數目,但 LSF 不會考慮它。 請將 LSF 範本中的 MaxNumber 設置為叢集範本中的 Azure.MaxScaleSetSize

user_data.sh

範本提供兩個用於執行 user_data.sh 指令碼的屬性: customScriptUriuserData。 這些屬性是在節點啟動時執行的使用者管理指令碼的 URI 和自訂環境變數。 因為一個匿名的 CURL 命令會下載指令碼,customScriptUri 無法要求驗證。 使用此指令碼可以:

  1. 配置工作者 LSF 常駐程式,特別是 LSF_LOCAL_RESOURCESLSF_MASTER_LIST
    • 如果 LSF_TOP 位於共用檔案系統上,則在啟動守護程式之前,先建立 lsf.conf 的本機副本,然後設定 LSF_ENVDIR 變數會很有用。
  2. 啟動 lim、res 和 sbatch 守護程式。

CycleCloud 提供者會設定一些預設環境變數。

  • rc_帳戶
  • template_id
  • 提供者名稱
  • 叢集名稱
  • cyclecloud_nodeid (將此變數設定為 instanceId 資源)

其他可用於管理 CycleCloud 提供者中資源的使用者資料變數包括:

  • nodearray_name
  • placement_group_id

備註

雖然 Windows 是官方支援的 LSF 平臺,但 CycleCloud 目前不支援在 Windows 上執行 LSF。