本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用以下常见问题来解决使用问题 SageMaker HyperPod。
问:为什么我在 Amazon CloudWatch 中找不到我的 SageMaker HyperPod 集群的日志组?
默认情况下,代理日志和实例启动日志会发送到 HyperPod 平台账户的 CloudWatch。如果是用户生命周期脚本,则生命周期配置日志会发送到您的账户 CloudWatch。
如果您使用 HyperPod 服务团队提供的生命周期脚本示例,则可以找到写入的生命周期配置日志/var/log/provision/provisioning.log
,并且不会遇到此问题。
但是,如果您使用自定义路径从生命周期配置中收集日志,但找不到账户中显示的日志组 CloudWatch,则可能是由于生命周期脚本中指定的日志文件路径与在 HyperPod 集群实例上运行的 CloudWatch 代理所查找的内容不匹配。在这种情况下,这意味着您需要正确设置生命周期脚本以向 CloudWatch 代理发送日志,并相应地设置 CloudWatch 代理配置。要解决问题,请选择以下选项之一。
-
选项 1:更新生命周期脚本,将日志写入
/var/log/provision/provisioning.log
。 -
选项 2:更新 CloudWatch 代理以查找用于日志生命周期配置的自定义路径。
-
每个 HyperPod 集群实例都包含一个 JSON 格式的 CloudWatch 代理配置文件,位于
/opt/aws/amazon-cloudwatch-agent/sagemaker_cwagent_config.json
。在配置文件中找到字段名logs.logs_collected.files.collect_list.file_path
。默认设置为 HyperPod,键值对应"file_path": "/var/log/provision/provisioning.log"
如中所述。 SageMaker HyperPod 在实例级别进行日志记录以下代码片段显示了 HyperPod 默认配置下 JSON 文件的外观。"logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/provision/provisioning.log", "log_group_name": "/aws/sagemaker/Clusters/[ClusterName]/[ClusterID]", "log_stream_name": "LifecycleConfig/[InstanceGroupName]/{instance_id}", "retention_in_days": -1 } ] } }, "force_flush_interval": 3 }
-
用生命周期脚本中使用的自定义路径替换
"file_path"
字段名的值。例如,如果您已将生命周期脚本设置为写入/var/log/custom-provision/custom-provisioning.log
,请按如下方式更新该值以与之匹配。"file_path": "
/var/log/custom-provision/custom-provisioning.log
" -
使用配置文件重新启动 CloudWatch 代理以完成自定义路径的应用。例如,以下 CloudWatch 命令显示如何使用步骤 1 中的 CloudWatch CloudWatch 代理配置文件重新启动代理。有关更多信息,另请参阅对 CloudWatch 代理进行故障排除。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \ -a fetch-config -m ec2 -s -c \ file:/opt/aws/amazon-cloudwatch-agent/sagemaker_cwagent_config.json
-
问:在 Slurm 配置文件(例如和)中 HyperPod 管理哪些特定的配置?slurm.conf
gres.conf
当您在上创建 Slurm 集群时 HyperPod, HyperPod 代理会根据您的集群创建请求slurm.conf
/opt/slurm/etc/
将和gres.conf
重要
我们强烈建议您不要更改这些由管理的参数 HyperPod。
-
在中
slurm.conf
, HyperPod 设置以下基本参数: ClusterName
SlurmctldHost
、PartitionName
、和NodeName
。此外,要启用该自动恢复功能, HyperPod 需要按以下方式设置
TaskPlugin
和SchedulerParameters
参数。默认情况下, HyperPod 代理将这两个参数设置为所需的值。TaskPlugin=task/none SchedulerParameters=permit_job_expansion
-
在中
gres.conf
, HyperPod 管理 G NodeName
PU 节点。
问:如何在 Slurm 节点上运行 Docker? HyperPod
为了帮助您在运行的 Slurm 节点上运行 Docker HyperPod, HyperPod 服务团队提供了安装脚本,您可以将这些脚本包含在集群创建的生命周期配置中。要了解更多信息,请参阅 从提供的基本生命周期脚本开始 HyperPod 和 在 Slurm 计算节点上运行 Docker 容器 HyperPod。
问:当我在 Slurm 框架的 SageMaker HyperPod 平台上使用 NVIDIA 集体通信库 (NCCL) 时,为什么我的并行训练任务会失败?
默认情况下,Linux 操作系统会设置该#RemoveIPC=yes
标志。使用 NCCL 的 Slurm 和 mpirun 作业在非 root 用户会话下生成进程间通信 (IPC) 资源。这些用户会话可能会在作业过程中注销。
当你使用 Slurm 或 mpirun 运行作业时,如果systemd
检测到用户未登录,它就会清理 IPC 资源。Slurm 和 mpirun 作业无需用户登录即可运行,但这需要你在 systemd 级别禁用清理功能,改为在 Slurm 级别进行设置。有关更多信息,请参阅 NCCL 文档中的 Systemd
要在 systemd 级别禁用清理,请完成以下步骤。
-
/etc/systemd/logind.conf
如果您正在运行使用 Slurm 和 NCCL 的训练作业,请在文件#RemoveIPC=no
中设置标志。 -
默认情况下,Slurm 不清理共享资源。我们建议您设置 Slurm epilog 脚本来清理共享资源。当你有大量共享资源并想在训练作业后清理它们时,这种清理非常有用。以下为示例脚本。
#!/bin/bash : <<'SUMMARY' Script: epilog.sh Use this script with caution, as it can potentially delete unnecessary resources and cause issues if you don't use it correctly. Note: You must save this script in a shared in a shared location that is accessible to all nodes in the cluster, such as
/fsx volume
. Workers must be able to access the script to run the script after jobs. SUMMARY # Define the log directory and create it if it doesn't exist LOG_DIR="/<PLACEHOLDER>
/epilogue" #NOTE: UpdatePLACEHOLDER
to be a shared value path, such as/fsx/epilogue
. mkdir -p "$LOG_DIR" # Name the log file using the Slurm job name and job ID log_file="$LOG_DIR/epilogue-${SLURM_JOB_NAME}_${SLURM_JOB_ID}.log" logging() { echo "[$(date)] $1" | tee -a "$log_file" } # Slurm epilogue script to clean up IPC resources logging "Starting IPC cleanup for Job $SLURM_JOB_ID" # Clean up shared memory segments by username for seg in $(ipcs -m | awk -v owner="$SLURM_JOB_USER" '$3 == owner {print $2}'); do if ipcrm -m "$seg"; then logging "Removed shared memory segment $seg" else logging "Failed to remove shared memory segment $seg" fi done # Clean up semaphores by username for sem in $(ipcs -s | awk -v user="$SLURM_JOB_USER" '$3 == user {print $2}'); do if ipcrm -s "$sem"; then logging "Removed semaphore $sem" else logging "Failed to remove semaphore $sem" fi done # Clean up NCCL IPC NCCL_IPC_PATH="/dev/shm/nccl-*" for file in $NCCL_IPC_PATH; do if [ -e "$file" ]; then if rm "$file"; then logging "Removed NCCL IPC file $file" else logging "Failed to remove NCCL IPC file $file" fi fi done logging "IPC cleanup completed for Job $SLURM_JOB_ID" exit 0有关 Epilog 参数的更多信息,请参阅 Slurm 文档
。 -
在控制器节点
slurm.conf
的文件中,添加一行以指向您创建的 epilog 脚本。Epilog="/path/to/epilog.sh" #For example: /fsx/epilogue/epilog.sh
-
运行以下命令以更改脚本的权限并使其可执行。
chown slurm:slurm /path/to/epilog.sh chmod +x /path/to/epilog.sh
-
要应用所有更改,请运行
scontrol reconfigure
。
问:如何使用 P 实例的本地 NVMe 存储区通过 Slurm 启动 Docker 或 Enroot 容器?
由于头节点的默认根卷通常受到 100GB EBS 卷的限制,因此您需要设置 Docker 和 Enroot 才能使用本地实例存储。 NVMe 要了解如何设置 NVMe 存储并使用它来启动 Docker 容器,请参阅在 Slurm 计算节点上运行 Docker 容器 HyperPod。
问:如何设置 EFA 安全组?
如果要创建具有启用 EFA 的实例的 HyperPod 集群,请确保设置安全组以允许所有进出安全组本身的入站和出站流量。要了解更多信息,请参阅 A mazon EC2 用户指南中的步骤 1:准备启用 EFA 的安全组。
问:如何监控我的 HyperPod 群集节点? 是否有从中导出的 CloudWatch 指标 HyperPod?
为了获得对集群资源利用率的可观察性,我们建议您将 HyperPod 集群与 Amazon Managed Grafana 和适用于 Promethe HyperPod us 的亚马逊托管服务集成。借助各种开源 Grafana 仪表板和导出器包,您可以导出和可视化与集群资源相关的 HyperPod 指标。要详细了解如何 SageMaker HyperPod 使用亚马逊托管 Grafana 和适用于 Prometheus 的亚马逊托管服务进行设置,请参阅。SageMaker HyperPod 集群资源监控请注意, SageMaker HyperPod 目前不支持将系统指标导出到 Amazon CloudWatch。
问:我能否向 HyperPod 群集节点添加额外的存储空间? 集群实例的本地实例存储空间有限。
如果默认实例存储不足以满足工作负载的需要,可以为每个实例配置额外的存储。从 2024 年 6 月 20 日发布开始,您可以向集群中的每个实例再添加一个 Amazon Elastic Block Store (EBS) 卷。 SageMaker HyperPod 请注意,此功能不能应用于 2024 年 6 月 20 日之前创建的现有 SageMaker HyperPod集群实例组。您可以通过修补在 2024 年 6 月 20 日之前创建的现有 SageMaker HyperPod 集群并向其中添加新的实例组来利用此功能。此功能对于 2024 年 6 月 20 日之后创建的任何 SageMaker HyperPod 集群完全有效。