Addestramento di reti superficiali su CPU e GPU
Parallel Computing Toolbox
Suggerimento
Questo argomento offre una descrizione delle reti superficiali. Per il Deep Learning, vedere Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.
L’addestramento delle reti neurali e la simulazione comportano molti calcoli in parallelo. CPU multicore, processori grafici (GPU) e cluster di computer con più CPU e GPU sono tutti strumenti che possono trarre vantaggio dai calcoli in parallelo.
Insieme, Deep Learning Toolbox™ e Parallel Computing Toolbox™ permettono ai diversi core delle CPU e alle GPU di un singolo computer di velocizzare l’addestramento e la simulazione di grandi problemi.
Di seguito è riportata una sessione di addestramento e simulazione single thread standard. (Sebbene i vantaggi del parallelismo siano più evidenti per i grandi problemi, questo esempio si basa su un set di dati piccolo che viene fornito con Deep Learning Toolbox.)
[x, t] = bodyfat_dataset; net1 = feedforwardnet(10); net2 = train(net1, x, t); y = net2(x);
Worker CPU paralleli
I processori Intel® sono forniti con un massimo di otto core. Le workstation con due processori possono avere fino a 16 core e in futuro sarà possibile avere un numero di core ancora maggiore. L’uso di più core CPU in parallelo può accelerare drasticamente i calcoli.
Esegui l’avvio oppure ottieni il pool parallelo attuale e visualizza il numero di worker al suo interno.
pool = gcp; pool.NumWorkers
Se non si dispone di una licenza per Parallel Computing Toolbox, si verifica un errore.
Quando si apre un pool parallelo, imposta l’opzione 'useParallel'
della funzione train
su 'yes'
per specificare l’addestramento e la simulazione da eseguire sul pool.
net2 = train(net1,x,t,'useParallel','yes'); y = net2(x,'useParallel','yes');
Calcolo su GPU
Le GPU possono avere migliaia di core su una singola scheda e sono altamente efficienti con gli algoritmi paralleli come le reti neurali.
Utilizza la funzione gpuDeviceCount
per verificare se una scheda GPU supportata è disponibile all’interno del sistema. Utilizza la funzione gpuDevice
per vedere le informazioni della GPU attualmente selezionata o per selezionarne una diversa.
gpuDeviceCount
gpuDevice
gpuDevice(2) % Select device 2, if available
Se non si dispone di una licenza per Parallel Computing Toolbox, compare un errore “Funzione o variabile non definita”.
Una volta selezionato il dispositivo GPU, imposta l’opzione 'useGPU'
della funzione train
o sim
su 'yes'
per eseguire l’addestramento e la simulazione sul dispositivo.
net2 = train(net1,x,t,'useGPU','yes'); y = net2(x,'useGPU','yes');
Calcolo su più GPU/CPU
È possibile utilizzare più GPU per ottenere livelli maggiori di parallelismo.
Una volta aperto il pool parallelo, imposta sia 'useParallel'
che 'useGPU'
su 'yes'
per sfruttare tutti i core GPU e CPU su un singolo computer. Ogni worker associato a una GPU univoca utilizza quella GPU. I restanti worker eseguono i calcoli sul proprio core CPU.
net2 = train(net1,x,t,'useParallel','yes','useGPU','yes'); y = net2(x,'useParallel','yes','useGPU','yes');
Per alcuni problemi, l’uso combinato di GPU e CPU può portare alla massima velocità di calcolo. Per altri problemi, le CPU potrebbero essere più lente delle GPU e pertanto risulta più veloce utilizzare solo le GPU. Imposta 'useGPU'
su 'only'
per limitare il calcolo parallelo ai worker associati a GPU univoche.
net2 = train(net1,x,t,'useParallel','yes','useGPU','only'); y = net2(x,'useParallel','yes','useGPU','only');
Cluster Computing con MATLAB Parallel Server
MATLAB® Parallel Server™ permette di sfruttare tutte le CPU e le GPU in un cluster di computer collegati in rete. Per sfruttare un cluster, apri un pool parallelo con un profilo cluster. Utilizza il menu Parallel nell’area Environment (Ambiente) della scheda Home di MATLAB per gestire e selezionare i profili.
Una volta aperto un pool parallelo, addestra la rete chiamando la funzione train
con le opzioni 'useParallel'
e 'useGPU'
.
net2 = train(net1,x,t,'useParallel','yes'); y = net2(x,'useParallel','yes'); net2 = train(net1,x,t,'useParallel','yes','useGPU','only'); y = net2(x,'useParallel','yes','useGPU','only');
Bilanciamento del carico, grandi problemi e oltre
Per ulteriori informazioni sul calcolo parallelo con Deep Learning Toolbox, vedere Shallow Neural Networks with Parallel and GPU Computing, che presenta altri argomenti, come la distribuzione manuale dei set di dati tra i worker delle CPU e delle GPU per sfruttare al meglio le differenze di velocità e memoria delle macchine.
La distribuzione manuale dei dati consente anche di caricare in sequenza i dati dei worker, di modo che i set di dati siano limitati in termini di dimensioni solo dalla RAM totale di un cluster anziché dalla RAM di un singolo computer. Questo permette di applicare le reti neurali a problemi molto grandi.