Ubuntu 20.04下tidymodels运行xgboost出现C栈使用量接近上限错误
Ubuntu服务器tidymodels运行xgboost C栈超限问题解决方案
以下为可直接落地的排查修复步骤:
- 调整R内置栈上限配置
不要依赖shell层面的ulimit -s设置,该配置仅作用于当前会话,R进程启动时往往无法继承。可在R启动配置文件中显式设置栈大小:- 编辑用户级配置文件
~/.Rprofile(全局配置可修改/etc/R/Rprofile.site) - 加入配置项:
invisible(utils::setCStackLimit(32 * 1024 * 1024))
此处设置为32M,远高于报错提示的7.9M阈值,可根据实际运行情况上调。
- 编辑用户级配置文件
- 调整并行运行参数
若使用future框架作为tidymodels的并行后端,需在声明并行策略时显式指定子进程的栈参数,避免子进程继承默认小栈配置:
其中plan(multisession, workers = 3, rscript_args = c("--max-ppsize=500000", "--stack-size=32000"))--stack-size单位为KB,32000即对应32M栈空间。 - 调整xgboost运行参数
Linux下xgboost多线程计算的递归逻辑容易触发栈溢出,可先显式将nthread参数设置为1测试运行,确认问题根源后再逐步上调线程数。 - 精简预处理逻辑
当前数据集特征维度较高(900列),若预处理步骤中包含无限制的交互项生成、高维PCA计算等操作,会大幅提升递归深度触发栈溢出,可在预处理流水线开头加入step_zv()移除零方差特征,减少后续计算压力。 - 兜底排查方案
若你使用conda安装的R环境,可替换为Ubuntu官方apt源安装的R版本,conda打包的R存在硬编码栈上限的问题,修改配置也无法生效。
内容的提问来源于stack exchange,提问作者Pat
相关产品推荐
相关产品推荐

