class_docstr: :class:`~opacus.optimizers.optimizer.DPOptimizer` compatible with
  distributed data processing
code: def add_noise(self):
      # Noise only gets added to the first worker
      if self.rank == 0:
          super().add_noise()
      else:
          for p in self.params:
              p.grad = p.summed_grad.view_as(p)
  
file_path: opacus/opacus/optimizers/ddpoptimizer.py
imports: from __future__ import annotations
  from typing import Callable, Optional
  import torch
  from torch.optim import Optimizer
  from .optimizer import DPOptimizer
label_desc: Use image node_id 2 for calling the DistributedDPOptimizer obj's underlying member method code with example usage: obj.add_noise() without return types