class_docstr: Simple TwoTower (UV) Model. Embeds two different entities (query and candidate) into the same space.
  Similar to the TwoTower model above, but is meant for retrieval. Specifically, this module
  also contiains a FAISS index, used to KNN search the K closest entities of tower 2. It separates query
  and candidate into separate EmbeddingBagCollections
  
  Args:
      faiss_index (Union[faiss.GpuIndexIVFPQ, faiss.IndexIVFPQ]): faiss index to search candidate
      query_ebc (EmbeddingBagCollection): embedding_bag_collection with one EmbeddingBag
      candidate_ebc (EmbeddingBagCollection): embedding_bag_collection with one EmbeddingBag
      layer_sizes (List[int]): list of the layer_sizes for the MLP
      k (int): number of tower 2 nearest neighbors to score
      device (Optional[torch.device])
  
  Example::
  
      m = TwoTowerRetrieval(index, query_ebc, candidate_ebc, [16, 8], 100, device)
code: def load_state_dict(
      self, state_dict: Mapping[str, Any], strict: bool
  ) -> None:
      super().load_state_dict(state_dict, strict)
  
imports: from typing import Any, List, Mapping, Optional, OrderedDict, Tuple, Union
  import faiss
  import faiss.contrib.torch_utils
  import torch
  from torch import nn
  from torchrec.datasets.utils import Batch
  from torchrec.modules.embedding_modules import EmbeddingBagCollection
  from torchrec.modules.mlp import MLP
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor
label_desc: Use image node_id 3 for calling the TwoTowerRetrieval obj's underlying member method code with example usage: obj.load_state_dict(state_dict, strict) without return types