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