Les posteurs les plus actifs de la semaine
clemm
 
Nik
 
Florent Aubry
 


Choix d’une machine performante

Aller en bas

Choix d’une machine performante

Message par thomasda le Lun 3 Sep 2018 - 20:18

Bonjour,

Je compte faire des analyses statistiques avec r nécessitant un grand nombre de données (plusieurs Go).
Quel type de poste de travail assez puissant et rapide dois je commander pour mes traitements de données. PC ou Mac? Processeur (i7, i9, xeon)? Ram (32 ou 64)?
Je privilégie, si possible des ordi portables.

Que me conseilleriez vous pour que ça tourne bien?

Merci.

thomasda

Nombre de messages : 4
Date d'inscription : 03/09/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par droopy le Mar 4 Sep 2018 - 7:48

Bonjour,

Si tu sais dès le départ que tu vas devoir traiter des gros jeux de données je privilégierais la RAM au processeur si tu dois faire un choix économique.

Après mac ou pc ... aucune idée.

cdlt
avatar
droopy

Nombre de messages : 1106
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par thomasda le Mar 4 Sep 2018 - 21:46

Ok je pense que je vais rester sur pc avec 32go de ram.
Par contre je veux raccourcir les temps de calculs qui peuvent parfois atteindre plus d’une heure sur un pauvre i5. Que me conseillez vous i7, xeon?

thomasda

Nombre de messages : 4
Date d'inscription : 03/09/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par zezima le Mer 5 Sep 2018 - 7:26

Pour raccourcir les temps de calcul, tu peux utiliser plusieurs coeurs sur ta machine en faisant de la parallélisation (attention n'utilise pas tous tes coeurs).
I5 ou I7, je ne sais pas si cela augmentera ton nombre de coeur mais si oui et si tu veux faire de la parallélisation alors ça peut être une bonne idée pour lancer tes programmes plus rapidement.

Tu as également des fonction qui seront plus rapides à lancer que certaines boucles.
http://statistiques.forumpro.fr/t7976-les-boucles-sont-deconseillees-dans-r
avatar
zezima

Nombre de messages : 807
Date d'inscription : 26/02/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par thomasda le Mer 5 Sep 2018 - 17:28

bounce
zezima a écrit:...mais si oui et si tu veux faire de la parallélisation alors ça peut être une bonne idée pour lancer tes programmes plus rapidement...

Intéressant, comment on fait ça? bounce

thomasda

Nombre de messages : 4
Date d'inscription : 03/09/2018

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par Nik le Jeu 6 Sep 2018 - 6:34

Bonjour,

R intègre depuis plusieurs versions le package parallel dans sa version de base. Un petit tour via google sur ce package devrait te donner de très nombreux docs sur le comment faire.
R utilise effectivement 1 seul processeur ou cœur donc R est moins performant sur un multicœur que sur un simple cœur du fait qu'en multicœur la fréquence de chaque cœur est plus faible. En parallélisant tu peux utiliser tous les cœurs de ton processeurs.

Ceci étant dit, si ton code n'est pas bien optimisé tu passeras quand même bcp de temps de calcul si ton jeu de données fait plusieurs Go. Comme le souligne Droopy la RAM est essentiel car R est très gourmand là dessus.

Nik

Nombre de messages : 1582
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par zezima le Jeu 6 Sep 2018 - 8:17

édité


Dernière édition par zezima le Jeu 6 Sep 2018 - 14:35, édité 4 fois
avatar
zezima

Nombre de messages : 807
Date d'inscription : 26/02/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par droopy le Jeu 6 Sep 2018 - 9:17

La fonction apply est pratique a écrire parce qu'elle permet de travailler à la fois sur les lignes et sur les colonnes d'un objet. Dans le cas d'un data.frame et d'un calcul en colonne, elle sera plus bien plus lente que les autres fonctions de la famille lapply. Une boucle bien programmée sera bien plus efficace que apply notamment si elle est encapsulée dans une fonction. Pour une matrice ça sera relativement équivalent. Tout dépend de l'objet initial (data.frame, matrix) et des manipulations que l'on en fait. Avec les dernières versions de R et la compilation Just In Time (JIT), pour appliquer une fonction aux colonnes d'un data.frame une boucle encapsulée sera plus rapide qu'apply et les performances de la boucle seront proches voir meilleure que les lapply et sapply. Ceci est évoqué  dans le lien cité par zezima. Par contre pour qu'une boucle soit efficace, il faut qu'elle soit programmée le plus correctement possible, en évitant par exemple de répéter des opérations dans la boucle qui pourrait être faite en dehors ou qui n'ont pas besoin d'être refaites à chaque itération.

La fonction la plus efficace de la famille des apply est en général vapply.

Après tout dépend du type d'opérations que tu vas faire. Si tes calculs vont faire appel à ces calculs matriciels, une solution sans effort pour améliorer son temps de calcul c'est d'installer Microsoft R Open plutôt que la version classique de R. Installer avec la librairie MKL les gains de temps sont non négligeables parce que les calculs matriciels sont réalisés en parallèle sans que tu n'es quoi que ce soit à programmer.

Après pour la parallélisation il vaut mieux être sous un autre OS que Windows. Sous R les solutions sont limitées avec Windows alors qu'elles sont plus grandes sous macOs et linux.
Sous windows tu ne pourras faire que des clusters de types SOCK ou PSOCK, c'est à dire des clusters à mémoire non partagée (contrairement au type FORK dispo sous mac et linux).
Ça veut dire quoi ? Ca veut dire que si tu dois répéter des opérations sur un objet volumineux, cet objet va devoir être dupliquer pour que chaque coeur travail dessus. La mémoire utilisée sera donc elle aussi multipliée ce qui n'est pas le cas avec des clusters de type FORK.

Il y a pas mal de tuto pour faire de la parallélisation, avec windows j'utilise les librairies doSNOW et foreach mais parallel fonctionne très bien aussi.

cdlt


Dernière édition par droopy le Jeu 6 Sep 2018 - 18:58, édité 2 fois
avatar
droopy

Nombre de messages : 1106
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par zezima le Jeu 6 Sep 2018 - 14:32

D'accord, au temps pour moi Droopy, on m'a toujours dit là où je travaille que les boucles for() étaient à bannir mais je n'ai jamais réellement vérifié que ça fonctionnait bien.

Je vais supprimer mon msg pour ne pas induire en erreur.
avatar
zezima

Nombre de messages : 807
Date d'inscription : 26/02/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par droopy le Jeu 6 Sep 2018 - 18:45

Demande a tes collègues de calculer la moyenne de chaque colonne d'un data.frame de 1000*1000 et dis leur que tu y arrives plus rapidement avec une boucle Very Happy

J'ai édité aussi.
avatar
droopy

Nombre de messages : 1106
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par Nik le Ven 7 Sep 2018 - 6:59

Demande a tes collègues de calculer la moyenne de chaque colonne d'un data.frame de 1000*1000 et dis leur que tu y arrives plus rapidement avec une boucle

Non il va perdre s'ils passent par colMeans... Cool Very Happy

Nik

Nombre de messages : 1582
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par droopy le Ven 7 Sep 2018 - 7:41

Et non pas sur un data.frame ... parce que ce qui prend le plus de temps a un colMeans sur un data.frame c'est le passage du data.frame en matrice, matrice sur laquelle le code C sera effectué. C'est bien pour ça que j'ai dit sur un data.frame et non sur une matrice, eheheh ...
Code:
tab <- as.data.frame(matrix(rnorm(1e6), 1e3))
tmp <- tempfile()
Rprof(tmp)
mns <- colMeans(tab)
Rprof()
summaryRprof(tmp)
$`by.self`
                       self.time self.pct total.time total.pct
"as.matrix.data.frame"      0.02      100       0.02       100

$by.total
                       total.time total.pct self.time self.pct
"as.matrix.data.frame"       0.02       100      0.02      100
"as.matrix"                  0.02       100      0.00        0
"colMeans"                   0.02       100      0.00        0

$sample.interval
[1] 0.02

$sampling.time
[1] 0.02
cdlt
avatar
droopy

Nombre de messages : 1106
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par Nik le Ven 7 Sep 2018 - 8:19

c pour ça que je ds que les data.frame c'est avant tout des list et donc c de la merde Very Happy

Nik

Nombre de messages : 1582
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par droopy le Ven 7 Sep 2018 - 9:42

c'est parce que tu ne sais pas t'en servir Very Happy
ton affirmation est vrai et pas vrai en même temps parce que si les data.frame sont une classe particulières de list, leur gestion de la mémoire est différente ce qui est ... troublant voir ch....
mais la on rentre dans des processus d'optimisation très fins, mais il semblerait qu'il faille privilégier une liste à un data.frame que pour gagner du temps de calcul.
Voir ce très bon site pour prendre de bonnes habitudes pour optimiser son utilisation de R (voir la partie "Modification d’éléments dans un data frame
")
https://stt4230.rbind.io/amelioration_code/optim_temps_r/#package-profvis

cdlt
avatar
droopy

Nombre de messages : 1106
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par Nik le Jeu 13 Sep 2018 - 7:25

c'est parce que tu ne sais pas t'en servir

tsss...même pas je réponds à cette bassesse. Cool

Nik

Nombre de messages : 1582
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par droopy le Jeu 13 Sep 2018 - 9:06

Nik a écrit:tsss...même pas je réponds à cette bassesse. Cool
Ah bon ? Ne viens-tu pas de le faire :-D
avatar
droopy

Nombre de messages : 1106
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Choix d’une machine performante

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum