You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用多核心时pbsapply为何出现卡顿无响应?

并行计算中pbsapply偶尔卡住的问题排查(Windows 8核环境)

问题描述

我有一段可正常运行的代码:

clus <- makeCluster(7) 
clusterExport(clus, c("gen_dat", "run_simulation", "grid", "get_models"))
clusterEvalQ(clus, {
  library(cmdstanr)
  library(dplyr)})

pbsapply(1:nrow(grid), run_simulation, folder = "simplex")

但在添加cl = clus参数改用集群并行执行时:

pbsapply(1:nrow(grid), run_simulation, folder = "simplex", cl = clus)

代码有时能正常运行,有时会永久卡住——进度条停在0%,没有任何输出(原本每次迭代都会保存模型结果,但卡住时无结果生成)。

我在Windows系统的8核笔记本上运行这段代码,想知道这种异常行为的可能根源是什么?

可能的根源

  • Windows PSOCK集群的通信缺陷:Windows上makeCluster默认创建PSOCK集群,进程间通过网络套接字通信,偶尔会出现连接超时、资源竞争导致的阻塞。8核机器开7个集群进程,CPU和内存资源接近饱和,容易触发这类调度问题。
  • cmdstanr内部并行的冲突:cmdstanr在编译或采样Stan模型时,可能默认启用多线程并行。如果集群进程和Stan内部并行同时抢占CPU核心,会导致资源调度死锁,进而卡住整个任务。
  • 集群节点的环境初始化不全:虽然用clusterExport导出了指定对象,但run_simulation可能依赖未导出的隐性环境变量、全局状态或其他包的隐性依赖,偶尔会导致集群节点初始化失败,进而阻塞任务。
  • 文件IO竞争:多个集群进程同时向"simplex"文件夹写入模型结果,Windows的文件系统锁机制可能导致进程等待IO资源释放,最终挂起。
  • 进度条的输出同步问题:Windows终端的进度条实现与PSOCK集群的输出缓冲存在兼容性问题,有时进程在后台正常运行,但进度条无法更新,看起来像是卡住了。

内容的提问来源于stack exchange,提问作者Cpo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:33:31