python - iPython Parallel 模块消耗大量内存
问题描述
我正在使用 ipyparallel 模块来加速所有列表比较,但我遇到了巨大的内存消耗问题。
这是我正在运行的脚本的简化版本:
从 SLURM 脚本启动集群并运行 python 脚本
ipcluster start -n 20 --cluster-id="cluster-id-dummy" &
sleep 60
ipython /global/home/users/pierrj/git/python/dummy_ipython_parallel.py
ipcluster stop --cluster-id="cluster-id-dummy"
在 python 中,为简化示例制作两个列表列表
import ipyparallel as ipp
from itertools import compress
list1 = [ [i, i, i] for i in range(4000000)]
list2 = [ [i, i, i] for i in range(2000000, 6000000)]
然后定义我的列表比较函数:
def loop(item):
for i in range(len(list2)):
if list2[i][0] == item[0]:
return True
return False
然后连接到我的 ipython 引擎,将 list2 推送到每个引擎并映射我的函数:
rc = ipp.Client(profile='default', cluster_id = "cluster-id-dummy")
dview = rc[:]
dview.block = True
lview = rc.load_balanced_view()
lview.block = True
mydict = dict(list2 = list2)
dview.push(mydict)
trueorfalse = list(lview.map(loop, list1))
如前所述,我在使用 SLURM 的集群上运行它并从 sacct 命令获取内存使用情况。这是我为每个步骤获得的内存使用情况:
只需创建两个列表:1.4 Gb 创建两个列表并将它们推送到 20 个引擎:22.5 Gb 一切:62.5 Gb++(这是我遇到 OUT_OF_MEMORY 失败的地方)
从运行作业时在节点上运行 htop 开始,似乎内存使用量随着时间的推移缓慢上升,直到达到最大内存并失败。
我梳理了这个先前的线程并实施了一些建议的解决方案但没有成功
我尝试使用每个循环清除视图:
def loop(item):
lview.results.clear()
for i in range(len(list2)):
if list2[i][0] == item[0]:
return True
return False
我尝试用每个循环清除客户端:
def loop(item):
rc.purge_everything()
for i in range(len(list2)):
if list2[i][0] == item[0]:
return True
return False
我尝试将 --nodb 和 --sqlitedb 标志与 ipcontroller 一起使用,并像这样启动我的集群:
ipcontroller --profile=pierrj --nodb --cluster-id='cluster-id-dummy' &
sleep 60
for (( i = 0 ; i < 20; i++)); do ipengine --profile=pierrj --cluster-id='cluster-id-dummy' & done
sleep 60
ipython /global/home/users/pierrj/git/python/dummy_ipython_parallel.py
ipcluster stop --cluster-id="cluster-id-dummy" --profile=pierrj
不幸的是,这些都没有帮助并导致完全相同的内存不足错误。
任何建议或帮助将不胜感激!
解决方案
推荐阅读
- android - 设计:28.0.0-rc01 构建问题
- database - Facebook 类型社交网络的 NoSQL 数据库结构
- css - 在不同设备上显示背景图像
- angular - AngularDart 5中鼠标悬停的事件绑定?
- python - 通过从 python 调用的脚本访问导出的变量
- php - Laravel 唯一验证在更新时失败
- python - Python CSV 文件 - 如何从 CSV 文件中删除数据?
- laravel - 如果其他情况,Laravel Blade Foreach 循环中的错误
- php - Laravel:当我的外键在数组中时,如何在模型中添加关系?
- javascript - 在一次 API 调用后设置延迟 5 秒