微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 R xgboost 包上拟合模型后,如何释放 GPU 内存?

如何解决在 R xgboost 包上拟合模型后,如何释放 GPU 内存?

我需要释放 xgboost 模型使用的 GPU 内存。这个过程对于 python 包来说似乎很简单。在收集了所需的信息后,只需在模型输出上运行 ._del_() 函数,如here 所示。然而,R 的输出对象中没有这样的函数。我怎么能在 R 会话中做同样的事情?

我试过了:

  1. 从内存中删除输出,然后运行 ​​gc()
  2. 使用模型的输出.call()函数
  3. 在单独的进程上运行模型并停止线程。这会释放内存,但当我再次尝试运行时 xgboost 会崩溃。

代码来自 xgboost 的示例:

library('xgboost')

# Simulate N x p random matrix with some binomial response dependent on pp columns
set.seed(111)
N <- 1000000
p <- 50
pp <- 25
X <- matrix(runif(N * p),ncol = p)
betas <- 2 * runif(pp) - 1
sel <- sort(sample(p,pp))
m <- X[,sel] %*% betas - 1 + rnorm(N)
y <- rbinom(N,1,plogis(m))

tr <- sample.int(N,N * 0.75)
dtrain <- xgb.DMatrix(X[tr,],label = y[tr])
dtest <- xgb.DMatrix(X[-tr,label = y[-tr])
wl <- list(train = dtrain,test = dtest)

param <- list(objective = 'reg:logistic',eval_metric = 'auc',subsample = 0.5,nthread = 4,max_bin = 64,tree_method = 'gpu_hist')
pt <- proc.time()
bst_gpu <- xgb.train(param,dtrain,watchlist = wl,nrounds = 50)
proc.time() - pt

我需要从 GPU 的内存中擦除 bst_gpu。有谁知道我怎么能做到这一点?在 python 中,._del_() 函数/方法将附加到 bst_gpu 对象...

谢谢,

解决方法

我设法使用第 3 项解决了它:创建一个单独的进程并停止线程。停止子线程或线程后,GPU 内存将被清除。秘诀在于父 R 会话无法通过 xgboost 访问 GPU,否则会发生以下崩溃。

Error in checkForRemoteErrors(val) : 
  2 nodes produced errors; first error: [23:17:55] /home/share/xgboost/src/c_api/../data/../common/common.h:44: /home/share/xgboost/src/tree/../common/device_helpers.cuh: 182: cudaErrorInitializationError: initialization error
Stack trace:
  [bt] (0) /home/R/x86_64-pc-linux-gnu-library/4.0/xgboost/libs/xgboost.so(+0x3f5828) [0x7f05434ad828]
  [bt] (1) /home/R/x86_64-pc-linux-gnu-library/4.0/xgboost/libs/xgboost.so(dh::ThrowOnCudaError(cudaError,char const*,int)+0x297) [0x7f05434b2ad7]
  [bt] (2) /home/R/x86_64-pc-linux-gnu-library/4.0/xgboost/libs/xgboost.so(dh::CheckComputeCapability()+0x113) [0x7f05436cdfb3]
  [bt] (3) /home/R/x86_64-pc-linux-gnu-library/4.0/xgboost/libs/xgboost.so(xgboost::tree::GPUHistMaker::Configure(std::vector<std::pair<std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::__cxx11::basic_string<char,std::allocator<char> > >,std::allocator<std::pair<std::__cxx1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。