class_docstr: Execute an FX graph Node-by-Node with concrete tensor and record the memory
  usage, execution time of forward and backward, and type of the result into
  the corresponding node.
  
  Usage:
      BATCH_SIZE = 2
      DIM_IN = 4
      DIM_HIDDEN = 16
      DIM_OUT = 16
      model = torch.nn.Sequential(
          torch.nn.Linear(DIM_IN, DIM_HIDDEN),
          torch.nn.Linear(DIM_HIDDEN, DIM_OUT),
          ).cuda()
      input_sample = torch.rand(BATCH_SIZE, DIM_IN, device="cuda")
      gm = symbolic_trace(model)
      interp = ConcreteInfoProp(gm)
      interp.run(input_sample)
      print(interp.summary(unit='kb'))
  
  
      output of above code is
      Op type       Op             Forward time             Backward time    SAVE_FWD_IN    FWD_OUT    FWD_TMP    BWD_OUT    BWD_TMP
      -----------  -------  -----------------------  ------------------------  -------------  ---------  ---------  ---------  ---------
      placeholder  input_1                    0.0 s                     0.0 s          False    0.00 KB    0.00 KB    0.00 KB    0.00 KB
      call_module       _0  0.0003993511199951172 s     0.00706791877746582 s          False    0.50 KB    0.00 KB    0.03 KB    0.66 KB
      call_module       _1   6.29425048828125e-05 s  0.00018286705017089844 s          False    0.50 KB    0.00 KB    0.12 KB    0.81 KB
           output   output                    0.0 s                     0.0 s           True    0.00 KB    0.00 KB    0.00 KB    0.00 KB
  Args:
       module (GraphModule): The module to be executed
class_docstr_tok: ["Execute","an","FX","graph","Node-by-Node","with","concrete","tensor","and","record","the","memory","usage",",","execution","time","of","forward","and","backward",",","and","type","of","the","result","into","the","corresponding","node",".","Usage",":","BATCH_SIZE","=","2","DIM_IN","=","4","DIM_HIDDEN","=","16","DIM_OUT","=","16","model","=","torch.nn.Sequential","(","torch.nn.Linear","(","DIM_IN",",","DIM_HIDDEN",")",",","torch.nn.Linear","(","DIM_HIDDEN",",","DIM_OUT",")",",",")",".cuda","(",")","input_sample","=","torch.rand","(","BATCH_SIZE",",","DIM_IN",",","device=","''","cuda","''",")","gm","=","symbolic_trace","(","model",")","interp","=","ConcreteInfoProp","(","gm",")","interp.run","(","input_sample",")","print","(","interp.summary","(","unit='kb","'",")",")","output","of","above","code","is","Op","type","Op","Forward","time","Backward","time","SAVE_FWD_IN","FWD_OUT","FWD_TMP","BWD_OUT","BWD_TMP","--","--","--","--","--","-","--","--","--","-","--","--","--","--","--","--","--","--","--","--","--","-","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","-","--","--","--","--","-","--","--","--","--","-","--","--","--","--","-","--","--","--","--","-","placeholder","input_1","0.0","s","0.0","s","False","0.00","KB","0.00","KB","0.00","KB","0.00","KB","call_module","_0","0.0003993511199951172","s","0.00706791877746582","s","False","0.50","KB","0.00","KB","0.03","KB","0.66","KB","call_module","_1","6.29425048828125e-05","s","0.00018286705017089844","s","False","0.50","KB","0.00","KB","0.12","KB","0.81","KB","output","output","0.0","s","0.0","s","True","0.00","KB","0.00","KB","0.00","KB","0.00","KB","Args",":","module","(","GraphModule",")",":","The","module","to","be","executed"]
docstr: Execute a ``call_method`` node with meta tensor and return the result and its meta profile.
  
  Args:
      target (Target): The call target for this node. See
          `Node <https://pytorch.org/docs/master/fx.html#torch.fx.Node>`__ for
          details on semantics
      args (Tuple): Tuple of positional args for this invocation
      kwargs (Dict): Dict of keyword arguments for this invocation
  
  Return
      result (Any): The argument value that was retrieved
      meta_info (MetaInfo): The memory cost and forward & backward time.
docstr_tok: ["Execute","a","``","call_method","``","node","with","meta","tensor","and","return","the","result","and","its","meta","profile",".","Args",":","target","(","Target",")",":","The","call","target","for","this","node",".","See","`","Node","<","https",":","\/\/pytorch.org\/docs\/master\/fx.html","#","torch.fx.Node",">","`","__","for","details","on","semantics","args","(","Tuple",")",":","Tuple","of","positional","args","for","this","invocation","kwargs","(","Dict",")",":","Dict","of","keyword","arguments","for","this","invocation","Return","result","(","Any",")",":","The","argument","value","that","was","retrieved","meta_info","(","MetaInfo",")",":","The","memory","cost","and","forward","&","backward","time","."]
code: def call_method(
      self,
      target: "Target",
      args: Tuple[Argument, ...],
      kwargs: Dict[str, Any],
  ) -> Any:
      """
      Execute a ``call_method`` node with meta tensor and return the result and its meta profile.
  
      Args:
          target (Target): The call target for this node. See
              `Node <https://pytorch.org/docs/master/fx.html#torch.fx.Node>`__ for
              details on semantics
          args (Tuple): Tuple of positional args for this invocation
          kwargs (Dict): Dict of keyword arguments for this invocation
  
      Return
          result (Any): The argument value that was retrieved
          meta_info (MetaInfo): The memory cost and forward & backward time.
      """
      return profile_method(target, self.device)(*args, **kwargs)
  
file_path: ColossalAI/colossalai/fx/passes/concrete_info_prop.py
imports: from dataclasses import asdict
  from typing import Any, Dict, List, Optional, Tuple
  import torch
  import torch.fx
  from torch.fx.node import Argument, Node, Target
  from torch.utils._pytree import tree_flatten
  from colossalai.fx._compatibility import compatibility
  from colossalai.fx.profiler import GraphInfo, profile_function, profile_method, profile_module
label_desc: Use image node_id 6 for calling the ConcreteInfoProp obj's underlying member method code with example usage: obj.call_method(target, args, kwargs) and returns: profile_method