(2) won’t work correctly I think, creating parameter clones. (1) is ok, you can also choose different ways to pass context, e.g.:
class Context(NamedTuple):
  lamb_mu : Tensor
  lamb_sigma : Tensor
...
def forward(self,...):
  sigma = ...
  ctx = Context(mu,sigma)
  ...