如何在使用mgcv::gam时控制BLAS并行化?
解决GAM模型BLAS自动并行占用过多核心的问题
你的判断没错,核心占用过高是因为OpenBLAS默认会使用全部可用CPU线程,和gam.control()的线程设置无关——后者只控制gam自身的并行逻辑,不影响底层BLAS库的并行行为。以下是具体控制方法:
临时设置(仅当前R会话生效)
在运行gam()模型之前,执行以下代码指定BLAS使用的线程数(示例设为2,可根据需求调整):
Sys.setenv(OPENBLAS_NUM_THREADS = 2)
永久设置(每次启动R自动生效)
方法1:修改R配置文件
编辑用户目录下的.Rprofile文件(如果没有就新建),添加一行:
Sys.setenv(OPENBLAS_NUM_THREADS = 2)
下次启动R时会自动加载该设置。
方法2:系统层面设置环境变量
编辑系统环境变量配置文件/etc/environment,添加:
OPENBLAS_NUM_THREADS=2
保存后重启系统,或执行source /etc/environment使设置立即生效。
验证设置是否生效
执行以下命令查看当前OpenBLAS的线程数:
system("openblas-config --show-threads")
运行模型时再用top命令观察CPU使用率,确认核心占用符合预期。
内容的提问来源于stack exchange,提问作者Ben Bolker
相关产品推荐
相关产品推荐

