class_docstr: Implements a row-wise variant of the Adagrad algorithm.
  Assumes that all the model parameters are 2-dimensional tensors
  containing embedding weights.
  
  Code mostly copy-pasted from torch/optim/Adagrad, with HOGWILD-safe
  update (see async_adagrad.py)
code: def __init__(self, params, lr=1e-2, lr_decay=0, weight_decay=0):
      # lr_decay is a little tricky beause keeping track of # of steps
      # is not straightforward when they're happening in a distributed way.
      # Anyway, we don't use lr_decay in Filament anyway
      assert lr_decay == 0, "lr_decay not currently supported."
      defaults = {
          "lr": lr,
          "lr_decay": lr_decay,
          "weight_decay": weight_decay,
      }
      super().__init__(params, defaults)
  
      for group in self.param_groups:
          for p in group["params"]:
              # state['step'] = 0
              if p.dim() != 2:
                  raise ValueError(
                      "RowAdagrad only works on 2D tensors"
                  )
              state = self.state[p]
              state["sum"] = p.new_zeros((p.shape[0],))
  
imports: import logging
  from torch.optim import Optimizer
label_desc: Use image node_id 1 to create a new RowAdagrad object from inherited base classes: Optimizer with example: obj = RowAdagrad(params, lr, lr_decay, weight_decay)