Skip to content

local_process_memory_utilization

Memory utilization measurement for local training processes.

LocalProcessMemoryUtilization

Bases: ProcessMeasurement

Measure memory utilization for a local training process.

Source code in mlte/measurement/memory/local_process_memory_utilization.py
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
class LocalProcessMemoryUtilization(ProcessMeasurement):
    """Measure memory utilization for a local training process."""

    def __init__(
        self, identifier: Optional[str] = None, group: Optional[str] = None
    ):
        """
        Initialize a LocalProcessMemoryUtilization instance.

        :param identifier: A unique identifier for the measurement
        :param group: An optional group id, if we want to group this measurement with others.
        """
        super().__init__(identifier, group)

    # Overriden.
    def __call__(
        self, pid: int, unit: Unit = Units.kilobyte, poll_interval: int = 1
    ) -> MemoryStatistics:
        """
        Monitor memory utilization of process at `pid` until exit.

        :param pid: The process identifier
        :param poll_interval: The poll interval, in seconds
        :param unit: The unit to return the memory size in, defaults to kilobyte (Units.kilobyte).
        :return: The captured statistics
        """
        captures = []
        while True:
            rss_in_kb, running = _get_memory_usage_psutil(pid)
            if rss_in_kb == 0 and not running:
                break
            captures.append(rss_in_kb)
            time.sleep(poll_interval)

        # Calculate stats, use kilobytes as the psutil function returns values in that unit.
        avg = 0 * Units.kilobyte
        minimum = 0 * Units.kilobyte
        maximum = 0 * Units.kilobyte

        if len(captures) > 0:
            avg = int(sum(captures) / len(captures)) * Units.kilobyte
            minimum = min(captures) * Units.kilobyte
            maximum = max(captures) * Units.kilobyte

        # Convert to provided unit if needed.
        avg = avg.to(unit)
        minimum = minimum.to(unit)
        maximum = maximum.to(unit)

        return MemoryStatistics(avg, minimum, maximum, unit=unit)

    # Overriden.
    @classmethod
    def get_output_type(cls) -> type[MemoryStatistics]:
        return MemoryStatistics

__call__(pid, unit=Units.kilobyte, poll_interval=1)

Monitor memory utilization of process at pid until exit.

Parameters:

Name Type Description Default
pid int

The process identifier

required
poll_interval int

The poll interval, in seconds

1
unit Unit

The unit to return the memory size in, defaults to kilobyte (Units.kilobyte).

kilobyte

Returns:

Type Description
MemoryStatistics

The captured statistics

Source code in mlte/measurement/memory/local_process_memory_utilization.py
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
def __call__(
    self, pid: int, unit: Unit = Units.kilobyte, poll_interval: int = 1
) -> MemoryStatistics:
    """
    Monitor memory utilization of process at `pid` until exit.

    :param pid: The process identifier
    :param poll_interval: The poll interval, in seconds
    :param unit: The unit to return the memory size in, defaults to kilobyte (Units.kilobyte).
    :return: The captured statistics
    """
    captures = []
    while True:
        rss_in_kb, running = _get_memory_usage_psutil(pid)
        if rss_in_kb == 0 and not running:
            break
        captures.append(rss_in_kb)
        time.sleep(poll_interval)

    # Calculate stats, use kilobytes as the psutil function returns values in that unit.
    avg = 0 * Units.kilobyte
    minimum = 0 * Units.kilobyte
    maximum = 0 * Units.kilobyte

    if len(captures) > 0:
        avg = int(sum(captures) / len(captures)) * Units.kilobyte
        minimum = min(captures) * Units.kilobyte
        maximum = max(captures) * Units.kilobyte

    # Convert to provided unit if needed.
    avg = avg.to(unit)
    minimum = minimum.to(unit)
    maximum = maximum.to(unit)

    return MemoryStatistics(avg, minimum, maximum, unit=unit)

__init__(identifier=None, group=None)

Initialize a LocalProcessMemoryUtilization instance.

Parameters:

Name Type Description Default
identifier Optional[str]

A unique identifier for the measurement

None
group Optional[str]

An optional group id, if we want to group this measurement with others.

None
Source code in mlte/measurement/memory/local_process_memory_utilization.py
49
50
51
52
53
54
55
56
57
58
def __init__(
    self, identifier: Optional[str] = None, group: Optional[str] = None
):
    """
    Initialize a LocalProcessMemoryUtilization instance.

    :param identifier: A unique identifier for the measurement
    :param group: An optional group id, if we want to group this measurement with others.
    """
    super().__init__(identifier, group)

MemoryStatistics

Bases: CommonStatistics

The MemoryStatistics class encapsulates data and functionality for tracking and updating memory utilization statistics for a running process.

Source code in mlte/measurement/memory/local_process_memory_utilization.py
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class MemoryStatistics(CommonStatistics):
    """
    The MemoryStatistics class encapsulates data
    and functionality for tracking and updating memory
    utilization statistics for a running process.
    """

    DEFAULT_UNIT = Units.kilobyte

    def __init__(self, avg: int, min: int, max: int, unit: Unit = DEFAULT_UNIT):
        """
        Initialize a MemoryStatistics instance.

        :param avg: The average memory utilization
        :param min: The minimum memory utilization
        :param max: The maximum memory utilization
        :param unit: the unit the values comes in, as a value from Units; defaults to Units.kilobyte
        """
        super().__init__(avg, min, max, unit)

__init__(avg, min, max, unit=DEFAULT_UNIT)

Initialize a MemoryStatistics instance.

Parameters:

Name Type Description Default
avg int

The average memory utilization

required
min int

The minimum memory utilization

required
max int

The maximum memory utilization

required
unit Unit

the unit the values comes in, as a value from Units; defaults to Units.kilobyte

DEFAULT_UNIT
Source code in mlte/measurement/memory/local_process_memory_utilization.py
29
30
31
32
33
34
35
36
37
38
def __init__(self, avg: int, min: int, max: int, unit: Unit = DEFAULT_UNIT):
    """
    Initialize a MemoryStatistics instance.

    :param avg: The average memory utilization
    :param min: The minimum memory utilization
    :param max: The maximum memory utilization
    :param unit: the unit the values comes in, as a value from Units; defaults to Units.kilobyte
    """
    super().__init__(avg, min, max, unit)