solved.
here is the basic idea:
instead of outputs list i have defined dictionary of list.
when i get a hook call i add the output to the right list according to the output.device
then when i return from forward i return the list according to the input.device
code:
def __init__(self):
    self._outputs_lists = {}
    self.mymodule.register_forward_hook(hook=self.save_output_hook)

def save_output_hook(self, _, input, output):
    self._outputs_lists[input[0].device].append(output)

def forward(self, x) -> list:
    self._outputs_lists[x.device] = []
    self.mymodule(x)
    return self._outputs_lists[x.device]