code: def _create_cuda_graph(self, *inputs, **kwargs):
      # warmup to create the workspace and cublas handle
      cuda_stream = torch.cuda.Stream()
      cuda_stream.wait_stream(torch.cuda.current_stream())
      with torch.cuda.stream(cuda_stream):
          for i in range(3):
              ret = self.module(*inputs, **kwargs)
      torch.cuda.current_stream().wait_stream(cuda_stream)
  
      # create cuda_graph and assign static_inputs and static_outputs
      self._cuda_graphs = torch.cuda.CUDAGraph()
      self.static_inputs = inputs
      self.static_kwargs = kwargs
  
      with torch.cuda.graph(self._cuda_graphs):
          self.static_output = self.module(
              *self.static_inputs, **self.static_kwargs
          )
  
      self.cuda_graph_created = True
  
imports: import torch
  import time
  import os
  from deepspeed import comm
  from deepspeed.utils.logging import log_dist
  from torch.nn.modules import Module
  from packaging import version
  from deepspeed.runtime.checkpoint_engine.torch_checkpoint_engine import TorchCheckpointEngine
  from deepspeed.utils.timer import SynchronizedWallClockTimer
  from ..runtime.state_dict_factory import SDLoaderFactory
  from ..runtime.weight_quantizer import WeightQuantization
  from ..module_inject.replace_module import replace_transformer_layer, generic_injection
  from ..comm.comm import init_distributed
  from ..pipe import PipelineModule
  from ..moe.utils import has_moe_layers
  from ..runtime.zero import GatheredParameters
  from ..module_inject import LinearAllreduce, LinearLayer, Normalize, ReplaceWithTensorSlicing
  from ..module_inject.replace_policy import DSPolicy
  from torch import nn
label_desc: Use image node_id 18 for calling the InferenceEngine obj's underlying member method code with example usage: obj._create_cuda_graph() without return types