

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

# GPUs 使用监视器 CloudWatch
<a name="tutorial-gpu-monitoring-gpumon"></a>

当您将 DLAMI 与 GPU 结合使用时，您可能会发现，您要寻找在训练或推理期间跟踪其使用率的方式。这对于优化您的数据管道以及调整深度学习网络非常有用。

有两种方法可以配置 GPU 指标 CloudWatch：
+ [使用 AWS CloudWatch 代理配置指标（推荐）](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide)
+ [使用预安装 `gpumon.py` 脚本来配置指标](#tutorial-gpu-monitoring-gpumon-script)

## 使用 AWS CloudWatch 代理配置指标（推荐）
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide"></a>

将您的 DLAMI 与[ CloudWatch 统一](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)代理集成，以配置 GPU 指标并监控 Amazon EC2 加速实例中 GPU 协进程的利用率。

使用 DLAMI 来配置 [GPU 指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-NVIDIA-GPU.html)的方式有四种：
+ [配置最低 GPU 指标](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal)
+ [配置部分 GPU 指标](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial)
+ [配置所有可用 GPU 指标](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all)
+ [配置自定义 GPU 指标](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom)

有关更新和安全补丁的信息，请参阅 [为代理安装安全补 AWS CloudWatch 丁](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security)

### 先决条件
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-prerequisites"></a>

首先，您必须配置 Amazon EC2 实例 IAM 权限，以允许您的实例将指标推送到 CloudWatch。有关详细步骤，请参阅[创建用于 CloudWatch 代理的 IAM 角色和用户](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html)。

### 配置最低 GPU 指标
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal"></a>

使用 `dlami-cloudwatch-agent@minimal` `systemd` 服务来配置最低 GPU 指标。此服务配置以下指标：
+ `utilization_gpu`
+ `utilization_memory`

您可以在以下位置找到适用于最低预先配置 GPU 指标的 `systemd` 服务：

```
/opt/aws/amazon-cloudwatch-agent/etc/dlami-amazon-cloudwatch-agent-minimal.json
```

使用以下命令启用并启动 `systemd` 服务：

```
sudo systemctl enable dlami-cloudwatch-agent@minimal
sudo systemctl start dlami-cloudwatch-agent@minimal
```

### 配置部分 GPU 指标
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial"></a>

使用 `dlami-cloudwatch-agent@partial` `systemd` 服务来配置部分 GPU 指标。此服务配置以下指标：
+ `utilization_gpu`
+ `utilization_memory`
+ `memory_total`
+ `memory_used`
+ `memory_free`

您可以在以下位置找到适用于部分预先配置 GPU 指标的 `systemd` 服务：

```
/opt/aws/amazon-cloudwatch-agent/etc/dlami-amazon-cloudwatch-agent-partial.json
```

使用以下命令启用并启动 `systemd` 服务：

```
sudo systemctl enable dlami-cloudwatch-agent@partial
sudo systemctl start dlami-cloudwatch-agent@partial
```

### 配置所有可用 GPU 指标
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all"></a>

使用 `dlami-cloudwatch-agent@all` `systemd` 服务来配置所有可用 GPU 指标。此服务配置以下指标：
+ `utilization_gpu`
+ `utilization_memory`
+ `memory_total`
+ `memory_used`
+ `memory_free`
+ `temperature_gpu`
+ `power_draw`
+ `fan_speed`
+ `pcie_link_gen_current`
+ `pcie_link_width_current`
+ `encoder_stats_session_count`
+ `encoder_stats_average_fps`
+ `encoder_stats_average_latency`
+ `clocks_current_graphics`
+ `clocks_current_sm`
+ `clocks_current_memory`
+ `clocks_current_video`

您可以在以下位置找到适用于所有可用预先配置 GPU 指标的 `systemd` 服务：

```
/opt/aws/amazon-cloudwatch-agent/etc/dlami-amazon-cloudwatch-agent-all.json
```

使用以下命令启用并启动 `systemd` 服务：

```
sudo systemctl enable dlami-cloudwatch-agent@all
sudo systemctl start dlami-cloudwatch-agent@all
```

### 配置自定义 GPU 指标
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom"></a>

如果预配置的指标不符合您的要求，则可以创建自定义 CloudWatch 代理配置文件。

#### 创建自定义配置文件
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-create"></a>

要创建自定义配置文件，请参阅[手动创建或编辑 CloudWatch 代理配置文件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html)中的详细步骤。

在此示例中，假设架构定义位于 `/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json`。

#### 使用您的自定义文件来配置指标
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-configure"></a>

运行以下命令根据您的自定义文件配置 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/etc/amazon-cloudwatch-agent.json
```

### 为代理安装安全补 AWS CloudWatch 丁
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security"></a>

新发布 DLAMIs 的服务器配置了最新的可用 AWS CloudWatch 代理安全补丁。请参阅以下部分，根据您选择的操作系统，使用最新安全补丁来更新您当前的DLAMI。

#### Amazon Linux 2
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security-al2"></a>

`yum`用于获取亚马逊 Linux 2 DLAMI 的最新 AWS CloudWatch 代理安全补丁。

```
 sudo yum update
```

#### Ubuntu
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security-ubuntu"></a>

要使用Ubuntu获取DLAMI的最新 AWS CloudWatch 安全补丁，必须 AWS CloudWatch 使用Amazon S3下载链接重新安装代理。

```
wget https://s3.region.amazonaws.com/amazoncloudwatch-agent-region/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb
```

有关使用 Amazon S3 下载链接安装 AWS CloudWatch 代理的更多信息，请参阅在[服务器上安装和运行 CloudWatch 代](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html)理。

## 使用预安装 `gpumon.py` 脚本来配置指标
<a name="tutorial-gpu-monitoring-gpumon-script"></a>

一个名为 gpumon.py 的实用工具已预安装在您的 DLAMI 上。它集成 CloudWatch 并支持监控每个 GPU 的使用情况：GPU 内存、GPU 温度和 GPU 功率。该脚本会定期将监控的数据发送到 CloudWatch。您可以通过更改脚本中的一些设置来配置要发送到 CloudWatch 的数据的粒度级别。但是，在启动脚本之前，您需要进行设置 CloudWatch 才能接收指标。

**如何使用设置和运行 GPU 监控 CloudWatch**

1. 创建 IAM 用户，或修改现有用户以制定向其发布指标的策略 CloudWatch。如果创建新用户，请记下凭证，因为您将在下一步中需要这些凭证。

   要搜索的 IAM 策略是 “cloudwatch:PutMetricData”。要添加的策略如下所示：

------
#### [ JSON ]

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
           {
               "Action": [
                   "cloudwatch:PutMetricData"
                ],
                "Effect": "Allow",
                "Resource": "*"
           }
      ]
   }
   ```

------
**提示**  
有关创建 IAM 用户和为添加策略的更多信息 CloudWatch，请参阅[ CloudWatch 文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html)。

1. 在您的 DLAMI 上，运行 [AWS 配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration)并指定 IAM 用户凭证。

   ```
   $ aws configure
   ```

1. 您可能需要先对 gpumon 实用工具进行一些修改，然后再运行该工具。您可以在以下代码块中定义的位置中找到 gpumon 实用工具和 README。有关 `gpumon.py` 脚本的更多信息，请参阅[脚本的 Amazon S3 位置](https://s3.amazonaws.com/aws-bigdata-blog/artifacts/GPUMonitoring/gpumon.py)。

   ```
   Folder: ~/tools/GPUCloudWatchMonitor
   Files: 	~/tools/GPUCloudWatchMonitor/gpumon.py
         	~/tools/GPUCloudWatchMonitor/README
   ```

   选项：
   + 如果您的实例不在 us-east-1 中，请在 gpumon.py 中更改区域。
   + 更改其他参数，例如 CloudWatch`namespace`或报告周期`store_reso`。

1. 目前，该脚本仅支持 Python 3。激活您的首选框架的 Python 3 环境或激活 DLAMI 一般 Python 3 环境。

   ```
   $ source activate python3
   ```

1. 在后台中运行 gpumon 实用工具。

   ```
   (python3)$ python gpumon.py &
   ```

1. 打开您的浏览器前往 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)，然后选择指标。它将有一个命名空间 “DeepLearningTrain”。
**提示**  
您可以修改 gpumon.py 来更改该命名空间。您也可以通过调整 `store_reso` 来修改报告间隔。

以下是一个示例 CloudWatch 图表，报告了 gpumon.py 在监视 p2.8xlarge 实例上的训练作业的情况。

![\[GPU 监控已开启 CloudWatch\]](http://docs.aws.amazon.com/zh_cn/dlami/latest/devguide/images/gpumon.png)


您可能对有关 GPU 监控和优化的以下其他主题感兴趣：
+ [监控](tutorial-gpu-monitoring.md)
  + [GPUs 使用监视器 CloudWatch](#tutorial-gpu-monitoring-gpumon)
+ [优化](tutorial-gpu-opt.md)
  + [预处理](tutorial-gpu-opt-preprocessing.md)
  + [训练](tutorial-gpu-opt-training.md)