code: def __init__(
      self,
      module: EmbeddingBagCollectionInterface,
      table_name_to_parameter_sharding: Dict[str, ParameterSharding],
      env: ShardingEnv,
      fused_params: Optional[Dict[str, Any]] = None,
      device: Optional[torch.device] = None,
      feature_processor: Optional[FeatureProcessorsCollection] = None,
  ) -> None:
      super().__init__(
          module,
          table_name_to_parameter_sharding,
          env,
          fused_params,
          device,
      )
      assert feature_processor is not None
      device_type: str = (
          self._device.type if self._device is not None else "cuda"
      )
      self.feature_processors_per_rank: nn.ModuleList = (
          torch.nn.ModuleList()
      )
      for i in range(env.world_size):
          self.feature_processors_per_rank.append(
              feature_processor
              if device_type == "meta"
              else copy_to_device(
                  feature_processor,
                  feature_processor.device,
                  torch.device(f"{device_type}:{i}"),
              )
          )
  
imports: from typing import Any, Dict, List, Optional, Type
  import torch
  from fbgemm_gpu.split_table_batched_embeddings_ops_inference import IntNBitTableBatchedEmbeddingBagsCodegen
  from torch import nn
  from torchrec.distributed.embedding_lookup import EmbeddingComputeKernel
  from torchrec.distributed.embedding_sharding import EmbeddingSharding, EmbeddingShardingInfo
  from torchrec.distributed.embedding_types import BaseQuantEmbeddingSharder, FeatureShardingMixIn, GroupedEmbeddingConfig, KJTList, ListOfKJTList
  from torchrec.distributed.embeddingbag import construct_output_kt, create_sharding_infos_by_sharding
  from torchrec.distributed.fused_params import FUSED_PARAM_QUANT_STATE_DICT_SPLIT_SCALE_BIAS, FUSED_PARAM_REGISTER_TBE_BOOL, get_tbes_to_register_from_iterable, is_fused_param_quant_state_dict_split_scale_bias, is_fused_param_register_tbe
  from torchrec.distributed.quant_state import ShardedQuantEmbeddingModuleState
  from torchrec.distributed.sharding.cw_sharding import InferCwPooledEmbeddingSharding
  from torchrec.distributed.sharding.rw_sharding import InferRwPooledEmbeddingSharding
  from torchrec.distributed.sharding.tw_sharding import InferTwEmbeddingSharding
  from torchrec.distributed.types import NullShardedModuleContext, NullShardingContext, ParameterSharding, ShardingEnv, ShardingType
  from torchrec.distributed.utils import copy_to_device
  from torchrec.modules.embedding_configs import data_type_to_sparse_type, dtype_to_data_type, EmbeddingBagConfig
  from torchrec.modules.embedding_modules import EmbeddingBagCollectionInterface
  from torchrec.modules.feature_processor_ import FeatureProcessorsCollection
  from torchrec.quant.embedding_modules import EmbeddingBagCollection, FeatureProcessedEmbeddingBagCollection, MODULE_ATTR_QUANT_STATE_DICT_SPLIT_SCALE_BIAS
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor, KeyedTensor
label_desc: Use image node_id 1 to create a new ShardedQuantFeatureProcessedEmbeddingBagCollection object from inherited base classes: ShardedQuantEmbeddingBagCollection with example: obj = ShardedQuantFeatureProcessedEmbeddingBagCollection(module, table_name_to_parameter_sharding, env, fused_params, device, feature_processor)