Condividi tramite


Training del modello di intelligenza artificiale distribuito in HPC Pack

Sfondo

Nell'attuale momento, i modelli di intelligenza artificiale si stanno evolvendo per diventare più sostanziali, richiedendo una crescente domanda di hardware avanzato e un cluster di computer per un training efficiente dei modelli. HPC Pack consente di semplificare il lavoro di training del modello in modo efficace.

PyTorch Distributed Data Parallel (noto anche come DDP)

Per implementare il training dei modelli distribuiti, è necessario usare un framework di training distribuito. La scelta del framework dipende da quella usata per compilare il modello. In questo articolo ti guiderò su come procedere con PyTorch in HPC Pack.

PyTorch offre diversi metodi per il training distribuito. Tra questi, Distributed Data Parallel (DDP) è ampiamente preferibile a causa della sua semplicità e delle minime modifiche al codice necessarie per il modello di training a computer singolo corrente.

Configurare un cluster HPC Pack per il training del modello di intelligenza artificiale

È possibile configurare un cluster HPC Pack usando i computer locali o le macchine virtuali in Azure. Assicurati che questi computer siano dotati di GPU (in questo articolo useremo GPU Nvidia).

In genere, una GPU può avere un processo per un lavoro di training distribuito. Pertanto, se si dispone di due computer (ovvero nodi in un cluster di computer), ognuno dotato di quattro GPU, è possibile ottenere 2 * 4, che è uguale a 8, processi paralleli per un singolo training del modello. Questa configurazione può potenzialmente ridurre il tempo di training a circa 1/8 rispetto al training di un singolo processo, omettendo alcuni sovraccarichi di sincronizzazione dei dati tra i processi.

Creare un cluster HPC Pack nel modello di Resource Manager

Per semplicità, è possibile avviare un nuovo cluster HPC Pack in Azure, in modelli arm in GitHub.

Selezionare il modello "Cluster a nodo head singolo per carichi di lavoro Linux" e fare clic su "Distribuisci in Azure"

selezionare un modello di Resource Manager

Per informazioni su come creare e caricare un certificato per l'uso di HPC Pack, vedere i prerequisiti .

Si prega di notare:

  1. Selezionare un'immagine del nodo di calcolo contrassegnata con "HPC". Ciò indica che i driver GPU sono preinstallati nell'immagine. In caso contrario, sarebbe necessaria l'installazione manuale del driver GPU in un nodo di calcolo in una fase successiva, che potrebbe rivelarsi un'attività complessa a causa della complessità dell'installazione del driver GPU. Altre informazioni sulle immagini HPC sono disponibili qui.

    selezionare un'immagine del nodo HPC

  2. È consigliabile selezionare una dimensione di macchina virtuale del nodo di calcolo con GPU. Ovvero dimensioni della macchina virtuale serie N.

    selezionare le dimensioni di una macchina virtuale con GPU

Installare PyTorch nei nodi di calcolo

In ogni nodo di calcolo installare PyTorch con il comando

pip3 install torch torchvision torchaudio

Suggerimenti: è possibile sfruttare HPC Pack "Esegui comando" per eseguire un comando in un set di nodi del cluster in parallelo.

Configurare una directory condivisa

Prima di poter eseguire un processo di training, è necessaria una directory condivisa accessibile da tutti i nodi di calcolo. La directory viene usata per il codice di training e i dati (sia il set di dati di input che il modello sottoposto a training di output).

È possibile configurare una directory di condivisione SMB in un nodo head e quindi montarla in ogni nodo di calcolo con cifs, come illustrato di seguito:

  1. In un nodo head creare una directory app in %CCP_DATA%\SpoolDir, che è già condivisa come CcpSpoolDir da HPC Pack per impostazione predefinita.

  2. In un nodo di calcolo montare la directory app, ad esempio

    sudo mkdir /app
    sudo mount -t cifs //<your head node name>/CcpSpoolDir/app /app -o vers=2.1,domain=<hpc admin domain>,username=<hpc admin>,password=<your password>,dir_mode=0777,file_mode=0777
    

    NOTA:

    • L'opzione password può essere omessa in una shell interattiva. In tal caso, verrà richiesto di specificarlo.
    • Il dir_mode e file_mode è impostato su 0777, in modo che qualsiasi utente Linux possa leggerlo/scriverlo. È possibile un'autorizzazione con restrizioni, ma più complessa da configurare.
  3. Facoltativamente, rendere il montaggio in modo permanente aggiungendo una linea in /etc/fstab come

    //<your head node name>/CcpSpoolDir/app cifs vers=2.1,domain=<hpc admin domain>,username=<hpc admin>,password=<your password>,dir_mode=0777,file_mode=0777 0 2
    

    Qui è necessario il password.

Eseguire un processo di training

Si supponga di avere ora due nodi di calcolo Linux, ognuno con quattro GPU NVidia v100. Ed è stato installato PyTorch in ogni nodo. È stata configurata anche una directory condivisa "app". Ora possiamo iniziare il nostro lavoro di formazione.

Qui sto usando un semplice modello di toy basato su PyTorch DDP. È possibile ottenere il codice in GitHub.

Scaricare i file seguenti nella directory condivisa %CCP_DATA%\SpoolDir\app nel nodo head

  • neural_network.py
  • operations.py
  • run_ddp.py

Creare quindi un processo con Node come unità di risorsa e due nodi per il processo, ad esempio

dettagli processo

Specificare due nodi con GPU in modo esplicito, ad esempio

selezione delle risorse del processo

Aggiungere quindi attività di processo, ad esempio

modificare le attività del processo

Le righe di comando delle attività sono tutte uguali, ad esempio

python3 -m torch.distributed.run --nnodes=<the number of compute nodes> --nproc_per_node=<the processes on each node> --rdzv_id=100 --rdzv_backend=c10d --rdzv_endpoint=<a node name>:29400 /app/run_ddp.py
  • nnodes specifica il numero di nodi di calcolo per il processo di training.
  • nproc_per_node specifica il numero di processi in ogni nodo di calcolo. Non può superare il numero di GPU in un nodo. Ovvero, una GPU può avere al massimo un processo.
  • rdzv_endpoint specifica un nome e una porta di un nodo che funge da rendezvous. Qualsiasi nodo del processo di training può funzionare.
  • "/app/run_ddp.py" è il percorso del file di codice di training. Tenere presente che /app è una directory condivisa nel nodo head.

Inviare il processo e attendere il risultato. È possibile visualizzare le attività in esecuzione, ad esempio

visualizzare le attività dei processi

Si noti che il riquadro Risultati mostra l'output troncato se è troppo lungo.

È tutto per questo. Spero che tu ottenga i punti e HPC Pack possa velocizzare il tuo lavoro di formazione.