gpt4 book ai didi

限制loess在R中的多核使用

转载 作者:行者123 更新时间:2023-12-02 03:12:51 25 4
gpt4 key购买 nike

我尝试多次使用 loess() 函数将 +- 70.000 个值拟合为两个变量的函数。我想使用这种拟合来消除数据的趋势。我的问题是,一旦启动 loess 功能,R session 就会占用系统上所有可用的核心,这对于同一计算集群上的其他用户来说是不体贴的。

相关代码类似于以下内容:

# Approximation of the data
df <- data.frame(y = rpois(70000, rnorm(70000, 10, 2)), # y is count data
x = 50000 - rpois(70000, 100),
z = runif(70000))

# The problematic operation
fit <- loess(y ~ x + z, data = df)

当我在本地计算机上运行此示例时,它只占用 1 个核心,但在集群上它会占用尽可能多的核心(最多 48 个)。理想情况下,我希望 loess() 仅在 1 个核心上运行。

我试图跟踪loess代码中的任何多核参数,但我找不到。我知道 loess 调用 stats:::simpleLoess,后者又调用 C code ,依次调用 Fortran代码。我没有 C 或 Fortran 经验,并且无法弄清楚如何限制此函数的 CPU 使用率。

有人对如何限制 loess 函数的 CPU 使用率有任何建议吗?

最佳答案

我的知识不足以评论所有这些工作原理的具体细节,但我知道 C++ 和 FORTRAN for R 通常是使用 OpenMP framework 构建的用于多线程编程。根据经验,我确实知道,如果您在启动 R 之前设置 OMP_NUM_THREADS 参数,或者在 R session 中设置它,则可以解决您的问题。

假设您想为 loess 函数使用 2 个线程。在启动 R 之前,您需要执行以下操作($ 表示在 shell session 中键入此内容):

$ OMP_NUM_THREADS=2 R [whatever other options you use to launch R]

以下是如何在 R 中执行此操作(> 表示交互式 R session ):

> Sys.setenv("OMP_NUM_THREADS" = 2)

如果您需要从 R 内部检查变量,您可以执行以下操作(这将返回带有数字的字符向量):

> Sys.getenv("OMP_NUM_THREADS")
# The result in our example will be "2"

为了完整起见,如果您希望获得有关这些函数的更多信息,请务必使用 ?Sys.setenv?Sys.getenv,并查看 this site有关 OMP_NUM_THREADS 的详细信息。

希望有帮助!

关于限制loess在R中的多核使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57109522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com