Closed wertyuilife2 closed 1 month ago
This issue comes from the original issue #2205.
In PrioritizedSliceSampler.sample() , preceding_stop_idx needs to be moved to the CPU before executing self._sum_tree[preceding_stop_idx] = 0.0. If preceding_stop_idx is on the GPU, the program results in a segmentation fault.
PrioritizedSliceSampler.sample()
preceding_stop_idx
self._sum_tree[preceding_stop_idx] = 0.0
The code below will cause segmentation fault.
import torch from torchrl.data.replay_buffers import ReplayBuffer, LazyTensorStorage from torchrl.data.replay_buffers.samplers import PrioritizedSliceSampler from tensordict import TensorDict def test_sampler(): torch.manual_seed(0) sampler = PrioritizedSliceSampler( max_capacity=20, num_slices=2, traj_key="trajectory", strict_length=True, alpha=1.0, beta=1.0, ) trajectory = torch.tensor([3, 3, 0, 1, 1, 1, 2, 2, 2, 3]) td = TensorDict({"trajectory": trajectory, "steps": torch.arange(10)}, [10]) rb = ReplayBuffer( sampler=sampler, storage=LazyTensorStorage(20, device=torch.device("cuda")), batch_size=6, ) rb.extend(td) for i in range(10): traj = rb.sample()["trajectory"] print("[loop {}]sampled trajectory: {}".format(i, traj)) test_sampler()
Should be solved by #2202
Not solved yet - bear with me
Describe the bug
This issue comes from the original issue #2205.
In
PrioritizedSliceSampler.sample()
,preceding_stop_idx
needs to be moved to the CPU before executingself._sum_tree[preceding_stop_idx] = 0.0
. Ifpreceding_stop_idx
is on the GPU, the program results in a segmentation fault.To Reproduce
The code below will cause segmentation fault.
Checklist