

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Monitoraggio e ottimizzazione GPU
<a name="tutorial-gpu"></a>

La sezione seguente descrive le opzioni di ottimizzazione e monitoraggio della GPU. Questa sezione è organizzata come un flusso di lavoro tipico in cui il monitoraggio supervisiona la pre-elaborazione e il training. 
+ [Monitoraggio](tutorial-gpu-monitoring.md)
  + [GPUs Monitora con CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Ottimizzazione](tutorial-gpu-opt.md)
  + [Pre-elaborazione](tutorial-gpu-opt-preprocessing.md)
  + [Addestramento](tutorial-gpu-opt-training.md)

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

Il tuo DLAMI è preinstallato con diversi strumenti di monitoraggio della GPU. Questa guida fa anche riferimento a strumenti disponibili per scaricare e installare.
+ [GPUs Monitora con CloudWatch](tutorial-gpu-monitoring-gpumon.md)- un'utilità preinstallata che riporta le statistiche sull'utilizzo della GPU ad Amazon. CloudWatch
+ [nvidia-smi CLI](https://developer.nvidia.com/nvidia-system-management-interface) - un'utilità per il monitoraggio di calcolo e utilizzo di memoria della GPU. È preinstallato sul tuo AWS Deep Learning AMIs (DLAMI).
+ [NVML libreria C](https://developer.nvidia.com/nvidia-management-library-nvml): un'API basata sul C per accedere direttamente alle funzioni di monitoraggio e gestione della GPU. Viene utilizzata dall'interfaccia a riga di comando nvidia-smi dietro le quinte ed è preinstallata sulla DLAMI. Dispone anche di associazioni Python e Perl per facilitare lo sviluppo in tali lingue. L'utilità gpumon.py preinstallata sul DLAMI utilizza il pacchetto pynvml di. [nvidia-ml-py](https://pypi.org/project/nvidia-ml-py/)
+ [NVIDIA DCGM](https://developer.nvidia.com/data-center-gpu-manager-dcgm): uno strumento di gestione cluster. Per informazioni su come installare e configurare questo strumento, visita la pagina per gli sviluppatori.

**Suggerimento**  
Dai un'occhiata al blog degli sviluppatori di NVIDIA per le ultime informazioni sull'utilizzo degli strumenti CUDA per installare il tuo DLAMI:  
[Monitoraggio dell' TensorCore utilizzo tramite Nsight IDE e nvprof](https://devblogs.nvidia.com/using-nsight-compute-nvprof-mixed-precision-deep-learning-models/).

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

Quando si utilizza la DLAMI con una GPU, è possibile che si stiano cercando modi per tenere traccia del suo utilizzo durante il training o l'inferenza. Questo può essere utile per ottimizzare la data pipeline e regolare la rete di deep learning. 

Esistono due modi per configurare le metriche della GPU con: CloudWatch
+ [Configura le metriche con l' AWS CloudWatch agente (consigliato)](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide)
+ [Configura le metriche con lo script preinstallato `gpumon.py`](#tutorial-gpu-monitoring-gpumon-script)

## Configura le metriche con l' AWS CloudWatch agente (consigliato)
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide"></a>

Integra il tuo DLAMI con l'[ CloudWatch agente unificato](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) per configurare i parametri della GPU e monitorare l'utilizzo dei coprocessi GPU nelle istanze accelerate di Amazon EC2.

Esistono quattro modi per configurare le [metriche della GPU](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-NVIDIA-GPU.html) con DLAMI:
+ [Configura metriche minime per la GPU](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal)
+ [Configura le metriche parziali della GPU](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial)
+ [Configura tutte le metriche GPU disponibili](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all)
+ [Configura metriche GPU personalizzate](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom)

Per informazioni sugli aggiornamenti e le patch di sicurezza, consulta [Applicazione di patch di sicurezza per l'agente AWS CloudWatch](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security)

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

Per iniziare, devi configurare le autorizzazioni IAM dell'istanza Amazon EC2 che consentano all'istanza di inviare parametri a. CloudWatch Per i passaggi dettagliati, consulta [Creare ruoli e utenti IAM da utilizzare con l'agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html). CloudWatch 

### Configura metriche minime per la GPU
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal"></a>

Configura metriche minime per la GPU utilizzando il servizio. `dlami-cloudwatch-agent@minimal` `systemd` Questo servizio configura le seguenti metriche:
+ `utilization_gpu`
+ `utilization_memory`

Puoi trovare il `systemd` servizio per le metriche minime preconfigurate della GPU nella seguente posizione:

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

Abilita e avvia il `systemd` servizio con i seguenti comandi:

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

### Configura le metriche parziali della GPU
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial"></a>

Configura le metriche parziali della GPU utilizzando il servizio. `dlami-cloudwatch-agent@partial` `systemd` Questo servizio configura le seguenti metriche:
+ `utilization_gpu`
+ `utilization_memory`
+ `memory_total`
+ `memory_used`
+ `memory_free`

Puoi trovare il `systemd` servizio per le metriche parziali preconfigurate della GPU nella seguente posizione:

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

Abilita e avvia il `systemd` servizio con i seguenti comandi:

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

### Configura tutte le metriche GPU disponibili
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all"></a>

Configura tutte le metriche GPU disponibili utilizzando il servizio. `dlami-cloudwatch-agent@all` `systemd` Questo servizio configura le seguenti metriche:
+ `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`

Puoi trovare il `systemd` servizio per tutte le metriche GPU preconfigurate disponibili nella seguente posizione:

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

Abilita e avvia il `systemd` servizio con i seguenti comandi:

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

### Configura metriche GPU personalizzate
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom"></a>

Se le metriche preconfigurate non soddisfano i tuoi requisiti, puoi creare un file di configurazione dell'agente personalizzato CloudWatch .

#### Crea un file di configurazione personalizzato
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-create"></a>

Per creare un file di configurazione personalizzato, consulta i passaggi dettagliati in [Creare o modificare manualmente il file di configurazione dell' CloudWatch agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html).

Per questo esempio, supponiamo che la definizione dello schema si trovi in`/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json`.

#### Configura le metriche con il tuo file personalizzato
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-configure"></a>

Esegui il comando seguente per configurare l' CloudWatch agente in base al tuo file personalizzato:

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

### Applicazione di patch di sicurezza per l'agente AWS CloudWatch
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security"></a>

Le nuove versioni DLAMIs sono configurate con le ultime patch di sicurezza disponibili per gli AWS CloudWatch agenti. Consultate le seguenti sezioni per aggiornare il vostro attuale DLAMI con le patch di sicurezza più recenti a seconda del sistema operativo scelto.

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

`yum`Usalo per ottenere le patch di sicurezza degli AWS CloudWatch agenti più recenti per un DLAMI Amazon Linux 2.

```
 sudo yum update
```

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

Per ottenere le patch AWS CloudWatch di sicurezza più recenti per un DLAMI con Ubuntu, è necessario reinstallare AWS CloudWatch l'agente utilizzando un link per il download di Amazon S3.

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

Per ulteriori informazioni sull'installazione dell' AWS CloudWatch agente utilizzando i link per il download di Amazon S3, consulta [Installazione ed esecuzione dell' CloudWatch agente sui server](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html).

## Configura le metriche con lo script preinstallato `gpumon.py`
<a name="tutorial-gpu-monitoring-gpumon-script"></a>

Un'utilità denominata gpumon.py è preinstallata sulla DLAMI. Si integra CloudWatch e supporta il monitoraggio dell'utilizzo per GPU: memoria GPU, temperatura della GPU e potenza della GPU. Lo script invia periodicamente i dati monitorati a. CloudWatch È possibile configurare il livello di granularità dei dati a cui vengono inviati CloudWatch modificando alcune impostazioni nello script. Prima di avviare lo script, tuttavia, è necessario configurarlo per CloudWatch ricevere le metriche. 

**Come configurare ed eseguire il monitoraggio della GPU con CloudWatch**

1. Crea un utente IAM o modificane uno esistente per disporre di una policy su cui pubblicare la metrica. CloudWatch Se crei un nuovo utente, prendi nota delle credenziali poiché saranno necessarie nella fase successiva. 

   La policy IAM da cercare è «cloudwatch:». PutMetricData La policy che viene aggiunta è la seguente:

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

****  

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

------
**Suggerimento**  
[Per ulteriori informazioni sulla creazione di un utente IAM e sull'aggiunta di policy per CloudWatch, consulta la CloudWatch documentazione.](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html)

1. Sul tuo DLAMI, esegui [AWS configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration) e specifica le credenziali utente IAM. 

   ```
   $ aws configure
   ```

1. Potrebbe essere necessario apportare alcune modifiche all'utilità gpumon prima di eseguirla. È possibile trovare l'utilità gpumon e README nella posizione definita nel seguente blocco di codice. Per ulteriori informazioni sullo `gpumon.py` script, consulta [la posizione dello script in Amazon S3](https://s3.amazonaws.com/aws-bigdata-blog/artifacts/GPUMonitoring/gpumon.py).

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

   Opzioni:
   + Cambia la regione in gpumon.py se l'istanza NON è in us-east-1.
   + Modifica altri parametri, ad esempio CloudWatch `namespace` il periodo di riferimento con`store_reso`.

1. Attualmente lo script supporta solo Python 3. Attiva l'ambiente Python 3 del tuo framework preferito o attiva l'ambiente Python 3 generale DLAMI. 

   ```
   $ source activate python3
   ```

1. Esegui l'utilità gpumon in background.

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

1. Apri il browser nella [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) quindi seleziona il parametro. Avrà uno spazio dei nomi ''. DeepLearningTrain 
**Suggerimento**  
Puoi cambiare lo spazio dei nomi modificando gpumon.py. Puoi anche modificare l'intervallo di reporting regolando `store_reso`. 

Di seguito è riportato un esempio di CloudWatch grafico che riporta un'esecuzione di gpumon.py che monitora un processo di formazione sull'istanza p2.8xlarge. 

![\[Monitoraggio della GPU attivo CloudWatch\]](http://docs.aws.amazon.com/it_it/dlami/latest/devguide/images/gpumon.png)


Questi altri argomenti sul monitoraggio e l'ottimizzazione GPU potrebbero essere interessanti:
+ [Monitoraggio](tutorial-gpu-monitoring.md)
  + [GPUs Monitora con CloudWatch](#tutorial-gpu-monitoring-gpumon)
+ [Ottimizzazione](tutorial-gpu-opt.md)
  + [Pre-elaborazione](tutorial-gpu-opt-preprocessing.md)
  + [Addestramento](tutorial-gpu-opt-training.md)

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

Per sfruttare al meglio le tue potenzialità GPUs, puoi ottimizzare la pipeline di dati e ottimizzare la tua rete di deep learning. Come descritto nel grafico seguente, un'implementazione nativa o di base di una rete neurale potrebbe utilizzare la GPU in maniera non omogenea e non a pieno potenziale. Quando ottimizzi la pre-elaborazione e il caricamento dei dati, puoi ridurre il collo di bottiglia dalla CPU alla GPU. Puoi regolare la rete neurale stessa, utilizzando l'ibridazione (quando supportata dal framework), modificando le dimensioni batch e sincronizzando le chiamate. Puoi anche utilizzare training a precisione multipla (float16 o int8) nella maggior parte dei framework, che può avere un effetto significativo sul miglioramento del throughput. 

Il grafico seguente mostra i miglioramenti delle prestazioni cumulativi quando si applicano ottimizzazioni differenti. I risultati dipenderanno dai dati in corso di elaborazione e dalla rete che si sta ottimizzando.

![\[Miglioramenti delle prestazioni per GPUs\]](http://docs.aws.amazon.com/it_it/dlami/latest/devguide/images/performance-enhancements.png)


Le seguenti guide introducono le opzioni che funzionano con il tuo DLAMI e ti aiutano a migliorare le prestazioni della GPU.

**Topics**
+ [

# Pre-elaborazione
](tutorial-gpu-opt-preprocessing.md)
+ [

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

# Pre-elaborazione
<a name="tutorial-gpu-opt-preprocessing"></a>

La pre-elaborazione dei dati tramite trasformazioni o ottimizzazioni può essere spesso un processo basato sulla CPU e questo può essere il collo di bottiglia nella pipeline complessiva. I framework dispongono di operatori integrati per l'elaborazione di immagini, ma DALI (Data augmentation Library) mostra prestazioni migliorate rispetto a opzioni integrate dei framework.
+ NVIDIA Data augmentation Library (DALI): DALI esegue l'offload dell'ottimizzazione dei dati nella GPU. Non è preinstallato su DLAMI, ma puoi accedervi installandolo o caricando un contenitore di framework supportato sul tuo DLAMI o su un'altra istanza Amazon Elastic Compute Cloud. Per informazioni dettagliate, consulta la [pagina di progetto DALI](https://docs.nvidia.com/deeplearning/sdk/dali-install-guide/index.html) sul sito Web NVIDIA. [Per un caso d'uso di esempio e per scaricare esempi di codice, consulta l'esempio Preprocessing Training Performance. SageMaker ](https://github.com/aws-samples/sagemaker-cv-preprocessing-training-performance)
+ nvJPEG: una libreria di decoder JPEG con accelerazione GPU per programmatori C. Supporta la decodifica di immagini singole o batch, nonché operazioni di trasformazione successive che sono comuni in deep learning. nvJPEG è integrato con DALI, oppure è possibile scaricarlo dalla [pagina nvjpeg del sito Web NVIDIA](https://developer.nvidia.com/nvjpeg) e utilizzarlo separatamente.

Questi altri argomenti sul monitoraggio e l'ottimizzazione GPU potrebbero essere interessanti:
+ [Monitoraggio](tutorial-gpu-monitoring.md)
  + [GPUs Monitora con CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Ottimizzazione](tutorial-gpu-opt.md)
  + [Pre-elaborazione](#tutorial-gpu-opt-preprocessing)
  + [Addestramento](tutorial-gpu-opt-training.md)

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

Grazie al training a precisione mista puoi distribuire reti più grandi con la stessa quantità di memoria o ridurre l'utilizzo della memoria rispetto alla rete a precisione singola o doppia, registrando al contempo un incremento delle prestazioni di calcolo. Hai anche il vantaggio di trasferimenti dati più piccoli e rapidi, un fattore importante nel training distribuito a più nodi. Per sfruttare il training a precisione mista occorre regolare casting dei dati e perdita di scaling. Le guide seguenti descrivono come eseguire questa operazione per i framework che supportano la precisione mista.
+ [NVIDIA Deep Learning SDK](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/): documenti sul sito Web di NVIDIA che descrivono l'implementazione a precisione mista per, e. MXNet PyTorch TensorFlow

**Suggerimento**  
Assicurati di controllare il sito Web per il framework scelto e cerca "mixed precision" o "fp16" per le tecniche di ottimizzazione più recenti. Di seguito sono elencate alcune guide a precisione mista che possono essere utili:  
[Formazione a precisione mista con TensorFlow (](https://devblogs.nvidia.com/mixed-precision-resnet-50-tensor-cores/)video) - sul sito del blog NVIDIA.
[Allenamento a precisione mista con float16 con MXNet](https://mxnet.apache.org/api/faq/float16) - un articolo di domande frequenti sul sito Web. MXNet 
[NVIDIA Apex: uno strumento per un facile allenamento a precisione mista con PyTorch](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/) - un articolo di blog sul sito Web di NVIDIA.

Questi altri argomenti sul monitoraggio e l'ottimizzazione GPU potrebbero essere interessanti:
+ [Monitoraggio](tutorial-gpu-monitoring.md)
  + [GPUs Monitora con CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Ottimizzazione](tutorial-gpu-opt.md)
  + [Pre-elaborazione](tutorial-gpu-opt-preprocessing.md)
  + [Addestramento](#tutorial-gpu-opt-training)