

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

# 使用 Slurm 手动替换或重启节点
<a name="sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance"></a>

本节讨论何时应手动重启或更换节点，并说明如何同时执行这两项操作。

## 何时手动重启或更换节点
<a name="sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance-when"></a>

 HyperPod 自动恢复功能会监控 Slurm 节点的状态是否变为或。`fail` `down`运行 `sinfo` 可检查 Slurm 节点的状态。

如果节点仍然停滞或无响应，并且自动恢复过程无法将其恢复，则可以手动启动恢复。在重启和更换节点之间做出选择取决于问题的性质。遇到临时问题或与软件相关的问题（例如系统挂起、内存泄漏、GPU 驱动程序问题、内核更新或进程挂起）时，可以考虑重新启动。但是，如果您遇到持续存在的问题或与硬件相关的问题，例如故障 GPUs、内存或网络故障、反复出现的运行状况检查失败，或者节点在多次重启尝试后仍然没有响应，则更换节点是更合适的解决方案。

## 手动重启或替换节点的方法
<a name="sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance-ways"></a>

SageMaker HyperPod 提供了两种手动恢复节点的方法。首选方法是使用 R SageMaker HyperPod eboot and Replace APIs，它提供了更快、更透明的恢复流程，适用于所有协调器。或者，你可以使用传统的 Slurm 命令`scontrol update`，比如，尽管这种传统方法需要直接访问 Slurm 的控制器节点。这两种方法都激活相同的 SageMaker HyperPod 恢复过程。

## 使用重启 API 手动重启节点
<a name="sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance-reboot-api"></a>

 您可以使用手动重启 SageMaker HyperPod 集群中出现故障的节点。**BatchRebootClusterNodes**

 以下是使用以下方法在两个集群实例上运行重启操作的示例 AWS Command Line Interface：

```
 aws sagemaker batch-reboot-cluster-nodes \
                --cluster-name arn:aws:sagemaker:ap-northeast-1:123456789:cluster/test-cluster \
                --node-ids i-0123456789abcdef0 i-0fedcba9876543210
```

## 使用替换 API 手动替换节点
<a name="sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance-replace-api"></a>

 您可以使用手动替换 SageMaker HyperPod 集群中出现故障的节点。**BatchReplaceClusterNodes**

 以下是使用以下方法对集群的两个实例运行替换操作的示例 AWS Command Line Interface：

```
 aws sagemaker batch-replace-cluster-nodes \
                --cluster-name arn:aws:sagemaker:ap-northeast-1:123456789:cluster/test-cluster \
                --node-ids i-0123456789abcdef0 i-0fedcba9876543210
```

## 使用 Slurm 手动重启节点
<a name="sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance-reboot"></a>

你也可以使用 scontrol Slurm 命令来触发节点恢复。这些命令直接与 Slurm 控制平面交互并调用相同的底层 SageMaker HyperPod 恢复机制。

在以下命令中，<ip-ipv4>替换为要重启的故障实例的 Slurm 节点名称（主机名）。

```
scontrol update node=<ip-ipv4> state=fail reason="Action:Reboot"
```

这会将该节点标记为失败，原因是指定的。 SageMaker HyperPod 检测到这一点并重启实例。避免在操作期间更改节点状态或重新启动 Slurm 控制器。

## 使用 Slurm 手动替换节点
<a name="sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance-replace"></a>

您可以按如下方式使用 scontrol 更新命令来替换节点。

在以下命令中，`<ip-ipv4>`替换为要替换的故障实例的 Slurm 节点名称（主机名）。

```
scontrol update node=<ip-ipv4> state=fail reason="Action:Replace"
```

运行此命令后，节点将进入`fail`状态，等待当前正在运行的作业完成，替换为运行正常的实例，然后使用相同的主机名进行恢复。这一过程所需的时间取决于可用性区域中的可用实例以及运行生命周期脚本所需的时间。在更新和替换过程中，避免再次手动更改节点状态或重启 Slurm 控制器；否则会导致替换失败。如果节点长时间无法恢复或转为 `idle` 状态，请联系 [AWS 支持](https://console.aws.amazon.com/support/)。

## 手动强制更改节点
<a name="sagemaker-hyperpod-resiliency-slurm-replace-faulty-instance-force"></a>

如果故障节点持续停留在 `fail` 状态，最后的办法就是手动强制将节点状态更改为 `down`。这需要管理员权限（sudo 权限）。

**警告**  
在运行以下命令之前请谨慎操作，因为它会强制终止所有作业，您可能会丢失所有未保存的工作。

```
scontrol update node=<ip-ipv4> state=down reason="Action:Replace"
```