Contenu principal

Entraîner des réseaux peu profonds sur des CPU et des GPU

Parallel Computing Toolbox

Conseil

Cette rubrique décrit les réseaux peu profonds. Pour le Deep Learning, veuillez consulter Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.

L’apprentissage et la simulation des réseaux de neurones nécessitent de nombreux calculs parallèles. Les CPU multicœurs, les unités de traitement graphique (GPU) et les clusters d’ordinateurs avec plusieurs CPU et GPU peuvent tous tirer parti du calcul parallèle.

Ensemble, Deep Learning Toolbox™ et Parallel Computing Toolbox™ permettent aux multiples cœurs des CPU et aux GPU d’un seul ordinateur d’accélérer l’apprentissage et la simulation de problèmes avec des données volumineuses.

Vous trouverez ci-dessous une session standard d’apprentissage et de simulation utilisant un seul thread. (Alors que les avantages du parallélisme sont particulièrement visibles pour les problèmes avec beaucoup de données, cet exemple utilise un petit jeu de données fourni avec Deep Learning Toolbox.)

[x, t] = bodyfat_dataset;
net1 = feedforwardnet(10);
net2 = train(net1, x, t);
y = net2(x);

Workers parallèles du CPU

Les processeurs Intel® sont fournis avec huit cœurs. Les stations de travail avec deux processeurs peuvent avoir jusqu'à 16 cœurs et il pourra y en avoir encore plus à l'avenir. L’utilisation de plusieurs cœurs de CPU en parallèle peut accélérer considérablement les calculs.

Démarrez ou obtenez le pool parallèle actuel et affichez le nombre de workers dans le pool.

pool = gcp;
pool.NumWorkers

Une erreur se produit si vous n’avez pas de licence pour Parallel Computing Toolbox.

Lors de l’ouverture d’un pool parallèle, définissez l’option 'useParallel' de la fonction train sur 'yes' afin de spécifier que l’apprentissage et la simulation doivent être réalisés sur le pool.

net2 = train(net1,x,t,'useParallel','yes');
y = net2(x,'useParallel','yes');

Calculs sur GPU

Les GPU peuvent avoir des milliers de cœurs sur une seule carte et sont très efficaces sur les algorithmes parallèles tels que les réseaux de neurones.

Utilisez gpuDeviceCount pour vérifier si une carte GPU supportée est disponible dans votre système. Utilisez la fonction gpuDevice pour vérifier les informations du GPU sélectionné ou pour sélectionner un autre GPU.

gpuDeviceCount
gpuDevice
gpuDevice(2) % Select device 2, if available

Une erreur « Undefined function or variable » (Fonction ou variable indéfinie) apparaît si vous n’avez pas de licence pour Parallel Computing Toolbox.

Lorsque vous avez sélectionné le dispositif du GPU, définissez l’option 'useGPU' de la fonction train ou sim sur 'yes' pour l'utiliser lors l’apprentissage et la simulation.

net2 = train(net1,x,t,'useGPU','yes');
y = net2(x,'useGPU','yes');

Calcul avec plusieurs GPU/CPU

Vous pouvez utiliser plusieurs GPU pour des niveaux élevés de parallélisme.

Après avoir ouvert un pool parallèle, définissez 'useParallel' et 'useGPU' sur 'yes' pour exploiter tous les cœurs des CPU et GPU sur un seul ordinateur. Chaque worker associé à un GPU unique utilise ce GPU. Les autres workers réalisent les calculs sur leur cœur de CPU.

net2 = train(net1,x,t,'useParallel','yes','useGPU','yes');
y = net2(x,'useParallel','yes','useGPU','yes');

Pour certains problèmes, l’utilisation de GPU et de CPU ensemble peut offrir la plus grande vitesse de calcul. Pour d’autres problèmes, les CPU risquent de ne pas tenir le rythme des GPU. Il est donc plus efficace de n’utiliser que les GPU. Définissez 'useGPU' sur 'only' pour restreindre le calcul parallèle aux workers avec des GPU uniques.

net2 = train(net1,x,t,'useParallel','yes','useGPU','only');
y = net2(x,'useParallel','yes','useGPU','only');

Calcul de clusters avec MATLAB Parallel Server

MATLAB® Parallel Server™ permet d’exploiter tous les CPU et GPU sur un cluster d’ordinateurs du réseau. Pour tirer parti d’un cluster, ouvrez un pool parallèle avec un profil de cluster. Utilisez le menu Parallel de la zone Environment de l’onglet MATLAB Home pour gérer et sélectionner les profils.

Après avoir ouvert un pool parallèle, entraînez le réseau en appelant train avec les options 'useParallel' et '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');

Équilibrage de charge, problèmes avec des données volumineuses et bien plus

Pour plus d’informations sur le calcul parallèle avec Deep Learning Toolbox, voir Shallow Neural Networks with Parallel and GPU Computing, qui présente d’autres thèmes, notamment comment répartir manuellement des jeux de données entre les workers de CPU et de GPU afin d’exploiter au mieux les différences de mémoire et de vitesse des machines.

La répartition manuelle des données permet également un chargement séquentiel des données des workers si bien que la taille des jeux de données n’est limitée que par la RAM totale d’un cluster plutôt que par la RAM d’un seul ordinateur. Cela permet d'utiliser les réseaux de neurones sur des problèmes avec un très gros volume de données.