acme icon indicating copy to clipboard operation
acme copied to clipboard

OverflowError in _disable_insert_blocking when using samples_per_insert=None

Open KaleabTessera opened this issue 3 years ago • 1 comments

When using samples_per_insert=None, this line returns the following error:

 File "/home/kaleab/anaconda3/envs/dyn-net/lib/python3.9/site-packages/acme/jax/experiments/run_experiment.py", line 75, in run_experiment
    replay_tables, rate_limiters_max_diff = _disable_insert_blocking(replay_tables)
  File "/home/kaleab/anaconda3/envs/dyn-net/lib/python3.9/site-packages/acme/jax/experiments/run_experiment.py", line 296, in _disable_insert_blocking
    max(1, int((rate_limiter_info.max_diff - rate_limiter_info.min_diff) / 2))
OverflowError: cannot convert float infinity to integer

,since rate_limiter_info.max_diff and rate_limiter_info.min_diff are inf, therefore (rate_limiter_info.max_diff - rate_limiter_info.min_diff) / 2) is inf as well.

KaleabTessera avatar Feb 07 '23 06:02 KaleabTessera

Confirmed! This is a bug when using samples_per_insert=None.

Root Cause: When samples_per_insert=None, the rate limiter is unbounded, so max_diff and/or min_diff are inf. The calculation:

int((rate_limiter_info.max_diff - rate_limiter_info.min_diff) / 2)

results in:

  • inf - inf = nan → OverflowError
  • inf - finite = inf → OverflowError (can't convert inf to int)

Fix: Handle infinity/nan cases before converting to int:

diff = rate_limiter_info.max_diff - rate_limiter_info.min_diff
if diff == float('inf') or diff != diff:  # Check for inf or nan
    sample_size = 1
else:
    sample_size = max(1, int(diff / 2))
sample_sizes.append(sample_size)

When the rate limiter is unbounded (no samples_per_insert constraint), we default to sample_size=1 since the exact value doesn't matter for rate limiting purposes.

I've prepared a fix locally. This affects users who want to disable rate limiting entirely by setting samples_per_insert=None.

AryanVBW avatar Dec 04 '25 09:12 AryanVBW