你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

IBM Spectrum LSF

从 LSF 10.1 FixPack 9 (10.1.0.9) Azure CycleCloud 是资源连接器的本机提供程序。 IBM 提供 文档。 这些资源提供有关配置 LSF 主节点以连接到 CycleCloud 的说明。

LSF 是 IBM 许可的产品;在 CycleCloud 中使用 LSF 需要 IBM 向其客户提供的权利文件。

注意

LSF 是 IBM 许可的产品;在 CycleCloud 中使用 LSF 需要 IBM 向其客户提供的权利文件。 必须将 LSF 二进制文件和权利文件添加到 blob/目录中,才能在此项目中使用完全自动化的群集或 VM 映像生成器。 若要使用完全自动化的群集或此项目中的 vm 映像生成器,必须将 LSF 二进制文件和权利文件添加到 blobs/目录中。

CycleCloud LSF 群集类型的支持方案

LSF 可以从 Azure“借用”主机以按需方式运行作业,并根据需要添加和删除主机。 LSF 群集类型很灵活,可以处理单个群集中的多个方案:

  1. 高吞吐量作业 (CPU & GPU)
  2. 紧密耦合 (MPI、CPU & GPU)
  3. 低优先级

这些方案通过配置多个节点数组和 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 模板属性

并非所有 nodearray 属性都由 LSF 提供程序模板公开。 可以将其视为 CycleCloud 节点数组配置的替代。 唯一必需的 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 网络功能。 这些网络与普通以太网不同,其范围有限。 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_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。