web-dev-qa-db-ja.com

Jupyter Labは、RAMの範囲外になるとコンピューターをフリーズします-それを防ぐ方法は?

私は最近Jupyter Labの使用を開始しましたが、私の問題は、非常に大きなデータセットを操作することです(通常、データセット自体は私のコンピューターのRAMの約1/4です)。いくつかの変換を行った後、新しいPythonオブジェクトとして保存すると、メモリ不足になる傾向があります。問題は、利用可能なRAM制限に近づくと、別のRAMコンピュータがフリーズするスペースが必要な操作であり、コンピュータがフリーズし、それを修正する唯一の方法は、コンピュータを再起動することです。これはJupyter Lab/Notebookのデフォルトの動作ですか、それとも設定する必要がある設定ですか?通常、コンピュータ全体ではなく、プログラムがクラッシュすることを期待します(たとえばRStudioの場合)。

12
jakes

次の 質問 からの回答を要約します。プログラムのメモリ使用量を制限できます。以下では、これは関数ram_intense_foo()になります。それを呼び出す前に、関数を呼び出す必要があります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

チャンクを使うべきだと思います。そのように:

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)

詳細については、こちらをご覧ください。 https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c

リストを再度追加しないことをお勧めします(おそらくRAMは再びオーバーロードされます)。そのforループでジョブを完了する必要があります。

0
Berkay