0

我在循环大量次的优化算法中使用 Ipython 并行。map在循环中使用a LoadBalancedView(两次)方法、aDirectView的字典接口和%px魔法调用来调用并行性。我在 Ipython 笔记本中运行算法。

我发现运行算法的内核和其中一个控制器消耗的内存随着时间的推移稳步增加,限制了我可以执行的循环数量(因为可用内存是有限的)。

使用heapy,我在运行了大约 38,000 个循环后分析了内存使用情况:

Partition of a set of 98385344 objects. Total size = 18016840352 bytes.  
 Index  Count     %       Size   %  Cumulative   % Kind (class / dict of class)
     0  5059553   5 9269101096  51  9269101096  51 IPython.parallel.client.client.Metadata
     1 19795077  20 2915510312  16 12184611408  68 list
     2 24030949  24 1641114880   9 13825726288  77 str
     3  5062764   5 1424092704   8 15249818992  85 dict (no owner)
     4 20238219  21  971434512   5 16221253504  90 datetime.datetime
     5   401177   0  426782056   2 16648035560  92 scipy.optimize.optimize.OptimizeResult
     6        3   0  402654816   2 17050690376  95 collections.defaultdict
     7  4359721   4  323814160   2 17374504536  96 tuple
     8  8166865   8  196004760   1 17570509296  98 numpy.float64
     9  5488027   6  131712648   1 17702221944  98 int 
<1582 more rows. Type e.g. '_.more' to view.>

您可以看到IPython.parallel.client.client.Metadata实例使用了大约一半的内存。map调用结果被缓存的一个很好的指标是 401177 个OptimizeResult实例,与优化调用的数量相同lbview.map- 我没有在我的代码中缓存它们。

有没有办法可以控制内核和 Ipython 并行控制器上的内存使用(谁的内存消耗与内核相当)?

4

1 回答 1

1

Ipython 并行客户端和控制器存储过去交易的过去结果和其他元数据。

该类IPython.parallel.Client提供了一种清除此数据的方法:

Client.purge_everything()

记录在这里。还有一些方法可以让您对清除的内容进行一些控制purge_results()purge_local_results()

于 2015-06-14T10:55:20.350 回答