问题标签 [mclapply]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - mclapply 因 data.table 失败
我目前遇到了一个奇怪的情况,我使用 mclapply 并行化了一个循环。
并行调用有时会使用 mclapply 返回 NULL,但是当我使用 lapply 时一切正常。
使用 mclapply 也可以解决问题,但前提是我不使用 data.table 在调用的函数中进行子集化。
我还没有可以在此处发布的合理 mve,但可以根据要求提供代码。
简化的一般结构如下所示:
在查看 mclapply 返回的内容并检查哪些元素为 NULL 时,我得到:
这几乎看起来像四个线程之一死了(我使用 mc.cores=4)。
data.table 中的线程安全是否存在问题?
(我已经在两台不同的计算机上重现了这个问题)
通过命名空间加载(未附加):[1] compiler_3.5.2 tools_3.5.2
更新:根据@jangorecki 的评论,我添加了setDTthreads(1)
,但错误仍然存在。我再次尝试了不同的版本:
更新 2:有趣的是,时间起着重要作用。通过在被调用函数中引入随机延迟bar
,并将其mc.preschedule = FALSE
作为参数mclapply
,失败的调用数量会有所不同。
它总是失败的第三个调用(mc.cores>=3),加上一些连续的调用。返回的列表中对应的值为mclapply
NULL。
对于这些调用,我还看到“sendMaster(try(eval(expr, env),silent = TRUE)) 中的错误:写入错误,关闭到主机的管道”。我发现令人不安的是,这些调用会默默地失败,而不会停止执行。
r - R 并行中止所有 mclapply 操作
parallel::mclapply()
如果它在任何一个进程中遇到错误(例如, a ),是否可以要求它尽快放弃所有进一步stop()
的处理?
python - 用于 R 管道的 Snakemake -- 设置
我正在寻找有关使用Snakemake
处理我的 R 管道的一些基本信息。据我了解,执行此操作的两种最常见方法是使用script
标志并传递R
脚本,或使用shell
传递给Rscript
. 如果我想使用这两种方法中的任何一种,我的R
脚本应该是什么样的?如果为. R
_ _ _load
RData
read.table
input
另一个问题是关于集群提交/多线程。Snakemake
据称将把任务提交到多个节点并自动使用多个核心,无需修改代码。那么让一个规则使用cluster
和/或cores
调用R
脚本来执行整个管道或将管道分成多个规则/步骤并使用cluster
和/或cores
在该规则上会更好吗?
最后一个问题是,如果我的代码在代码本身中R
使用并行/多线程包怎么办?mclapply
这如何影响Snakemake
及其参数?
无法在线找到这些问题的答案,因此任何信息将不胜感激。
r - 从 Rscript 调用 mclapply
当调用使用 mclapply() 和Rscript myFuction.R --json=config.json
mclapply 函数的函数时失败并显示消息
所有计划的核心在用户代码中遇到错误
但是,当我在 RStudio 中运行代码时,它运行良好。我在 RStudio AWS AMI 上开发并在 RStudio 中进行测试,并从 RStudio AWS 机器的终端执行 Rscript,并且 RStudio 和终端之间的环境是相同的。
有没有人知道在使用 Rscript 运行 mclapply 时我可能需要提供给 mclapply 的额外参数或我需要定义的其他环境参数?
我尝试更改所有 mclapply() 参数但没有成功
这是我的环境。
虽然这是一条“警告信息”,但 mclapply 退出
r - R: mclapply 通过循环运行它
我正在尝试运行循环超过 2000 次的 mclappy。我想知道是否有一种方法可以提高它的效率,因为 AWS SageMaker 在达到 150 后代码会中断
代码是:
myfunc 里面有这个功能。但是有没有办法将其拆分为集群并分块拆分代码。我对此并不陌生,makeClusters 是我目前无法理解的东西。
我的意思是对此的预期解决方案:
r - 仅当在 mlr 中使用 parallelMap 时才会发生静默崩溃
我正在运行一个有大约 12 名学习者的 mlr 基准测试。当我不使用 parallelMap 时,我的代码运行没有任何问题,但是一旦我添加并行化,它就会静默崩溃,总是在同一点,即使只有 2 个内核。
我认为它一定是内存不足,所以我重新构建了我的代码以使用尽可能少的内存
- 设置种子,然后一次只对一个学习者调用基准测试
- 将基准调用放在嵌套函数中,以便释放基准返回的对象使用的内存。
然而,这并没有帮助。它总是在调整随机森林变量重要性过滤器期间崩溃,但它在此之前成功地对随机森林进行了基准测试。以下是相关的代码片段:
日志中没有异常。在此返回之前对 gc() 的最后一次调用:
如果我仅通过并行化运行 RF varimp 滤波器,它就会成功。我尝试将以下内容添加到 .Renviron 但没有帮助:
任何人都可以建议我如何解决这个问题,或者至少我可以如何找到有关出了什么问题的更多信息?
编辑:
感谢下面@pat-s 的评论,我意识到 R 进程并没有崩溃,而是处于空闲状态。因此,我将它们全部杀死,并将一条错误消息写入输出文件 - 每次都相同:
r - 在 mclapply : schedule cores 9 在用户代码中遇到错误,所有作业的值都会受到影响
我浏览了有关此错误的现有 stackoverflow 链接,但没有解决方案,因为那里有效(有些问题也没有解决方案)
这是我面临的问题:我使用并行包的 mclapply 并行运行 Arima 模型。示例数据被按键拆分到不同的核心上,结果使用 do.call + rbind 组合在一起(我放置脚本的服务器有 20 个 cpu 核心,这些核心被传递到 mc.cores 字段)
以下是我的 mclapply 代码:
我得到了多组如下值作为“predict_function”的输出
所以基本上,我从多个核心获取上面给出的文件以发送到 rbind。该代码适用于某些数据部分。现在,我得到另一组数据,与上面相同,每列的数据类型相同,但第 2 列的值不同
每列的数据类型在上面的列名中给出。
对于第二种情况,我得到以下错误:
charToDate(x) 中的 simpleError:字符串不是标准的明确格式
警告信息:在 mclapply(ds, predict, mc.cores = num_cores) : 调度核心 9 在用户代码中遇到错误,所有作业的值都会受到影响
对于第二种情况,我没有看到此打印: print('After lapply') ,但对于第一种情况是可见的。
我检查了上面数据框中的日期列,它是日期格式的。当我尝试unique(df$DATE)
时,它以上面给出的格式抛出所有有效值。
这里错误的原因是什么?它是第一个由于 mclapply 无法 rbind 值吗?我们需要更好地理解警告吗?
任何建议将不胜感激。
r - BTYDplus:预定的核心1、2、8没有交付结果,所有作业的值都会受到影响
我正在使用 BTYDplus 包功能。
有时,我会很随机地在下面遇到此错误
到目前为止,为了避免出现这个问题,我所做的就是保持 MCMC 较小,因为更大的 MCMC 似乎与更高的内核故障可能性相关。
在多核中运行 R 时是否有一些最佳实践?
这真的很令人沮丧,因为如果工作失败,我必须重新运行整个事情,这需要很多时间来监控。
r - R 编程中的 mclapply - 如何确保使用所有内核和内存
我正在使用 parallel::mclapply 进行一些计算以并行化该过程。我有一个具有 64GB 内存和 28 核 CPU 的高性能计算服务器 (HPC)。并行化后代码运行速度大大提高,但大量内存和 cpu 内核被浪费。我怎样才能使它更有效率?
这是示例代码:
predict_function 包含一个小函数来创建 snaive、naive 或 Arima 方法,这些方法将在逻辑到达上述行之前决定。
以下是我经常在日志中看到的内容:
第一行表明该作业浪费了 51 gig 的 RAM 并且使用了不到一半的 CPU 分配。第三行表示相同的程序以相同的数据运行,但使用的内存超过了分配的内存,尽管 CPU 内核利用不足。
目前在我脑海中浮现的三个问题:HPC 将如何为每个作业分配内存?我可以在我的 R 程序中拆分内存和内核以并行运行两个函数吗?说在 14 个核心中运行 snaive 方法并将其余 14 个分配给 Arima?我怎样才能让我的工作利用所有内存和 CPU 内核来加快速度?
提前致谢
r - 如何在并行包的“应用”函数中将行更改分配给现有矩阵
在 R 中,可以使用函数<<-
内的符号lapply()
为外部的变量赋值lapply()
。
让我们考虑一个充满 1 的矩阵:
假设我想用赋值符号 1,2,3,4 和 5 替换每一行<<-
。我可以使用函数 lapply 函数(它不是那种操作的设计函数,这只是一个例子):
这将起作用。
但是,如果我现在像这样使用 mclapply:
矩阵 m 将保持为 1。
这个想法是将更改应用于矩阵的行,而不是创建新的行,而是将它们分配到现有的行中。唯一的限制是使用并行包中的函数(例如 mclapply(),但也许另一个函数更适合)。
同样使用该<<-
符号也不是强制性的。
我怎样才能做到这一点 ?