def __init__(
        self,
        module: torch.fx.GraphModule,
        input_specs: List[Union[TensorSpec, List[TensorSpec]]],
        workdir: str,
        name: str,
        dll_name: str = "test.so",
        dynamic_profile_strategy=DynamicProfileStrategy.MAX,
        profile_devs=None,
        use_fp16_acc=True,
        dump_ait_dir: Optional[str] = None,
        keep_constants: Optional[bool] = None,
        load_ait_dir: Optional[str] = None,
        remote_cache_file_path: Optional[str] = None,
        save_remote_cache: Optional[bool] = False,
        do_optimize_graph: bool = True,
        use_fast_math: bool = True,
        use_tanh_for_sigmoid: bool = False,
        profile_timeout: int = 500,
        optimize_for_compilation_time: bool = False,
        allow_cutlass_sm90: bool = False,
        force_cutlass_sm90: bool = False,
    ):
        """
        Args:
            module: target module for AITemplate compilation
            input_specs: sample input for the target module
            workdir: directory path for store AITemplate generated files
            name: directory name for store AITemplate generated files
            dll_name: AITemplate library name
            dynamic_profile_strategy: A dynamic profiling strategy, used to filter
            generated profiles at compile time.
            See also: :func:`~aitemplate.compiler.transform.profile.profile`
            use_fp16_acc: whether to uses fp16 accumulation for gemm ops.
            dump_ait_dir: AIT generated file dump location.
            keep_constants: whether to keep original constants or use random generated constants
            load_ait_dir: location for existing ait files
            remote_cache_file_path: AITemplate profiling cache location
            save_remote_cache: whether to save the updated cache
            use_fast_math: whether to use fast math in CUDA kernels
            use_tanh_for_sigmoid: whether to use tanh to approximate sigmoid in CUDA kernels
            allow_cutlass_sm90: generate cutlass sm90 kernels alongside sm80 kernels on sm90 arch
            force_cutlass_sm90: only generate cutlass sm90 kernels on sm90 arch
            profile_timeout: timeout in seconds for AIT profilers to complete
            optimize_for_compilation_time: we use O1 and disable the ProfileImpl function to reduce compilation time.
        """
        super().__init__(module)

        missing_ops = self.validate_conversion()
        if missing_ops:
            warnings.warn(
                "Interpretation will fail due to missing operations \n"
                + "\n".join(f"{i}" for i in missing_ops)
            )

        self.remote_cache_file_path = remote_cache_file_path
        self.save_remote_cache: bool = (
            True if save_remote_cache and self.remote_cache_file_path else False
        )
        self.remote_cache_bytes = self._load_profile_cache()
        if self.save_remote_cache:
            self.cache_dir = os.path.join(
                tempfile.mkdtemp(prefix="aitemplate_"), ".aitemplate"
            )
            os.environ["CACHE_DIR"] = self.cache_dir
            _LOGGER.info(f"Set CACHE_DIR to {self.cache_dir}")
        self.use_fp16_acc = use_fp16_acc
        self.use_fast_math = use_fast_math
        self.use_tanh_for_sigmoid = use_tanh_for_sigmoid
        self.allow_cutlass_sm90 = allow_cutlass_sm90
        self.force_cutlass_sm90 = force_cutlass_sm90
        self.optimize_for_compilation_time = optimize_for_compilation_time
        self.hardware_target = self._create_target()
        self.input_specs = input_specs
        self.input_specs_iter = 0
        self.workdir = workdir
        self.name = name
        self.dll_name = dll_name
        self.dynamic_profile_strategy = dynamic_profile_strategy
        self.profile_devs = profile_devs

        self._input_names: List[str] = []
        self._input_dtypes: List[str] = []
        self._output_names: List[str] = []
        self._output_dtypes: List[str] = []
        self._fx_input_names: List[str] = []
        self._loaded_params: Dict[str, AITTensor] = {}

        self.dump_ait_dir = dump_ait_dir
        self.keep_constants = keep_constants
        self.load_ait_dir = load_ait_dir
        self.do_optimize_graph = do_optimize_graph
        self.profile_timeout = profile_timeout

        Args:
            module: target module for AITemplate compilation
            input_specs: sample input for the target module
            workdir: directory path for store AITemplate generated files
            name: directory name for store AITemplate generated files
            dll_name: AITemplate library name
            dynamic_profile_strategy: A dynamic profiling strategy, used to filter
            generated profiles at compile time.
            See also: :func:`~aitemplate.compiler.transform.profile.profile`
            use_fp16_acc: whether to uses fp16 accumulation for gemm ops.
            dump_ait_dir: AIT generated file dump location.
            keep_constants: whether to keep original constants or use random generated constants
            load_ait_dir: location for existing ait files
            remote_cache_file_path: AITemplate profiling cache location
            save_remote_cache: whether to save the updated cache
            use_fast_math: whether to use fast math in CUDA kernels
            use_tanh_for_sigmoid: whether to use tanh to approximate sigmoid in CUDA kernels
            allow_cutlass_sm90: generate cutlass sm90 kernels alongside sm80 kernels on sm90 arch
            force_cutlass_sm90: only generate cutlass sm90 kernels on sm90 arch
            profile_timeout: timeout in seconds for AIT profilers to complete
            optimize_for_compilation_time: we use O1 and disable the ProfileImpl function to reduce compilation time.
        
fx2ait/fx2ait/fx2ait.py