IBM Spectrum LSF

LSF 10.1 FixPack 9 (10.1.0.9) 以降、Azure CycleCloud は Resource Connector のネイティブ プロバイダーです。 IBM には ドキュメントが用意されています。 これらのリソースは、CycleCloud に接続するように LSF マスター ノードを構成する手順を提供します。

LSF は IBM ライセンス製品です。CycleCloud で LSF を使用するには、IBM が顧客に提供するエンタイトルメント ファイルが必要です。

注意

LSF は IBM ライセンス製品です。CycleCloud で LSF を使用するには、IBM が顧客に提供するエンタイトルメント ファイルが必要です。 このプロジェクトで完全に自動化されたクラスターまたは VM イメージ ビルダーを使用するには、LSF バイナリとエンタイトルメント ファイルを BLOB/ディレクトリに追加する必要があります。 完全に自動化されたクラスター、またはこのプロジェクトの LSF バイナリとエンタイトルメント ファイルの vm イメージ ビルダーを使用するには、BLOB/ ディレクトリに追加する必要があります。

CycleCloud LSF クラスターの種類のサポートされるシナリオ

LSF は、必要に応じてホストを追加および削除して、オンデマンドでジョブを実行するために Azure からホストを "借用" できます。 LSF クラスターの種類は、1 つのクラスター内のいくつかのシナリオに柔軟に対応できます。

  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と に 2 つの属性を追加する必要があります。 拡張構文のサポートが有効になっている場合は、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 テンプレート属性

すべての nodearray 属性が LSF プロバイダー テンプレートによって公開されるわけではありません。 これらは、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 Datacenter には、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 は、ホストの開始時刻にuser_data.shで使用されるように に設定userDataされていること。 属性は ondemandmpi 無関係に見えるかもしれませんが、 が未定義のホスト placementGroup でこのジョブが一致しないようにするために使用されます。

多くの場合、配置グループを使用する場合は、 プロパティによって決定される最大配置グループ サイズが存在します Azure.MaxScaleSetSize 。 このプロパティは、配置グループに追加できるノードの数を間接的に制限しますが、LSF では考慮されません。 そのため、クラスター テンプレートで と等しい LSF テンプレートのセットをAzure.MaxScaleSetSize設定MaxNumberすることが重要です。

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_account
  • template_id
  • providerName
  • clustername
  • cyclecloud_nodeid (これを instanceId リソースに設定することをお勧めします)

CycleCloud プロバイダーのリソースの管理に役立つその他のユーザー データ変数は次のとおりです。

  • nodearray_name
  • placement_group_id

注意

Windows は正式にサポートされている LSF プラットフォームですが、現時点では CycleCloud では Windows での LSF の実行はサポートされていません。