code: def __init__(
      self,
      chunk_manager: ChunkManager,
      mem_stats_collector: Optional[ChunkMemStatsCollector] = None,
      warmup_non_model_data_ratio: float = 0.8,
      steady_cuda_cap_ratio: float = 0.9,
      **kwargs,
  ) -> None:
      super().__init__(
          chunk_manager, mem_stats_collector=mem_stats_collector
      )
      # model data will use 1-_warmup_non_model_data_ratio CUDA memory in warmup phase
      # you can set them by AutoPlacementPolicy.set_warmup_non_model_data_ratio()
      # and AutoPlacementPolicy.set_steady_cuda_cap_ratio()
      self._warmup_non_model_data_ratio = warmup_non_model_data_ratio
      self._steady_cuda_cap_ratio = steady_cuda_cap_ratio
  
imports: import functools
  import warnings
  from abc import ABC, abstractmethod
  from time import time
  from typing import Dict, List, Optional, Tuple, Type
  import torch
  from colossalai.utils import get_current_device
  from colossalai.utils.memory import colo_device_memory_capacity
  from colossalai.zero.gemini.chunk import Chunk
  from .chunk import Chunk, ChunkManager
  from .memory_tracer import ChunkMemStatsCollector
label_desc: Use image node_id 1 to create a new AutoPlacementPolicy object from inherited base classes: PlacementPolicy with example: obj = AutoPlacementPolicy(chunk_manager, mem_stats_collector, warmup_non_model_data_ratio, steady_cuda_cap_ratio)