Tout savoir sur le Deep Learning distribué
Dans cet nouvel article, je vous explique l’importance du deep learning distribué, les différentes approches utilisées et enfin quelques outils disponibles sous python pour faire le deep learning distribué.
Pourquoi le deep learning distribué
Nous vivons à l’ère des données. Elles évoluent de façon exponentielle. La disponibilité des données a rendu performants et plus utiles les algorithmes de deep Learning. Cependant, l’entrainement des modèles de deep learning a besoin du temps pour atteindre une très bonne performance en raison de la quantité énorme des données. La façon évidente de réduire ce temps consiste à lire les données à partir de plusieurs disques à la fois. En effet, le deep Learning distribué consiste à entrainer en parallèle les modèles sur plusieurs machines ou clusters. Lorsque nous faisons face à une quantité énorme de données, le parallélisme lors de l’entrainement permet généralement de gagner en performance et précision. Pour faire cela, Il existe principalement trois approches plus utilisées. En effet, nous avons le parallélisme des données, des modèles et hybride.
Le parallélisme des données
Le parallélisme des données est une technique qui consiste à partitionner les données d’entrainement sur plusieurs clusters ou machines. Le nombre de partitions est égal au nombre de machines ou nœuds de calcul. En effet, Chaque worker ou machine possédant une partition indépendante des données fait le calcul des gradients sur sa propre partition. Les nœuds synchronisent leurs états de paramètres jusqu’à convergence de l’algorithme. Tant que la synchronisation ne prend pas trop de temps et que nous constatons une amélioration des résultats par rapport à nœud unique, nous avons atteint notre objectif.
Le parallélisme de modèle
Comparé au parallélisme de données, dans le parallélisme des modèles, au lieu de partitionner les données, nous essayons de partitionner le modèle d’apprentissage automatique ou l’algorithme en attribuant les partitions de model aux travailleurs. Les travailleurs vont exécuter simultanément des partitions différentes du model sur le même data set. Elle est plus complexe à mettre en œuvre que l’approche du parallelisme des données. Mais, cela peut réduire les besoins de communication, car les travailleurs n’ont qu’à synchroniser les paramètres partagés.
Approche hybride
La technique de cette approche consiste à utiliser à la fois le parallélisme des données et de modèle. En effet, une partie des nœuds est utilisée pour le partitionnement des données et le reste pour le partitionnement du model.
Les outils disponibles sous python pour faire le deep Learning distribué
Dans cette partie, je vais vous expliquer les différents outils disponibles sur python, plus précisément sur tensorflow pour faire le deep learning distribué. Effet, on parlera de serveur de paramètre et Horovod qui sont deux solutions du deep learning distribué disponibles sur Tensorflow.
Serveur de paramètre
Le serveur de paramètre est utilisé pour collecter les gradients calculés par les processus ou les travailleurs, puis distribut les gradients mis à jour à tous les travailleurs. La figure ci-dessous montre l’architecture d’un serveur de paramètre.
Horovod
Horovod est un framework open source pour l’apprentissage en profondeur distribué. Il est disponible pour une utilisation avec TensorFlow et plusieurs autres frameworks d’apprentissage en profondeur. Horovod améliore la vitesse, l’échelle et l’utilisation des ressources de l’entrainement en Deep Learning.
L’architecture de cluster d’Horovod diffère de l’architecture du serveur de paramètres. Puisque Horovod utilise Ring-AllReduce, où la quantité de données envoyées est presque proportionnelle au nombre de nœuds de cluster, ce qui peut être plus efficace lors de l’entraînement avec un cluster où chaque nœud a plusieurs GPU et donc plusieurs processus de travail.
De plus, alors que le processus de mise à jour du serveur de paramètres décrit ci-dessus est asynchrone, dans Horovod, les mises à jour sont synchrones. Une fois que tous les processus ont terminé leurs calculs pour le lot actuel, les gradients calculés par chaque processus circulent autour de l’anneau jusqu’à ce que chaque processus ait un ensemble complet de gradients pour le lot de tous les processus.
Horovod utilise l’interface MPI (Message Passing Interface) qui permet la gestion de la communication entre les nœuds d’un cluster. Il utilise la bibliothèque NCCL de NVIDIA pour la communication au niveau du GPU. Vous devez donc avoir NVIDIA installé pour utiliser Horovod.
Ce framework a un avantage majeur. En effet, le framework Horovod permet de passer des difficultés de configuration du cluster Ring-AllReduce et fonctionne en plus avec plusieurs d’autres frameworks. L’image ci-dessous montre le fonctionnment de Horovod.