Possible memory leak in mcmc function
- Dominant language
- C++
- Stars
- 607
- Forks
- 67
- Avg merge
- 3d 8h
- Merged PRs (30d)
- 1
Description
It seems to me that there is a possible memory leak in the mcmc function, or the underlying tensorflow library.
When the mcmc function is executed repeatedly, the memory usage of R goes on increasing. This is evident from the following example.
``` r
library(greta)
#>
#> Attaching package: 'greta'
#> The following objects are masked from 'package:stats':
#>
#> binomial, cov2cor, poisson
#> The following objects are masked from 'package:base':
#>
#> %*%, apply, backsolve, beta, chol2inv, colMeans, colSums,
#> diag, eigen, forwardsolve, gamma, identity, rowMeans, rowSums,
#> sweep, tapply
library(titanic)
library(pryr)
#> Registered S3 method overwritten by 'pryr':
#> method from
#> print.bytes Rcpp
#>
#> Attaching package: 'pryr'
#> The following object is masked from 'package:greta':
#>
#> f
# function to run mcmc and get samples
drawsample = function(X, y, w_mean, w_sigma){
# Prior
w = multivariate_normal(t(w_mean), w_sigma, n_realisations = 1)
# define distribution over output
linear = X %*% t(w)
p = ilogit(linear)
distribution(y) = bernoulli(p)
# define model
m = model(w)
plot(m)
# draw samples
draws <- mcmc(m, n_samples = 1000, chains = 1)
#return(draws)
}
cols = c('Age', 'Parch', 'Fare', 'Survived')
data = titanic_train[cols]
data = data[complete.cases(data), ]
X = data[c('Age', 'Parch', 'Fare')]
y = data$Survived
num_features = 3
w_mean <- rep(0, num_features)
w_sigma = base::diag(num_features)
for(iter in 1:10){
print(mem_change(drawsample(X,y, w_mean, w_sigma)))
print(mem_used())
}
#> Registered S3 methods overwritten by 'ggplot2':
#> method from
#> [.quosures rlang
#> c.quosures rlang
#> print.quosures rlang
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 15s
warmup ==== 100/1000 | eta: 11s
warmup ====== 150/1000 | eta: 9s
warmup ======== 200/1000 | eta: 8s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 6s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 5s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 4s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 2s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 4s
sampling ==== 100/1000 | eta: 3s
sampling ====== 150/1000 | eta: 4s
sampling ======== 200/1000 | eta: 4s
sampling ========== 250/1000 | eta: 3s
sampling =========== 300/1000 | eta: 3s
sampling ============= 350/1000 | eta: 3s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 3s
sampling =================== 500/1000 | eta: 3s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 2s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 1s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 33.7 MB
#> 149 MB
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 15s
warmup ==== 100/1000 | eta: 11s
warmup ====== 150/1000 | eta: 9s
warmup ======== 200/1000 | eta: 8s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 6s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 5s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 4s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 2s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 5s
sampling ==== 100/1000 | eta: 5s
sampling ====== 150/1000 | eta: 4s
sampling ======== 200/1000 | eta: 4s
sampling ========== 250/1000 | eta: 4s
sampling =========== 300/1000 | eta: 4s
sampling ============= 350/1000 | eta: 3s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 3s
sampling =================== 500/1000 | eta: 3s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 2s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 1s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 660 kB
#> 149 MB
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 15s
warmup ==== 100/1000 | eta: 10s
warmup ====== 150/1000 | eta: 8s
warmup ======== 200/1000 | eta: 7s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 5s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 5s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 4s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 2s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 4s
sampling ==== 100/1000 | eta: 4s
sampling ====== 150/1000 | eta: 4s
sampling ======== 200/1000 | eta: 4s
sampling ========== 250/1000 | eta: 4s
sampling =========== 300/1000 | eta: 3s
sampling ============= 350/1000 | eta: 3s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 3s
sampling =================== 500/1000 | eta: 2s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 1s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 0s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 576 kB
#> 149 MB
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 14s
warmup ==== 100/1000 | eta: 10s
warmup ====== 150/1000 | eta: 8s
warmup ======== 200/1000 | eta: 7s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 5s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 4s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 3s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 2s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 5s
sampling ==== 100/1000 | eta: 4s
sampling ====== 150/1000 | eta: 4s
sampling ======== 200/1000 | eta: 3s
sampling ========== 250/1000 | eta: 3s
sampling =========== 300/1000 | eta: 3s
sampling ============= 350/1000 | eta: 3s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 3s
sampling =================== 500/1000 | eta: 2s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 1s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 0s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 637 kB
#> 150 MB
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 16s
warmup ==== 100/1000 | eta: 11s
warmup ====== 150/1000 | eta: 9s
warmup ======== 200/1000 | eta: 8s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 6s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 4s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 4s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 2s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 4s
sampling ==== 100/1000 | eta: 5s
sampling ====== 150/1000 | eta: 5s
sampling ======== 200/1000 | eta: 4s
sampling ========== 250/1000 | eta: 4s
sampling =========== 300/1000 | eta: 4s
sampling ============= 350/1000 | eta: 3s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 3s
sampling =================== 500/1000 | eta: 2s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 1s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 0s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 644 kB
#> 150 MB
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 15s
warmup ==== 100/1000 | eta: 10s
warmup ====== 150/1000 | eta: 9s
warmup ======== 200/1000 | eta: 8s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 6s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 5s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 4s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 3s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 5s
sampling ==== 100/1000 | eta: 5s
sampling ====== 150/1000 | eta: 5s
sampling ======== 200/1000 | eta: 4s
sampling ========== 250/1000 | eta: 4s
sampling =========== 300/1000 | eta: 4s
sampling ============= 350/1000 | eta: 3s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 3s
sampling =================== 500/1000 | eta: 3s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 2s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 1s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 589 kB
#> 150 MB
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 16s
warmup ==== 100/1000 | eta: 11s
warmup ====== 150/1000 | eta: 9s
warmup ======== 200/1000 | eta: 8s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 6s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 5s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 4s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 2s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 4s
sampling ==== 100/1000 | eta: 5s
sampling ====== 150/1000 | eta: 5s
sampling ======== 200/1000 | eta: 5s
sampling ========== 250/1000 | eta: 4s
sampling =========== 300/1000 | eta: 4s
sampling ============= 350/1000 | eta: 4s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 3s
sampling =================== 500/1000 | eta: 3s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 2s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 1s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 655 kB
#> 151 MB
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 15s
warmup ==== 100/1000 | eta: 10s
warmup ====== 150/1000 | eta: 8s
warmup ======== 200/1000 | eta: 7s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 5s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 4s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 4s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 2s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 5s
sampling ==== 100/1000 | eta: 4s
sampling ====== 150/1000 | eta: 4s
sampling ======== 200/1000 | eta: 4s
sampling ========== 250/1000 | eta: 3s
sampling =========== 300/1000 | eta: 3s
sampling ============= 350/1000 | eta: 3s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 2s
sampling =================== 500/1000 | eta: 2s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 1s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 0s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 613 kB
#> 151 MB
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 15s
warmup ==== 100/1000 | eta: 10s
warmup ====== 150/1000 | eta: 9s
warmup ======== 200/1000 | eta: 8s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 5s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 4s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 4s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 2s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 4s
sampling ==== 100/1000 | eta: 4s
sampling ====== 150/1000 | eta: 4s
sampling ======== 200/1000 | eta: 4s
sampling ========== 250/1000 | eta: 4s
sampling =========== 300/1000 | eta: 4s
sampling ============= 350/1000 | eta: 3s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 3s
sampling =================== 500/1000 | eta: 3s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 2s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 0s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 625 kB
#> 151 MB
#>
warmup 0/1000 | eta: ?s
warmup == 50/1000 | eta: 14s
warmup ==== 100/1000 | eta: 10s
warmup ====== 150/1000 | eta: 8s
warmup ======== 200/1000 | eta: 7s
warmup ========== 250/1000 | eta: 7s
warmup =========== 300/1000 | eta: 6s
warmup ============= 350/1000 | eta: 5s
warmup =============== 400/1000 | eta: 5s
warmup ================= 450/1000 | eta: 4s
warmup =================== 500/1000 | eta: 4s
warmup ===================== 550/1000 | eta: 3s
warmup ======================= 600/1000 | eta: 3s
warmup ========================= 650/1000 | eta: 3s
warmup =========================== 700/1000 | eta: 2s
warmup ============================ 750/1000 | eta: 2s
warmup ============================== 800/1000 | eta: 2s
warmup ================================ 850/1000 | eta: 1s
warmup ================================== 900/1000 | eta: 1s
warmup ==================================== 950/1000 | eta: 0s
warmup ====================================== 1000/1000 | eta: 0s
#>
sampling 0/1000 | eta: ?s
sampling == 50/1000 | eta: 4s
sampling ==== 100/1000 | eta: 3s
sampling ====== 150/1000 | eta: 4s
sampling ======== 200/1000 | eta: 4s
sampling ========== 250/1000 | eta: 3s
sampling =========== 300/1000 | eta: 3s
sampling ============= 350/1000 | eta: 3s
sampling =============== 400/1000 | eta: 3s
sampling ================= 450/1000 | eta: 3s
sampling =================== 500/1000 | eta: 2s
sampling ===================== 550/1000 | eta: 2s
sampling ======================= 600/1000 | eta: 2s
sampling ========================= 650/1000 | eta: 2s
sampling =========================== 700/1000 | eta: 1s
sampling ============================ 750/1000 | eta: 1s
sampling ============================== 800/1000 | eta: 1s
sampling ================================ 850/1000 | eta: 1s
sampling ================================== 900/1000 | eta: 0s
sampling ==================================== 950/1000 | eta: 0s
sampling ====================================== 1000/1000 | eta: 0s
#> 668 kB
#> 152 MB
```
Created on 2019-05-04 by the [reprex package](https://reprex.tidyverse.org) (v0.2.1)
Contributor guide
Assessment
This issue has not been assessed yet.