

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# GPU 모니터링 및 최적화
<a name="tutorial-gpu"></a>

다음 단원에서는 GPU 최적화 및 모니터링 옵션을 안내합니다. 이 단원은 모니터링, 감독, 사전 처리 및 교육의 일반적인 워크플로우처럼 구성되어 있습니다.
+ [모니터링](tutorial-gpu-monitoring.md)
  + [CloudWatch를 이용한 GPU 모니터링](tutorial-gpu-monitoring-gpumon.md)
+ [최적화](tutorial-gpu-opt.md)
  + [사전 처리](tutorial-gpu-opt-preprocessing.md)
  + [학습](tutorial-gpu-opt-training.md)

# 모니터링
<a name="tutorial-gpu-monitoring"></a>

DLAMI는 몇 가지 GPU 모니터링 도구가 사전 설치된 상태로 제공됩니다. 이 설명서에서는 다운로드 및 설치에 사용할 수 있는 도구에 대해서도 설명합니다.
+ [CloudWatch를 이용한 GPU 모니터링](tutorial-gpu-monitoring-gpumon.md) - Amazon CloudWatch에 GPU 사용 통계를 보고하는 사전 설치된 유틸리티입니다.
+ [nvidia-smi CLI](https://developer.nvidia.com/nvidia-system-management-interface) - 전반적인 GPU 컴퓨팅 및 메모리 사용률을 모니터링하는 유틸리티입니다. 이는 AWS Deep Learning AMIs (DLAMI)에 사전 설치되어 있습니다.
+ [NVML C 라이브러리](https://developer.nvidia.com/nvidia-management-library-nvml) - GPU 모니터링 및 관리 기능에 직접 액세스할 수 있는 C 기반 API입니다. 이 API는 후드 아래에서 nvidia-smi CLI에 사용되며 DLAMI에 사전 설치되어 있습니다. 또한 Python 및 Perl 바인딩을 가지고 있어 이러한 언어로 신속하게 개발이 가능합니다. DLAMI에 사전 설치된 gpumon.py 유틸리티는 [nvidia-ml-py](https://pypi.org/project/nvidia-ml-py/)에서 pynvml 패키지를 사용합니다.
+ [NVIDIA DCGM](https://developer.nvidia.com/data-center-gpu-manager-dcgm) - 클러스터 관리 도구입니다. 이 도구를 설치하고 구성하는 방법을 알아보려면 개발자 페이지를 방문하세요.

**작은 정보**  
DLAMI에 설치된 CUDA 도구를 사용하는 방법에 대한 최신 정보는 NVIDIA의 개발자 블로그에서 확인하세요.  
[Nsight IDE 및 nvprof를 사용한 TensorCore 사용률 모니터링](https://devblogs.nvidia.com/using-nsight-compute-nvprof-mixed-precision-deep-learning-models/).

# CloudWatch를 이용한 GPU 모니터링
<a name="tutorial-gpu-monitoring-gpumon"></a>

GPU에서 DLAMI를 사용할 때는 교육 또는 추론 동안 사용량을 추적하는 방법을 찾고 있는 경우일 수 있습니다. 이는 데이터 파이프라인을 최적화하고 딥 러닝 네트워크를 튜닝할 때 유용할 수 있습니다.

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)하여 Amazon EC2 가속화 인스턴스에서 GPU 지표를 구성하고 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 권한을 구성해야 합니다. 자세한 구성 방법은 [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`를 사용하여 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 사용자를 생성하거나 기존 사용자를 수정하여 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`을 조정하여 보고 간격을 수정할 수도 있습니다.

다음은 gpumon.py를 실행하여 p2.8xlarge 인스턴스에서 교육 작업을 모니터링할 때 CloudWatch 차트 보고의 예제입니다.

![\[CloudWatch에서의 GPU 모니터링\]](http://docs.aws.amazon.com/ko_kr/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)

# 최적화
<a name="tutorial-gpu-opt"></a>

GPU를 최대한 활용하기 위해 데이터 파이프라인을 최적화하고 딥 러닝 네트워크를 튜닝할 수 있습니다. 아래 차트에서 설명하듯, 단순하고 기본적인 방식으로 구현된 신경망에서는 GPU를 일관성 있게 사용하지 못해서 잠재력이 충분히 발휘되지 못할 수 있습니다. 사전 처리 및 데이터 로딩을 최적화하면 CPU에서 GPU로의 병목을 줄일 수 있습니다. 하이브리드화를 사용(프레임워크에서 지원할 때)하여 배치 크기를 조정하고, 호출을 동기화하여 신경망 자체를 조정할 수 있습니다. 또한 대부분 프레임워크에서 다중 정밀도(float16 또는 int8) 교육을 사용하여 처리량 개선에 획기적인 영향을 미칠 수도 있습니다.

다음 차트에는 서로 다른 최적화를 적용할 때 누적되는 성능상 이점을 보여줍니다. 처리 중인 데이터와 최적화 중인 네트워크에 따라 결과는 달라집니다.

![\[GPU 성능 개선\]](http://docs.aws.amazon.com/ko_kr/dlami/latest/devguide/images/performance-enhancements.png)


다음 설명서는 DLAMI에서 실행 가능하고 GPU 성능을 높이는 데 도움을 주는 옵션에 대해 설명합니다.

**Topics**
+ [

# 사전 처리
](tutorial-gpu-opt-preprocessing.md)
+ [

# 학습
](tutorial-gpu-opt-training.md)

# 사전 처리
<a name="tutorial-gpu-opt-preprocessing"></a>

변환 또는 증강을 통한 데이터 사전 처리는 CPU 바운드 프로세스인 경우가 종종 있기 때문에 전체 파이프라인에서 병목이 될 수 있습니다. 프레임워크에는 이미지 처리를 위한 연산자가 내장되어 있지만, DALI(Data Augmentation Library)는 프레임워크에 내장된 옵션을 통한 성능 개선을 입증합니다.
+ NVIDIA DALI(Data Augmentation Library): DALI는 GPU에 데이터 증강을 오프로드합니다. DLAMI에 사전 설치되어 있지 않지만, 이를 설치하거나 지원되는 프레임워크 컨테이너를 DLAMI나 다른 Amazon Elastic Compute Cloud 인스턴스에 로드하여 액세스할 수 있습니다. 자세한 내용은 NVIDIA 웹 사이트의 [DALI 프로젝트 페이지](https://docs.nvidia.com/deeplearning/sdk/dali-install-guide/index.html)를 참조하세요. 예제 사용 사례와 코드 샘플을 다운로드하려면 [SageMaker 사전 처리 교육 성능](https://github.com/aws-samples/sagemaker-cv-preprocessing-training-performance) 샘플을 참조하세요.
+ nvJPEG: C 프로그래머를 위한 GPU 기반의 JPEG 디코더 라이브러리입니다. 단일 이미지 또는 배치를 비롯해 딥 러닝에서 일반적인 후속 변환 작업을 디코딩할 수 있도록 지원합니다. nvJPEG에는 DALI가 내장되어 있을 수도 있고, [NVIDIA 웹 사이트의 nvjpeg 페이지](https://developer.nvidia.com/nvjpeg)에서 다운로드하여 별도로 사용할 수 있습니다.

GPU 모니터링 및 최적화에 대한 이러한 기타 주제들에 관심이 있을 수 있습니다.
+ [모니터링](tutorial-gpu-monitoring.md)
  + [CloudWatch를 이용한 GPU 모니터링](tutorial-gpu-monitoring-gpumon.md)
+ [최적화](tutorial-gpu-opt.md)
  + [사전 처리](#tutorial-gpu-opt-preprocessing)
  + [학습](tutorial-gpu-opt-training.md)

# 학습
<a name="tutorial-gpu-opt-training"></a>

혼합 정밀도 교육을 통해 같은 양의 메모리로 더 큰 네트워크를 배포하거나 단일 또는 이중 정밀도 네트워크와 비교해 메모리 사용량을 줄여서 컴퓨팅 성능을 높일 수 있습니다. 또한 보다 소규모로 더 빨리 데이터를 전송할 수 있다는 이점이 있는데, 이는 여러 노드에 분산된 교육에서 중요한 요소입니다. 혼합 정밀도 교육을 활용하려면 데이터 캐스팅 및 손실을 조정해야 합니다. 다음은 혼합 정밀도를 지원하는 프레임워크에서 이를 수행하는 방법을 설명하는 설명서입니다.
+ [NVIDIA 딥 러닝 SDK](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/) - MXNet, PyTorch 및 TensorFlow를 위한 혼합 정밀도 구현을 설명하는 NVIDIA 웹 사이트의 문서.

**작은 정보**  
선택한 프레임워크를 위한 웹 사이트를 확인하고 최신 최적화 기법에 대한 "혼합 정밀도" 또는 "fp16"을 검색하세요. 다음과 같이 몇 가지 혼합 정밀도 설명서가 도움이 될 수 있습니다.  
[TensorFlow를 이용한 혼합 정밀도 교육(비디오)](https://devblogs.nvidia.com/mixed-precision-resnet-50-tensor-cores/) - NVIDIA 블로그 사이트에서 제공.
[MXNet에서 float16을 사용한 혼합 정밀도 교육](https://mxnet.apache.org/api/faq/float16) - MXNet 웹 사이트의 FAQ 문서.
[NVIDIA Apex: PyTorch를 이용한 간편한 혼합 정밀도 교육을 위한 도구](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/) - NVIDIA 웹 사이트의 블로그 기사.

GPU 모니터링 및 최적화에 대한 이러한 기타 주제들에 관심이 있을 수 있습니다.
+ [모니터링](tutorial-gpu-monitoring.md)
  + [CloudWatch를 이용한 GPU 모니터링](tutorial-gpu-monitoring-gpumon.md)
+ [최적화](tutorial-gpu-opt.md)
  + [사전 처리](tutorial-gpu-opt-preprocessing.md)
  + [학습](#tutorial-gpu-opt-training)