Source code for nv_ingest.framework.orchestration.ray.util.system_tools.memory
# SPDX-FileCopyrightText: Copyright (c) 2024-25, NVIDIA CORPORATION & AFFILIATES.
# All rights reserved.
# SPDX-License-Identifier: Apache-2.0
import time
import uuid
import psutil
import ray
[docs]
def estimate_actor_memory_overhead(
actor_class, iterations=1, stabilization_threshold=1 * 1024 * 1024, wait_time=2, actor_args=None, actor_kwargs=None
):
"""
Estimate the additional system memory overhead when launching a Ray actor of the given actor_class.
Parameters:
actor_class: A Ray remote actor class.
iterations (int): Number of measurement iterations.
stabilization_threshold (int): Maximum difference (in bytes) between min and max measurements to
consider results stable.
wait_time (float): Seconds to wait after spawning or killing an actor for memory to stabilize.
actor_args (list): Positional arguments to pass to the actor's remote() call.
actor_kwargs (dict): Keyword arguments to pass to the actor's remote() call.
Returns:
float: Estimated average overhead in bytes for replicating the actor.
"""
actor_args = actor_args if actor_args is not None else []
actor_kwargs = actor_kwargs if actor_kwargs is not None else {}
measurements = []
iterations = 0 # TODO
for i in range(iterations):
# Record baseline system memory usage.
baseline = psutil.virtual_memory().used
# Spin up a new actor with provided arguments.
actor = actor_class.options(name=f"mem_estimator_{uuid.uuid4()}").remote(*actor_args, **actor_kwargs)
# Allow time for the actor to start.
time.sleep(wait_time)
# Measure memory after actor has started.
after_spawn = psutil.virtual_memory().used
overhead = after_spawn - baseline
measurements.append(overhead)
# Kill the actor.
ray.kill(actor, no_restart=True)
# Allow time for system memory to be released.
time.sleep(wait_time)
if measurements:
_ = max(measurements) - min(measurements)
_ = sum(measurements) / len(measurements)
return 1_500_000_000
# return estimated_overhead Need to come up with a better way to estiamte actor overhead.