Calcul efficace en temps et en mémoire : problèmes et solutions

Partager

L’un des défis les plus courants rencontrés par les projets d’apprentissage machine ou de science des données est le temps de calcul et la mémoire nécessaires à l’utilisation d’une grande quantité de données. Des données volumineuses nécessitent d’importantes ressources de calcul pour économiser du temps et de la mémoire.

On a travaillé sur un projet lié au suivi des poissons. Une balise, un appareil électronique implanté dans le poisson, émet des impulsions ou des signaux sous forme d’ondes sonores. Ces signaux sont enregistrés sous forme de pings dans le récepteur. Ces pings sont analysés pour identifier la balise à l’origine de l’impulsion. L’unicité des balises réside dans l’intervalle de temps entre les impulsions transmises. Ces pings sont représentés sous forme de données de séries temporelles acoustiques. Pour identifier les balises grâce à l’apprentissage machine, nous générons des images à partir des pings et effectuons une segmentation d’images à l’aide du réseau neuronal UNet. Examinons les défis de temps et de mémoire rencontrés tout au long du projet et comment ils ont été résolus.

Défis liés au temps d’entraînement

L’ensemble de données sur lequel nous avons travaillé est volumineux, avec près de 21,5 millions de pings. Nous avons utilisé un sous-ensemble de ces données pour générer des images et entraîner un réseau neuronal. L’entraînement du réseau neuronal avec près de 85 000 images sur un processeur a pris près d’une heure par époque. Lorsque le même nombre d’images a été utilisé pour entraîner le réseau neuronal sur une machine GPU, la vitesse d’entraînement a été presque décuplée. Ainsi, l’utilisation des GPU pour entraîner le réseau neuronal a permis d’économiser du temps de calcul. Bien que le processeur puisse entraîner un modèle d’apprentissage profond, le GPU accélère l’entraînement du modèle. Par conséquent, le GPU est un meilleur choix pour entraîner efficacement le modèle d’apprentissage profond avec de très grands ensembles de données.

Problèmes liés à la mémoire

En plus du temps d’entraînement, un autre problème rencontré avec des ensembles de données volumineux est la mémoire. Le chargement de la trame de données contenant 21,5 millions d’enregistrements et la génération des images ont occupé une quantité importante de mémoire, et même une mémoire de 500 Go n’était pas suffisante. Pour résoudre ce problème, le chargement de la trame de données par blocs et le traitement de chaque bloc chargé pour créer des images utilisent comparativement moins de mémoire. Pour charger la trame de données par blocs, un paramètre appelé « chunksize » peut être utilisé lors de la lecture de la trame de données enregistrée avec pandas. Par exemple :

data=pd.read_csv(‘data.csv’,chunksize=100)

De même, un autre problème de mémoire pouvant survenir lors de l’utilisation d’un jeu de données image est le stockage des images générées. Le stockage des images générées dans une table de base de données et l’effacement de la mémoire vive peuvent résoudre ce problème. Le concept de PyTables [1] permet de stocker les images dans un fichier de base de données HDF5. Il facilite la gestion des ensembles de données hiérarchiques et est conçu pour traiter efficacement et facilement des volumes de données extrêmement importants. Il optimise les ressources mémoire et disque afin que les données prennent beaucoup moins d’espace. Sa fonction de vidage permet de libérer de précieuses ressources mémoire pour les utiliser à d’autres fins.

Un autre point important à garder à l’esprit lors de l’entraînement du modèle. Au lieu de charger toutes les images en mémoire simultanément et d’entraîner le réseau neuronal, un sous-ensemble d’images peut être chargé en mémoire à partir du fichier HDF5 enregistré à l’aide de générateurs de données. Cela aide aussi à résoudre les problèmes de mémoire.

Globalement, la mise en œuvre de l’entraînement et des tests du modèle sur GPU a permis de gagner beaucoup de temps dans la recherche des balises de poissons. De plus, le concept de PyTables et de générateurs de données a permis de résoudre le problème de mémoire lié au stockage des images en mémoire.

Références :

[1]. Documentation PyTables. https://www.pytables.org/usersguide/index.html