2017-11-27 2 views
0

Ich habe versucht, TieDIE zu verwenden. Mit ein paar Worten, diese Software enthält einen Algorithmus, der ein signifikantes Subnetzwerk findet, wenn Sie einige Abfrageknoten und ein Netzwerk passieren. Mit kleineren Netzwerken Es funktioniert gut, aber das Netzwerk, das mich interessiert, ist ziemlich groß, es hat 21988 Knoten und 360474 Kanten. TieDIE erzeugt einen initialen Netzwerkkern mit scipy (obwohl Matlab auch eine Option ist, um diesen Kernel zu generieren, ich besitze keine Lizenz). Bei der Erzeugung dieses Kernel ich die folgende Fehlermeldung erhalten:Nicht genug Speicher, um Faktorisierung durchzuführen expm scipy.sparse.linalg.spl

Not enough memory to perform factorization. Traceback (most recent call last): 
File "Trials.py", 
line 44, in <module> diffuser = SciPYKernel(network_path) 
File "lib/kernel_scipy.py", 
line 83, in __init__ self.kernel = expm(time_T*L) 
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/matfuncs.py", 
line 602, in expm return _expm(A, use_exact_onenorm='auto') 
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/matfuncs.py", 
line 665, in _expm X = _solve_P_Q(U, V, structure=structure) 
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/matfuncs.py", 
line 699, in _solve_P_Q return spsolve(Q, P) 
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py", 
line 198, in spsolve Afactsolve = factorized(A) 
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py", 
line 440, in factorized return splu(A).solve 
File "/home/agmoreno/TieDIE-trials/TieDIE/local/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py", 
line 309, in splu ilu=False, options=_options) 
MemoryError 

Was ist das interessanteste daran ist, dass ich einen Cluster am Computer verwenden, die 64 CPUs und 700GB oder RAM und die Software-Peaks bei 1,3 % der Speicherverbrauch (~ 10GB), nach einer ps Überwachung, in einem Moment der Ausführung und Zerkleinerung später. Mir wurde gesagt, dass es keine Begrenzung in der Nutzung von RAM gibt ... Also habe ich wirklich keine Ahnung, was passieren könnte, und der Softwareentwickler ist nicht viel Hilfe ...

Vielleicht könnte jemand hier hilf mir, eine alternative zu scipy zu finden oder sie zu lösen.

Ist es möglich, dass der Speicherfehler auftritt, weil nur ein Knoten verwendet wird? In diesem Fall, wie könnte ich die Arbeit über die Knoten verteilen?

Vielen Dank im Voraus.

+4

Die Tatsache, dass Sie einen Cluster verwenden, bedeutet nicht, dass SciPy eine Idee hat, wie Arbeit über einen Cluster verteilt werden soll. Dieses Ding läuft wahrscheinlich auf einem Knoten. – user2357112

+0

Ich denke auch, dass es nur einen Knoten verwendet, weil in der Überwachung,% CPU-Auslastung, war immer in der Nähe von 99% (jedes extra hundert ist ein anderer Knoten in Verwendung), aber ich dachte, dies ist nicht das Limit-Problem. In diesem Fall, wie könnte ich die Arbeit über die Knoten verteilen? –

+0

Verteilen Sie das? Das ist sehr komplex. Noch mehr im spärlichen Fall! Die einzige Bibliothek, die ich kenne, baue für solche Dinge: [http://libelemental.org/], die auch Python-Wrapper hat. – sascha

Antwort

0

Das ist richtig, für ein sehr großes Netzwerk wie dieses benötigen Sie hohen Speicher auf einem einzelnen Knoten. Die einfachste Lösung ist natürlich eine Problemumgehung, entweder:

(1) Gibt es eine Möglichkeit, die Größe Ihres Eingangsnetzwerkes zu reduzieren und gleichzeitig relevante Biologie zu erfassen? Vielleicht suchen Sie einfach alle Knoten 2 Schritte von Ihren Eingangsknoten entfernt? Verwenden Sie

(2) die neue API Cytoscape die Diffusion für Sie zu tun: http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005598 (https://github.com/idekerlab/heat-diffusion)

(3) Verwenden Sie PageRank stattdessen einen Wärme Kern der Berechnung (nicht ideal, da wir, dass Diffusion gezeigt haben neigt besser in biologischen Netzwerken arbeiten).

Hoffe, das hilft! -Evan Paull (TieDIE Entwickler/Erster Autor)

+0

Dank Paul für die Arbeit, am Ende verwendete ich Diffusion und Networkx, um mögliche Module abzurufen. Vielen Dank. –

Verwandte Themen