pip install tmprofile
from tmprofile import Profile
with Profile() as profiler:
f(...) # some intensive code
# profile is automatically saved as a json file.
# display elapsed time, RAM & VRAM consumption evolution
profiler.print()
profiler.plot()from tmprofile import profile
@profile()
f(...) # some intensive code
# profile is automatically saved as a json file.name (str): Name of the profiler. Will be used to name the saved file. Required for context manager. For decorator, will use fonction' name if no name is provided.verbose (bool): If True, will print logged values at the end of profiling (i.e. on exit as a context manager, on function's return as a decorator). Defaults to False.gpu_idx (int): Which gpu's VRAM consumption has to be monitored. Default to0.time_delta (float): Time to wait (in second) between two RAM / VRAM consumption logging. Defaults to0.2.output_dir (str | Path): Where to write the logged values (as json). Defaults to.tmprofile.filename (str | Path, optional): Name of the saved json file. If no name is given, will used the profiler name (seenameabove).
Each time it is called, the profiler will saved a file.
The filepath will be <output_dir>/filename.json. By default, <output_dir> is .tmprofile/ and <filename> is:
<name>.jsonifnamewas specified.profile.jsonif the profiler is a context manager andnamewas NOT specified.<module>::<function>.jsonif the profiler is a decorator andnamewas NOT specified.
Since this profiler runs in a separate process, it will gracefully shutdown if the main programm is interrupted.
The core of this code (asynchronous RAM/VRAM logging) is taken from Thomas Rouch's code here.