web-dev-qa-db-fra.com

Jupyter Lab fige l'ordinateur en dehors de RAM - comment l'empêcher?

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

12
jakes

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)
0
v.tralala

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.

0
Berkay