root icon indicating copy to clipboard operation
root copied to clipboard

[RF] Memory leak when using createNLL

Open AlkaidCheng opened this issue 3 years ago • 0 comments

  • [x] Checked for duplicates

Describe the bug

It seems that in pyROOT, the NLL variable created from RooAbsPdf.createNLL does not get disposed of properly when the variable went out of scope, causing a memory leak.

To Reproduce

import ROOT

ROOT.RooMsgService.instance().getStream(1).removeTopic(ROOT.RooFit.Minimization)

ws = ROOT.RooWorkspace()
ws.factory("Gaussian::pdf(x[0,10],mu[4,0,10],sigma[1.0,0.1,10.0])")
pdf = ws.pdf("pdf")
x = ws.var("x")
x.setRange("SideBandLo", 0, 2)
x.setRange("SideBandHi", 6, 10)
ds = pdf.generate(ROOT.RooArgSet(x), 11000)

import psutil

def _memstat(mem0, mem1):
    MB = 1024 * 1024
    rss_mb = mem1.rss // MB
    vms_mb = mem1.vms // MB
    rss_delta_mb = (mem1.rss - mem0.rss) / MB
    vms_delta_mb = (mem1.vms - mem0.vms) / MB
    print(f"Memory stat: RSS={rss_mb} MB, VMS={vms_mb} MB. Delta RSS={rss_delta_mb:.2f} MB VMS={vms_delta_mb:.2f} MB")
    
def test(pdf, ds):
    nll = pdf.createNLL(ds)
    
proc = psutil.Process()
mem0 = proc.memory_info()
for i in range(int(1e4)):
    test(pdf, ds)
    if (i%1000 == 0):
        mem1 = proc.memory_info()
        _memstat(mem0, mem1)
        mem0 = mem1

This gives

Memory stat: RSS=4009 MB, VMS=5170 MB. Delta RSS=0.00 MB VMS=0.00 MB
Memory stat: RSS=4116 MB, VMS=5278 MB. Delta RSS=107.25 MB VMS=107.15 MB
Memory stat: RSS=4224 MB, VMS=5386 MB. Delta RSS=108.02 MB VMS=108.10 MB
Memory stat: RSS=4333 MB, VMS=5495 MB. Delta RSS=109.05 MB VMS=109.21 MB
Memory stat: RSS=4439 MB, VMS=5601 MB. Delta RSS=106.48 MB VMS=106.48 MB
Memory stat: RSS=4547 MB, VMS=5709 MB. Delta RSS=108.02 MB VMS=107.85 MB
Memory stat: RSS=4656 MB, VMS=5820 MB. Delta RSS=109.05 MB VMS=110.36 MB
Memory stat: RSS=4764 MB, VMS=5927 MB. Delta RSS=108.02 MB VMS=107.75 MB
Memory stat: RSS=4872 MB, VMS=6035 MB. Delta RSS=108.02 MB VMS=107.95 MB
Memory stat: RSS=4979 MB, VMS=6144 MB. Delta RSS=106.81 MB VMS=108.52 MB

Setup

ROOT 6.24, 6.26 (from LCG)

AlkaidCheng avatar Sep 21 '22 07:09 AlkaidCheng