perf#
Utility functions for performance measurement.
Classes
A timer that accumulates time across multiple calls and works for both CUDA and non-CUDA operations. |
|
A Timer that can be used as a decorator as well. |
Functions
Clear the CUDA cache. |
|
Bytes a new allocation on |
|
Get memory usage of specified GPU in Bytes. |
|
GPUs this process already holds memory on; querying any other would create a context on it. |
|
Get used GPU memory as a fraction of total memory. |
|
Clear the CUDA cache every |
|
Simple GPU memory report. |
- class AccumulatingTimer#
Bases:
ContextDecoratorA timer that accumulates time across multiple calls and works for both CUDA and non-CUDA operations.
- __init__(name='')#
Initialize AccumulatingTimer.
- Parameters:
name – Name of the timer for reporting
use_cuda – Whether to synchronize CUDA before timing
- classmethod get_call_count(name)#
Get the number of calls for a timer.
- classmethod get_total_time(name)#
Get the total accumulated time for a timer in milliseconds.
- classmethod report()#
Report the accumulated times and call counts.
- classmethod reset()#
Reset the accumulated times and call counts.
- start()#
Start the timer.
- Return type:
None
- stop()#
End the timer and return the elapsed time in milliseconds.
- Return type:
float
- class Timer#
Bases:
ContextDecoratorA Timer that can be used as a decorator as well.
- __init__(name='')#
Initialize Timer.
- start()#
Start the timer.
- stop()#
End the timer.
- Return type:
float
- clear_cuda_cache()#
Clear the CUDA cache.
- get_available_gpu_memory(gpu)#
Bytes a new allocation on
gpucan get: the driver’s free memory and our cached blocks.Free pieces of partly used cached blocks are left out: a large allocation cannot use them, and PyTorch cannot hand them back to the driver.
- Parameters:
gpu (int)
- Return type:
int
- get_cuda_memory_stats(device=None)#
Get memory usage of specified GPU in Bytes.
- get_process_gpus()#
GPUs this process already holds memory on; querying any other would create a context on it.
- Return type:
list[int]
- get_used_gpu_mem_fraction(device='cuda:0')#
Get used GPU memory as a fraction of total memory.
- Parameters:
device – Device identifier (default: “cuda:0”)
- Returns:
- Fraction of GPU memory currently used (0.0 to 1.0).
Returns 0.0 if CUDA is not available.
- Return type:
float
- maybe_clear_cuda_cache(slack_bytes=4294967296)#
Clear the CUDA cache every
_EMPTY_CACHE_CHECK_EVERYcalls, if there is slack to reclaim.empty_cache()syncs the device and hands cached blocks back to the driver, so calling it after every packed weight costs more than it saves. The counter restarts on each check, so the interval is measured from the last one rather than from process start. A caller that makes fewer than_EMPTY_CACHE_CHECK_EVERYcalls may not reclaim at all – useclear_cuda_cache()if you need a guaranteed one.- Parameters:
slack_bytes (int)
- Return type:
None
- report_memory(name='', rank=0, device=None)#
Simple GPU memory report.