

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 CloudWatch 監控 GPU
<a name="tutorial-gpu-monitoring-gpumon"></a>

當您使用 DLAMI 搭配 GPU 時，您可能會發現您在培訓或推論期間設法追蹤其使用狀況。這在最佳化資料管道和調校深度學習網路時可能有很用。

使用 CloudWatch 設定 GPU 指標的方法有兩種：
+ [使用 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>

若要開始使用，您必須設定允許執行個體將指標推送至 CloudWatch 的 Amazon EC2 執行個體 IAM 許可。如需詳細步驟，請參閱[建立 IAM 角色和使用者以搭配 CloudWatch 代理程式使用](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` 取得 Amazon Linux 2 DLAMI 的最新 AWS CloudWatch 代理程式安全修補程式。

```
 sudo yum update
```

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

若要使用 Ubuntu 取得 DLAMI 的最新 AWS CloudWatch 安全修補程式，必須使用 Amazon S3 下載連結重新安裝 AWS CloudWatch 代理程式。

```
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 來接收指標。

**如何使用 CloudWatch 來設定和執行 GPU 監控**

1. 建立 IAM 使用者，或修改現有的 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 執行個體上的培訓任務。

![CloudWatch 上的 GPU 監控](http://docs.aws.amazon.com/zh_tw/dlami/latest/devguide/images/gpumon.png)


對於 GPU 監控和最佳化，您可能有興趣看其他這些主題：
+ [監控](tutorial-gpu-monitoring.md)
  + [使用 CloudWatch 監控 GPU](#tutorial-gpu-monitoring-gpumon)
+ [最佳化](tutorial-gpu-opt.md)
  + [預處理](tutorial-gpu-opt-preprocessing.md)
  + [培訓](tutorial-gpu-opt-training.md)