{"record":{"id":"49e4ab141003f03e","repo":"tensorflow/models","slug":"num-shards-d-mod-shards-per-group-d-should-be","errorCode":null,"errorMessage":"num_shards: %d mod shards_per_group: %d, should be 0","messagePattern":"num_shards: (.+?) mod shards_per_group: (.+?), should be 0","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"official/legacy/image_classification/efficientnet/common_modules.py","lineNumber":41,"sourceCode":"from tensorflow.python.tpu import tpu_function\n\n\n@tf_keras.utils.register_keras_serializable(package='Vision')\nclass TpuBatchNormalization(tf_keras.layers.BatchNormalization):\n  \"\"\"Cross replica batch normalization.\"\"\"\n\n  def __init__(self, fused: Optional[bool] = False, **kwargs):\n    if fused in (True, None):\n      raise ValueError('TpuBatchNormalization does not support fused=True.')\n    super(TpuBatchNormalization, self).__init__(fused=fused, **kwargs)\n\n  def _cross_replica_average(self, t: tf.Tensor, num_shards_per_group: int):\n    \"\"\"Calculates the average value of input tensor across TPU replicas.\"\"\"\n    num_shards = tpu_function.get_tpu_context().number_of_shards\n    group_assignment = None\n    if num_shards_per_group > 1:\n      if num_shards % num_shards_per_group != 0:\n        raise ValueError(\n            'num_shards: %d mod shards_per_group: %d, should be 0' %\n            (num_shards, num_shards_per_group))\n      num_groups = num_shards // num_shards_per_group\n      group_assignment = [[\n          x for x in range(num_shards) if x // num_shards_per_group == y\n      ] for y in range(num_groups)]\n    return tf1.tpu.cross_replica_sum(t, group_assignment) / tf.cast(\n        num_shards_per_group, t.dtype)\n\n  def _moments(self, inputs: tf.Tensor, reduction_axes: int, keep_dims: int):  # pyrefly: ignore[bad-override]\n    \"\"\"Compute the mean and variance: it overrides the original _moments.\"\"\"\n    shard_mean, shard_variance = super(TpuBatchNormalization, self)._moments(\n        inputs, reduction_axes, keep_dims=keep_dims)\n\n    num_shards = tpu_function.get_tpu_context().number_of_shards or 1\n    if num_shards <= 8:  # Skip cross_replica for 2x2 or smaller slices.\n      num_shards_per_group = 1\n    else:","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/tensorflow/models/blob/e006f5f0d534913e49c1f1dae87364039fa607e2/official/legacy/image_classification/efficientnet/common_modules.py#L23-L59","documentation":"Error \"num_shards: %d mod shards_per_group: %d, should be 0\" thrown in tensorflow/models.","triggerScenarios":"Thrown at official/legacy/image_classification/efficientnet/common_modules.py:41 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e006f5f0d534913e49c1f1dae87364039fa607e2","analyzedAt":"2026-08-24T14:09:15.576Z","schemaVersion":2},"datasetVersion":"2026-08-24T17:17:21.512Z"}