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

远程服务器上用R的terra包运行并行代码遇连接读取错误

Terra包并行运行报错:unserialize(node$con) 连接读取错误

我在远程服务器上使用R语言的terra包运行简单代码,非并行模式下脚本正常,但开启2核并行时出现连接读取错误,排除内存问题(所用数据量很小)。

测试代码

library(terra)
testfun <- function(i) { 2 * sqrt(i) }

r <- rast(ncols=10, nrows=10)
values(r) <- 1:ncell(r)
x <- c(r, sqrt(r), r+50)

x
# 输出:
# class       : SpatRaster 
# dimensions  : 10, 10, 3  (nrow, ncol, nlyr)
# resolution  : 36, 18  (x, y)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 (CRS84) (OGC:CRS84) 
# source(s)   : memory
# names       : lyr.1, lyr.1, lyr.1 
# min values  :     1,     1,    51 
# max values  :   100,    10,   150 

非并行运行结果

test1 <- app(x, fun=testfun, cores =1)
test1 
# 输出:
# class       : SpatRaster 
# dimensions  : 10, 10, 3  (nrow, ncol, nlyr)
# resolution  : 36, 18  (x, y)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 (CRS84) (OGC:CRS84) 
# source(s)   : memory
# names       : lyr.1,    lyr.1,    lyr.1 
# min values  :     2, 2.000000, 14.28286 
# max values  :    20, 6.324555, 24.49490 

并行运行错误

test2 <- app(x, fun=testfun, cores =2)
# 报错信息:
# Error in unserialize(node$con) : error reading from connection
解决方法
  • 显式注册并行集群:远程服务器环境下,手动初始化集群并导出函数,避免自动创建集群时的连接问题:
library(terra)
library(parallel)

# 创建2核集群
cl <- makeCluster(2)
# 将自定义函数导出到子进程
clusterExport(cl, "testfun")

# 传入集群对象运行并行计算
test2 <- app(x, fun=testfun, cores=cl)

# 计算完成后关闭集群
stopCluster(cl)
  • 检查服务器并行限制:部分远程服务器会限制用户的CPU进程数,或禁用fork模式(出于安全或资源管控),联系管理员确认是否存在这类限制。

  • 升级Terra及依赖包:旧版本Terra的并行模块可能存在bug,更新到最新版本尝试解决:

install.packages("terra", dependencies = TRUE)
  • 替换cores参数为集群对象:直接传入已创建的集群对象,而非核数参数,减少自动集群初始化的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:31:19