根据群集工作负荷自动增大和收缩 Azure 中的 HPC Pack 群集资源

重要

经典 VM 将于 2023 年 3 月 1 日停用。

如果使用 ASM 中的 IaaS 资源,请在 2023 年 3 月 1 日完成迁移。 我们建议你尽快进行切换,以利用 Azure 资源管理器中的许多增强功能。

有关详细信息,请参阅在 2023 年 3 月 1 日之前将 IaaS 资源迁移到 Azure 资源管理器

如果在 HPC Pack 群集中部署 Azure“突发”节点,或者在 Azure VM 中创建 HPC Pack 群集,可能需要根据群集上的工作负荷自动增长或缩小群集资源(例如节点或核心)的方法。 通过这种方式缩放群集资源可以更有效地使用 Azure 资源并控制其成本。

本文介绍 HPC Pack 为自动缩放计算资源提供的两种方法:

  • HPC Pack 群集属性 AutoGrowShrink

  • AzureAutoGrowShrink.ps1 HPC PowerShell 脚本

注释

Azure 具有用于创建和处理资源的两个不同的部署模型:资源管理器部署模型和经典部署模型。 这篇文章介绍如何使用这两种模型,但 Microsoft 建议大多数最新部署使用 Resource Manager 模型。

目前,只能自动增长和收缩运行 Windows Server 操作系统的 HPC Pack 计算节点。

设置 AutoGrowShrink 群集属性

先决条件

  • HPC Pack 2012 R2 Update 2 或更高版本群集 - 群集头节点可以部署在本地或 Azure VM 中。 请参阅 使用 HPC Pack 设置混合群集 ,以开始使用本地头节点和 Azure“突发”节点。 请参阅 HPC Pack IaaS 部署脚本 ,在 Azure VM 中快速部署 HPC Pack 群集。

  • 对于具有 Azure 中头节点的群集(资源管理器部署模型) - 从 HPC Pack 2016 开始,Azure Active Directory 应用程序中的证书身份验证用于使用 Azure 资源管理器自动增长和收缩部署的群集 VM。 按如下所示配置证书:

    1. 群集部署后,通过远程桌面连接到一个头节点。

    2. 将证书(带私钥的 PFX 格式)上传到每个头节点,并安装到 Cert:\LocalMachine\My 和 Cert:\LocalMachine\Root。

    3. 以管理员身份启动 Azure PowerShell,并在一个头节点上运行以下命令:

        cd $env:CCP_HOME\bin
    
        Connect-AzureRmAccount
    

    如果帐户位于多个 Azure Active Directory 租户或 Azure 订阅中,可以运行以下命令以选择正确的租户和订阅:

        Connect-AzureRmAccount -TenantId <TenantId> -SubscriptionId <subscriptionId>
    

    运行以下命令以查看当前选定的租户和订阅:

        Get-AzureRMContext
    
    1. 运行以下脚本
        .\ConfigARMAutoGrowShrinkCert.ps1 -DisplayName “YourHpcPackAppName” -HomePage "https://YourHpcPackAppHomePage" -IdentifierUri "https://YourHpcPackAppUri" -CertificateThumbprint "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -TenantId xxxxxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxxxx
    

    其中

    DisplayName - Azure Active Application 显示名称。 如果应用程序不存在,则会在 Azure Active Directory 中创建该应用程序。

    HomePage - 应用程序的主页。 可以配置虚拟 URL,如前面的示例所示。

    IdentifierUri - 应用程序的标识符。 可以配置虚拟 URL,如前面的示例所示。

    CertificateThumbprint - 您在步骤 1 中安装到主节点上的证书指纹。

    TenantId - Azure Active Directory 的租户 ID。 可以从 Azure Active Directory 门户 “属性 ”页获取租户 ID。

    有关 ConfigARMAutoGrowShrinkCert.ps1的详细信息,请运行 Get-Help .\ConfigARMAutoGrowShrinkCert.ps1 -Detailed

  • 对于具有 Azure 中头节点的群集(经典部署模型) - 如果使用 HPC Pack IaaS 部署脚本在经典部署模型中创建群集,请在群集配置文件中设置 AutoGrowShrink 选项来启用 AutoGrowShrink 群集属性。 有关详细信息,请参阅 脚本下载随附的文档。

    或者,使用以下部分所述的 HPC PowerShell 命令部署群集后,启用 AutoGrowShrink 群集属性。 若要为此做好准备,请先完成以下步骤:

    1. 在头节点上和 Azure 订阅中配置 Azure 管理证书。 对于测试部署,可以使用 HPC Pack 在头节点上安装的默认Microsoft HPC Azure 自签名证书,然后将该证书上传到 Azure 订阅。 有关选项和步骤,请参阅 TechNet 库指南

    2. 在头节点上运行 regedit ,转到 HKLM\SOFTWARE\Micorsoft\HPC\IaasInfo,并添加字符串值。 将值名称设置为“ThumbPrint”,并将值数据设置为步骤 1 中证书的指纹。

用于设置 AutoGrowShrink 属性的 HPC PowerShell 命令

下面是用于设置 AutoGrowShrink 并使用其他参数优化其行为的示例 HPC PowerShell 命令。 有关设置的完整列表,请参阅本文后面的 AutoGrowShrink 参数

若要运行这些命令,请以管理员身份在群集头节点上启动 HPC PowerShell。

启用 AutoGrowShrink 属性

Set-HpcClusterProperty –EnableGrowShrink 1

禁用 AutoGrowShrink 属性

Set-HpcClusterProperty –EnableGrowShrink 0

更改增长间隔(以分钟为单位)

Set-HpcClusterProperty –GrowInterval <interval>

更改收缩间隔(以分钟为单位)

Set-HpcClusterProperty –ShrinkInterval <interval>

查看 AutoGrowShrink 的当前配置

Get-HpcClusterProperty –AutoGrowShrink

从 AutoGrowShrink 中排除节点组

Set-HpcClusterProperty –ExcludeNodeGroups <group1,group2,group3>

注释

从 HPC Pack 2016 开始支持此参数

AutoGrowShrink 参数

以下是可以使用 Set-HpcClusterProperty 命令修改的 AutoGrowShrink 参数。

  • EnableGrowShrink - 切换到启用或禁用 AutoGrowShrink 属性。

  • ParamSweepTasksPerCore - 用于扩展一个核心的参数扫描任务数量。 默认值是每个任务增加一个核心。

    注释

    HPC Pack QFE KB3134307将 ParamSweepTasksPerCore 更改为 TasksPerResourceUnit。 它基于作业资源类型,可以是节点、套接字或核心。

  • GrowThreshold - 排队任务的阈值,以触发自动增长。 默认值为 1,这意味着如果有 1 个或更多任务处于排队状态,则会自动增长节点。

  • GrowInterval - 触发自动增长的间隔(以分钟为单位)。 默认间隔是5分钟。

  • ShrinkInterval - 触发自动收缩的间隔(以分钟为单位)。 默认间隔为 5 分钟。|

  • ShrinkIdleTimes - 用于收缩的连续检查次数,以表明节点处于空闲状态。 默认值为 3 次。 例如,如果 ShrinkInterval 为 5 分钟,HPC Pack 将检查节点是否每 5 分钟空闲一次。 如果节点在 3 次连续检查后处于空闲状态(15 分钟),则 HPC Pack 会收缩该节点。

  • ExtraNodesGrowRatio - 用于增加消息传递接口(MPI)作业节点的额外比例。 默认值为 1,这意味着在 MPI 作业中,HPC Pack 会增加一个标识为 1% 的节点。

  • GrowByMin - 切换以指示自动增长策略是否基于作业所需的最低资源。 默认值为 false,这意味着 HPC Pack 根据作业所需的最大资源扩展节点以完成作业。

  • SoaJobGrowThreshold - 传入 SOA 请求的阈值,以触发自动增长过程。 默认值为 50000。

    注释

    从 HPC Pack 2012 R2 Update 3 开始支持此参数。

  • SoaRequestsPerCore -Number 传入的 SOA 请求来增长一个核心。 默认值为 20000。

    注释

    从 HPC Pack 2012 R2 Update 3 开始支持此参数。

  • ExcludeNodeGroups – 指定节点组中的节点不会自动增长和收缩。

    注释

    从 HPC Pack 2016 开始支持此参数。

MPI 示例

默认情况下,HPC Pack 为 MPI 作业增长 1 个% 个额外节点(ExtraNodesGrowRatio 设置为 1)。 原因是 MPI 可能需要多个节点,并且作业只能在所有节点准备就绪时运行。 当 Azure 启动节点时,有时一个节点可能需要比其他节点更多的时间来启动,导致其他节点在等待该节点准备就绪时处于空闲状态。 通过增加额外的节点,HPC Pack 可减少此资源等待时间,并可能节省成本。 要增加 MPI 作业的额外节点百分比(例如到 10%),请运行类似以下的命令:

Set-HpcClusterProperty -ExtraNodesGrowRatio 10

SOA 示例

默认情况下,SoaJobGrowThreshold 设置为 50000,SoaRequestsPerCore 设置为 20000。 如果提交一个包含 70000 个请求的 SOA 作业,则有一个排队的任务和传入请求为 70000。 在这种情况下,HPC Pack 为排队任务增加1个核心,对于传入请求,增加(70000 - 50000)/20000 = 1个核心,因此,总共为这个SOA作业增加了2个核心。

运行 AzureAutoGrowShrink.ps1 脚本

先决条件

  • HPC Pack 2012 R2 Update 1 或更高版本群集 - AzureAutoGrowShrink.ps1 脚本安装在 %CCP_HOME%bin 文件夹中。 群集头节点可以部署在本地或 Azure VM 中。 请参阅 使用 HPC Pack 设置混合群集 ,以开始使用本地头节点和 Azure“突发”节点。 请参阅 HPC Pack IaaS 部署脚本 ,在 Azure VM 中快速部署 HPC Pack 群集,或使用 Azure 快速入门模板

  • Azure PowerShell 1.4.0 - 脚本当前依赖于此特定版本的 Azure PowerShell。

  • 对于具有 Azure 突发节点的群集 - 在安装了 HPC Pack 的客户端计算机或头节点上运行脚本。 如果在客户端计算机上运行,请确保将变量$env:CCP_SCHEDULER设置为指向头节点。 必须将 Azure“突增”节点添加到群集,然而它们可能处于 Not-Deployed 状态。

  • 对于部署在 Azure VM 中的群集(资源管理器部署模型) - 对于在 Resource Manager 部署 模型中部署的 Azure VM 群集,该脚本支持 Azure 身份验证的两种方法:登录到 Azure 帐户以每次运行脚本(通过运行 Connect-AzureRmAccount或配置服务主体以使用证书进行身份验证)。 HPC Pack 提供脚本 ConfigARMAutoGrowShrinkCert.ps ,以使用证书创建服务主体。 该脚本创建 Azure Active Directory(Azure AD)应用程序和服务主体,并将参与者角色分配给服务主体。 若要运行脚本,请以管理员身份启动 Azure PowerShell 并运行以下命令:

    cd $env:CCP_HOME\bin
    
    Connect-AzureRmAccount
    
    .\ConfigARMAutoGrowShrinkCert.ps1 -DisplayName “YourHpcPackAppName” -HomePage "https://YourHpcPackAppHomePage" -IdentifierUri "https://YourHpcPackAppUri" -PfxFile "d:\yourcertificate.pfx"
    

    有关ConfigARMAutoGrowShrinkCert.ps1的详细信息,请运行Get-Help .\ConfigARMAutoGrowShrinkCert.ps1 -Detailed

  • 对于在 Azure VM 中部署的群集(经典部署模型) -在头节点 VM 上运行脚本,因为它取决于安装在那里 Start-HpcIaaSNode.ps1Stop-HpcIaaSNode.ps1 脚本。 这些脚本还需要 Azure 管理证书或发布设置文件(请参阅 在 Azure 中的 HPC Pack 群集中管理计算节点)。 请确保已将所需的所有计算节点 VM 添加到群集。 它们可能处于“已停止”状态。

语法

AzureAutoGrowShrink.ps1 [-NodeTemplates <String[]>] [-JobTemplates <String[]>] [-NodeType <String>]
    -NumOfActiveQueuedTasksPerNodeToGrow <Single> [-NumOfActiveQueuedTasksToGrowThreshold <Int32>]
    [-NumOfInitialNodesToGrow <Int32>] [-GrowCheckIntervalMins <Int32>] [-ShrinkCheckIntervalMins <Int32>]
    [-ShrinkCheckIdleTimes <Int32>] [-ExtraNodesGrowRatio <Int32>] [-ArgFile <String>] [-LogFilePrefix <String>]
    [<CommonParameters>]

AzureAutoGrowShrink.ps1 [-NodeTemplates <String[]>] [-JobTemplates <String[]>] [-NodeType <String>]
    -NumOfQueuedJobsPerNodeToGrow <Single> [-NumOfQueuedJobsToGrowThreshold <Int32>] [-NumOfInitialNodesToGrow
    <Int32>] [-GrowCheckIntervalMins <Int32>] [-ShrinkCheckIntervalMins <Int32>] [-ShrinkCheckIdleTimes <Int32>]
    [-ExtraNodesGrowRatio <Int32>] [-ArgFile <String>] [-LogFilePrefix <String>] [<CommonParameters>]

AzureAutoGrowShrink.ps1 -UseLastConfigurations [-ArgFile <String>] [-LogFilePrefix <String>] [<CommonParameters>]

参数

  • NodeTemplates - 用于定义要增长和收缩的节点的范围的节点模板的名称。 如果未指定(默认值为 @(),则当 NodeType 的值为 AzureNodes 时,AzureNodes 节点组中的所有节点都在范围内,当 NodeType 具有 ComputeNodes 值时,ComputeNodes 节点组中的所有节点都在范围内。

  • JobTemplates - 用于定义要增长的节点的范围的作业模板的名称。

  • NodeType - 要增长和收缩的节点的类型。 支持的值有:

    • AzureNodes – 适用于本地或 Azure IaaS 群集中的 Azure PaaS(突发)节点。
    • ComputeNodes - 仅适用于 Azure IaaS 群集中的计算节点 VM。
  • NumOfQueuedJobsPerNodeToGrow - 一个节点增长所需的排队作业数量。

  • NumOfQueuedJobsToGrowThreshold - 要启动增长过程的排队作业的阈值数。

  • NumOfActiveQueuedTasksPerNodeToGrow - 增长一个节点所需的活动排队任务数。 如果将 NumOfQueuedJobsPerNodeToGrow 指定为大于 0 的值,则忽略此参数。

  • NumOfActiveQueuedTasksToGrowThreshold - 用于启动增长进程的活动排队任务数量阈值。

  • NumOfInitialNodesToGrow - 如果范围中的所有节点均为未部署停止(已解除分配)状态,则初始最小节点数将增长。

  • GrowCheckIntervalMins - 要增长的检查间隔(以分钟为单位)。

  • ShrinkCheckIntervalMins - 要收缩的检查间隔(以分钟为单位)。

  • ShrinkCheckIdleTimes - 连续收缩检查数(由 ShrinkCheckIntervalMins 分隔),以指示节点处于空闲状态。

  • UseLastConfigurations - 参数文件中保存的以前配置。

  • ArgFile - 用于保存和更新配置以运行脚本的参数文件的名称。

  • LogFilePrefix - 日志文件的前缀名称。 可以指定路径。 默认情况下,日志将写入当前工作目录。

示例 1

以下示例配置使用默认 AzureNode 模板部署的 Azure 突发节点,以便自动增长和收缩。 如果所有节点最初处于 “未部署 ”状态,则至少启动 3 个节点。 如果排队作业数超过 8 个,脚本将启动节点,直到节点数超过排队作业与 NumOfQueuedJobsPerNodeToGrow 的比率。 如果发现节点在连续 3 次空闲时间处于空闲状态,则会停止该节点。

.\AzureAutoGrowShrink.ps1 -NodeTemplates @('Default AzureNode
 Template') -NodeType AzureNodes -NumOfQueuedJobsPerNodeToGrow 5
 -NumOfQueuedJobsToGrowThreshold 8 -NumOfInitialNodesToGrow 3
 -GrowCheckIntervalMins 1 -ShrinkCheckIntervalMins 1 -ShrinkCheckIdleTimes 3

示例 2

以下示例配置使用默认 ComputeNode 模板部署的 Azure 计算节点 VM,以便自动增长和收缩。 默认作业模板配置的作业定义群集上工作负荷的范围。 如果所有节点最初都停止,则至少启动 5 个节点。 如果活动排队任务数超过 15 个,脚本将启动节点,直到节点数超过活动排队任务与 NumOfActiveQueuedTasksPerNodeToGrow 的比例。 如果发现节点在连续 10 次空闲时间处于空闲状态,则会停止。

.\AzureAutoGrowShrink.ps1 -NodeTemplates 'Default ComputeNode Template' -JobTemplates 'Default' -NodeType ComputeNodes -NumOfActiveQueuedTasksPerNodeToGrow 10 -NumOfActiveQueuedTasksToGrowThreshold 15 -NumOfInitialNodesToGrow 5 -GrowCheckIntervalMins 1 -ShrinkCheckIntervalMins 1 -ShrinkCheckIdleTimes 10 -ArgFile 'IaaSVMComputeNodes_Arg.xml' -LogFilePrefix 'IaaSVMComputeNodes_log'