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 が顧客に提供するエンタイトルメント ファイルが必要です。 LSF バイナリとエンタイトルメント ファイルを blobs/
ディレクトリに追加して、このプロジェクトで完全に自動化されたクラスターまたは VM イメージ ビルダーを使用します。
このプロジェクトで完全に自動化されたクラスターまたは VM イメージ ビルダーを使用するには、LSF バイナリとエンタイトルメント ファイルを blobs/
ディレクトリに追加します。
CycleCloud LSF クラスターの種類でサポートされるシナリオ
LSF は、Azure からホストを "借用" して、必要に応じてホストを追加および削除しながらジョブをオンデマンドで実行できます。 LSF クラスターの種類には、1 つのクラスターでいくつかのシナリオを処理する柔軟性があります。
- 高スループット ジョブ (CPU と GPU)
- 密結合 (MPI、CPU、GPU)
- 低優先度
複数のノード配列と LSF プロパティを構成して、これらのシナリオを処理します。 CycleCloud は、ノード配列を事前に構成します。 LSF を適切に構成すると、さまざまなジョブ シナリオが可能になります。
これらの推奨事項に従って LSF を構成する場合は、次の方法でリソース要件-R
bsub
使用できます。
placementGroup
リソースを使用して、InfiniBand に接続されたネットワークでジョブを実行します。
-R "span[ptile=2] select[nodearray=='ondemandmpi' && cyclecloudmpi] same[placementgroup]"
GPU の場合は、拡張 GPU 構文に対して LSF サポートを使用することをお勧めします。 通常、これらの属性を lsf.conf に追加します: LSB_GPU_NEW_SYNTAX=extend
と LSF_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"
。 指定されていない場合は空。
PlacementGroup に関する注意事項
Azure データセンターには、HPC シナリオ用の InfiniBand ネットワーク機能があります。 通常のイーサネットとは異なり、これらのネットワークのスパンは限られています。 "PlacementGroups" は、InfiniBand ネットワーク エクステントを表します。 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
と一致します。 この一致は意図的であり、必要です。 ホストの開始時刻にuser_data.shで使用するuserData
のplacement_group_id
プロパティを設定します。
ondemandmpi
属性は余分に見えるかもしれませんが、placementGroup
が定義されていないホストでこのジョブが一致しないようにするために使用されます。
配置グループを使用する場合、 Azure.MaxScaleSetSize
プロパティの値によって、配置グループの最大サイズが決まります。
このプロパティは、配置グループに追加できるノードの数を間接的に制限しますが、LSF では考慮されません。 LSF テンプレートの MaxNumber
をクラスター テンプレートの Azure.MaxScaleSetSize
に設定します。
user_data.sh
テンプレートには、 user_data.sh スクリプトを実行するための 2 つの属性 ( customScriptUri
と userData
) が用意されています。 これらの属性は、ノードの起動時に実行されるユーザー管理スクリプトの URI とカスタム環境変数です。 匿名 CURL コマンドによってスクリプトがダウンロードされるため、 customScriptUri
は認証を必要とできません。 このスクリプトを使用して、次の操作を行います。
- ワーカー LSF デーモン (特に
LSF_LOCAL_RESOURCES
およびLSF_MASTER_LIST
) を構成します。LSF_TOP
が共有ファイルシステム上にある場合は、デーモンを起動する前に、lsf.conf
のローカル コピーを作成し、LSF_ENVDIR
変数を設定すると便利です。
- lim、res、sbatch デーモンを開始します。
CycleCloud プロバイダーは、いくつかの既定の環境変数を設定します。
- rc_account
- template_id
- providerName
- clustername
- cyclecloud_nodeid (この変数をリソース
instanceId
に設定)
CycleCloud プロバイダーのリソースの管理に役立つその他のユーザー データ変数は次のとおりです。
- nodearray_name
- placement_group_id
注
Windows は正式にサポートされている LSF プラットフォームですが、現時点では CycleCloud は Windows での LSF の実行をサポートしていません。