

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Monitoramento e otimização de GPU
<a name="tutorial-gpu"></a>

A seção a seguir orientará você durante a otimização de GPU e opções de monitoramento. Esta seção é organizada como um fluxo de trabalho típico com monitoramento, supervisão, pré-processamento e treinamento. 
+ [Monitoramento](tutorial-gpu-monitoring.md)
  + [Monitor GPUs com CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Otimização](tutorial-gpu-opt.md)
  + [Pré-processamento](tutorial-gpu-opt-preprocessing.md)
  + [Treinamento](tutorial-gpu-opt-training.md)

# Monitoramento
<a name="tutorial-gpu-monitoring"></a>

A DLAMI vem pré-instalada com várias ferramentas de monitoramento de GPU. Este guia menciona também ferramentas que estão disponíveis para download e instalação.
+ [Monitor GPUs com CloudWatch](tutorial-gpu-monitoring-gpumon.md)- um utilitário pré-instalado que reporta estatísticas de uso da GPU para a Amazon. CloudWatch
+ [CLI nvidia-smi](https://developer.nvidia.com/nvidia-system-management-interface) – um utilitário para monitorar a utilização geral de computação e memória de GPU. Isso está pré-instalado no seu AMIs de deep learning da AWS (DLAMI).
+ [Biblioteca NVML C](https://developer.nvidia.com/nvidia-management-library-nvml) – uma API baseada em C para acessar diretamente funções de monitoramento e gerenciamento de GPU. Isso é usado pela CLI nvidia-smi nos bastidores e é pré-instalado na DLAMI. Também tem associações Python e Perl para facilitar o desenvolvimento nessas linguagens. O utilitário gpumon.py pré-instalado em seu DLAMI usa o pacote pynvml do. [nvidia-ml-py](https://pypi.org/project/nvidia-ml-py/)
+ [NVIDIA DCGM](https://developer.nvidia.com/data-center-gpu-manager-dcgm) – uma ferramenta de gerenciamento de cluster. Visite a página do desenvolvedor para saber como instalar e configurar essa ferramenta.

**dica**  
Confira o blog do desenvolvedor de NVIDIA para obter as informações mais recentes sobre como usar as ferramentas do CUDA instaladas na DLAMI:  
[Monitorando TensorCore a utilização usando o Nsight IDE e o nvprof](https://devblogs.nvidia.com/using-nsight-compute-nvprof-mixed-precision-deep-learning-models/).

# Monitor GPUs com CloudWatch
<a name="tutorial-gpu-monitoring-gpumon"></a>

Ao usar a DLAMI com uma GPU, talvez você descubra que está procurando maneiras de controlar o uso durante o treinamento ou a inferência. Isso pode ser útil para otimizar o pipeline de dados e ajustar sua rede de aprendizado profundo. 

Há duas maneiras de configurar as métricas da GPU com CloudWatch:
+ [Configurar métricas com o AWS CloudWatch agente (recomendado)](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide)
+ [Configurar métricas com o script `gpumon.py` pré-instalado](#tutorial-gpu-monitoring-gpumon-script)

## Configurar métricas com o AWS CloudWatch agente (recomendado)
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide"></a>

Integre seu DLAMI com [o agente CloudWatch unificado](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) para configurar métricas de GPU e monitorar a utilização de coprocessos de GPU em instâncias aceleradas do Amazon EC2.

Há quatro maneiras de configurar [métricas de GPU](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-NVIDIA-GPU.html) com a DLAMI:
+ [Configurar métricas de GPU mínimas](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal)
+ [Configurar métricas de GPU parciais](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial)
+ [Configurar todas as métricas de GPU disponíveis](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all)
+ [Configurar métricas de GPU personalizadas](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom)

Para obter mais informações sobre atualizações e patches de segurança, consulte [Patches de segurança para o agente AWS CloudWatch](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security)

### Pré-requisitos
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-prerequisites"></a>

Para começar, você deve configurar as permissões IAM da instância do Amazon EC2 que permitam que sua instância envie métricas para. CloudWatch Para ver etapas detalhadas, consulte [Criar funções e usuários do IAM para uso com o CloudWatch agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html).

### Configurar métricas de GPU mínimas
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal"></a>

Configure métricas mínimas de GPU usando o serviço `dlami-cloudwatch-agent@minimal` `systemd`. Esse serviço configura as seguintes métricas:
+ `utilization_gpu`
+ `utilization_memory`

Você pode encontrar o serviço `systemd` para métricas mínimas de GPU pré-configuradas no seguinte local:

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

Habilite e inicie o serviço `systemd` com os seguintes comandos:

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

### Configurar métricas de GPU parciais
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial"></a>

Configure métricas de GPU parciais usando o serviço `dlami-cloudwatch-agent@partial` `systemd`. Esse serviço configura as seguintes métricas:
+ `utilization_gpu`
+ `utilization_memory`
+ `memory_total`
+ `memory_used`
+ `memory_free`

Você pode encontrar o serviço `systemd` para métricas parciais de GPU pré-configuradas no seguinte local:

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

Habilite e inicie o serviço `systemd` com os seguintes comandos:

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

### Configurar todas as métricas de GPU disponíveis
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all"></a>

Configure todas as métricas de GPU disponíveis usando o serviço `dlami-cloudwatch-agent@all` `systemd`. Esse serviço configura as seguintes métricas:
+ `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`

Você pode encontrar o serviço `systemd` para todas as métricas disponíveis de GPU pré-configuradas no seguinte local:

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

Habilite e inicie o serviço `systemd` com os seguintes comandos:

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

### Configurar métricas de GPU personalizadas
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom"></a>

Se as métricas pré-configuradas não atenderem aos seus requisitos, você poderá criar um arquivo personalizado de configuração do CloudWatch agente.

#### Criar um arquivo de configuração personalizada
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-create"></a>

Para criar um arquivo de configuração personalizado, consulte as etapas detalhadas em [Criar ou editar manualmente o arquivo de configuração do CloudWatch agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html).

Neste exemplo, suponha que a definição do esquema esteja localizada em `/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json`.

#### Configurar métricas com seu arquivo personalizado
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-configure"></a>

Execute o comando a seguir para configurar o CloudWatch agente de acordo com seu arquivo personalizado:

```
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
```

### Patches de segurança para o agente AWS CloudWatch
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security"></a>

Os recém-lançados DLAMIs são configurados com os patches de segurança de AWS CloudWatch agentes mais recentes disponíveis. Consulte as seções a seguir para atualizar a DLAMI atual com os patches de segurança mais recentes, dependendo do sistema operacional escolhido.

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

Use `yum` para obter os patches de segurança de AWS CloudWatch agentes mais recentes para um Amazon Linux 2 DLAMI.

```
 sudo yum update
```

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

Para obter os patches de AWS CloudWatch segurança mais recentes para um DLAMI com Ubuntu, é necessário reinstalar o agente usando um link de download AWS CloudWatch do Amazon S3.

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

Para obter mais informações sobre como instalar o AWS CloudWatch agente usando os links de download do Amazon S3, consulte [Instalando e executando o CloudWatch agente em seus servidores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html).

## Configurar métricas com o script `gpumon.py` pré-instalado
<a name="tutorial-gpu-monitoring-gpumon-script"></a>

Um utilitário chamado gpumon.py é pré-instalado na DLAMI. Ele se integra CloudWatch e oferece suporte ao monitoramento do uso por GPU: memória da GPU, temperatura da GPU e potência da GPU. O script envia periodicamente os dados monitorados para CloudWatch o. Você pode configurar o nível de granularidade dos dados enviados CloudWatch alterando algumas configurações no script. Antes de iniciar o script, no entanto, você precisará configurar CloudWatch para receber as métricas. 

**Como configurar e executar o monitoramento de GPU com CloudWatch**

1. Crie um usuário do IAM ou modifique um existente para ter uma política para publicar a métrica CloudWatch. Se você criar um novo usuário, anote as credenciais, pois elas serão necessárias na próxima etapa. 

   A política do IAM a ser pesquisada é “cloudwatch:PutMetricData”. A política que é adicionada é a seguinte:

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

****  

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

------
**dica**  
Para obter mais informações sobre como criar um usuário do IAM e adicionar políticas para CloudWatch, consulte a [ CloudWatch documentação](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html).

1. Em sua DLAMI, execute [AWS configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration) e especifique as credenciais de usuário do IAM. 

   ```
   $ aws configure
   ```

1. Talvez você precise fazer algumas modificações no utilitário gpumon antes de executá-lo. Você pode encontrar o utilitário gpumon e o README no seguinte local definido no seguinte bloco de código. Para obter mais informações sobre o script `gpumon.py`, consulte a [localização do script no Amazon S3](https://s3.amazonaws.com/aws-bigdata-blog/artifacts/GPUMonitoring/gpumon.py).

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

   Opções:
   + Altere a região no gpumon.py se sua instância NÃO estiver em us-east-1.
   + Altere outros parâmetros, como o período do relatório CloudWatch `namespace` ou o período do relatório, com`store_reso`.

1. No momento, o script oferece suporte apenas ao Python 3. Ative o ambiente do Python 3 da estrutura de trabalho preferencial ou ative o ambiente geral do Python 3 da DLAMI. 

   ```
   $ source activate python3
   ```

1. Execute o utilitário gpumon em segundo plano.

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

1. Abra seu navegador para [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) e, depois, selecione a métrica. Ele terá um namespace ''. DeepLearningTrain 
**dica**  
Você pode alterar o namespace modificando o gpumon.py. Você também pode modificar o intervalo de relatório ajustando `store_reso`. 

Veja a seguir um exemplo de CloudWatch gráfico relatando uma execução do gpumon.py monitorando um trabalho de treinamento na instância p2.8xlarge. 

![\[Monitoramento de GPU ativado CloudWatch\]](http://docs.aws.amazon.com/pt_br/dlami/latest/devguide/images/gpumon.png)


Você pode estar interessado nesses outros tópicos sobre monitoramento e otimização de GPU:
+ [Monitoramento](tutorial-gpu-monitoring.md)
  + [Monitor GPUs com CloudWatch](#tutorial-gpu-monitoring-gpumon)
+ [Otimização](tutorial-gpu-opt.md)
  + [Pré-processamento](tutorial-gpu-opt-preprocessing.md)
  + [Treinamento](tutorial-gpu-opt-training.md)

# Otimização
<a name="tutorial-gpu-opt"></a>

Para aproveitar ao máximo GPUs, você pode otimizar seu pipeline de dados e ajustar sua rede de aprendizado profundo. Como o gráfico a seguir descreve, uma implementação simples ou básica de uma rede neural pode usar a GPU de maneira inconsistente e não aproveitar o potencial máximo. Ao otimizar o pré-processamento e o carregamento de dados, você pode reduzir o gargalo da CPU para a GPU. Você pode ajustar a rede neural em si usando hibridização (quando compatível com a estrutura), ajustando o tamanho do lote e sincronizando as chamadas. Você também pode usar treinamento de precisão múltipla (float16 ou int8) na maioria das estruturas, o que pode causar um efeito enorme na melhoria da taxa de transferência. 

A tabela a seguir mostra os ganhos de desempenho cumulativos ao aplicar otimizações diferentes. Seus resultados dependerão dos dados que você está processando e da rede que está otimizando.

![\[Aprimoramentos de desempenho para GPUs\]](http://docs.aws.amazon.com/pt_br/dlami/latest/devguide/images/performance-enhancements.png)


Os seguintes guias apresentam opções que funcionarão com a DLAMI e ajudarão a aumentar o desempenho da GPU.

**Topics**
+ [

# Pré-processamento
](tutorial-gpu-opt-preprocessing.md)
+ [

# Treinamento
](tutorial-gpu-opt-training.md)

# Pré-processamento
<a name="tutorial-gpu-opt-preprocessing"></a>

O pré-processamento de dados durante transformações ou aumento muitas vezes pode ser um processo vinculado à CPU e isso pode ser o gargalo em todo o seu pipeline. Estruturas têm operadores integrados para processamento de imagens, mas a DALI (Data Augmentation Library) demonstra um melhor desempenho em relação às opções integradas das estruturas.
+ NVIDIA Data Augmentation Library (DALI): a DALI minimiza o aumento dos dados para a GPU. Não é pré-instalada na DLAMI, mas você pode ter acesso instalando-a ou carregando um contêiner de estrutura compatível na sua DLAMI ou em outra instância do Amazon Elastic Compute Cloud. Consulte a [página do projeto DALI](https://docs.nvidia.com/deeplearning/sdk/dali-install-guide/index.html) no site do NVIDIA para obter detalhes. Para ver um exemplo de caso de uso e baixar amostras de código, consulte a amostra de desempenho do [treinamento SageMaker de pré-processamento](https://github.com/aws-samples/sagemaker-cv-preprocessing-training-performance).
+ nvJPEG: uma biblioteca de decodificadores JPEG acelerados para GPU para programadores de C. Ela oferece suporte à decodificação de imagens ou lotes únicos, bem como operações de transformação subsequentes que são comuns em aprendizado profundo. A nvJPEG vem integrada à DALI, ou você pode fazer download da [página nvjpeg do site da NVIDIA](https://developer.nvidia.com/nvjpeg) e usá-la separadamente.

Você pode estar interessado nesses outros tópicos sobre monitoramento e otimização de GPU:
+ [Monitoramento](tutorial-gpu-monitoring.md)
  + [Monitor GPUs com CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Otimização](tutorial-gpu-opt.md)
  + [Pré-processamento](#tutorial-gpu-opt-preprocessing)
  + [Treinamento](tutorial-gpu-opt-training.md)

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

Com treinamento de precisão mista, você pode implantar redes maiores com a mesma quantidade de memória ou reduzir o uso de memória em comparação com sua rede de precisão única ou dupla, e você verá aumentos de desempenho de computação. Você também pode obter o benefício de transferências de dados menores e mais rápidas, um fator importante em um treinamento distribuído em vários nós. Para aproveitar o treinamento de precisão mista, você precisa ajustar a conversão de dados e a escalabilidade de perdas. Veja a seguir os guias que descrevem como fazer isso para as estruturas que oferecem suporte à precisão mista.
+ [SDK de aprendizado profundo da NVIDIA](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/) - documentos no site da NVIDIA descrevendo a implementação de precisão mista para, e. MXNet PyTorch TensorFlow

**dica**  
Verifique se o site oferece a estrutura de sua preferência e procure por "precisão mista" ou "fp16" para encontrar as técnicas de otimização mais recentes. Veja a seguir alguns guias sobre precisão mista que podem ser úteis:  
[Treinamento de precisão mista com TensorFlow (vídeo)](https://devblogs.nvidia.com/mixed-precision-resnet-50-tensor-cores/) - no site do blog da NVIDIA.
[Treinamento de precisão mista usando float16 com MXNet](https://mxnet.apache.org/api/faq/float16) - um artigo de perguntas frequentes no site. MXNet 
[NVIDIA Apex: uma ferramenta para treinamento fácil de precisão mista com PyTorch](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/) - um artigo de blog no site da NVIDIA.

Você pode estar interessado nesses outros tópicos sobre monitoramento e otimização de GPU:
+ [Monitoramento](tutorial-gpu-monitoring.md)
  + [Monitor GPUs com CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Otimização](tutorial-gpu-opt.md)
  + [Pré-processamento](tutorial-gpu-opt-preprocessing.md)
  + [Treinamento](#tutorial-gpu-opt-training)