[Python] RuntimeError: Batching rule not implemented for aten::gru.input

Discussão em 'Python' iniciado por Stack, Julho 17, 2025.

  1. Stack

    Stack Membro Participativo

    I'm using torchrl for training my reinforcement learning agent.

    I'm trying to call a GRU layer with batched data (to be precise, calling a GAE as an advantage module with the batched data from the replay buffer), and it shows this error:
    RuntimeError: Batching rule not implemented for aten::gru.input. We could not generate a fallback.
    This error pops up regardless of using 'cpu' or 'cuda:0' as device, anyone knows how to solve it?

    Below is the relevant made-up code:

    data_collector = SyncDataCollector(
    train_env,
    policy_module,
    total_frames=10240,
    frames_per_batch=64,
    split_trajs=False,
    )
    (get `input` from data_collector)

    # input format:
    # TensorDict(
    # fields={
    # action: Tensor(shape=torch.Size([64, 1]), device=cuda:0, dtype=torch.int64, is_shared=True),
    # action_value: Tensor(shape=torch.Size([64, 1, 15]), device=cuda:0, dtype=torch.float32, is_shared=True),
    # chosen_action_value: Tensor(shape=torch.Size([64, 1, 1]), device=cuda:0, dtype=torch.float32, is_shared=True),
    # collector: TensorDict(
    # fields={
    # traj_ids: Tensor(shape=torch.Size([64]), device=cuda:0, dtype=torch.int64, is_shared=True)},
    # batch_size=torch.Size([64]),
    # device=cuda:0,
    # is_shared=True),
    # done: Tensor(shape=torch.Size([64, 1]), device=cuda:0, dtype=torch.bool, is_shared=True),
    # next: TensorDict(
    # fields={
    # done: Tensor(shape=torch.Size([64, 1]), device=cuda:0, dtype=torch.bool, is_shared=True),
    # observation: Tensor(shape=torch.Size([64, 6, 40, 5]), device=cuda:0, dtype=torch.float32, is_shared=True),
    # reward: Tensor(shape=torch.Size([64, 1]), device=cuda:0, dtype=torch.float32, is_shared=True),
    # step_count: Tensor(shape=torch.Size([64, 1]), device=cuda:0, dtype=torch.int64, is_shared=True),
    # terminated: Tensor(shape=torch.Size([64, 1]), device=cuda:0, dtype=torch.bool, is_shared=True)},
    # batch_size=torch.Size([64]),
    # device=cuda:0,
    # is_shared=True),
    # observation: Tensor(shape=torch.Size([64, 6, 40, 5]), device=cuda:0, dtype=torch.float32, is_shared=True),
    # step_count: Tensor(shape=torch.Size([64, 1]), device=cuda:0, dtype=torch.int64, is_shared=True),
    # terminated: Tensor(shape=torch.Size([64, 1]), device=cuda:0, dtype=torch.bool, is_shared=True)},
    # batch_size=torch.Size([64]),
    # device=cuda:0,
    # is_shared=True)


    rnn = torch.nn.GRU(
    input_size=5,
    hidden_size=32,
    num_layers=1,
    dropout=0,
    batch_first=True,
    bidirectional=True,
    )

    value_module = ValueOperator(
    module=rnn,
    in_keys=["observation"],
    )

    advantage_module = GAE(
    gamma=0.99, lmbda=0.95, value_network=value_module, average_gae=True
    )


    output, _ = advantage_module(input) # <-- error

    Continue reading...

Compartilhe esta Página