code: def get_params(self, arg_params, aux_params):
          
          for name, block in zip(self.param_names, self.param_arrays):
              weight = sum(w.copyto(ctx.cpu()) for w in block) / len(block)
              weight.astype(arg_params[name].dtype).copyto(arg_params[name])
          for name, block in zip(self.aux_names, self.aux_arrays):
              weight = sum(w.copyto(ctx.cpu()) for w in block) / len(block)
              weight.astype(aux_params[name].dtype).copyto(aux_params[name])
docs: Copy data from each executor to `arg_params` and `aux_params`.
  
          Parameters
          ----------
          arg_params : list of NDArray
              Target parameter arrays.
          aux_params : list of NDArray
              Target aux arrays.
  
          Notes
          -----
          - This function will inplace update the NDArrays in arg_params and aux_params.