

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Optimisation et surveillance des GPU
<a name="tutorial-gpu"></a>

La section suivante vous guide à travers les options d'optimisation et de surveillance des GPU. Cette section est conçue comme un flux de travail classique, la surveillance supervisant le prétraitement et la formation. 
+ [Contrôle](tutorial-gpu-monitoring.md)
  + [Moniteur GPUs avec CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Optimisation](tutorial-gpu-opt.md)
  + [Prétraitement](tutorial-gpu-opt-preprocessing.md)
  + [Entraînement](tutorial-gpu-opt-training.md)

# Contrôle
<a name="tutorial-gpu-monitoring"></a>

Votre DLAMI est préinstallé avec plusieurs outils de surveillance du GPU. Ce manuel indique également les outils disponibles afin d'être téléchargés et installés.
+ [Moniteur GPUs avec CloudWatch](tutorial-gpu-monitoring-gpumon.md)- un utilitaire préinstallé qui communique les statistiques d'utilisation du GPU à Amazon CloudWatch.
+ [Interface de ligne de commande nvidia-smi](https://developer.nvidia.com/nvidia-system-management-interface) - utilitaire permettant de l'utilisation globale de mémoire et des fonctions de calcul des GPU. Il est préinstallé sur votre AWS Apprentissage profond (deep learning) AMIs (DLAMI).
+ [Bibliothèque C NVML](https://developer.nvidia.com/nvidia-management-library-nvml) - API basée sur C permettant d'accéder directement aux fonctions de surveillance et de gestion des GPU. Elle est utilisée par l'interface de ligne de commande nvidia-smi en arrière-plan et est préinstallée sur vos DLAMI. Elle comporte également les liaisons Perl et Python pour faciliter le développement dans ces langages. L'utilitaire gpumon.py préinstallé sur votre DLAMI utilise le package pynvml de. [nvidia-ml-py](https://pypi.org/project/nvidia-ml-py/)
+ [NVIDIA DCGM](https://developer.nvidia.com/data-center-gpu-manager-dcgm) - outil de gestion des clusters. Visitez la page destinée aux développeurs pour apprendre à installer et à configurer cet outil.

**Astuce**  
Consultez le blog des développeurs de NVIDIA pour obtenir les dernières informations sur l'utilisation des outils CUDA installés sur votre DLAMI :  
[Surveillance de TensorCore l'utilisation à l'aide de Nsight IDE et de nvprof](https://devblogs.nvidia.com/using-nsight-compute-nvprof-mixed-precision-deep-learning-models/).

# Moniteur GPUs avec CloudWatch
<a name="tutorial-gpu-monitoring-gpumon"></a>

Lorsque vous utilisez vos DLAMI avec un GPU, vous pouvez avoir envie d'effectuer le suivi de l'utilisation lors de la formation ou de l'inférence. Cela peut s'avérer utile pour optimiser votre pipeline de données et régler votre réseau de deep learning. 

Il existe deux manières de configurer les métriques du GPU avec CloudWatch :
+ [Configurer les métriques avec l' AWS CloudWatch agent (recommandé)](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide)
+ [Configurer les métriques avec le script préinstallé `gpumon.py`](#tutorial-gpu-monitoring-gpumon-script)

## Configurer les métriques avec l' AWS CloudWatch agent (recommandé)
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide"></a>

Intégrez votre DLAMI à l'agent [ CloudWatch unifié pour configurer les](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) métriques du GPU et surveiller l'utilisation des coprocessus du GPU dans les instances accélérées Amazon EC2.

Il existe quatre méthodes pour configurer les [métriques du GPU](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-NVIDIA-GPU.html) avec votre DLAMI :
+ [Configurer des métriques GPU minimales](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal)
+ [Configurer des métriques partielles du GPU](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial)
+ [Configurer toutes les métriques GPU disponibles](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all)
+ [Configurer des métriques GPU personnalisées](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom)

Pour plus d'informations sur les mises à jour et les correctifs de sécurité, voir [Correctifs de sécurité pour l'agent AWS CloudWatch](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security)

### Conditions préalables
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-prerequisites"></a>

Pour commencer, vous devez configurer les autorisations IAM de l'instance Amazon EC2 qui permettent à votre instance d'envoyer des métriques. CloudWatch Pour connaître les étapes détaillées, voir [Création de rôles et d'utilisateurs IAM à utiliser avec l' CloudWatch agent](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html).

### Configurer des métriques GPU minimales
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal"></a>

Configurez des métriques GPU minimales à l'aide du `dlami-cloudwatch-agent@minimal` `systemd` service. Ce service configure les métriques suivantes :
+ `utilization_gpu`
+ `utilization_memory`

Vous pouvez trouver le `systemd` service pour les métriques GPU préconfigurées minimales à l'emplacement suivant :

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

Activez et démarrez le `systemd` service à l'aide des commandes suivantes :

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

### Configurer des métriques partielles du GPU
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial"></a>

Configurez des métriques partielles du GPU à l'aide du `dlami-cloudwatch-agent@partial` `systemd` service. Ce service configure les métriques suivantes :
+ `utilization_gpu`
+ `utilization_memory`
+ `memory_total`
+ `memory_used`
+ `memory_free`

Vous pouvez trouver le `systemd` service pour les métriques GPU partiellement préconfigurées à l'emplacement suivant :

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

Activez et démarrez le `systemd` service à l'aide des commandes suivantes :

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

### Configurer toutes les métriques GPU disponibles
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all"></a>

Configurez toutes les métriques GPU disponibles à l'aide du `dlami-cloudwatch-agent@all` `systemd` service. Ce service configure les métriques suivantes :
+ `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`

Vous trouverez le `systemd` service pour toutes les métriques GPU préconfigurées disponibles à l'emplacement suivant :

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

Activez et démarrez le `systemd` service à l'aide des commandes suivantes :

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

### Configurer des métriques GPU personnalisées
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom"></a>

Si les métriques préconfigurées ne répondent pas à vos exigences, vous pouvez créer un fichier de configuration d' CloudWatch agent personnalisé.

#### Création d'un fichier de configuration personnalisé
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-create"></a>

Pour créer un fichier de configuration personnalisé, reportez-vous aux étapes détaillées de la section [Création ou modification manuelle du fichier de configuration de l' CloudWatch agent](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html).

Pour cet exemple, supposons que la définition du schéma se trouve à`/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json`.

#### Configurez les métriques avec votre fichier personnalisé
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-configure"></a>

Exécutez la commande suivante pour configurer l' CloudWatch agent en fonction de votre fichier personnalisé :

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

### Correctifs de sécurité pour l'agent AWS CloudWatch
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security"></a>

Les nouvelles versions DLAMIs sont configurées avec les derniers correctifs de sécurité des AWS CloudWatch agents disponibles. Reportez-vous aux sections suivantes pour mettre à jour votre DLAMI actuel avec les derniers correctifs de sécurité en fonction du système d'exploitation de votre choix.

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

`yum`À utiliser pour obtenir les derniers correctifs de sécurité des AWS CloudWatch agents pour un DLAMI Amazon Linux 2.

```
 sudo yum update
```

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

Pour obtenir les derniers correctifs AWS CloudWatch de sécurité pour un DLAMI avec Ubuntu, il est nécessaire de réinstaller l'agent à AWS CloudWatch l'aide d'un lien de téléchargement Amazon S3.

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

Pour plus d'informations sur l'installation de l' AWS CloudWatch agent à l'aide des liens de téléchargement Amazon S3, consultez [Installation et exécution de l' CloudWatch agent sur vos serveurs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html).

## Configurer les métriques avec le script préinstallé `gpumon.py`
<a name="tutorial-gpu-monitoring-gpumon-script"></a>

Un utilitaire appelée gpumon.py est préinstallé sur vos DLAMI. Il s'intègre CloudWatch et prend en charge la surveillance de l'utilisation par processeur graphique : mémoire du processeur graphique, température du processeur graphique et puissance du processeur graphique. Le script envoie régulièrement les données surveillées à CloudWatch. Vous pouvez configurer le niveau de granularité des données envoyées CloudWatch en modifiant quelques paramètres dans le script. Avant de démarrer le script, vous devez toutefois vous configurer CloudWatch pour recevoir les métriques. 

**Comment configurer et exécuter la surveillance du GPU avec CloudWatch**

1. Créez un utilisateur IAM ou modifiez un utilisateur existant pour disposer d'une politique de publication de la métrique sur. CloudWatch Si vous créez un nouvel utilisateur, notez les informations d'identification. Vous en aurez besoin à l'étape suivante. 

   La politique IAM à rechercher est « cloudwatch : PutMetricData ». La stratégie qui est ajoutée est la suivante :

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

****  

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

------
**Astuce**  
Pour plus d'informations sur la création d'un utilisateur IAM et l'ajout de politiques pour CloudWatch, consultez la [ CloudWatch documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html).

1. Sur votre DLAMI, [AWS exécutez](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration) configure et spécifiez les informations d'identification de l'utilisateur IAM. 

   ```
   $ aws configure
   ```

1. Vous devrez peut-être modifier l'utilitaire gpumon avant de l'exécuter. Vous trouverez l'utilitaire gpumon et le fichier README à l'emplacement défini dans le bloc de code suivant. Pour plus d'informations sur le `gpumon.py` script, consultez [l'emplacement du script sur Amazon S3.](https://s3.amazonaws.com/aws-bigdata-blog/artifacts/GPUMonitoring/gpumon.py)

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

   Options :
   + Si votre instance N'est PAS située dans la région us-east-1, modifiez la région dans gpumon.py.
   + Modifiez d'autres paramètres tels que le CloudWatch `namespace` ou la période de référence avec`store_reso`.

1. Actuellement, le script prend uniquement en charge Python 3. Activez l'environnement Python 3 de votre framework préféré ou activez l'environnement Python 3 général DLAMI. 

   ```
   $ source activate python3
   ```

1. Exécutez l'utilitaire gpumon en arrière-plan.

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

1. Ouvrez votre navigateur à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/), puis sélectionnez la métrique. Il aura un espace de noms « DeepLearningTrain ». 
**Astuce**  
Vous pouvez modifier l'espace de noms en modifiant gpumon.py. Vous pouvez également modifier l'intervalle de création des rapports en ajustant `store_reso`. 

Voici un exemple de CloudWatch graphique illustrant une exécution de gpumon.py surveillant une tâche de formation sur une instance p2.8xlarge. 

![\[Surveillance du GPU activée CloudWatch\]](http://docs.aws.amazon.com/fr_fr/dlami/latest/devguide/images/gpumon.png)


Les rubriques suivantes relatives à la surveillance et l'optimisation des GPU peuvent vous intéresser :
+ [Contrôle](tutorial-gpu-monitoring.md)
  + [Moniteur GPUs avec CloudWatch](#tutorial-gpu-monitoring-gpumon)
+ [Optimisation](tutorial-gpu-opt.md)
  + [Prétraitement](tutorial-gpu-opt-preprocessing.md)
  + [Entraînement](tutorial-gpu-opt-training.md)

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

Pour en tirer le meilleur parti GPUs, vous pouvez optimiser votre pipeline de données et ajuster votre réseau de deep learning. Comme décrit dans le graphique suivant, une implémentation naïve ou élémentaire d'un réseau neuronal risque d'utiliser le GPU de manière incohérente, et ne pas exploiter pleinement son potentiel. Lorsque vous optimisez le prétraitement et le chargement des données, vous pouvez réduire le goulot d'étranglement de votre CPU à votre GPU. Vous pouvez ajuster le réseau neuronal lui-même, en utilisant un réseau hybride (lorsqu'il est pris en charge par l'infrastructure), en ajustant la taille des lots et en synchronisant les appels. Vous pouvez également utiliser la formation avec précision multiple (float16 ou int8) dans la plupart des infrastructures, ce qui peut améliorer considérablement le débit. 

Le graphique suivant illustre les gains de performance cumulés lorsque différentes optimisations sont appliquées. Vos résultats dépendront des données vous traitez et du réseau que vous optimisez.

![\[Améliorations des performances pour GPUs\]](http://docs.aws.amazon.com/fr_fr/dlami/latest/devguide/images/performance-enhancements.png)


Les guides suivants présentent les options qui fonctionneront avec votre DLAMI et vous aideront à améliorer les performances du GPU.

**Topics**
+ [Prétraitement](tutorial-gpu-opt-preprocessing.md)
+ [Entraînement](tutorial-gpu-opt-training.md)

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

Le processus de prétraitement des données via des transformations ou des augmentations peut souvent être lié AU CPU. Il peut donc constituer le goulot d'étranglement dans votre pipeline. Les infrastructures comportent des opérateurs pour le traitement des images, mais la bibliothèque DALI (Data Augmentation Library) affiche de meilleures performances que les options intégrées aux infrastructures.
+ Bibliothèque NVIDIA Data Augmentation Library (DALI) : DALI décharge l'augmentation de données dans le GPU. Il n'est pas préinstallé sur le DLAMI, mais vous pouvez y accéder en l'installant ou en chargeant un conteneur de framework pris en charge sur votre DLAMI ou sur une autre instance Amazon Elastic Compute Cloud. Reportez-vous à la [page de projet DALI](https://docs.nvidia.com/deeplearning/sdk/dali-install-guide/index.html) sur le site web NVIDIA pour plus de détails. Pour un exemple de cas d'utilisation et pour télécharger des exemples de code, consultez l'exemple de performance d'[entraînement en matière de SageMaker prétraitement](https://github.com/aws-samples/sagemaker-cv-preprocessing-training-performance).
+ nvJPEG : bibliothèque de décodage JPEG avec accélération GPU pour les programmeurs C. Elle prend en charge le décodage d'images uniques ou de lots, ainsi que les opérations de transformation suivantes qui sont communes dans le deep learning. nvJPEG est intégré à DALI. Vous pouvez également le télécharger à partir de la [page nvjpeg du site web NVIDIA](https://developer.nvidia.com/nvjpeg) et l'utiliser séparément.

Les rubriques suivantes relatives à la surveillance et l'optimisation des GPU peuvent vous intéresser :
+ [Contrôle](tutorial-gpu-monitoring.md)
  + [Moniteur GPUs avec CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Optimisation](tutorial-gpu-opt.md)
  + [Prétraitement](#tutorial-gpu-opt-preprocessing)
  + [Entraînement](tutorial-gpu-opt-training.md)

# Entraînement
<a name="tutorial-gpu-opt-training"></a>

Avec la formation avec précision mixte, vous pouvez déployer de plus grands réseaux avec la même quantité de mémoire, ou réduire l'utilisation de la mémoire par rapport à votre réseau simple ou double précision. Vous obtiendrez aussi de meilleures performances de calcul. Vous pouvez également tirer parti de transferts de données plus petits et plus rapides, qui est un facteur important dans la formation distribuée à plusieurs nœuds. Pour profiter de la formation avec précision mixte, vous devez ajuster la conversion et la mise à l'échelle de la perte des données. Les guides suivants décrivent la procédure pour les infrastructures qui prennent en charge la précision mixte.
+ [SDK NVIDIA Deep Learning](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/) : documentation disponible sur le site Web de NVIDIA décrivant l'implémentation en précision mixte pour MXNet, et PyTorch. TensorFlow

**Astuce**  
Recherchez l'infrastructure de votre choix sur le site web, puis recherchez « précision mixte » ou « fp16 » pour obtenir les dernières techniques d'optimisation. Voici quelques guides relatifs à la précision mixte qui peuvent vous être utiles :  
[Entraînement de précision mixte avec TensorFlow (vidéo)](https://devblogs.nvidia.com/mixed-precision-resnet-50-tensor-cores/) - sur le site du blog NVIDIA.
[Entraînement à précision mixte avec float16 avec MXNet](https://mxnet.apache.org/api/faq/float16) - un article de FAQ sur le site Web. MXNet 
[NVIDIA Apex : un outil pour un entraînement facile à précision mixte grâce PyTorch](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/) à un article de blog sur le site Web de NVIDIA.

Les rubriques suivantes relatives à la surveillance et l'optimisation des GPU peuvent vous intéresser :
+ [Contrôle](tutorial-gpu-monitoring.md)
  + [Moniteur GPUs avec CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Optimisation](tutorial-gpu-opt.md)
  + [Prétraitement](tutorial-gpu-opt-preprocessing.md)
  + [Entraînement](#tutorial-gpu-opt-training)