class_docstr: The abstract sparse optimizer.
  
  Note: dgl sparse optimizer only work with dgl.NodeEmbedding
  
  Parameters
  ----------
  params : list of NodeEmbedding
      The list of NodeEmbeddings.
  lr : float
      The learning rate.
docstr: Emulate 'param_groups' of torch.optim.Optimizer.
  Different from that, the returned 'param_groups' doesn't contain
  parameters because getting the whole embedding is very expensive.
  It contains other attributes, e.g., lr, eps, for debugging.
docstr_tok: ["Emulate","'param_groups","'","of","torch.optim.Optimizer",".","Different","from","that",",","the","returned","'param_groups","'","does","n't","contain","parameters","because","getting","the","whole","embedding","is","very","expensive",".","It","contains","other","attributes",",","e.g.",",","lr",",","eps",",","for","debugging","."]
code: def param_groups(self):
      """Emulate 'param_groups' of torch.optim.Optimizer.
      Different from that, the returned 'param_groups' doesn't contain
      parameters because getting the whole embedding is very expensive.
      It contains other attributes, e.g., lr, eps, for debugging.
      """
  
imports: import abc
  from abc import abstractmethod
  import torch
  from ...cuda import nccl
  from ...nn.pytorch import NodeEmbedding
  from ...partition import NDArrayPartition
  from ...utils import create_shared_mem_array, gather_pinned_tensor_rows, get_shared_mem_array, pin_memory_inplace, scatter_pinned_tensor_rows
label_desc: Use image node_id 12 for calling the SparseGradOptimizer obj's underlying member method code with example usage: obj.param_groups() without return types