Использование памяти растет бесконечно при использовании 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, но я звоню один раз, так что, возможно, это не та же проблема.

Любая помощь будет принята с благодарностью.

0 ответов

Другие вопросы по тегам