Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Data] Refine estimate of object store memory usage from pending task outputs #43298

Merged
merged 5 commits into from
Feb 21, 2024

Conversation

bveeramani
Copy link
Member

@bveeramani bveeramani commented Feb 20, 2024

Why are these changes needed?

Ray Core buffers blocks produced by running tasks. To estimate the amount of object store usage from buffered blocks, we use the following formula:

self.num_tasks_running
* estimated_bytes_per_output
* context._max_num_blocks_in_streaming_gen_buffer

This expression is an overestimation because of the following reasons:

  1. num_tasks_running represents the number of launched tasks, not the number of actually running tasks. This is especially an issue with ActorPoolMapOperator, because we launch multiple tasks per actor, but only one task runs at at time per actor.
  2. context._max_num_blocks_in_streaming_gen_buffer the maximum number of buffered blocks, not the typical number of buffered blocks. Often, tasks only produce one output, so the number of buffered outputs is at most one.

This PR addresses the two issues described above.

Related issue number

Checks

  • I've signed off every commit(by using the -s flag, i.e., git commit -s) in this PR.
  • I've run scripts/format.sh to lint the changes in this PR.
  • I've included any doc changes needed for https://docs.ray.io/en/master/.
    • I've added any new APIs to the API Reference. For example, if I added a
      method in Tune, I've added it in doc/source/tune/api/ under the
      corresponding .rst file.
  • I've made sure the tests are passing. Note that there might be a few flaky tests, see the recent failures at https://flakey-tests.ray.io/
  • Testing Strategy
    • Unit tests
    • Release tests
    • This PR is not tested :(

Signed-off-by: Balaji Veeramani <[email protected]>
Signed-off-by: Balaji Veeramani <[email protected]>
Signed-off-by: Balaji Veeramani <[email protected]>
Comment on lines +192 to +196
num_tasks_running = self.num_tasks_running
if isinstance(self._op, ActorPoolMapOperator):
num_tasks_running = min(
num_tasks_running, self._op._actor_pool.num_active_actors()
)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't like how this couples OpRuntimeMetrics with ActorPoolMapOperator, but not sure how else to implement it. Open to alternative implementations.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can also add a method on the operator side to let it report the actual number. but that sounds a bit too over design. current way is fine as well.

Signed-off-by: Balaji Veeramani <[email protected]>
Signed-off-by: Balaji Veeramani <[email protected]>
@bveeramani bveeramani merged commit 38106e3 into ray-project:master Feb 21, 2024
9 checks passed
@bveeramani bveeramani deleted the improve-estimate branch February 21, 2024 22:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants