使用計算單元控制工作地區

計算單元是由 LSF 管理者所佈置並配置成模擬網路架構的主機群組,可將通訊額外負擔降到最低,以最佳放置平行工作。 計算單元的不同精度可提供彈性,以精確配置擴充叢集,並在較大的計算單元上執行較大的工作。

計算單元區段內的資源需求關鍵字可用來以類似於主機資源配置的方式在整個計算單元中配置資源。 然後,計算單元會將主機取代為工作的基本配置單元。

執行分散在許多主機上的大型平行工作的高效能運算叢集,可受益於使用計算單元。 可以透過仔細配置計算裝置來隔離大型叢集的網路架構內的通訊瓶頸。 使用計算單位而非主機作為基本配置單位,可以大規模套用排程原則。

附註:

將每一個個別主機配置為計算單元,以使用計算單元功能進行主機層次工作配置。

[計算單元類型]

如圖所示,在 lsb.params中的 COMPUTE_UNIT_TYPES 參數中定義了兩種類型的計算單位:

COMPUTE_UNIT_TYPES= enclosure! rack

! 指出預設計算單元類型。 列出的第一個類型 (enclosure) 是最細微的精度,也是唯一包含主機和主機群組的計算單元類型。 粗粒度rack計算單元只能包含enclosureS.

主機已在 lsb.hostsComputeUnit 區段中分組為計算單位,如下所示 (省略部分行):

Begin ComputeUnit 
NAME         MEMBER             CONDENSED TYPE
enclosure1   (host1[01-16])     Y         enclosure
...
enclosure8   (host8[01-16])     Y         enclosure
rack1        (enclosure[1-2])   Y         rack
rack2        (enclosure[3-4])   Y         rack
rack3        (enclosure[5-6])   Y         rack
rack4        (enclosure[7-8])   Y         rack
End ComputeUnit
此範例定義 12 個計算單元,所有計算單元都具有壓縮輸出:
  • enclosure1通過enclosure8是最細微的精度,且每一個都包含 16 個主機。
  • rack1,rack2,rack3,及rack4是精度最粗糙的,且每一個都包含 2 個機箱。

語法

cu 字串支援下列語法:

cu [balance]
用於此工作的所有計算單元應該提供相同數目的插槽 (至一個插槽內)。 它提供對最少可能計算單位的平衡配置。
cu [pref = bestfit]
工作將放置在儘可能少的計算單元之間 (給定現行資源可用性) ,同時偏好使用工作已佔用的資源,以嘗試減少叢集中的片段化。 請勿與 balance 關鍵字一起使用。
cu [pref = config]
此工作的計算單位會依照它們在 lsb.hosts 配置檔中出現的順序來考量。 這是預設值。
cu [pref = minavail]
此工作首先會考量具有最少可用時段的計算單元。 它適用於較小的工作 (循序及平行) ,因為這會將計算單元的可能片段化減至最少,讓較大的工作可以使用整個計算單元。
cu [pref = maxavail]
此工作首先會考量具有最多可用插槽的計算單元。
cu [maxcus=number]
工作可以執行的計算單元數目上限。
cu [usablecuslots=number]

用於此工作的所有計算單元都應該提供相同的最小 number 個插槽。 最終配置的計算單元最多只能提供少於 number 個插槽。

cu [type=cu_type]
使用的計算單元類型,其中 cu_type 是由 COMPUTE_UNIT_TYPESlsb.params中定義的其中一個類型。 預設值是 lsb.params中第一個列出的計算單元類型。
cu [excl]
專門用於工作的計算單元。 必須由 lsb.queues中的 EXCLUSIVE 啟用。

繼續上述範例,假設 lsb.queues 包含參數定義 EXCLUSIVE=CU[rack] ,且每一個計算單元可用的插槽顯示在 bhosts的壓縮顯示畫面中 MAX 下,其中 HOST_NAME 是指計算單元:

HOST_NAME    STATUS   JL/U  MAX  NJOBS  RUN  SSUSP  USUSP  RSV
enclosure1   ok       -     64   34     34    0      0      0
enclosure2   ok       -     64   54     54    0      0      0
enclosure3   ok       -     64   46     46    0      0      0
enclosure4   ok       -     64   44     44    0      0      0
enclosure5   ok       -     64   45     45    0      0      0
enclosure6   ok       -     64   44     44    0      0      0
enclosure7   ok       -     32   0      0     0      0      0
enclosure8   ok       -     64   0      0     0      0      0
rack1        ok       -     128  88     88    0      0      0
rack2        ok       -     128  90     90    0      0      0
rack3        ok       -     128  89     89    0      0      0
rack4        ok       -     128  0      0     0      0      0

根據 12 個已配置的計算單元,可以提交具有各種計算單元需求的工作。

使用計算單位

  1. bsub -R "cu[]" -n 64 ./app

    此工作限制為預設類型的計算單元enclosure. 套用預設 pref=config ,並依配置順序考量計算單元。 工作在中的 30 個插槽上執行enclosure1, 10 個插槽位於enclosure2, 18 個插槽進入enclosure3,且 6 個插槽位於enclosure4總共 64 個插槽。

  2. 計算單元可以按大部分可用時段或最少可用時段的順序來考量,其中可用時段包括任何可用且未被執行中工作佔用的可用時段。

    bsub -R "cu[pref=minavail]" -n 32 ./app

    此工作限制為預設類型的計算單元enclosure順序為 pref=minavail。 優先考量具有最少可用插槽的計算單位。 工作在中的 10 個插槽上執行enclosure2, 18 個插槽進入enclosure3及 4 個插槽enclosure5共 32 個插槽。

  3. bsub -R "cu[type=rack:pref=maxavail]" -n 64 ./app

    此工作限制為預設類型的計算單元enclosure順序為 pref=maxavail。 會先考量具有最多可用時段的計算單元。 工作在中的 64 個插槽上執行enclosure8.

本地化配置

可以使用 maxcus 關鍵字在有限數目的計算單元上執行工作。

  1. bsub -R "cu[pref=maxavail:maxcus=1]" ./app

    此工作僅限於單一機箱,且會優先考量具有最多可用插槽的計算單元。 工作需求滿足者enclosure8它有 64 個可用插槽。

  2. bsub -n 64 -R "cu[maxcus=3]" ./app
    此工作在 3 個機箱或更少的機箱上總共需要 64 個插槽。 計算單位依配置順序考量。 下列配置滿足工作需求:
    計算單位 可用時段
    enclosure1 30
    enclosure3 18
    enclosure4 16

平衡時段配置

平衡配置會在計算單元之間平均分割工作,這會提高部分應用程式的效率。

  1. bsub -n 80 -R "cu[balance:maxcus=4]" ./app

    此工作需要在類型的最少可能計算單元上進行平衡配置enclosure(預設類型) ,總計 80 個插槽。 由於所配置的機箱都沒有 80 個插槽,因此會使用 2 個計算單元 (各有 40 個插槽) ,滿足 maxcus 使用 4 個計算單元或更少的需求。

    未包含關鍵字 pref ,因此會使用預設順序 pref=config 。 中的 27 個插槽滿足工作需求enclosure1, 27 個插槽enclosure7,及 26 個插槽enclosure8,總共 80 個插槽。

  2. bsub -n 64 -R "cu[balance:type=rack:pref=maxavail]" ./app

    此工作需要在類型的最少可能計算單元上進行平衡配置rack,總計 64 個插槽。 依順序優先考量具有最多可用時段的計算單元rack4,rack1,rack3,rack2. 工作需求滿足下列條件:rack4.

  3. bsub -n "40,80" -R "cu[balance:pref=minavail]" ./app

    此工作需要對類型為的計算單元進行平衡配置rack,範圍為 40 到 80 個插槽。 當範圍與關鍵字 balance一起指定時,只會考量最小屬性數,因此工作需要 40 個屬性。 優先考量具有最少可用插槽的計算單位。

    因為平衡會使用最少可能的計算裝置,所以會先考量具有 40 個以上插槽的機架,亦即rack1rack4。然後會選取具有最少可用插槽的機架,且中的 40 個插槽滿足所有工作需求enclosure8.

平衡主機配置

在需求字串內一起使用 balanceptile 會導致計算單位的平衡主機配置,以及每一個主機的相同插槽數目。 如果需要,最終主機可能會提供較少的插槽。

  • bsub -n 64 -R "cu[balance] span[ptile=4]" ./app

    此工作需要在類型的最少可能計算單元上進行平衡配置enclosure,總計 64 個插槽。 每一個使用的主機必須提供 4 個插槽。 自enclosure8有 64 個插槽可供 16 部主機使用 (每部主機 4 個插槽) ,可滿足工作需求。

    enclosure8未滿足需求,其他可能的配置依考量順序 (先最少計算單元數) 包括:
    計算單位數目 主機數目
    2 8+8
    3 5+5+6
    4 4+4+4+4
    5 3+3+3+3+4

插槽配置下限

插槽配置下限會導致工作分散到較少的計算單元,並忽略具有少量可用主機的計算單元。

  1. bsub -n 45 -R "cu[usablecuslots=10:pref=minavail]" ./app
    此工作需要在每一個機箱中至少配置 10 個插槽,但最後一個可能除外。 優先考量具有最少可用插槽的計算單位。 下列項目的空位配置可滿足需求:
    計算單位 插槽數目
    enclosure2 10
    enclosure5 19
    enclosure4 16

  2. bsub -n "1,140" -R "cu[usablecuslots=20]" ./app
    此工作需要在每個機箱中至少配置 20 個插槽,但最後一個除外。 以配置順序考量計算單元,並盡可能配置接近 140 個插槽。 配置 140 個插槽滿足需求,其中只有最後一個計算單元配置少於 20 個插槽,如下所示:
    計算單位 插槽數目
    enclosure1 30
    enclosure4 20
    enclosure6 20
    enclosure7 64
    enclosure2 6

專用計算單元工作

因為 lsb.queues中的 EXCLUSIVE=CU[rack] ,所以工作可能使用類型為的計算單元rack或較細微的精度類型 enclosure 。 專用工作會鎖定它們在其中執行的所有計算單元,即使工作未使用所有插槽也一樣。 執行計算單元專用工作會將共用網路頻寬所導致的通訊減速減至最少。

  1. bsub -R "cu[excl:type=enclosure]" ./app

    此工作需要專用以配置順序考量計算單元的機體。 第一個未執行任何工作的機箱是enclosure7.

  2. exclusablecuslots搭配使用時,工作會避免大部分主機無法使用的計算單元。

    bsub -n 90 -R "cu[excl:usablecuslots=12:type=enclosure]" ./app

    此工作需要專用計算單元,而且如果可用的插槽少於 12 個,則不會使用計算單元。 計算單位依配置順序考量。 在此情況下,工作需求由下列位置中的 64 個插槽滿足:enclosure7及 26 個插槽enclosure8.

  3. bsub -R "cu[excl]" ./app

    此工作需要以配置順序考量計算單位的專用機架。 唯一沒有執行任何工作的機架是rack4.

預約

計算單元限制項 (例如關鍵字 maxcusbalanceexcl ) 可能會導致預設 LSF 資源保留的預測開始時間不準確。 時間型資源保留提供更精確的擱置工作預測開始時間。 例如,在計算工作以時間為基礎的預測開始時間時, LSF 會考量工作排程限制及需求,包括工作拓蹼及資源限制。

主機層次計算單元

將每一個個別主機配置為計算單元可讓您使用計算單元功能來進行主機層次工作配置。 假設有一個範例,在 lsb.paramsCOMPUTE_UNIT_TYPES 參數中定義了一種計算單位類型:

COMPUTE_UNIT_TYPES= host!

這些主機已在 lsb.hostsComputeUnit 區段中分組為計算主機,如下所示:

Begin ComputeUnit 
NAME  MEMBER   TYPE
h1    host1    host
h2    host2    host
...
h50   host50   host
End ComputeUnit

每一個已配置的預設類型計算單位host包含單一主機。

訂單主機配置

使用計算單位關鍵字pref,主機可以依大部分可用插槽或最少可用插槽的順序來考量,其中可用插槽包括任何可用且未被執行中工作佔用的插槽:

  1. bsub -R "cu[]" ./app

    預設類型的計算單位host,每一個包含單一主機,以配置順序考量。

  2. bsub -R "cu[pref=minavail]" ./app

    預設類型的計算單位host每一個都包含單一主機。 優先考量具有最少可用插槽的計算單位。

  3. bsub -n 20 -R "cu[pref=maxavail]" ./app

    預設類型的計算單位host每一個都包含單一主機。 會先考量具有最多可用時段的計算單元。 此工作總共配置了 20 個插槽。

限制配置中的主機

使用計算單位關鍵字maxcus以指定可以設定配置給工作的主機數目上限:

  • bsub -n 12 -R "cu[pref=maxavail:maxcus=3]" ./app

    預設類型的計算單位host每一個都包含單一主機。 會先考量具有最多可用時段的計算單元。 此工作需要在最多 3 個主機上配置 12 個插槽。

平衡時段配置

使用計算單位關鍵字balance,工作可以平均分佈在主機上:

  1. bsub -n 9 -R "cu[balance]" ./app

    預設類型的計算單位host,每一個包含單一主機,以配置順序考量。 可能的平衡配置如下:


    計算單位 主機 每個主機的插槽數目
    1 1 9
    2 2 4, 5
    3 3 3, 3, 3
    4 4 2, 2, 2, 3
    5 5 2, 2, 2, 2, 1
    6 6 2, 2, 2, 1, 1, 1
    7 7 2, 2, 1, 1, 1, 1, 1
    8 8 2, 1, 1, 1, 1, 1, 1, 1
    9 9 1, 1, 1, 1, 1, 1, 1, 1, 1

  2. bsub -n 9 -R "cu[balance:maxcus=3]" ./app

    預設類型的計算單位host,每一個包含單一主機,以配置順序考量。 可能的平衡配置為 1 部主機 (含 9 個插槽)、2 部主機 (含 4 個及 5 個插槽) 或 3 部主機 (各含 3 個插槽)。

插槽配置下限

使用計算單位關鍵字usablecuslots,只有在主機具有可供此工作使用的插槽數目下限時,才會考量主機:

  1. bsub -n 16 -R "cu[usablecuslots=4]" ./app

    預設類型的計算單位host,每一個包含單一主機,以配置順序考量。 僅考量具有 4 個以上可用插槽且未被執行中工作佔用的主機。 每一個主機 (可能除了最後配置的主機之外) 必須至少提供 4 個插槽給工作。

  2. bsub -n 16 -R "rusage[mem=1000] cu[usablecuslots=4]" ./app

    預設類型的計算單位host,每一個包含單一主機,以配置順序考量。 僅考量具有 4 個以上可用插槽、未被執行中工作佔用且具有 1000 個記憶體單元的主機。 例如,具有 10 個插槽及 2000 個記憶體單元的主機只會有 2 個插槽可用,可滿足此工作的記憶體需求。

最適合工作安置

部分使用者可能想要 LSF 將工作放置在與計算單元相關的最佳位置,而不需要針對不同的工作指定不同的需求。 基於此目的, LSF 具有 pref 選項的 "bestfit" 值。 例如, bsub -R "cu [pref=bestfit]" ...

使用此演算法時, LSF 會將工作放置在儘可能少的計算單元之間 (給定現行資源可用性) ,同時偏好使用工作已佔用的資源,以嘗試減少叢集中的片段化。 作法是考量叢集的基礎網路拓蹼,如 LSF 計算單元 (CU) 中所指定。

"bestfit" 值不同於其他計算單元放置演算法,因為它會考量計算單元階層的多個層次 (如果適用的話)。 它也容許大型及小型工作使用相同的計算單元需求。 最終,它會簡化運算單元需求的規格。

[pref = bestfit] 選項可以與下列項目一起使用:
  • maxcus
  • type=<type>
  • usablecuslots=<num>
  • excl
  • 計算單元喜好設定 -m 選項

[pref = bestfit] 演算法分兩階段運作。

[pref = bestfit] 的用法範例,以及演算法如何尋找計算單位的最佳適合度:
  • bsub -R “cu[excl:pref=bestfit]” -n 10 myjob

    運算單元最適合的專用工作

  • bsub -R “cu[pref=bestfit:usablecuslots=5]” -n 15 myjob

    最適合的工作放置,具有預設層次及以下層次的插槽配置下限。

  • bsub -m “cu1+10 cu3+1” -R “cu[pref=bestfit] ” -n 10 myjob

    在考量主機喜好設定的同時,提供最適合的工作安置。 主機喜好設定具有較高的優先順序。

  • bsub -R “cu[pref=bestfit:maxcus=2:type=switch]” -n 10 myjob

    預設層次及以下指定 maxcus 的最適合工作放置。 對於第二階段, LSF 會考量使用者指定值中最低的 maxcus ,以及在第一階段中計算的計算單位數目。

  • bsub -R “8*{select[LN]} + {cu[pref=bestfit]}” myjob

    具有複合資源需求的工作。

指定具有主機喜好設定特性的計算單位順序

在 LSF 10.1之前,計算單位順序僅由計算單位 pref 原則 (cu[pref=config | maxavail | minavail]) 決定。 主機喜好設定 (由 lsb.queues中的 -m 或 HOSTS 指定) 只會影響每一個計算單元內的主機順序。 在 LSF 10.1中,考量客戶更靈活指定計算單元訂單的需求,此行為已變更。

目前, LSF 容許使用主機喜好設定來指定計算單元順序以及 cu[pref=config | maxavail | minavail] 原則。 下列範例說明如何使用 -m 喜好設定,將計算單元的順序指定為: cu1>cu2>cu3>cu4
bsub -n 2 -m "cu1+10 cu2+5 cu3+1 cu4" -R "cu[]" ./app 
主機喜好設定會以下列方式與 cu[pref=config | maxavail | minavail] 一起運作,以決定計算單元順序:
  1. LSF 根據主機偏好計算計算單元偏好,以計算單元內主機的最高偏好作為計算單元偏好。 例如:
    1. 在下列範例中, h1 h2 屬於 cu1h3 h4 屬於 cu2,根據候選主機喜好設定, LSF 判定 cu1 喜好設定為 10cu2 喜好設定為 0
      bsub -n 2 -m "h1+10 others" -R "cu[pref=minavail]" ./app 
    2. 在下列範例中, h1 h2 屬於 cu1h3 h4 屬於 cu2,根據候選主機喜好設定, LSF 判定 cu1 喜好設定為 10cu2 喜好設定為 9
      bsub -n 2 -m "h1+10 h2+1 h3+9 h4+9" -R "cu[pref=minavail]" ./app 
  2. LSF 決定計算單位順序,如下所示:
    1. 當在步驟 1.中計算計算單位喜好設定時, 以上不同, LSF 根據計算單元優先排序計算單元,先考慮優先順序較高的計算單元。 例如:
      1. 因為在下列範例中 cu1 的喜好設定高於 cu2 ,所以 LSF 會先考量 cu1,然後再考量 cu2,而不考慮 cu[pref=config | maxavail | minavail] 原則。
        bsub -n 2 -m "cu1+10 cu2" -R "cu[pref=minavail]" ./app
      2. cu[pref=maxvail]cu[pref=config] 也遵循此原則。
    2. 當在步驟 1.中計算計算單位喜好設定時, 以上相同, LSF 會使用 cu[pref=config | maxavail | minavail]來訂購計算單元。 例如:
      1. 因為下列範例中的所有計算單元都沒有喜好設定,所以 LSF 會使用標準邏輯來決定計算單元順序。 pref=minavail 生效。
        bsub -n 2 -R "cu[pref=minavail]" ./app 
      2. 因為下列範例中的所有計算單元都具有相同的喜好設定,所以 LSF 會使用標準邏輯來決定計算單元順序。 pref=minavail 生效。
        bsub -n 2 -m "cu1+10 cu2+10" -R "cu[pref=minavail]" ./app
      3. cu[pref=maxvail]cu[pref=config] 也遵循此原則。
  3. LSF 確定計算單元順序後, LSF 排程器根據計算單元順序調整候選主機列表。

對於資源保留,在決定首先保留計算單元的資源時,會考量主機喜好設定。 不過,一律會使用預設值 pref=config

第一次執行的主機使用計算單元特性,如下所示:
  • 當強制第一個執行主機與計算單元特性一起使用時,包含第一個執行主機的計算單元會在計算單元之間獲得第一個喜好設定。 其餘計算單位會根據計算的計算單位喜好設定來排序。 如同先前在 LSF 中,在工作的配置中只能使用其中一個候選第一次執行主機。
附註:
  1. 計算單元原則 pref=config|maxavail|minavail 不會影響指定為第一個執行主機的計算單元順序。
    這表示即使在下列情況下:
    1. 您可以使用下列選項:
       -m "cu1! cu2! cu3!" -R "cu[pref=minavail]"
    2. cu1 有 15 個可用插槽。
    3. cu2 有 10 個可用插槽。
    4. cu3 有 20 個可用插槽。
    LSF 不會重新排序計算單元 cu[pref=config|maxavail|minavail] 原則下的第一個執行主機清單。
  2. 使用主機喜好設定來決定計算單元喜好設定時,不會考量指定為第一個執行主機的主機。 也就是說, LSF 只會計算未指定為第一次執行主機之主機的喜好設定。

    例如,讓 cu1cu2cu3cu4 表示所有相同類型的計算單位。 讓 hg 表示包含每一個計算單元中一個主機的主機群組。

    使用者提交下列工作:
    bsub -n 64 -m "hg! cu1+1 cu2+2 cu3+3 cu4+4" -R "cu[pref=config]" ./app
    
    當分派工作時, hg 中只有一個主機會出現在工作的配置清單中。 (此主機應該出現在清單的第一個位置。) 清單中的下一個是來自與第一個執行主機相同之計算單元的零個以上主機。 其他計算單元中的其餘主機會依計算單元分組,根據計算單元的高低喜好設定,群組本身會依序出現。 例如:
    1. 如果選取 h1 from cu1 作為第一次執行的主機,則最終計算單元順序會是 cu1>cu4>cu3>cu2
    2. 如果選取 h2 from cu2 作為第一次執行的主機,則最終計算單元順序會是 cu2>cu4>cu3>cu1
    3. 如果選取 h3 from cu3 作為第一次執行的主機,則最終計算單元順序會是 cu3>cu4>cu2>cu1
    4. 如果選取 h4 from cu4 作為第一次執行的主機,則最終計算單元順序會是 cu4>cu3>cu2>cu1