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à.
Inizia a usare EFA e NCCL per carichi di lavoro ML su Amazon EC2
La NVIDIA Collective Communications Library (NCCL) è una libreria di routine di comunicazione collettiva standard per più utenti GPUs su uno o più nodi. NCCL può essere utilizzato con EFA, Libfabric e MPI per supportare diversi carichi di lavoro di machine learning. Per ulteriori informazioni, consulta il sito Web NCCL
La seguente procedura consente di iniziare a utilizzare EFA e NCCL utilizzando un'AMI di base per uno dei sistemi operativi supportati.
Nota
-
Solo i tipi di istanza
p3dn.24xlarge
,p4d.24xlarge
ep5.48xlarge
sono supportati. -
Sono supportati solo Amazon Linux 2 e Ubuntu 20.04/22.04 base AMIs .
-
Solo NCCL 2.4.2 e versione successiva è supportata da EFA.
Per ulteriori informazioni sull'esecuzione di carichi di lavoro di machine learning con EFA e NCCL utilizzando un AWS Deep Learning AMIs, consulta Using EFA on the DLAMI nella Developer Guide.AWS Deep Learning AMIs
Fasi
- Fase 1: preparare un gruppo di sicurezza abilitato per EFA
- Fase 2: avviare un'istanza temporanea
- Fase 3: installare driver GPU Nvidia, il kit di strumenti Nvidia CUDA e cuDNN
- Fase 4: Installazione GDRCopy
- Fase 5: installazione del software EFA
- Fase 6: installare NCCL
- Fase 7: installare i test NCCL
- Fase 8: testare la configurazione EFA e NCCL
- Fase 9: installare applicazioni di machine learning
- Fase 10: creare un EFA e un'AMI abilitata NCCL
- Fase 11: terminare l'istanza temporanea
- Fase 12: avviare le istanze EFA e abilitate NCCL in un gruppo di collocazione cluster
- Fase 13: abilitare SSH senza password
Fase 1: preparare un gruppo di sicurezza abilitato per EFA
Un EFA richiede un gruppo di sicurezza in cui sia consentito tutto il traffico in entrata e in uscita dal gruppo stesso. La procedura seguente crea un gruppo di sicurezza che consente tutto il traffico in entrata e in uscita da e verso se stesso e che consente il traffico SSH in entrata da qualsiasi indirizzo per la connettività SSH. IPv4
Importante
Questo gruppo di sicurezza è destinato esclusivamente a scopi di test. Per i tuoi ambienti di produzione, consigliamo di creare una regola SSH in entrata che consenta il traffico solo dall'indirizzo IP da cui ti connetti, ad esempio l'indirizzo IP del tuo computer o un intervallo di indirizzi IP nella tua rete locale.
Per altri scenari, consulta Regole del gruppo di sicurezza per diversi casi d'uso.
Per creare un gruppo di sicurezza abilitato per EFA
Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/
. -
Nel riquadro di navigazione, scegliere Security Groups (Gruppi di sicurezza) e quindi Create Security Group (Crea gruppo di sicurezza).
-
Nella finestra Create Security Group (Crea gruppo di sicurezza) effettuare le operazioni seguenti:
-
In Nome gruppo di sicurezza, immettere un nome descrittivo per il gruppo di sicurezza, ad esempio
EFA-enabled security group
. -
(Facoltativo) In Description (Descrizione), inserire una breve descrizione del gruppo di sicurezza.
-
In VPC, selezionare il VPC in cui avviare le istanze abilitate per EFA.
-
Scegliere Create Security Group (Crea gruppo di sicurezza).
-
-
Seleziona il gruppo di sicurezza creato e nella scheda Details (Dettagli) copia il valore Security group ID (ID gruppo di sicurezza).
-
Dopo aver selezionato il gruppo di sicurezza, scegli Actions (Operazioni), Edit inbound rules (Modifica le regole in entrata) ed esegui le operazioni di seguito:
-
Scegliere Add rule (Aggiungi regola).
-
In Type (Tipo), selezionare All traffic (Tutto il traffico).
-
Per Source type (Tipo di origine), scegli Custom (Personalizzata) e incolla nel campo l'ID del gruppo di sicurezza copiato in precedenza.
-
Scegli Aggiungi regola.
-
Per Type (Tipo) scegli SSH.
-
Per Tipo di sorgente, scegli Anywhere- IPv4.
-
Scegliere Salva regole.
-
-
Dopo aver selezionato il gruppo di sicurezza, scegli Actions (Operazioni), Edit outbound rules (Modifica le regole in uscita) ed esegui le operazioni di seguito:
-
Scegliere Add rule (Aggiungi regola).
-
In Type (Tipo), selezionare All traffic (Tutto il traffico).
-
Per Destination type (Tipo di destinazione), scegli Custom (Personalizzata) e incolla nel campo l'ID del gruppo di sicurezza copiato in precedenza.
-
Scegliere Salva regole.
-
Fase 2: avviare un'istanza temporanea
Avvia un'istanza temporanea da utilizzare per installare e configurare i componenti software EFA. L'istanza serve anche per creare un'AMI abilitata per EFA da cui avviare le istanze abilitate per EFA.
Per avviare un'istanza temporanea
Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/
. -
Nel pannello di navigazione, scegli Instances (Istanze) e quindi scegli Launch instances (Avvia istanze) per aprire la nuova procedura guidata di avvio dell'istanza.
-
(Opzionale) Nella sezione Name and tags (Nome e tag), fornisci un nome per l'istanza, ad esempio
EFA-instance
. Il nome viene assegnato all'istanza come tag di risorsa (Name=
).EFA-instance
-
Nella sezione Application and OS Images (Immagini di applicazioni e sistema operativo), seleziona un'AMI per uno dei sistemi operativi supportati. Sono supportati solo Amazon Linux 2, Ubuntu 20.04 e Ubuntu 22.04.
-
Nella sezione Tipo di istanza seleziona
p3dn.24xlarge
,p4d.24xlarge
op5.48xlarge
. -
Nella sezione Key pair (Coppia di chiavi), seleziona la coppia di chiavi da utilizzare per l'istanza.
-
Nella sezione Network settings (Impostazioni di rete), scegli Edit (Modifica) e quindi esegui le operazioni qui descritte:
-
Per Subnet (Sottorete) seleziona la subnet in cui avviare l'istanza. Se non selezioni una sottorete, non puoi abilitare l'istanza per l'EFA.
-
Per Firewall (security groups) (Firewall [gruppi di sicurezza]), scegli Select existing security group (Seleziona gruppo di sicurezza esistente) e quindi seleziona il gruppo di sicurezza creato nella fase precedente.
-
Espandi la sezione Configurazione avanzata.
Come Interfaccia di rete 1, seleziona Indice della scheda di rete = 0, Indice dispositivo = 0 e Tipo di interfaccia = EFA con ENA.
(Facoltativo) Se utilizzi un'istanza multi-scheda, come
p4d.24xlarge
op5.48xlarge
, per ogni interfaccia di rete aggiuntiva richiesta scegli Aggiungi interfaccia di rete, seleziona l'indice successivo inutilizzato come Indice della scheda di rete e poi seleziona Indice dispositivo = 1 e Tipo di interfaccia = EFA con ENA o solo EFA.
-
-
Nella sezione Storage (Archiviazione), configura i volumi secondo necessità.
Nota
Devi effettuare un provisioning aggiuntivo di 10-20 GiB di spazio di archiviazione per Nvidia CUDA Toolkit. Se non effettui il provisioning di uno spazio di archiviazione sufficiente, riceverai un errore
insufficient disk space
durante il tentativo di installare i driver Nvidia e il toolkit CUDA. -
Nel pannello Summary (Riepilogo) a destra, scegli Launch instance (Avvia istanza).
Fase 3: installare driver GPU Nvidia, il kit di strumenti Nvidia CUDA e cuDNN
Fase 4: Installazione GDRCopy
GDRCopy Installa per migliorare le prestazioni di Libfabric. Per ulteriori informazioni suGDRCopy, consulta il GDRCopy repository
Fase 5: installazione del software EFA
Installa il kernel compatibile con EFA, i driver EFA, Libfabric, il aws-ofi-nccl plugin e lo stack Open MPI necessari per supportare EFA sulla tua istanza.
Per installare il software EFA
-
Connettersi all'istanza avviata. Per ulteriori informazioni, consulta Connessione a un'istanza Linux tramite SSH.
-
Scarica i file di installazione del software. I file di installazione del software sono riuniti in un file (
.tar.gz
) tarball compresso. Per scaricare l'ultima versione stabile, utilizzare il comando seguente.$
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.38.0.tar.gzÈ inoltre possibile ottenere l'ultima versione sostituendo il numero della versione con
latest
nel comando qui sopra. (Opzionale) Verifica l'autenticità e l'integrità del file tarball EFA (
.tar.gz
).È consigliabile eseguire questa operazione per verificare l'identità dell'autore del software e che il file non sia stato alterato o danneggiato dopo la pubblicazione. Se non desideri verificare il file tarball, ignora questo passaggio.
Nota
In alternativa, se preferisci verificare il file tarball utilizzando invece un checksum or, consulta. MD5 SHA256 Verifica del programma di installazione EFA utilizzando un checksum
-
Scarica la chiave pubblica GPG e importala nel tuo keyring.
$
wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.keyIl comando dovrebbe restituire un valore di chiave. Prendere nota del valore della chiave poiché sarà necessario nella fase successiva.
-
Verifica l'impronta digitale della chiave GPG. Esegui questo comando e specifica la chiave valore creata nella fase precedente.
$
gpg --fingerprintkey_value
Il comando dovrebbe restituire un'impronta digitale identica a
4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
. Se l'impronta digitale non corrisponde, non eseguire lo script di installazione EFA e contatta Supporto. -
Scarica il file di firma e verifica la firma del file tarball EFA.
$
wget https://efa-installer.amazonaws.com/aws-efa-installer-1.38.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.38.0.tar.gz.sigDi seguito viene mostrato l'output di esempio.
gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
Se il risultato include
Good signature
e se l'impronta digitale corrisponde a quella restituita nel passaggio precedente, procedi alla fase successiva. In caso contrario, non eseguire lo script di installazione EFA e contatta Supporto.
-
-
Estrarre i file dal file
.tar.gz
compresso e andare alla directory estratta.$
tar -xf aws-efa-installer-1.38.0.tar.gz && cd aws-efa-installer -
Eseguire lo script di installazione del software EFA.
Nota
A partire da EFA 1.30.0, per impostazione predefinita vengono installati sia Open MPI 4 che Open MPI 5. A meno che non sia necessario Open MPI 5, consigliamo di installare solo Open MPI 4. Il seguente comando installa solo Open MPI 4. Se si desidera installare sia Open MPI 4 che Open MPI 5, rimuovere
--mpi=openmpi4
.$
sudo ./efa_installer.sh -y --mpi=openmpi4Libfabric è installato nella directory.
/opt/amazon/efa
Il aws-ofi-nccl plugin è installato nella/opt/amazon/ofi-nccl
directory. Open MPI è installato nella/opt/amazon/openmpi
directory. -
Se il programma di installazione di EFA richiede il riavvio dell'istanza, eseguire questa operazione e riconnettersi all'istanza. In caso contrario, disconnettersi dall'istanza e quindi accedere di nuovo per completare l'installazione.
-
Verificare la corretta installazione dei componenti software EFA.
$
fi_info -p efa -t FI_EP_RDMIl comando deve restituire informazioni sulle interfacce EFA Libfabric. L'esempio seguente mostra l'output del comando.
-
p3dn.24xlarge
con interfaccia di rete singolaprovider: efa fabric: EFA-fe80::94:3dff:fe89:1b70 domain: efa_0-rdm version: 2.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
-
p4d.24xlarge
ep5.48xlarge
con più interfacce di reteprovider: efa fabric: EFA-fe80::c6e:8fff:fef6:e7ff domain: efa_0-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::c34:3eff:feb2:3c35 domain: efa_1-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::c0f:7bff:fe68:a775 domain: efa_2-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA provider: efa fabric: EFA-fe80::ca7:b0ff:fea6:5e99 domain: efa_3-rdm version: 111.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
-
Fase 6: installare NCCL
Installare NCCL. Per ulteriori informazioni su NCCL, consulta il repository NCCL
Per installare NCCL
-
Passa alla directory
/opt
.$
cd /opt -
Clonare il repository NCCL ufficiale sull'istanza e navigare nel repository clonato locale.
$
sudo git clone https://github.com/NVIDIA/nccl.git -b v2.23.4-1 && cd nccl -
Creare e installare NCCL e specificare la directory di installazione CUDA.
$
sudo make -j src.build CUDA_HOME=/usr/local/cuda
Fase 7: installare i test NCCL
Installare i test NCCL. I test NCCL consentono di confermare che NCCL sia installato correttamente e che funzioni come previsto. Per ulteriori informazioni sui test NCCL, consulta il repository nccl-tests
Per installare i test NCCL
-
Passare alla home directory.
$
cd $HOME -
Clonare il repository nccl-tests ufficiale sull'istanza e navigare nel repository clonato locale.
$
git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests -
Aggiungere la directory Libfabric alla variabile
LD_LIBRARY_PATH
.-
Amazon Linux 2
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib64
:$LD_LIBRARY_PATH -
Ubuntu
$
export LD_LIBRARY_PATH=/opt/amazon/efa/lib
:$LD_LIBRARY_PATH
-
-
Installare i test NCCL e specificare le directory di installazione MPI, NCCL e CUDA.
$
make MPI=1 MPI_HOME=/opt/amazon/openmpi
NCCL_HOME=/opt/nccl/build
CUDA_HOME=/usr/local/cuda
Fase 8: testare la configurazione EFA e NCCL
Eseguire un test per accertare che l'istanza temporanea sia configurata adeguatamente per EFA e NCCL.
Per testare la configurazione EFA ed NCCL
-
Creare un file host che specifichi gli host su cui eseguire i test. Il comando seguente crea un file di host denominato
my-hosts
che include un riferimento all'istanza stessa. -
Eseguite il test e specificate il file host (
--hostfile
) e il numero di file GPUs da utilizzare (-n
). Il comando seguente esegue ilall_reduce_perf
test su 8 GPUs sull'istanza stessa e specifica le seguenti variabili di ambiente.-
FI_EFA_USE_DEVICE_RDMA=1
: (solop4d.24xlarge
) utilizza la funzionalità RDMA del dispositivo per il trasferimento unilaterale e bilaterale. -
NCCL_DEBUG=INFO
: consente un output di debug dettagliato. È possibile inoltre specificareVERSION
per stampare solo la versione NCCL all'inizio del test oWARN
per ricevere solo i messaggi di errore.
Per ulteriori informazioni sugli argomenti di test NCCL, consulta README Test NCCL
nel repository ufficiale nccl-tests. -
p3dn.24xlarge
$
/opt/amazon/openmpi/bin/mpirun \ -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \ -x NCCL_DEBUG=INFO \ --hostfile my-hosts -n 8 -N 8 \ --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \ $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100 -
p4d.24xlarge
ep5.48xlarge
$
/opt/amazon/openmpi/bin/mpirun \ -x FI_EFA_USE_DEVICE_RDMA=1 \ -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \ -x NCCL_DEBUG=INFO \ --hostfile my-hosts -n 8 -N 8 \ --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \ $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
-
-
È possibile confermare che EFA sia attivo come provider sottostante per NCCL quando viene stampato il log
NCCL_DEBUG
.ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Selected Provider is efa*
Le seguenti informazioni aggiuntive vengono visualizzate quando si utilizza un'istanza
p4d.24xlarge
.ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Running on P4d platform, Setting NCCL_TOPO_FILE environment variable to /home/ec2-user/install/plugin/share/aws-ofi-nccl/xml/p4d-24xl-topo.xml
Fase 9: installare applicazioni di machine learning
Installa le applicazioni di machine learning sull'istanza temporanea. La procedura di installazione varia in base alla specifica applicazione di machine learning. Per ulteriori informazioni sull'installazione di software sull'istanza Linux, consulta Gestione del software nell'istanza Amazon Linux 2.
Nota
Per le istruzioni di installazione, consulta la documentazione dell'applicazione di machine learning.
Fase 10: creare un EFA e un'AMI abilitata NCCL
Dopo aver installato i componenti software necessari, procedi con la creazione di un'AMI che puoi riutilizzare per avviare le istanze abilitate per EFA.
Per creare un'AMI dall'istanza temporanea
Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/
. -
Nel pannello di navigazione, seleziona Instances (Istanze).
-
Seleziona l'istanza temporanea creata e seleziona Actions (Operazioni), Image (Immagine), Create Image (Crea immagine).
-
Per Create image (Crea immagine), effettua le seguenti operazioni:
-
In Image name (Nome immagine), immettere un nome descrittivo per l'AMI.
-
(Facoltativo) In Image description (Descrizione immagine), inserire una breve descrizione dell'AMI.
-
Scegliere Create Image (Crea immagine).
-
-
Nel pannello di navigazione, scegli AMIs.
-
Individuare nell'elenco l'AMI creata. Prima di procedere con la fase seguente, attendere che lo stato passi da
pending
aavailable
.
Fase 11: terminare l'istanza temporanea
A questo punto l'istanza temporanea avviata non è più necessaria. È possibile terminare l'istanza per evitare di incorrere in costi aggiuntivi.
Per terminare l'istanza temporanea
Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/
. -
Nel pannello di navigazione, seleziona Instances (Istanze).
-
Selezionare l'istanza temporanea creata, quindi scegliere Actions (Operazioni), Instance state (Stato istanza), Terminate instance (Termina istanza).
-
Quando viene richiesta la conferma, seleziona Termina.
Fase 12: avviare le istanze EFA e abilitate NCCL in un gruppo di collocazione cluster
Avvia le istanze abilitate per EFA e NCCL in un gruppo di collocazione cluster tramite l'AMI abilitata per EFA e il gruppo di sicurezza abilitato per EFA creati in precedenza.
Nota
-
Avviare le istanze abilitate per l'EFA in un gruppo di collocazione cluster non è un requisito in assoluto. È tuttavia consigliabile eseguire le istanze abilitate per EFA in un gruppo di collocazione cluster perché le istanze vengono così avviate in gruppo a bassa latenza in un'unica zona di disponibilità.
-
Per garantire che la capacità sia disponibile durante il dimensionamento delle istanze del cluster, è possibile creare una prenotazione della capacità per il gruppo di collocazione cluster. Per ulteriori informazioni, consulta Crea prenotazioni della capacità in gruppi di posizionamento cluster.
Fase 13: abilitare SSH senza password
Per consentire l'esecuzione delle applicazioni in tutte le istanze del cluster, è necessario abilitare l'accesso SSH senza password dal nodo leader ai nodi membro. Il nodo principale è l'istanza da cui vengono eseguite le applicazioni. Le restanti istanze del cluster sono i nodi membro.
Per abilitare SSH senza password tra le istanze del cluster
-
Selezionare un'istanza nel cluster come nodo principale e connettersi a essa.
-
Disabilita
strictHostKeyChecking
e abilitaForwardAgent
sul nodo principale. Aprire il file~/.ssh/config
utilizzando qualsiasi editor di testo e aggiungere il seguente script.Host * ForwardAgent yes Host * StrictHostKeyChecking no
-
Generare una coppia di chiavi RSA.
$
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsaLa coppia di chiavi viene creata nella directory
$HOME/.ssh/
. -
Modifica le autorizzazioni della chiave privata sul nodo principale.
$
chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config -
Aprire
~/.ssh/id_rsa.pub
utilizzando l'editor di testo preferito e copiare la chiave. -
Per ogni nodo membro nel cluster, procedere nel modo seguente:
-
Collegarsi all'istanza.
-
Aprire
~/.ssh/authorized_keys
utilizzando qualsiasi editor di testo e aggiungere la chiave pubblica copiata in precedenza.
-
-
Per verificare che SSH senza password funzioni come previsto, connettersi al nodo leader ed eseguire il seguente comando.
$
sshmember_node_private_ip
La connessione al nodo membro non dovrebbe richiedere una chiave o una password.