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

rugarch包集群并行下arfimafit异常:部分工作进程挂起

rugarch包arfimafit集群并行异常:1-2个工作进程无法终止

在使用rugarch包的arfimafit方法估计模型时,遇到集群并行异常:调用该方法后,总有1-2个工作进程始终无法停止。该问题仅出现在基于Rsolnp包的求解器(solnp、gosolnp)中,使用nlminb或lbfgs求解器时可正常运行。

复现代码

library(aTSA);
library(parallel);
library(rugarch);
library(pracma);


maxThreads <- max(1, detectCores()-1);
internalCluster <- makeCluster(maxThreads, homogeneous=FALSE, XDR=FALSE);

libraries <- c('data.table',  'rugarch', 'arfima', 'portes');
clusterExport(internalCluster, c('libraries'));
clusterEvalQ(internalCluster, { invisible(lapply(libraries, require, character.only=TRUE)); });

ARParam <- MAParam <- 0:3;
distribs <- c("norm", "snorm", "std", "sstd", "ged", "sged");
mean <- c(TRUE, FALSE);

arfimaNeed <- TRUE;
dFrac <- 0.1;

grid <- expand.grid(ARParam, MAParam, distribs, mean);  
names(grid) <- c("AR", "MA", "DISTRIB", "MEAN");
permutationVec <- randperm(c(1:nrow(grid)), nrow(grid));

permGrid <- grid[permutationVec, ];

seriesGlobal <- parLapply(internalCluster, 1:1000, function(i) { as.numeric(arfima.sim(100, model = list(phi = c(0.2, 0.1), theta = c(0.5), dfrac = .2, dint = 0))); });


for (i in 1:1000)
{
  cat('\n Iteration ', i, ' started \n');
  
  ##series <- rnorm(100);   
  series <- seriesGlobal[[i]];
  
  tmpEnv <- new.env(hash = FALSE);
  assign('arfimaNeed', arfimaNeed, envir = tmpEnv);
  assign('series', series, envir = tmpEnv);
  assign('dFrac', dFrac, envir = tmpEnv);
  assign('permGrid', permGrid, envir = tmpEnv);
  
  clusterExport(internalCluster , c('permGrid', 'arfimaNeed', 'dFrac', 'series'), envir = tmpEnv);
  
  specs <- parLapply(internalCluster, 1:nrow(permGrid), function(i) { arfimaspec(mean.model = list(armaOrder = c(permGrid[i, "AR"], permGrid[i, "MA"]), include.mean = permGrid[i, "MEAN"], 
                                                                                                   arfima = arfimaNeed), 
                                                                                 distribution.model = as.character(permGrid[i, "DISTRIB"]), 
                                                                                 fixed.pars = list(arfima = dFrac)); });
  models <- parLapply(internalCluster, specs, function(elem) 
  {
      try(arfimafit(spec = elem, data = series, solver = "gosolnp"), silent = TRUE);
  });
  
  cat('\n Iteration ', i, ' finished \n');
}

stopCluster(internalCluster);
rm(internalCluster);
gc(T, T);

执行结果

执行结果1
执行结果2

系统环境

  • AMD Ryzen 5950X
  • 128GB内存
  • AMD64 Family 25 Model 33 Stepping 2 AuthenticAMD ~3401MHz
  • BIOS版本:American Megatrends Inc. 4408,2022年10月28日
  • 操作系统:Windows 11(版本10.0.22621)
  • 已测试R版本:4.2.2、4.2.2 Patched、4.3 Devel
  • gcc版本:12.2.0(当前使用RTools 4.3)

所有包均使用-m64 -O3 -w -march=native -mfpmath=both -mfma -mtune=native选项编译。尝试过使用AMD BLIS + LibFlame库(ST模式)以及添加-fno-fma编译的OpenBLAS,问题均存在。此前在Intel Skylake-6770K+MKL环境下,其他代码运行正常。

排查补充

  • 问题仅出现在基于Rsolnp包的求解器(solnp、gosolnp)中,nlminb和lbfgs求解器可正常运行
  • 尝试安装Rsolnp和truncnorm二进制包后,问题仍未解决

请问是否有人遇到过rugarch包的此类问题?感谢解答。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:32:23