在 R xgboost 包上拟合模型后,如何释放 GPU 内存?
After fitting a model on R xgboost package, how can I release GPU memory?
我需要释放 xgboost 模型使用的 GPU 显存。 python 包的过程似乎很简单。只需 运行 ._del_() 收集后模型输出的函数您需要的信息如 here 所示。但是,R 的输出对象中没有这样的函数。我怎样才能在 R 会话中做同样的事情?
我试过:
- 从内存中删除输出,然后 运行ning gc().
- 使用模型的输出 .call() 函数
- 运行在单独的进程上运行模型并停止线程。这会释放内存,但当我再次尝试 运行 时 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_() function/method 将附加到 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::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx1
我需要释放 xgboost 模型使用的 GPU 显存。 python 包的过程似乎很简单。只需 运行 ._del_() 收集后模型输出的函数您需要的信息如 here 所示。但是,R 的输出对象中没有这样的函数。我怎样才能在 R 会话中做同样的事情?
我试过:
- 从内存中删除输出,然后 运行ning gc().
- 使用模型的输出 .call() 函数
- 运行在单独的进程上运行模型并停止线程。这会释放内存,但当我再次尝试 运行 时 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_() function/method 将附加到 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::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx1