class_docstr: PlaceholderGenerator is a generic class to generate strategies for placeholder node.
class_docstr_tok: ["PlaceholderGenerator","is","a","generic","class","to","generate","strategies","for","placeholder","node","."]
docstr: Compute the memory cost per device with this specific strategy.
docstr_tok: ["Compute","the","memory","cost","per","device","with","this","specific","strategy","."]
code: def update_memory_cost(self, strategy: ShardingStrategy):
      """
      Compute the memory cost per device with this specific strategy.
      """
      forward_size_mapping = {
          "output": self._compute_size_in_bytes(strategy, "output")
      }
  
      # compute fwd cost incurred
      # fwd_cost = output
      fwd_activation_cost = sum(
          [v for k, v in forward_size_mapping.items()]
      )
      fwd_mem_cost = MemoryCost(
          activation=fwd_activation_cost, parameter=0
      )
  
      bwd_mem_cost = MemoryCost(activation=0, parameter=0)
  
      # compute total cost
      total_mem_cost = MemoryCost(
          activation=fwd_activation_cost, parameter=0
      )
      memory_cost = TrainCycleItem(
          fwd=fwd_mem_cost, bwd=bwd_mem_cost, total=total_mem_cost
      )
      strategy.memory_cost = memory_cost
  
file_path: ColossalAI/colossalai/auto_parallel/tensor_shard/node_handler/strategy/getattr_generator.py
imports: from typing import List
  from colossalai.auto_parallel.tensor_shard.sharding_strategy import MemoryCost, ShardingStrategy, TrainCycleItem
  from colossalai.auto_parallel.tensor_shard.utils import enumerate_all_possible_1d_sharding, enumerate_all_possible_2d_sharding, ignore_sharding_exception
  from colossalai.tensor.sharding_spec import ShardingSpecException
  from .strategy_generator import StrategyGenerator
label_desc: Use image node_id 3 for calling the GetattrGenerator obj's underlying member method code with example usage: obj.update_memory_cost(strategy) without return types