

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Monitorización y optimización de GPU
<a name="tutorial-gpu"></a>

La siguiente sección le guiará en el proceso de configurar las opciones de optimización y monitorización de GPU. Esta sección está organizada como un flujo de trabajo típico en la que se monitoriza el procesamiento previo y el entrenamiento. 
+ [Supervisión](tutorial-gpu-monitoring.md)
  + [GPUs Supervise con CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Optimización](tutorial-gpu-opt.md)
  + [Procesamiento previo](tutorial-gpu-opt-preprocessing.md)
  + [Formación](tutorial-gpu-opt-training.md)

# Supervisión
<a name="tutorial-gpu-monitoring"></a>

La DLAMI viene preinstalada con varias herramientas de supervisión de GPU. Esta guía también menciona las herramientas que están disponibles para su descarga e instalación.
+ [GPUs Supervise con CloudWatch](tutorial-gpu-monitoring-gpumon.md)- una utilidad preinstalada que informa a Amazon CloudWatch de las estadísticas de uso de la GPU.
+ [CLI de nvidia-smi](https://developer.nvidia.com/nvidia-system-management-interface): una utilidad para monitorizar el uso general de memoria y computación de GPU. Está preinstalado en su AWS Deep Learning AMIs (DLAMI).
+ [Biblioteca de C de NVML](https://developer.nvidia.com/nvidia-management-library-nvml): una API basada en C para obtener acceso directo a las funciones de administración y monitorización de GPU. Esta API la utiliza internamente la CLI de nvidia-smi y viene preinstalada en la DLAMI. También tiene enlaces a Python y Perl para facilitar el desarrollo en dichos lenguajes. La utilidad gpumon.py preinstalada en su DLAMI utiliza el paquete pynvml de. [nvidia-ml-py](https://pypi.org/project/nvidia-ml-py/)
+ [NVIDIA DCGM](https://developer.nvidia.com/data-center-gpu-manager-dcgm): una herramienta de administración de clústeres. Visite la página del desarrollador para obtener información sobre cómo instalar y configurar esta herramienta.

**sugerencia**  
Consulte el blog de desarrolladores de NVIDIA para obtener la información más reciente sobre el uso de las herramientas de CUDA instaladas en la DLAMI:  
[Supervisión de la TensorCore utilización mediante Nsight IDE y nvprof](https://devblogs.nvidia.com/using-nsight-compute-nvprof-mixed-precision-deep-learning-models/).

# GPUs Supervise con CloudWatch
<a name="tutorial-gpu-monitoring-gpumon"></a>

Cuando utilice la DLAMI con una GPU, es probable que sienta la necesidad de realizar un seguimiento de su uso durante el entrenamiento o la inferencia. Esto puede resultar útil para optimizar la canalización de datos y ajustar la red de aprendizaje profundo. 

Hay dos formas de configurar las métricas de la GPU con CloudWatch:
+ [Configure las métricas con el AWS CloudWatch agente (recomendado)](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide)
+ [Configure las métricas con el script preinstalado `gpumon.py`](#tutorial-gpu-monitoring-gpumon-script)

## Configure las métricas con el AWS CloudWatch agente (recomendado)
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide"></a>

Integre su DLAMI con [el agente CloudWatch unificado para configurar las](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) métricas de la GPU y supervisar la utilización de los coprocesos de la GPU en las instancias aceleradas de Amazon EC2.

Hay cuatro formas de configurar las [métricas de la GPU](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-NVIDIA-GPU.html) con su DLAMI:
+ [Configuración de métricas de GPU mínimas](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal)
+ [Configuración de métricas de GPU parciales](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial)
+ [Configure todas las métricas de GPU disponibles](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all)
+ [Configuración de métricas de GPU personalizadas](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom)

Para obtener más información sobre actualizaciones y parches de seguridad, consulte [Parches de seguridad para el agente AWS CloudWatch](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security).

### Requisitos previos
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-prerequisites"></a>

Para empezar, debe configurar los permisos de IAM de la instancia Amazon EC2 que permitan a la instancia enviar métricas a ella. CloudWatch Para ver los pasos detallados, consulte [Crear roles y usuarios de IAM para usarlos con el agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html). CloudWatch 

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

Configure las métricas mínimas de GPU mediante el servicio `systemd` de `dlami-cloudwatch-agent@minimal`. En este servicio se configuran las siguientes métricas:
+ `utilization_gpu`
+ `utilization_memory`

Puede encontrar el servicio `systemd` de métricas mínimas de GPU preconfiguradas en la siguiente ubicación:

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

Active e inicie el servicio `systemd` con los siguientes comandos:

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

### Configuración de métricas de GPU parciales
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial"></a>

Configure las métricas parciales de GPU mediante el servicio `systemd` de `dlami-cloudwatch-agent@partial`. En este servicio se configuran las siguientes métricas:
+ `utilization_gpu`
+ `utilization_memory`
+ `memory_total`
+ `memory_used`
+ `memory_free`

Puede encontrar el servicio `systemd` de métricas parciales de GPU preconfiguradas en la siguiente ubicación:

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

Active e inicie el servicio `systemd` con los siguientes comandos:

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

### Configure todas las métricas de GPU disponibles
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all"></a>

Configure todas las métricas disponibles de GPU mediante el servicio `systemd` de `dlami-cloudwatch-agent@all`. En este servicio se configuran las siguientes 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`

Puede encontrar el servicio `systemd` de todas las métricas disponibles de GPU preconfiguradas en la siguiente ubicación:

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

Active e inicie el servicio `systemd` con los siguientes comandos:

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

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

Si las métricas preconfiguradas no cumplen sus requisitos, puede crear un archivo de configuración de CloudWatch agente personalizado.

#### Para crear un archivo de configuración personalizado
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-create"></a>

Para crear un archivo de configuración personalizado, consulte los pasos detallados en [Crear o editar manualmente el archivo de configuración del CloudWatch agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html).

Para este ejemplo, suponga que la definición del esquema se encuentra en `/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json`.

#### Configure las métricas con su archivo personalizado
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-configure"></a>

Ejecute el siguiente comando para configurar el CloudWatch agente según su archivo 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
```

### Parches de seguridad para el agente AWS CloudWatch
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security"></a>

Los recién lanzados DLAMIs están configurados con los últimos parches de seguridad AWS CloudWatch del agente disponibles. Consulte las siguientes secciones para actualizar su DLAMI actual con los últimos parches de seguridad en función del sistema operativo que elija.

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

Úselo `yum` para obtener los parches de seguridad de AWS CloudWatch agentes más recientes para una DLAMI de Amazon Linux 2.

```
 sudo yum update
```

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

Para obtener los últimos parches AWS CloudWatch de seguridad para una DLAMI con Ubuntu, es necesario volver a instalar AWS CloudWatch el agente mediante un enlace de descarga de Amazon S3.

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

Para obtener más información sobre la instalación del AWS CloudWatch agente mediante los enlaces de descarga de Amazon S3, consulte [Instalación y ejecución del CloudWatch agente en sus servidores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html).

## Configure las métricas con el script preinstalado `gpumon.py`
<a name="tutorial-gpu-monitoring-gpumon-script"></a>

Una utilidad denominada gpumon.py viene preinstalada en la DLAMI. Se integra CloudWatch y admite la supervisión del uso por GPU: memoria de la GPU, temperatura de la GPU y potencia de la GPU. El script envía periódicamente los datos monitorizados a CloudWatch. Puede configurar el nivel de granularidad de los datos a los que se envían CloudWatch cambiando algunos ajustes del script. Sin embargo, antes de iniciar el script, necesitará configurarlo CloudWatch para recibir las métricas. 

**Cómo configurar y ejecutar la supervisión de la GPU con CloudWatch**

1. Cree un usuario de IAM o modifique uno existente para tener una política en la que publicar la métrica. CloudWatch Si crea un usuario nuevo, anote las credenciales, ya que las necesitará en el siguiente paso. 

   La política de IAM que hay que buscar es «cloudwatch:». PutMetricData La política que se añade es la siguiente:

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

****  

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

------
**sugerencia**  
[Para obtener más información sobre cómo crear un usuario de IAM y añadir políticas CloudWatch, consulte la documentación. CloudWatch ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html)

1. En la DLAMI, ejecute el comando [AWS configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration) y especifique las credenciales de usuario de IAM. 

   ```
   $ aws configure
   ```

1. Es posible que tenga que realizar algunas modificaciones en la utilidad gpumon antes de ejecutarla. Puede encontrar la utilidad gpumon y el archivo README en la ubicación definida en el siguiente bloque de código. Para obtener más información sobre el script `gpumon.py`, consulte [la ubicación del script en Amazon S3](https://s3.amazonaws.com/aws-bigdata-blog/artifacts/GPUMonitoring/gpumon.py).

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

   Opciones:
   + Cambie la región en gpumon.py si la instancia NO está en us-east-1.
   + Cambie otros parámetros, como el período del informe CloudWatch `namespace` o el período del informe, con`store_reso`.

1. Actualmente, el script solo es compatible con Python 3. Active el entorno de Python 3 de su marco de trabajo preferido o active el entorno general de Python 3 de la DLAMI. 

   ```
   $ source activate python3
   ```

1. Ejecute la utilidad gpumon en segundo plano.

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

1. Abra [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) en el navegador y seleccione la métrica. Tendrá un espacio de nombres ''. DeepLearningTrain 
**sugerencia**  
Puede cambiar el espacio de nombres modificando gpumon.py. También puede modificar el intervalo de notificación ajustando `store_reso`. 

El siguiente es un ejemplo de CloudWatch gráfico que informa sobre una ejecución de gpumon.py supervisando un trabajo de entrenamiento en una instancia p2.8xlarge. 

![\[Supervisión de GPU activada CloudWatch\]](http://docs.aws.amazon.com/es_es/dlami/latest/devguide/images/gpumon.png)


Es posible que le interesen estos otros temas sobre la monitorización y optimización de GPU:
+ [Supervisión](tutorial-gpu-monitoring.md)
  + [GPUs Supervise con CloudWatch](#tutorial-gpu-monitoring-gpumon)
+ [Optimización](tutorial-gpu-opt.md)
  + [Procesamiento previo](tutorial-gpu-opt-preprocessing.md)
  + [Formación](tutorial-gpu-opt-training.md)

# Optimización
<a name="tutorial-gpu-opt"></a>

Para sacarle el máximo partido GPUs, puede optimizar su canalización de datos y ajustar su red de aprendizaje profundo. Tal como se describe en el siguiente gráfico, una implementación ingenua o básica de una red neuronal podría utilizar la GPU de un modo incoherente y no aprovechar todo su potencial. Al optimizar el procesamiento previo y la carga de datos, es posible reducir el cuello de botella de la CPU a la GPU. Puede ajustar la propia red neuronal mediante la hibridación (si el marco de trabajo la admite), ajustando el tamaño del lote y sincronizando las llamadas. También puede utilizar entrenamiento de precisión múltiple (float16 o int8) en la mayoría de los marcos de trabajo, lo que puede tener un efecto drástico en la mejora del rendimiento. 

El gráfico siguiente muestra la mejora acumulativa del rendimiento que se obtiene cuando se aplican distintas optimizaciones. Los resultados dependerán de los datos que esté procesando y de la red que esté optimizando.

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


Las siguientes guías introducen opciones que funcionarán con la DLAMI y que le ayudarán a aumentar el rendimiento de la GPU.

**Topics**
+ [

# Procesamiento previo
](tutorial-gpu-opt-preprocessing.md)
+ [

# Formación
](tutorial-gpu-opt-training.md)

# Procesamiento previo
<a name="tutorial-gpu-opt-preprocessing"></a>

El procesamiento previo de los datos a través de transformaciones o aumentos es con frecuencia un proceso asociado a la CPU y puede ser el cuello de botella en la canalización general. Los marcos de trabajo tienen operadores integrados para el procesamiento de imágenes, pero DALI (Data Augmentation Library) demuestra un rendimiento mejorado sobre las opciones integradas de los marcos de trabajo.
+ Biblioteca de aumento de datos de NVIDIA (DALI): DALI descarga el aumento de datos a la GPU. No está preinstalada en la DLAMI, pero puede obtener acceso a ella instalando o cargando un contenedor de marcos de trabajo compatible en la DLAMI o en otra instancia de Amazon Elastic Compute Cloud. Consulte la [página del proyecto DALI](https://docs.nvidia.com/deeplearning/sdk/dali-install-guide/index.html) en el sitio web de NVIDIA para obtener más información. Para ver un ejemplo de caso de uso y descargar ejemplos de código, consulta el ejemplo sobre el rendimiento del entrenamiento [ SageMaker previo al procesamiento](https://github.com/aws-samples/sagemaker-cv-preprocessing-training-performance).
+ nvJPEG: una biblioteca de decodificadores JPEG acelerada por GPU para programadores de C. Admite la decodificación de imágenes únicas o de lotes de imágenes, así como las operaciones de transformación subsiguientes tan frecuentes en el aprendizaje profundo. nvJPEG viene integrada en DALI, pero puede descargarla en la [página de nvjpeg del sitio web de NVIDIA](https://developer.nvidia.com/nvjpeg) y utilizarla de forma independiente.

Es posible que le interesen estos otros temas sobre la monitorización y optimización de GPU:
+ [Supervisión](tutorial-gpu-monitoring.md)
  + [GPUs Supervise con CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Optimización](tutorial-gpu-opt.md)
  + [Procesamiento previo](#tutorial-gpu-opt-preprocessing)
  + [Formación](tutorial-gpu-opt-training.md)

# Formación
<a name="tutorial-gpu-opt-training"></a>

El entrenamiento de precisión mixta permite implementar redes de mayor tamaño con la misma cantidad de memoria, o reducir el uso de esta en comparación con las redes de precisión única o doble, lo que se traduce en un aumento del rendimiento informático. También ofrece el beneficio de transferencias de datos más pequeñas y rápidas, un factor importante en el entrenamiento distribuido con varios nodos. Para utilizar el entrenamiento de precisión mixta es necesario ajustar el envío de datos y el escalado de pérdidas. Las siguientes guías describen cómo realizar esta operación en los marcos de trabajo compatibles con la precisión mixta.
+ [SDK de aprendizaje profundo de NVIDIA](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/): documentos en el sitio web de NVIDIA que describen la implementación de precisión mixta para, y. MXNet PyTorch TensorFlow

**sugerencia**  
Asegúrese de consultar el sitio web de su marco de trabajo preferido y busque "mixed precision" o "fp16" para conocer las técnicas de optimización más recientes. A continuación se muestran algunas guías de precisión mixta que pueden resultarle de utilidad:  
[Formación de precisión mixta con TensorFlow (vídeo)](https://devblogs.nvidia.com/mixed-precision-resnet-50-tensor-cores/): en el blog de NVIDIA.
[Entrenamiento de precisión mixta con float16 con](https://mxnet.apache.org/api/faq/float16) un artículo de preguntas frecuentes en el MXNet sitio web. MXNet 
[NVIDIA Apex: una herramienta para un entrenamiento sencillo de precisión mixta con PyTorch](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/) un artículo de blog en el sitio web de NVIDIA.

Es posible que le interesen estos otros temas sobre la monitorización y optimización de GPU:
+ [Supervisión](tutorial-gpu-monitoring.md)
  + [GPUs Supervise con CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Optimización](tutorial-gpu-opt.md)
  + [Procesamiento previo](tutorial-gpu-opt-preprocessing.md)
  + [Formación](#tutorial-gpu-opt-training)