greta-dev / greta-dev/greta

Possible memory leak in mcmc function

Open
#279 0 comments 0 reactions 0 assignees View on GitHub
bug performance samplers
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.