AWS ParallelCluster 故障排除 - AWS ParallelCluster

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS ParallelCluster 故障排除

AWS ParallelCluster 社区维护着一个 Wiki 页面,在 AWS ParallelCluster GitHub Wiki 上提供了许多故障排除技巧。有关已知问题的列表,请参阅已知问题

检索和保留日志

日志是用于排查问题的有用资源。在使用日志对 AWS ParallelCluster 资源进行问题排查之前,应先创建集群日志存档。请按照 AWS ParallelCluster GitHub WikiCreating an Archive of a Cluster’s Logs 主题中描述的步骤开始此过程。

如果您的一个正在运行的集群遇到问题,则应在开始排查问题之前,通过运行 pcluster stop <cluster_name> 命令将该集群置于 STOPPED 状态。这样可以防止产生任何意外成本。

如果 pcluster 停止运行,或者您想删除集群但仍保留其日志,请运行 pcluster delete —keep-logs <cluster_name> 命令。运行此命令会删除集群,但保留存储在 Amazon CloudWatch 中的日志组。有关此命令的更多信息,请参阅 pcluster delete 文档。

排查堆栈部署问题

如果您的集群创建失败并回滚堆栈创建,则可以通过查看以下日志文件来诊断问题。您需要在这些日志中找到 ROLLBACK_IN_PROGRESS 的输出。失败消息的内容应与以下内容类似:

$ pcluster create mycluster Creating stack named: parallelcluster-mycluster Status: parallelcluster-mycluster - ROLLBACK_IN_PROGRESS Cluster creation failed. Failed events: - AWS::EC2::Instance MasterServer Received FAILURE signal with UniqueId i-07af1cb218dd6a081

要诊断问题,请使用 pcluster create(包括 --norollback 标志)重新创建该集群。然后,SSH 登录到该集群:

$ pcluster create mycluster --norollback ... $ pcluster ssh mycluster

登录到头节点后,您应该可以找到三个主要的日志文件,可以用它们来精准确定错误。

  • /var/log/cfn-init.logcfn-init 脚本的日志。首先查看此日志。在此日志中,您可能会看到类似“Command chef failed”的错误。查看此行前面的几行,了解与该错误消息相关的更多细节。有关更多信息,请参阅 cfn-init

  • /var/log/cloud-init.logcloud-init 的日志。如果您在 cfn-init.log 中没有看到任何内容,请接下来尝试查看此日志。

  • /var/log/cloud-init-output.logcloud-init 运行的命令的输出。这包括 cfn-init 的输出。在大多数情况下,排查此类问题无需查看此日志。

排查多队列模式集群中的问题

本节与使用 AWS ParallelCluster 版本 2.9.0 及更高版本通过 Slurm 作业调度器安装的集群相关。有关多队列模式的更多信息,请参阅多队列模式

关键日志

下表概述了头节点的关键日志:

/var/log/cfn-init.log

这是 AWS CloudFormation 初始化日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题。

/var/log/chef-client.log

这是 Chef 客户端日志。其中包含通过 Chef/CINC 运行的所有命令。可以用它来排查初始化问题。

/var/log/parallelcluster/slurm_resume.log

这是 ResumeProgram 日志。它启动动态节点的实例,可用于排查动态节点启动问题。

/var/log/parallelcluster/slurm_suspend.log

这是 SuspendProgram 日志。在终止动态节点的实例时会调用该日志,可用于排查动态节点终止问题。查看此日志时,还应检查 clustermgtd 日志。

/var/log/parallelcluster/clustermgtd

这是 clustermgtd 日志。它作为集中式进程守护程序运行,用于管理大多数集群操作。可以用它来排查任何启动、终止或集群操作问题。

/var/log/slurmctld.log

这是 Slurm 控制进程守护程序日志。AWS ParallelCluster 不会做出扩展决策。相反,它只会尝试启动资源来满足 Slurm 的要求。它可用于排查扩展和分配问题、与作业相关的问题以及与调度器相关的任何启动和终止问题。

以下是计算节点的关键说明:

/var/log/cloud-init-output.log

这是 cloud-init 日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题。

/var/log/parallelcluster/computemgtd

这是 computemgtd 日志。它在每个计算节点上运行,用于在头节点上的 clustermgtd 进程守护程序离线的罕见事件中监控节点。可以用它来排查意外终止问题。

/var/log/slurmd.log

这是 Slurm 计算进程守护程序日志。可以用它来排查初始化和计算失败相关问题。

排查节点初始化问题

本节介绍如何排查节点初始化问题。这包括节点无法启动、开机或加入集群的问题。

头节点:

适用日志:

  • /var/log/cfn-init.log

  • /var/log/chef-client.log

  • /var/log/parallelcluster/clustermgtd

  • /var/log/parallelcluster/slurm_resume.log

  • /var/log/slurmctld.log

检查 /var/log/cfn-init.log/var/log/chef-client.log 日志。这些日志应包含设置头节点时运行的所有操作。设置过程中发生的大多数错误的错误消息应该都包含在 /var/log/chef-client.log 日志中。如果在集群的配置中指定了预安装或安装后脚本,请通过日志消息仔细检查脚本是否成功运行。

创建集群时,头节点必须等待计算节点加入集群,然后才能加入集群。因此,如果计算节点加入集群失败,则头节点也会失败。根据您使用的计算节点的类型,您可以按照其中一组过程来排查此类问题:

动态计算节点:

  • 搜索计算节点名称的 ResumeProgram 日志 (/var/log/parallelcluster/slurm_resume.log) 以查看是否对该节点调用过 ResumeProgram。(如果未调用过 ResumeProgram,则可以检查 slurmctld 日志 (/var/log/slurmctld.log) 以确定 Slurm 是否尝试过对该节点调用 ResumeProgram)。

  • 请注意,ResumeProgram 的权限不正确可能会导致 ResumeProgram 静默失败。如果您使用的是修改了 ResumeProgram 设置的自定义 AMI,请检查该 ResumeProgram 是否由 slurm 用户拥有并具有 744 (rwxr--r--) 权限。

  • 如果调用了 ResumeProgram,请查看是否为该节点启动了实例。如果未启动任何实例,则应该能够看到一条描述启动失败的错误消息。

  • 如果启动了实例,则在设置过程中可能出现了问题。您应该会从 ResumeProgram 日志中看到相应的私有 IP 地址和实例 ID。此外,您可以查看特定实例的相应设置日志。有关排查计算节点设置错误的更多信息,请参阅下一节。

静态计算节点:

  • 检查 clustermgtd (/var/log/parallelcluster/clustermgtd) 日志,查看是否为该节点启动了实例。如果未启动,则应该有详细说明启动失败的明确错误消息。

  • 如果启动了实例,则表示设置过程中出现了问题。您应该会从 ResumeProgram 日志中看到相应的私有 IP 地址和实例 ID。此外,您可以查看特定实例的相应设置日志。

  • 计算节点:

    • 适用日志:

      • /var/log/cloud-init-output.log

      • /var/log/slurmd.log

    • 如果启动了计算节点,请先检查 /var/log/cloud-init-output.log,其中应包含类似于头节点 /var/log/chef-client.log 日志的设置日志。设置过程中发生的大多数错误的错误消息应该都包含在 /var/log/cloud-init-output.log 日志中。如果在集群配置中指定了预安装或安装后脚本,请检查它们是否成功运行。

    • 如果您使用的是修改了 Slurm 配置的自定义 AMI,则可能存在阻止计算节点加入集群的 Slurm 相关错误。对于与调度器相关的错误,请检查 /var/log/slurmd.log 日志。

排查意外节点替换和终止问题

本节继续探讨如何排查节点相关问题,特别是在节点意外替换或终止时。

  • 适用日志:

    • /var/log/parallelcluster/clustermgtd(头节点)

    • /var/log/slurmctld.log(头节点)

    • /var/log/parallelcluster/computemgtd(计算节点)

  • 节点意外替换或终止

    • 检查 clustermgtd 日志 (/var/log/parallelcluster/clustermgtd) 以查看 clustermgtd 是否执行了替换或终止节点的操作。请注意,clustermgtd 处理所有正常的节点维护操作。

    • 如果 clustermgtd 替换或终止了该节点,则应该会有详细说明为何对该节点执行此操作的消息。如果原因与调度器有关(例如,因为节点处于 DOWN 状态),请查看 slurmctld 日志以获取更多信息。如果原因与 Amazon EC2 有关,则应有信息性消息,详细说明需要该替换的 Amazon EC2 相关问题。

    • 如果 clustermgtd 未终止该节点,请先检查这是否是 Amazon EC2 的预期终止,更具体地说是竞价型终止。如果系统确定 clustermgtd 的运行状况不佳,则计算节点上运行的 computemgtd 也可以执行终止该节点的操作。检查 computemgtd 日志 (/var/log/parallelcluster/computemgtd) 以查看 computemgtd 是否终止了该节点。

  • 节点失败

    • 检查 slurmctld 日志 (/var/log/slurmctld.log) 以查看作业或节点失败的原因。请注意,如果节点失败,作业会自动重新排队。

    • 如果 slurm_resume 报告该节点已启动,并且 clustermgtd 在几分钟后报告 Amazon EC2 中没有该节点的相应实例,则该节点可能在设置过程中失败。要从计算 (/var/log/cloud-init-output.log) 中检索日志,请执行以下步骤:

      • 提交一项作业以便让 Slurm 启动一个新节点。

      • 节点启动后,使用以下命令启用终止保护。

        aws ec2 modify-instance-attribute --instance-id i-xyz --disable-api-termination
      • 使用以下命令从该节点检索控制台输出。

        aws ec2 get-console-output --instance-id i-xyz --output text

替换、终止或关闭有问题的实例和节点

  • 适用日志:

    • /var/log/parallelcluster/clustermgtd(头节点)

    • /var/log/parallelcluster/slurm_suspend.log(头节点)

  • 在大多数情况下,clustermgtd 会处理所有预期的实例终止操作。检查 clustermgtd 日志以查看其无法替换或终止节点的原因。

  • 对于 scaledown_idletime 失败的动态节点,请检查 SuspendProgram 日志以查看 slurmctld 是否以特定节点作为参数调用了 SuspendProgram。请注意,SuspendProgram 实际上并不执行任何操作,它只是记录被调用时的时间。所有实例终止和 NodeAddr 重置均由 clustermgtd 完成。经过 SuspendTimeout 之后,Slurm 会自动将节点置回 POWER_SAVING 状态。

排查其他已知的节点和作业问题

另一种已知问题是 AWS ParallelCluster 可能无法分配作业或做出扩展决策。对于此类问题,AWS ParallelCluster 只按照 Slurm 的指示启动、终止或维护资源。对于这些问题,请查看 slurmctld 日志以排查问题。

排查单队列模式集群中的问题

注意

从版本 2.11.5 开始,AWS ParallelCluster 不支持使用 SGE 或 Torque 调度器。

本节适用于采用以下两种配置之一并且没有多队列模式的集群:

  • 使用 2.9.0 之前的 AWS ParallelCluster 版本以及 SGE、Torque 或 Slurm 作业调度器启动。

  • 使用 AWS ParallelCluster 版本 2.9.0 或更高版本以及 SGE 或 Torque 作业调度器启动。

关键日志

以下日志文件是头节点的关键日志。

对于 AWS ParallelCluster 版本 2.9.0 或更高版本:

/var/log/chef-client.log

这是 CINC (chef) 客户端日志。其中包含通过 CINC 运行的所有命令。可以用它来排查初始化问题。

对于所有 AWS ParallelCluster 版本:

/var/log/cfn-init.log

这是 cfn-init 日志。其中包含设置实例时运行的所有命令,因此可用于排查初始化问题。有关更多信息,请参阅 cfn-init

/var/log/clustermgtd.log

这是 Slurm 调度器的 clustermgtd 日志。clustermgtd 作为集中式进程守护程序运行,用于管理大多数集群操作。可以用它来排查任何启动、终止或集群操作问题。

/var/log/jobwatcher

这是 SGE 和 Torque 调度器的 jobwatcher 日志。jobwatcher 监控调度器队列并更新自动扩缩组。可以用它来排查与纵向扩展节点相关的问题。

/var/log/sqswatcher

这是 SGE 和 Torque 调度器的 sqswatcher 日志。sqswatcher 处理计算实例在成功初始化后发送的实例就绪事件。它还会向调度器配置中添加计算节点。可以使用此日志来排查一个或多个节点无法加入集群的问题。

以下是计算节点的关键日志。

AWS ParallelCluster 版本 2.9.0 或更高版本

/var/log/cloud-init-output.log

这是云初始化日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题。

2.9.0 之前的 AWS ParallelCluster 版本

/var/log/cfn-init.log

这是 CloudFormation 初始化日志。其中包含设置实例时运行的所有命令。可以用它来排查初始化问题

所有版本

/var/log/nodewatcher

这是 nodewatcher 日志。使用 SGE 和 Torque 调度器时每个计算节点上运行的 nodewatcher 进程守护程序。如果某个节点处于空闲状态,他们会缩减该节点。可以使用此日志来排查与缩减资源相关的任何问题。

排查启动和加入操作失败问题

  • 适用日志:

    • /var/log/cfn-init-cmd.log(头节点和计算节点)

    • /var/log/sqswatcher(头节点)

  • 如果节点启动失败,请检查 /var/log/cfn-init-cmd.log 日志以查看具体的错误消息。在大多数情况下,节点启动失败是由设置失败引起的。

  • 如果计算节点虽然设置成功,但仍无法加入调度器配置,请检查 /var/log/sqswatcher 日志以查看 sqswatcher 是否处理了该事件。在大多数情况下,这些问题是因为 sqswatcher 未处理该事件。

排查扩展问题

  • 适用日志:

    • /var/log/jobwatcher(头节点)

    • /var/log/nodewatcher(计算节点)

  • 纵向扩展问题:对于头节点,检查 /var/log/jobwatcher 日志以查看 jobwatcher 进程守护程序是否计算出正确的所需节点数并更新了自动扩缩组。请注意,jobwatcher 会监控调度器队列并更新自动扩缩组。

  • 缩减问题:对于计算节点,检查出问题节点上的 /var/log/nodewatcher 日志以查看缩减该节点的原因。请注意,nodewatcher 进程守护程序会缩减处于空闲状态的计算节点。

一个已知问题是随机计算节点在大规模集群(特别是具有 500 或更多计算节点的集群)上失败。此问题与单队列集群的扩展架构限制有关。如果您想要使用大规模集群、正在使用 AWS ParallelCluster 版本 v2.9.0 或更高版本、正在使用 Slurm,并想要避免此问题,您应升级并切换到支持多队列模式的集群。您可以通过运行 pcluster-config convert 来实现这一目的。

对于超大规模集群,可能需要对系统进行额外调整。有关更多信息,请联系 支持。

置放群组和实例启动问题

为了获得最低的节点间延迟,请使用置放群组。置放群组可确保您的实例位于同一网络主干中。如果发出请求时没有足够的可用实例,则会返回 InsufficientInstanceCapacity 错误。要在使用集群置放群组时降低收到此错误的可能性,请将 placement_group 参数设置为 DYNAMIC 并将 placement 参数设置为 compute

如果您需要高性能共享文件系统,可以考虑使用FSx for Lustre

如果头节点必须位于置放群组中,则对头节点和所有计算节点使用相同的实例类型和子网。这样可确保 compute_instance_type 参数与 master_instance_type 参数具有相同的值,placement 参数设置为 cluster 且未指定 compute_subnet_id 参数。使用此配置时,master_subnet_id 参数的值用于计算节点。

有关更多信息,请参阅《Amazon EC2 用户指南》中的排查实例启动问题置放群组角色和限制

无法替换的目录

以下目录在节点之间共享,无法替换。

/home

这包括默认用户主文件夹(在 Amazon Linux 上为 /home/ec2_user,在 CentOS 上为 /home/centos,在 Ubuntu 上为 /home/ubuntu)。

/opt/intel

这包括 Intel MPI、Intel Parallel Studio 和相关文件。

/opt/sge
注意

从版本 2.11.5 开始,AWS ParallelCluster 不支持使用 SGE 或 Torque 调度器。

这包括 Son of Grid Engine 和相关文件。(有条件,仅当 scheduler = sge 时。)

/opt/slurm

这包括 Slurm Workload Manager 和相关文件。(有条件,仅当 scheduler = slurm 时。)

/opt/torque
注意

从版本 2.11.5 开始,AWS ParallelCluster 不支持使用 SGE 或 Torque 调度器。

这包括 Torque Resource Manager 和相关文件。(有条件,仅当 scheduler = torque 时。)

排查 Amazon DCV 中的问题

Amazon DCV 的日志

Amazon DCV 的日志将写入 /var/log/dcv/ 目录的文件中。查看这些日志有助于排查问题。

Amazon DCV 实例类型内存

该实例类型应至少有 1.7 吉字节(GiB)的 RAM 才能运行 Amazon DCV。Nano 和 micro 实例类型没有足够的内存来运行 Amazon DCV。

Ubuntu Amazon DCV 问题

在 Ubuntu 上对 DCV 会话运行 Gnome 终端时,您可能不会自动拥有访问 AWS ParallelCluster 通过登录 Shell 提供的用户环境的权限。该用户环境提供 openmpi 或 intelmpi 等环境模块以及其他用户设置。

Gnome 终端的默认设置会阻止 Shell 作为登录 Shell 启动。这意味着不会自动获取 Shell 配置文件,也不会加载 AWS ParallelCluster 用户环境。

要正确获取 Shell 配置文件并访问 AWS ParallelCluster 用户环境,请执行下列操作之一:

  • 更改默认终端设置:
    1. 在 Gnome 终端中选择编辑菜单。

    2. 选择首选项,然后选择配置文件

    3. 选择命令,然后选择作为登录 Shell 运行命令

    4. 打开新终端。

  • 使用命令行获取可用的配置文件:

    $ source /etc/profile && source $HOME/.bashrc

在采用 AWS Batch 集成的集群中排查问题

本节与采用 AWS Batch 调度器集成的集群相关。

头节点问题

与头节点相关的设置问题可以按照与单队列集群相同的方式进行排查。有关这些问题的更多信息,请参阅排查单队列模式集群中的问题

AWS Batch 多节点并行作业提交问题

如果在将 AWS Batch 用作作业调度器的情况下提交多节点并行作业时遇到问题,则应升级到 AWS ParallelCluster 版本 2.5.0。如果这不可行,则可以使用以下主题中详细介绍的解决方法:Self patch a cluster used for submitting multi-node parallel jobs through AWS Batch

计算问题

AWS Batch 管理服务的扩展和计算方面。如果您遇到与计算相关的问题,请参阅 AWS Batch 故障排除文档以获取帮助。

作业失败

如果作业失败,您可以运行 awsbout 命令来检索作业输出。您也可以运行 awsbstat -d 命令来获取 Amazon CloudWatch 存储的作业日志的链接。

资源创建失败时排查问题

本节内容与集群资源创建失败有关。

资源创建失败时,ParallelCluster 会返回类似下面的错误消息。

pcluster create -c config my-cluster Beginning cluster creation for cluster: my-cluster WARNING: The instance type 'p4d.24xlarge' cannot take public IPs. Please make sure that the subnet with id 'subnet-1234567890abcdef0' has the proper routing configuration to allow private IPs reaching the Internet (e.g. a NAT Gateway and a valid route table). WARNING: The instance type 'p4d.24xlarge' cannot take public IPs. Please make sure that the subnet with id 'subnet-1234567890abcdef0' has the proper routing configuration to allow private IPs reaching the Internet (e.g. a NAT Gateway and a valid route table). Info: There is a newer version 3.0.3 of AWS ParallelCluster available. Creating stack named: parallelcluster-my-cluster Status: parallelcluster-my-cluster - ROLLBACK_IN_PROGRESS Cluster creation failed. Failed events: - AWS::CloudFormation::Stack MasterServerSubstack Embedded stack arn:aws:cloudformation:region-id:123456789012:stack/parallelcluster-my-cluster-MasterServerSubstack-ABCDEFGHIJKL/a1234567-b321-c765-d432-dcba98766789 was not successfully created: The following resource(s) failed to create: [MasterServer]. - AWS::CloudFormation::Stack parallelcluster-my-cluster-MasterServerSubstack-ABCDEFGHIJKL The following resource(s) failed to create: [MasterServer]. - AWS::EC2::Instance MasterServer You have requested more vCPU capacity than your current vCPU limit of 0 allows for the instance bucket that the specified instance type belongs to. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit. (Service: AmazonEC2; Status Code: 400; Error Code: VcpuLimitExceeded; Request ID: a9876543-b321-c765-d432-dcba98766789; Proxy: null) }

例如,如果您看到前一个命令响应中所示的状态消息,则必须使用不会超过当前 vCPU 限制或请求更多 vCPU 容量的实例类型。

您也可以使用 CloudFormation 控制台来查看有关 "Cluster creation failed" 状态的信息。

从控制台中查看 CloudFormation 错误消息。

  1. 登录 AWS Management Console并导航到 https://console.aws.amazon.com/cloudformation

  2. 选择名为 parallelcluster-cluster_name 的堆栈。

  3. 选择事件选项卡。

  4. 通过按逻辑 ID 滚动浏览资源事件列表,查看创建失败的资源的状态。如果子任务创建失败,请向后移动,找到失败的资源事件。

  5. AWS CloudFormation 错误消息示例:

    2022-02-07 11:59:14 UTC-0800 MasterServerSubstack CREATE_FAILED Embedded stack arn:aws:cloudformation:region-id:123456789012:stack/parallelcluster-my-cluster-MasterServerSubstack-ABCDEFGHIJKL/a1234567-b321-c765-d432-dcba98766789 was not successfully created: The following resource(s) failed to create: [MasterServer].

排查 IAM 策略大小问题

请参阅 IAM 与 AWS STS 配额、名称要求和字符限制,验证附加到角色的托管策略的配额。如果托管策略的大小超过配额,请将该策略拆分为两个或多个策略。如果附加到 IAM 角色的策略数超过配额,请创建额外角色并在这些角色之间分配策略,从而满足配额要求。

其他支持

有关已知问题的列表,请参阅 GitHub Wiki 主页面或问题页面。如有更紧急的问题,请联系 支持 或打开新 GitHub 问题