2016-04-22 4 views
0

Ich versuche, ein paar dynamischen LCA parallelisieren (nur so etwas wie 10 ... während ich soll mehr als tausend laufe ...) und ich habe diesenSparse-Solver läuft in parallaleized dynamischer LCA aus der Erinnerung

Can't expand MemType 1: jcol 19852 
Can't expand MemType 0: jcol 17930 
multiprocessing.pool.RemoteTraceback: 
""" 
Traceback (most recent call last): 
    File "/home/giuseppec/miniconda3/envs/bw2/lib/python3.4/multiprocessing/pool.py", line 119, in worker 
    result = (True, func(*args, **kwds)) 
    File "/home/giuseppec/miniconda3/envs/bw2/lib/python3.4/multiprocessing/pool.py", line 47, in starmapstar 
    return list(itertools.starmap(args[0], args[1])) 
    File "multiprocess_both.py", line 129, in dyn_lca 
    timeline=dynamic_lca.calculate() 
    File "/home/giuseppec/miniconda3/envs/bw2/lib/python3.4/site-packages/bw2temporalis/dynamic_lca.py", line 54, in calculate 
    **self.gt_kwargs 
    File "/home/giuseppec/miniconda3/envs/bw2/lib/python3.4/site-packages/bw2calc/graph_traversal.py", line 44, in calculate 
    lca, supply, score = self.build_lca(demand, method) 
    File "/home/giuseppec/miniconda3/envs/bw2/lib/python3.4/site-packages/bw2calc/graph_traversal.py", line 107, in build_lca 
    lca.decompose_technosphere() 
    File "/home/giuseppec/miniconda3/envs/bw2/lib/python3.4/site-packages/bw2calc/lca.py", line 216, in decompose_technosphere 
    self.solver = factorized(self.technosphere_matrix.tocsc()) 
    File "/home/giuseppec/miniconda3/envs/bw2/lib/python3.4/site-packages/scipy/sparse/linalg/dsolve/linsolve.py", line 377, in factorized 
    return splu(A).solve 
    File "/home/giuseppec/miniconda3/envs/bw2/lib/python3.4/site-packages/scipy/sparse/linalg/dsolve/linsolve.py", line 257, in splu 
    ilu=False, options=_options) 
MemoryError 
""" 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "multiprocess_both.py", line 181, in <module> 
    dyn_multi=[x for x in pool_dyn_multi.get()] 
    File "/home/giuseppec/miniconda3/envs/bw2/lib/python3.4/multiprocessing/pool.py", line 608, in get 
    raise self._value 
MemoryError 

Es scheint, dass scipy während der Matrixinversion keinen Speicher mehr hat (ich bin sicherlich nicht der kompetenteste, das zu sagen, aber ich habe ein wenig gesucht) Ich habe gerade versucht, scikit-umfpack zu installieren, um zu sehen, ob sich etwas ändert ... .it läuft, scheint aber immer noch schmerzhaft langsam und nicht sehr vielversprechend zu sein und gibt nur diese Warnung zurück:

Warning: (almost) singular matrix! (estimated cond. number: 3.33e+14) 

haben eigentlich keine Ahnung wie man damit umgeht ... hat jemand was?

P. S: Ich hier gepostet, da es nicht ein Fehler von bw2 mir sieht, wird, wenn so

Antwort

0

eine Frage offen Was ist Ihr Pool-Größe? Wahrscheinlich ist es am einfachsten, die Anzahl der Jobs zu reduzieren, die parallel laufen, aber die Anzahl der CPUs auf halb so viele wie verfügbar einzustellen.

Es ist auch möglich, dass irgendwo ein Speicherleck vorhanden ist und Speicher nicht freigegeben wird, nachdem ein Job beendet wurde. Sie können dies umgehen, indem Sie maxtasksperchild=1 als constructing a MP Pool einstellen.