strategies for parameter syncs while training with
      "FullyShardedDataParallel".
  Warning:

    FSDP communication hook should be registered before running an
    initial forward pass and only once.

  Parameters:
     * **state** (*object*) --

       Passed to the hook to maintain any state information during
       the training process. Examples include error feedback in
       gradient compression, peers to communicate with next in
       GossipGrad, etc. It is locally stored by each worker and
       shared by all the gradient tensors on the worker.

     * **hook** (*Callable*) -- Callable, which has one of the
       following signatures: 1) "hook: Callable[torch.Tensor] ->
       None": This function takes in a Python tensor, which
       represents the full, flattened, unsharded gradient with
       respect to all variables corresponding to the model this
       FSDP unit is wrapping (that are not wrapped by other FSDP
