problème de mémoire "cannot allocate vector of size n Mb"

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Laure Trudel
Messages : 24
Enregistré le : 26 Mar 2013, 11:02

problème de mémoire "cannot allocate vector of size n Mb"

Messagepar Laure Trudel » 01 Mar 2019, 23:02

Bonjour,

Une question récurrente le problème de mémoire !

J'ai un rasterStack assez gros pour lequel j'aimerais calculer une moyenne sur l'ensemble des couches.

class : RasterStack
dimensions : 720, 1440, 1036800, 1464 (nrow, ncol, ncell, nlayers)
resolution : 0.25, 0.25 (x, y)
extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0

Quand je fais tourner mon code j'obtiens l'erreur suivante
> sst_mean <- calc(sst.all.a.tot, mean)
Error: cannot allocate vector of size 20.4 Gb

J'ai un ordinateur 34 bits, j'ai configuré R pour avoir de la RAM mais c'est l'exploitation de gros objets qui posent soucis je pense
memory.limit()
[1] 1e+10

j'obtiens toujours cette erreur. Une idée ?
Merci

Logez Maxime
Messages : 2897
Enregistré le : 26 Sep 2006, 11:35

Re: problème de mémoire "cannot allocate vector of size n Mb"

Messagepar Logez Maxime » 04 Mar 2019, 08:56

Bonjour,

Le message est malheureusement assez clair, il te faudrait plus de 20Go de memoire pour faire ton calcul.
Si tu as une version 32bits alors de toute façon c'est impossible.
Si tu as une version 64bits alors la il te faut la mémoire Ram nécessaire sur ton ordi.
Sinon il te faudrait passer par un serveur de calcul qui possède une tel ram (ou sur l'ordi d'un collègue) ou alors peut-être découper ton calcul et l’agréger ensuite.

Cordialement,
Maxime

Laure Trudel
Messages : 24
Enregistré le : 26 Mar 2013, 11:02

Re: problème de mémoire "cannot allocate vector of size n Mb"

Messagepar Laure Trudel » 04 Mar 2019, 22:47

Bonjour,

Merci.
ET comment fait-on pour augmenter la ram car j'ai un 64 bits ?

Merci, Laurène

Serge Rapenne
Messages : 1308
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: problème de mémoire "cannot allocate vector of size n Mb"

Messagepar Serge Rapenne » 05 Mar 2019, 09:18

Bonjour,

En ajoutant des barrettes de RAM sur la cartes mere du PC.

Serge

Eric Casellas
Messages : 686
Enregistré le : 06 Jan 2009, 14:59

Re: problème de mémoire "cannot allocate vector of size n Mb"

Messagepar Eric Casellas » 05 Mar 2019, 13:02

Bonjour,

Code : Tout sélectionner

?'Memory-limits'


Tu indique que tu as memory.limit() = 1e+10 bits (~1.25Gb), or tu veux allouer un vecteur de 20.4 Gb.
Si sur ta machine il y a déjà assez de RAM tu peut essayer d'en donner plus à R (via memory.limit(size=...)).
Sinon il faut au préalable avoir assez de RAM sur la machine, ou sinon une autre alternative et de revoir ton code pour ne pas avoir des objets aussi gros (voir par exemple la section " Large memory and out-of-memory data" de https://cran.r-project.org/web/views/Hi ... uting.html)...

Eric
Eric

Laure Trudel
Messages : 24
Enregistré le : 26 Mar 2013, 11:02

Re: problème de mémoire "cannot allocate vector of size n Mb"

Messagepar Laure Trudel » 05 Mar 2019, 15:50

Oui je ne vais pas aller très loin avec 1e+10 bits (~1.25Gb) donc je peux mettre plus. J'ai 15.9 Go de RAM sur mon ordi donc ça ne va pas être suffisant pour 20.4 Gb. Sinon un serveur si je peux y avoir accès ?


Merci

Laure Trudel
Messages : 24
Enregistré le : 26 Mar 2013, 11:02

Re: problème de mémoire "cannot allocate vector of size n Mb"

Messagepar Laure Trudel » 06 Mar 2019, 00:54

Je vais expliquer les différentes étapes de ma démarche pour que ça osir plus claire. Peut-être que vous pourrez m'aider à améliorer mon code pour avoir des fichiers moins gros ou changer des choses pour que ça soit plus efficace.

1. J'ai deux types de fichier netcdf que je veux regrouper mais qui n'ont pas les même dimensions. J'ai donc une première étape qui est de regrouper plusieurs fichiers netcdf , qui ont été préalablement reprojeté sur une grille « modèle » aux dimensions de l'autre type de fichier. netcdf. Ces fichiers netcdf sont sélectionnés selon des années et des mois données avec un fichier par jour. J'ai donc beaucoup de fichiers.

Je fais donc des rasterstacks.

Pour obtenir le premier RasterStack, voilà mon code :

mt <-c("/06","/07","/08","/09","/10","/11") #les mois que je sectionne pour les différentes années

l2000 <- list.files(path= paste("D:/PostDoc_MML/Data/SST_all/",sele_2000,sep="/"), full.names = TRUE) ;l2000 #fichiers netcdf pour chaque jour du mois sectionnée, d'une année donnée
b2000 <- NULL
for(e in mt){

b20 <- l2000[grep(e, l2000)]
b2000 <- c(b2000,b20)
}

b2000 #fichiers selectionnés


r2resampled.a <- stack()
for(j in b2000){
setwd(j)
print(j)
l2 <- list.files(path= paste(j,sep="/"), full.names = TRUE) ;l2
for(jj in l2) {
r2resampled <- projectRaster(raster(jj),r1,method = 'ngb')
r2resampled.a <- raster::stack(r2resampled.a, r2resampled)
}
}

r2resampled.a #Rasterstack obtenu de 11.3 Gb c'est lui qui est vraiment très gros.

J'ai essayé de le mettre en RasterBrick mais je n'y arrive pas car j'ai encore des problèmes de mémoire.

2. Ensuite je regroupe les autres fichiers netcdf avec la même démarche mais sans les redimensionner puisque que je m'appuie sur leurs dimensions pour le raster "modèle" de l'étape précédente.
J'obtiens un autre RasterStack qui est moins gros 15Mb
Le code est le suivant:

l2011 <- list.files(path= paste("F:/PostDoc_MML/Data/SST_Copernicus_Ostia_JB/",sele_2011,sep="/"), full.names = TRUE) ;l2011

b2011 <- NULL
for(e in mt){

b11 <- l2011[grep(e, l2011)]
b2011 <- c(b2011,b11)
}

b2011 #fichiers sélectionnés

############################################
sst.all.a <- stack()
for (i in b2011) {

setwd(i)
print(i)
l <- list.files(pattern = "nc", full.names = TRUE)
sst <- raster::stack(l, varname = "analysed_sst")
sst.all.a <- stack(sst.all.a, sst)
}
sst.all.a #RasterStack obtenu


3. je regroupe les 2 RasterStack et que je calcule la moyenne .
sst.all.a.tot <- stack(sst.all.a,r2resampled.a)#

sst_mean.a <- calc(sst.all.a, mean, na.rm= T) ; sst_mean.a
ou
sst.mean.2 <- (sst.all.a + r2resampled.a) / 2

J'ai essayé les 2 méthodes mais ça ne passe au niveau de la mémoire !
J'ai essayé de supprimer les 2 RasterStacks après en avoir formé qu'un seul ça ne passe pas. J'ai utilisé memory.limit pour augmenter la taille de mémoire "size=12884901888" comme je l'ai dit dans mes précédents emails mais ça ne passe pas.

Ma question est donc avez vous une suggestion de code pour ne pas avoir des objets aussi gros et arriver à faire cette moyenne ou des suggestions pour améliorer mon code car peut-être que le problème vient de là. Le but final est d'extraire des valeurs souhaitées sur le raster final.

Peut-être qu'avec le package netcdf4 ça passerai mais je ne sais pas comment faire.

Merci d'avance,

matthieu faron
Messages : 576
Enregistré le : 16 Fév 2011, 11:23

Re: problème de mémoire "cannot allocate vector of size n Mb"

Messagepar matthieu faron » 11 Mar 2019, 09:48

Bonjour à tous,

Je prends le sujet en cours... Je ne connais pas l'analyse de ce type de données mais j'ai été confronté à un problème voisin pour des simulations que je faisais : il te faut temporairement plus de RAM / plus de puissance de calcul (sans vouloir investir dans un nouvelle ordinateur / sans avoir accès à celui d'un collègue)

Tu peux louer assez facilement un serveur sur Amazon Web Service (il y a certainement d'autres services disponibles aussi chez des concurrents comme Microsoft Azure etc...) pour faire le calcul

Si comme moi tu a peu de connaissance de Linux (pour tout installer toi même sur le serveur que tu loues) tu peux regarder ceci :
http://www.louisaslett.com/RStudio_AMI/

Il a eu la super idée de faire une image du serveur qui te permet d'installer automatiquement R/RStudio etc.... sur ton serveur. Sans avoir besoin de connaitre une seule ligne de code Linux. Ensuite tu te connectes à RStudio server par ton navigateur internet est là tu es comme dans RStudio classique c'est assez facile...

Pour avoir une idée du prix c'est aux alentours de 3-4$ par heure de location pour un "gros" serveur de calcul de 64 coeurs et 128 Giga de mémoire...

Ça peut dépanner temporairement....
Matthieu FARON

Laure Trudel
Messages : 24
Enregistré le : 26 Mar 2013, 11:02

Re: problème de mémoire "cannot allocate vector of size n Mb"

Messagepar Laure Trudel » 11 Mar 2019, 22:55

Merci pour votre message. j'ai enfin réussi à régler mon problème en passant par un serveur !


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité