class_docstr: A StrategyGenerator which deals with the sharding strategies of batch normalization.
  
  To keep the math consistency, there are two way to do BatchNorm if the input
  shards on batch dimension:
  1. We gather the input partitions through batch dimension, then do the normal BatchNorm.
  2. We do the SyncBatchNorm on the each input partition separately, the SyncBN op will help
     us to keep the computing correctness.
  In this generator, both methods will be considered.
class_docstr_tok: ["A","StrategyGenerator","which","deals","with","the","sharding","strategies","of","batch","normalization",".","To","keep","the","math","consistency",",","there","are","two","way","to","do","BatchNorm","if","the","input","shards","on","batch","dimension",":","1",".","We","gather","the","input","partitions","through","batch","dimension",",","then","do","the","normal","BatchNorm",".","2",".","We","do","the","SyncBatchNorm","on","the","each","input","partition","separately",",","the","SyncBN","op","will","help","us","to","keep","the","computing","correctness",".","In","this","generator",",","both","methods","will","be","considered","."]
code: def split_input_channel_1d(self, mesh_dim_0, mesh_dim_1):
      name = f"RS{mesh_dim_0}{mesh_dim_1} = RS{mesh_dim_0}{mesh_dim_1} x S{mesh_dim_0}{mesh_dim_1}"
      dim_partition_dict_mapping = {
          "input": {1: [mesh_dim_0, mesh_dim_1]},
          "other": {0: [mesh_dim_0, mesh_dim_1]},
          "output": {1: [mesh_dim_0, mesh_dim_1]},
          "running_mean": {0: [mesh_dim_0, mesh_dim_1]},
          "running_var": {0: [mesh_dim_0, mesh_dim_1]},
          "num_batches_tracked": {},
      }
      if self.has_bias:
          dim_partition_dict_mapping["bias"] = {
              0: [mesh_dim_0, mesh_dim_1]
          }
  
      sharding_spec_mapping = self.to_sharding_spec_mapping(
          dim_partition_dict_mapping
      )
  
      communication_action_mapping = {}
  
      return self.get_sharding_strategy(
          name=name,
          sharding_spec_mapping=sharding_spec_mapping,
          communication_action_mapping=communication_action_mapping,
      )
  
file_path: colossalai/colossalai/auto_parallel/tensor_shard/node_handler/strategy/batch_norm_generator.py
imports: import copy
  import operator
  from functools import reduce
  from typing import List
  from colossalai.auto_parallel.tensor_shard.sharding_strategy import CommType, MemoryCost, ShardingStrategy, TrainCycleItem
  from colossalai.auto_parallel.tensor_shard.utils import ignore_sharding_exception
  from colossalai.tensor.shape_consistency import CollectiveCommPattern
  from .strategy_generator import StrategyGenerator
label_desc: Use image node_id 5 for calling the BatchNormStrategyGenerator obj's underlying member method code with example usage: obj.split_input_channel_1d(mesh_dim_0, mesh_dim_1) and returns: self