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);
执行结果


系统环境
- 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
相关产品推荐
相关产品推荐

