2017-11-27 11 views
0

私はTieDIEを使用しようとしています。つまり、このソフトウェアには、クエリノードとネットワークを渡すときに重要なサブネットワークを見つけるアルゴリズムが含まれています。小さなネットワークでは問題なく動作しますが、私が興味を持っているネットワークはかなり大きく、ノード21988と360474エッジがあります。 TieDIEは、scipyを使用して初期ネットワークカーネルを生成します(ただし、Matlabはライセンスを所有していないこのカーネルを生成するオプションです)。このカーネルの生成中に、私は次のエラーを取得する:分解を実行するメモリが足りません。expipy.sparse.linalg.splu

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 

これについての最も興味深いのは、私は1.3で64個のCPU、および700ギガバイトまたはRAMとソフトウェアのピークを持つクラスタコンピュータを使用していますということです何psの監視によると、実行のある瞬間にはメモリ使用量の%(〜10GB)、後で破棄されます。私はRAMの使用に制限がないと言われています...だから、実際に何が起こっているのか分からず、ソフトウェア開発者はあまり助けにはなっていません...

多分誰かが私に助けを借りて解決するか、それを解決するのを助けてください。

1つのノードしか使用されていないためにメモリエラーが発生する可能性はありますか?この場合、どのようにしてノード間で作業を配布できますか?

ありがとうございます。

+4

クラスタを使用しているということは、SciPyがどのようにクラスタ全体で作業を配布するかを知っているわけではありません。このことはおそらく1つのノードで実行されています。 – user2357112

+0

私は、監視では、%cpuの使用率が常に99%に近くなっていたので(それは余分な百が別のノードであるため)、ノードが1つしか使用されていないと考えました。この場合、どのようにしてノード間で作業を配布できますか? –

+0

これを配布していますか?それは非常に複雑です。疎の場合でもさらに!私が知っている唯一のライブラリは、[libelemental](http://libelemental.org/)のようなものをビルドします。これにはPythonラッパーも含まれています。 – sascha

答えて

0

このような非常に大規模なネットワークでは、1つのノードに高いメモリが必要です。最も簡単な解決法はもちろん回避策です:

(1)関連する生物学を捕捉しながら入力ネットワークのサイズを減らす方法はありますか?たぶん入力ノードから2ステップ離れたすべてのノードを探しますか?

(2)あなたのための拡散を行うための新しいCytoscapeのAPIを使用します。http://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005598https://github.com/idekerlab/heat-diffusion

(3)使用PageRankの代わりに、我々は拡散傾向があることを示してきたように熱核(理想的ではないが、コンピューティングの生物学的ネットワークでより良く働く)。

希望すると便利です。 -Evan Paull(TieDIE開発者/鉛筆作成者)

+0

Paulさんに回避策を教えていただき、DiffusionとNetworkxを使用して可能なモジュールを取得しました。ありがとう。 –

関連する問題