Solved the problem by creating self.node_dict within the self.forward method:
def forward(self, x):
        self.node_dict = {}

        for nodename in self.nodename_dict:
            self.node_dict[nodename] = Node(nodename, self.layer_dict[nodename], Graph.__get_op_type(nodename))

        for nodename in self.nodename_dict:
            self.node_dict[nodename].prev_list = [self.node_dict[node.name] for node in self.nodename_dict[nodename].prev_list]
            self.node_dict[nodename].next_list = [self.node_dict[node.name] for node in self.nodename_dict[nodename].next_list]

        process_stack = self.topological_sort(self.node_dict)

using another dictionary self.nodename_dict which only creates a topological record for node names, so it can be copied across different GPUs without a problem.