- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚测试了带有和不带有并行后端的弹性网络。调用的是:
enetGrid <- data.frame(.lambda=0,.fraction=c(.005))
ctrl <- trainControl( method="repeatedcv", repeats=5 )
enetTune <- train( x, y, method="enet", tuneGrid=enetGrid, trControl=ctrl, preProc=NULL )
我在没有注册并行后端的情况下运行了它(并且在 train
调用完成时从 %dopar%
收到了警告消息),然后再次注册了一个并行后端7 个核心(共 8 个)。第一次运行花费了 529 秒,第二次花费了 313 秒。但是第一次运行最大占用了 3.3GB 内存(由 Sun 集群系统报告),第二次运行占用了 22.9GB。我有 30GB 的内存,从这里开始任务只会变得更加复杂。
问题:1)这是并行计算的一般属性吗?我以为他们有共同的内存......2)有没有办法解决这个问题,同时仍然在train
中使用enet
?如果 doParallel
是问题所在,是否还有其他架构可以与 %dopar%
一起使用 - 不,对吗?
因为我对这是否是预期的结果感兴趣,这与这个问题密切相关,但并不完全相同,但我可以关闭这个问题并将我的问题合并到那个问题中(或者将其标记为重复)并指向这个,因为这有更多细节)如果这就是共识:
最佳答案
在多线程程序中,线程共享大量内存。它主要是线程之间不共享的堆栈。但是,引用 Dirk Eddelbuettel 的话说,“R 现在是、将来仍然是单线程的”,因此 R 并行包使用进程而不是线程,因此共享内存的机会要少得多。
但是,内存在 mclapply
派生的进程之间共享。 (只要进程不修改它,就会触发操作系统中内存区域的副本)。这就是使用“多核”API 与使用并行/doParallel 的“雪”API 相比,内存占用量可能更小的原因之一。
换句话说,使用:
registerDoParallel(7)
可能比使用以下内容更有效地使用内存:
cl <- makeCluster(7)
registerDoParallel(cl)
因为前者会导致%dopar%
使用mclapply
在 Linux 和 Mac OS X 上,而后者使用 clusterApplyLB
.
但是,“snow”API 允许您使用多台机器,这意味着您的内存大小会随着 CPU 数量的增加而增加。这是一个很大的优势,因为它可以允许程序扩展。有些程序在集群上并行运行时甚至可以获得超线性加速,因为它们可以访问更多内存。
因此,为了回答你的第二个问题,我建议使用“多核”API 和 doParallel
如果您只有一台计算机并使用 Linux 或 Mac OS X,但如果您使用集群,则对多台计算机使用“snow”API。我认为没有任何方法可以使用共享内存包,例如 Rdsm
与 caret
包。
关于r - 使用 R 的 doParallel 包的多核计算是否会使用更多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203755/
我是一名优秀的程序员,十分优秀!