operators are quantized in a backend, this includes how the
        operators are observed, supported fusion patterns, how
        quantize/dequantize ops are inserted, supported dtypes etc.
        See "BackendConfig" for more details
Returns:
      A GraphModule with observer (configured by qconfig_mapping),
      ready for calibration
Return type:
      ObservedGraphModule
Example:
  import torch
  from torch.ao.quantization import get_default_qconfig_mapping
  from torch.ao.quantization import prepare_fx

  class Submodule(torch.nn.Module):
      def __init__(self):
          super().__init__()
          self.linear = torch.nn.Linear(5, 5)
      def forward(self, x):
          x = self.linear(x)
          return x

  class M(torch.nn.Module):
      def __init__(self):
          super().__init__()
          self.linear = torch.nn.Linear(5, 5)
          self.sub = Submodule()

      def forward(self, x):
