class_docstr: The abstract dist sparse optimizer.
  
  Note: dgl dist sparse optimizer only work with dgl.distributed.DistEmbedding
  
  Parameters
  ----------
  params : list of DistEmbedding
      The list of DistEmbedding.
  lr : float
      The learning rate.
code: def __init__(self, params, lr):
      self._params = params
      self._lr = lr
      self._rank = None
      self._world_size = None
      self._shared_cache = {}
      self._clean_grad = False
      self._opt_meta = {}
      self._state = {}
      ## collect all hyper parameters for save
      self._defaults = {}
  
      if th.distributed.is_initialized():
          self._rank = th.distributed.get_rank()
          self._world_size = th.distributed.get_world_size()
      else:
          self._rank = 0
          self._world_size = 1
  
imports: import abc
  import warnings
  from abc import abstractmethod
  from os.path import exists
  import torch
  import dgl
  from ....None import backend
  from ...dist_tensor import DistTensor
  from ...graph_partition_book import EDGE_PART_POLICY, NODE_PART_POLICY
  from ...nn.pytorch import DistEmbedding
  from .utils import alltoall, alltoallv
label_desc: Use image node_id 1 to create a new DistSparseGradOptimizer object from inherited base classes: abc with example: obj = DistSparseGradOptimizer(params, lr)