共用方式為


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 二進位檔和權利檔案必須新增至 blob/ 目錄,才能在此專案中使用完全自動化的叢集或 VM 映射產生器。 若要使用完全自動化的叢集,或此專案 LSF 二進位檔和權利檔案中的 vm 映射產生器必須新增至 blobs/ 目錄。

CycleCloud LSF 叢集類型的支援案例

LSF 可以從 Azure「借用」主機,以隨選方式執行作業,視需要新增和移除主機。 LSF 叢集類型具有彈性,可在單一叢集中處理數個案例:

  1. CPU & GPU) (高輸送量作業
  2. 緊密結合 (MPI、CPU & GPU)
  3. 低優先順序

這些案例是由多個 nodearray 和 LSF 屬性的設定所處理。 nodearrays 已在 CycleCloud 中預先設定。 適當設定 LSF 可啟用各種作業案例。

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

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

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

針對 GPU,我們建議針對擴充 GPU 語法使用 LSF 支援。 通常需要將兩個屬性新增至 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 提供者會透過提供者範本公開許多組態。 這些組態是 nodearray 完整組態的子集。

以下是來自 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" 如果未指定,則為 empty。

PlacementGroups 上的附注

Azure 數據中心具有 HPC 案例的 Infiniband 網路功能。 這些網路與一般乙太網路不同,具有有限的範圍。 Infiniband 網路範圍是由 「PlacementGroups」 描述。 如果 VM 位於相同的放置群組中,而且是啟用 Infiniband 的特殊 VM 類型,則會共用 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 不會考慮。 因此,請務必在叢集範本中設定 MaxNumber 等於 Azure.MaxScaleSetSize 的 LSF 範本。

user_data.sh

此範本提供用來執行 user_data.sh 腳本的屬性; customScriptUriuserData。 這些是節點啟動時執行之使用者管理腳本的 URI 和自定義環境變數。 此腳本是由無名 CURL 命令下載,因此 customScriptUri 需要驗證失敗。 使用此腳本來:

  1. 設定背景工作角色 LSF 精靈; LSF_LOCAL_RESOURCES 特別是和 LSF_MASTER_LIST
    • 如果 LSF_TOP 位於共用文件系統上,在啟動精靈之前,建立的本地副本 lsf.conf 並設定 LSF_ENVDIR 變數會很有用。
  2. 啟動 lim、res 和 sbatch 精靈。

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

  • rc_account
  • template_id
  • providerName
  • clustername
  • instanceIdcyclecloud_nodeid (建议将此设定为資源)

其他可用於管理 CycleCloud 提供者中資源的用戶數據變數如下:

  • nodearray_name
  • placement_group_id

注意

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