OverflowError in _disable_insert_blocking when using samples_per_insert=None
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.
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.