Contexte
43000+ séries temporelles à traiter, je fais ça en 12 lots de 3600+ séries, 2 modèles par série (i.e. 2 max de vraisemblance) le sujet n'étant pas ce que je fais mais le volume que ça représente.
Parallélisation à coup de mclapply
24 proc (double xeon) 64 gig de RAM, debian 10.
Problème
Je commence bien avec mes 24 proc qui marnent comme des fous. Et puis quelques heures après y'en a plus qu'un qui bosse.
Pistes
1) je me suis dit : équirépartition des séries sur les proc mais toutes les séries ne prennent pas le même temps => mc.preschedule=FALSE permet de ne pas faire cette équirépartition a priori (j'ai peut être mal compris) et de continuer à répartir les tâches sur tous les fils. Mise en oeuvre : c'est pas ça, au bout de quelques heures toujours qu'un seul fil qui tourne.
2) je regarde l'utilisation de la mémoire. J'ai l'impression que beaucoup de RAM est utilisée genre plus de 50GO sur les 64GO, je me dis que c'est peut être ça le pb et un peu de recherche sur internet me laisse supposer que cela pourrait être le cas => je modifie la fonction appelée par mclapply en la finissant par un rm(list=ls()) et gc(). Mise en oeuvre : c'est pas ça, au bout de quelques heures j'ai 3500 séries de traitées mais plus qu'un fil actif et il va mettre des heures à traiter les 100+ qui restent ... À toutes fins utiles (top) :
Code : Tout sélectionner
%Cpu(s): 4,2 us, 0,0 sy, 0,0 ni, 95,7 id, 0,1 wa, 0,0 hi, 0,0 si, 0,0 st
MiB Mem : 64350,6 total, 55698,8 free, 2036,5 used, 6615,3 buff/cache
MiB Swap: 0,0 total, 0,0 free, 0,0 used. 61763,4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7953 20 0 1460956 1,1g 8964 R 100,0 1,8 342:28.79 R
J'aime pas trop VIRT=1460956, 1.5TO ? Ça me semble pas cool.
Toute aide est la bienvenue.
Merci d'avance
@+
DS