code: def add_lm_head_policy(self, base_policy):
      from transformers.models.whisper.modeling_whisper import (
          WhisperForConditionalGeneration,
      )
  
      # optimize for tensor parallelism
      if self.shard_config.enable_tensor_parallelism:
          self.append_or_create_submodule_replacement(
              description=SubModuleReplacementDescription(
                  suffix="proj_out",
                  target_module=col_nn.Linear1D_Col,
                  kwargs={"gather_output": True},
              ),
              policy=base_policy,
              target_key=WhisperForConditionalGeneration,
          )
  
      return base_policy
  
imports: import warnings
  from functools import partial
  from typing import Callable, Dict, List, Tuple
  import numpy
  import torch.nn
  from torch import Tensor
  import colossalai.shardformer.layer
  from ..modeling.jit import get_jit_fused_dropout_add_func
  from ..modeling.whisper import WhisperPipelineForwards, get_jit_fused_whisper_decoder_layer_forward, get_jit_fused_whisper_encoder_layer_forward, get_whisper_flash_attention_forward
  from .base_policy import ModulePolicyDescription, Policy, SubModuleReplacementDescription
label_desc: Use image node_id 5 for calling the WhisperPolicy obj's underlying member method code with example usage: obj.add_lm_head_policy(base_policy) and returns: base_policy