Использование памяти растет бесконечно при использовании scipy.sparse.linalg.eigsh
Вот код:
# input:
# A : a large csr matrix (365 million rows and 1.3 billion entries), 32 bit float datatype
# get the two largest eigenvalues of A and the corresponding eigenvectors
from scipy.sparse.linalg import eigsh
(w,V) = eigsh(A,k=2,tol=10e-2,ncv=5)
Насколько я могу судить, здесь не так много места, чтобы возиться, но я наблюдаю, что у моей машины изначально достаточно памяти (90G, включая swap), но использование памяти eigsh медленно увеличивается во время беги, пока у меня не кончится память. Есть ли что-то очевидное, чего мне здесь не хватает?
Что я пробовал:
- Просмотр источника. Это много, но, насколько я мог видеть, между кодами python между итерациями не выделяется память. Я не так хорош в Фортране, но было бы неожиданно, если бы сама ARPACK или вызывающая подпрограмма выделяли память.
- Попробовал эквивалентную вещь в Octave (клон MATLAB), с похожими эффектами, хотя и менее очевидным, поскольку тип данных обязательно имеет двойную точность и, следовательно, он более ограничен с самого начала. Так что, может быть, это может быть что-то с самой ARPACK?
- погуглил кучу. Похоже, что Сципи использует (делал?) Круговую ссылку где-то, что вызывает у других горе при многократном вызове eigsh, но я звоню один раз, так что, возможно, это не та же проблема.
Любая помощь будет принята с благодарностью.