# Infinite loop inside SampleBatch.\_get\_slice\_indices

**URL:** <https://discuss.ray.io/t/infinite-loop-inside-samplebatch-get-slice-indices/1759>\
**Category:** RLlib\
**Created:** [April 16, 2021, 2:39pm UTC](https://discuss.ray.io/t/infinite-loop-inside-samplebatch-get-slice-indices/1759 "2021-04-16T14:39:51Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Maxime\_Riche](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/maxime_riche/32/731_2.png) [@Maxime\_Riche](https://discuss.ray.io/u/Maxime_Riche)\
**Post date:** [April 16, 2021, 2:39pm UTC](https://discuss.ray.io/t/infinite-loop-inside-samplebatch-get-slice-indices/1759/1 "2021-04-16T14:39:51Z")

</div>

You can get this infinite loop while working with R2D2 (with DQN+LSTM), and when forgetting to change the trainer from DQNTrainer to R2D2Trainer, then you can get an infinite loop inside SampleBatch.\_get\_slice\_indices

Debugging that is a bit painful.  
In my debugging setup, I had: slice\_size = 1 and self.seq\_lens containing 2s.

Maybe this assert would work:  
assert self.seq\_lens[idx] \< slice\_size

```
class SampleBatch(dict):
[...]
    def _get_slice_indices(self, slice_size):
        i = 0
        slices = []
        if self.seq_lens is not None and len(self.seq_lens) > 0:
            start_pos = 0
            current_slize_size = 0
            idx = 0
            while idx < len(self.seq_lens):
                seq_len = self.seq_lens[idx]
                current_slize_size += seq_len
                # Complete minibatch -> Append to slices.
                if current_slize_size >= slice_size:
                    slices.append((start_pos, start_pos + slice_size))
                    start_pos += slice_size
                    if current_slize_size > slice_size:
                        overhead = current_slize_size - slice_size
                        start_pos -= seq_len - overhead
                        idx -= 1
                    current_slize_size = 0
                idx += 1
        else:
            while i < self.count:
                slices.append((i, i + slice_size))
                i += slice_size
        return slices
```

---

<div class="post-metadata">

**Author:** ![bill-anyscale](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/bill-anyscale/32/724_2.png) [@bill-anyscale](https://discuss.ray.io/u/bill-anyscale)\
**Post date:** [April 16, 2021, 7:57pm UTC](https://discuss.ray.io/t/infinite-loop-inside-samplebatch-get-slice-indices/1759/2 "2021-04-16T19:57:13Z")

</div>

Hey Maxime, could you clarify your question? I’m not 100% sure I understand the issue you’re facing.

---

<div class="post-metadata">

**Author:** ![Maxime\_Riche](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/maxime_riche/32/731_2.png) [@Maxime\_Riche](https://discuss.ray.io/u/Maxime_Riche)\
**Post date:** [April 17, 2021, 11:16am UTC](https://discuss.ray.io/t/infinite-loop-inside-samplebatch-get-slice-indices/1759/3 "2021-04-17T11:16:49Z")

</div>

I think it is more an issue than a question but I am not sure. So maybe I should post it on GitHub instead.

---

<div class="post-metadata">

**Author:** ![sven1977](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/sven1977/32/53_2.png) [@sven1977](https://discuss.ray.io/u/sven1977)\
**Post date:** [April 21, 2021, 11:46am UTC](https://discuss.ray.io/t/infinite-loop-inside-samplebatch-get-slice-indices/1759/4 "2021-04-21T11:46:42Z")

</div>

Hey @Maxime_Riche , no worries, thanks for the suggestion. I’ll create a PR. Makes sense that it gets stuck in that loop when we mix up the trainers. We should at least give a meaningful error.

Thanks for the catch! 🙂

---

<div class="post-metadata">

**Author:** ![sven1977](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ray.io/sven1977/32/53_2.png) [@sven1977](https://discuss.ray.io/u/sven1977)\
**Post date:** [April 22, 2021, 9:44am UTC](https://discuss.ray.io/t/infinite-loop-inside-samplebatch-get-slice-indices/1759/5 "2021-04-22T09:44:04Z")

</div>

PR: [[RLlib] Discussion 1759: SampleBatch.\_get\_slice\_indices stuck for R2D2 when using incorrect Trainer. by sven1977 · Pull Request #15451 · ray-project/ray · GitHub](https://github.com/ray-project/ray/pull/15451)
