J'ai récemment commencé à utiliser Jupyter Lab et mon problème est que je travaille avec des jeux de données assez volumineux (généralement le jeu de données lui-même représente environ 1/4 de la RAM de mon ordinateur). Après quelques transformations, enregistrées en tant que nouveaux objets Python, j'ai tendance à manquer de mémoire. Le problème est que lorsque j'approche de la disponibilité RAM limite et exécute toute opération qui nécessite un autre RAM espace mon ordinateur se fige et la seule façon de le réparer est de le redémarrer. Est-ce un comportement par défaut dans Jupyter Lab/Notebook ou est-ce des paramètres que je dois définir? Normalement, je m'attendrais à ce que le programme tombe en panne (comme dans RStudio par exemple), pas tout l'ordinateur
Je vais résumer les réponses de ce qui suit question . Vous pouvez limiter l'utilisation de la mémoire de votre programme. Dans la suite, ce sera la fonction ram_intense_foo()
. Avant d'appeler, vous devez appeler la fonction limit_memory(10)
import resource
import platform
import sys
import numpy as np
def memory_limit(percent_of_free):
soft, hard = resource.getrlimit(resource.RLIMIT_AS)
resource.setrlimit(resource.RLIMIT_AS, (get_memory() * 1024 * percent_of_free / 100, hard))
def get_memory():
with open('/proc/meminfo', 'r') as mem:
free_memory = 0
for i in mem:
sline = i.split()
if str(sline[0]) == 'MemAvailable:':
free_memory = int(sline[1])
break
return free_memory
def ram_intense_foo(a,b):
A = np.random.Rand(a,b)
return A.T@A
if __name__ == '__main__':
memory_limit(95)
try:
temp = ram_intense_foo(4000,10000)
print(temp.shape)
except MemoryError:
sys.stderr.write('\n\nERROR: Memory Exception\n')
sys.exit(1)
Je pense que vous devriez utiliser des morceaux. Comme ça:
df_chunk = pd.read_csv(r'../input/data.csv', chunksize=1000000)
chunk_list = [] # append each chunk df here
# Each chunk is in df format
for chunk in df_chunk:
# perform data filtering
chunk_filter = chunk_preprocessing(chunk)
# Once the data filtering is done, append the chunk to list
chunk_list.append(chunk_filter)
# concat the list into dataframe
df_concat = pd.concat(chunk_list)
Pour plus d'informations, consultez-le: https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c
Je suggère de ne pas ajouter de liste à nouveau (probablement le RAM surchargera à nouveau). Vous devriez terminer votre travail dans cette boucle for.