Ich arbeite in Python2.7 (Anaconda 4.0) auf einem Jupyter Notebook auf einer EC2-Instanz mit viel Speicher (60GB, 48GB frei nach free
). Ich habe einen Pandas (v0.18) -Datenrahmen geladen, der groß ist (150K Zeilen, ~ 30KB pro Zeile), aber ist nicht annähernd die Speicherkapazität der Instanz, selbst wenn viele viele Kopien erstellt werden. Bestimmte Pandas und Scikit-Learn (v0.17) Anrufe ein Memory auslösen sofort, zB:Pandas/Sklearn gibt falschen Memoryerror
#X is a subset of the original df with 60 columns instead of the 3000
#Y is a float column
X.add(Y)
#And for sklearn...
pca = decomposition.KernelPCA(n_components=5)
pca.fit(X,Y)
Inzwischen diese funktionieren:
Z = X.copy(deep=True)
pca = decomposition.PCA(n_components=5)
meisten verblüffend, ich kann dies tun, und es endet in wenigen Sekunden:
huge = range(1000000000)
habe ich das Notebook neu gestartet, den Kernel und die Instanz, aber die gleichen Anrufe die MemoryError
immer geben. Ich habe auch überprüft, dass ich 64-Bit Python verwende. Irgendwelche Vorschläge?
Update: Hinzufügen der Zurückverfolgungsfehler:
Traceback (most recent call last):
File "<ipython-input-9-ae71777140e2>", line 2, in <module>
Z = X.add(Y)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/ops.py", line 1057, in f
return self._combine_series(other, na_op, fill_value, axis, level)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 3500, in _combine_series
fill_value=fill_value)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 3528, in _combine_match_columns
copy=False)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 2730, in align
broadcast_axis=broadcast_axis)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/generic.py", line 4152, in align
fill_axis=fill_axis)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/generic.py", line 4234, in _align_series
fdata = fdata.reindex_indexer(join_index, lidx, axis=0)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/internals.py", line 3528, in reindex_indexer
fill_tuple=(fill_value,))
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/internals.py", line 3591, in _slice_take_blocks_ax0
fill_value=fill_value))
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/pandas/core/internals.py", line 3621, in _make_na_block
block_values = np.empty(block_shape, dtype=dtype)
MemoryError
und
Traceback (most recent call last):
File "<ipython-input-13-d510bc16443e>", line 3, in <module>
pca.fit(X,Y)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/decomposition/kernel_pca.py", line 202, in fit
K = self._get_kernel(X)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/decomposition/kernel_pca.py", line 135, in _get_kernel
filter_params=True, **params)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 1347, in pairwise_kernels
return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 1054, in _parallel_pairwise
return func(X, Y, **kwds)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 716, in linear_kernel
return safe_sparse_dot(X, Y.T, dense_output=True)
File "/home/ec2-user/anaconda2/lib/python2.7/site-packages/sklearn/utils/extmath.py", line 184, in safe_sparse_dot
return fast_dot(a, b)
MemoryError
Dinge können groß in sklearn wachsen. Was zeigt 'htop', wenn der Fitting tatsächlich läuft? – reptilicus
können Sie eine vollständige Stapelverfolgung einfügen? – reptilicus
Es zeigt den Python-Prozess überhaupt nicht. Als ich die Milliardenliste anrief, begann sie, die CPU aufzufressen und allmählich mehr Speicher zu verwenden. Aber diese Operationen machen nicht einmal einen Blip, und sie treffen den Fehler, sobald ich sie ausführe. – Bob