SabaPivot's picture
Upgrade canonical logbook from full-score peer evidence with attribution
2042bc3 verified
Raw
History Blame Contribute Delete
1.4 kB
import os, time, threading
import psutil
import torch
import os, time, threading
import psutil
class PeakRSS:
def __init__(self, interval=0.01, include_children=True):
self.interval = interval
self.include_children = include_children
self.proc = psutil.Process(os.getpid())
self._stop = threading.Event()
self.peak = 0
self._thread = None
def _rss_tree(self):
total = 0
# self
try:
total += self.proc.memory_info().rss
except psutil.Error:
pass
if self.include_children:
for ch in self.proc.children(recursive=True):
try:
total += ch.memory_info().rss
except psutil.Error:
pass
return total
def _poll(self):
while not self._stop.is_set():
rss = self._rss_tree()
if rss > self.peak:
self.peak = rss
time.sleep(self.interval)
def __enter__(self):
self.peak = self._rss_tree()
self._stop.clear()
self._thread = threading.Thread(target=self._poll, daemon=True)
self._thread.start()
return self
def __exit__(self, exc_type, exc, tb):
self._stop.set()
if self._thread is not None:
self._thread.join()
def bytes_to_gb(x):
return x / (1024**3)