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

SSDM包socketConnection连接耗尽问题及集群并行配置咨询

解决SSDM并行运行时的Socket连接数不足问题

你的错误Error in socketConnection("localhost", port = port, server = TRUE, blocking = TRUE, : all connections are in use是因为R默认的最大同时打开连接数限制住了——R默认的maxConnections选项值通常是128,而你在stack_modelling里指定了cores=200,每个PSOCK并行节点都需要一个独立的socket连接,显然超过了默认上限。

下面是具体的解决方案和优化建议:

1. 先调整R的最大连接数(无需修改SSDM包)

在调用stack_modelling之前,先通过options()函数调高最大连接数,数值要比你设置的cores多一点(预留少量冗余):

# 设置最大连接数为210,适配200个核心
options(maxConnections = 210)
# 可选:关闭所有闲置连接释放资源
closeAllConnections()

这个设置是会话级的,每次重启R都需要重新执行,如果你经常需要大并行作业,可以把这行代码添加到你的~/.Rprofile文件里,让R启动时自动加载。

2. 确认SSDM的并行逻辑适配

SSDM的stack_modelling函数是通过调用parallel::makePSOCKcluster来创建并行集群的,只要你提前设置好maxConnections,SSDM就能正常使用你指定的核心数,不需要修改包内部代码——它会自动复用你设置的全局连接限制。

3. 集群运行的额外优化建议

  • 不要超配核心数:先通过parallel::detectCores()确认当前节点的可用核心数,避免申请超过集群分配给你的资源,否则可能会被集群调度器限制,或者导致作业卡顿。
  • 排查集群层面的限制:如果调整R的连接数后还是报错,可能是集群本身限制了每个用户的最大进程数或文件描述符数,这时候需要联系集群管理员调整配额,或者适当减少cores的数值。
  • 先小批量测试:可以先尝试用30个核心运行,确认调整maxConnections后有效,再逐步增加到200,避免一次性占用过多资源导致意外问题。

修改后的完整代码示例

library(SSDM)
setwd("/home/nikhail1")

# 提前调整最大连接数并释放闲置连接
options(maxConnections = 210)
closeAllConnections()

# 加载环境变量和 occurrence 数据
Env <- load_var(path = getwd(), files = NULL, format = c(".grd", ".tif", ".asc", ".sdat", ".rst", ".nc", ".envi", ".bil", ".img"), categorical = "af_anthrome.asc", Norm = TRUE, tmp = TRUE, verbose = TRUE, GUI = FALSE)
Occurrences <- load_occ(path = getwd(), Env, file = "Final_African_Bird_occurrence_rarefied_points.csv", Xcol = "decimallon", Ycol = "decimallat", Spcol = "species", GeoRes = FALSE, sep = ",", verbose = TRUE, GUI = FALSE)

head(Occurrences)
warnings()

# 运行堆叠模型
SSDM <- stack_modelling(c("GLM", "GAM", "MARS", "GBM", "RF", "CTA", "MAXENT", "ANN", "SVM"), 
                        Occurrences, Env, 
                        Xcol = "decimallon", Ycol = "decimallat", 
                        Spcol = "species", rep = 1, name = "Stack", 
                        save = TRUE, path = getwd(), PA = NULL, 
                        cv = "holdout", cv.param = c(0.75, 1), thresh = 1001, 
                        axes.metric = "Pearson", uncertainty = TRUE, tmp = TRUE, 
                        ensemble.metric = c("AUC", "Kappa", "sensitivity", "specificity"), 
                        ensemble.thresh = c(0.75, 0.75, 0.75, 0.75), 
                        weight = TRUE, method = "bSSDM", metric = "SES", 
                        verbose = TRUE, GUI = FALSE, cores = 200)

save.stack(SSDM, name = "Bird", path = getwd(), verbose = TRUE, GUI = FALSE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:31:34