docs: def compile(self, target_instance_family, input_shape, output_path, role,
                  tags=None, job_name=None, compile_max_run=5 * 60, framework=None, framework_version=None):
          """Compile this ``Model`` with SageMaker Neo.
  
          Args:
              target_instance_family (str): Identifies the device that you want to run your model after compilation, for
                  example: ml_c5. Allowed strings are: ml_c5, ml_m5, ml_c4, ml_m4, jetsontx1, jetsontx2, ml_p2, ml_p3,
                  deeplens, rasp3b
              input_shape (dict): Specifies the name and shape of the expected inputs for your trained model in json
                  dictionary form, for example: {'data':[1,3,1024,1024]}, or {'var1': [1,1,28,28], 'var2':[1,1,28,28]}
              output_path (str): Specifies where to store the compiled model
              role (str): Execution role
              tags (list[dict]): List of tags for labeling a compilation job. For more, see
                  https://docs.aws.amazon.com/sagemaker/latest/dg/API_Tag.html.
              job_name (str): The name of the compilation job
              compile_max_run (int): Timeout in seconds for compilation (default: 3 * 60).
                  After this amount of time Amazon SageMaker Neo terminates the compilation job regardless of its
                  current status.
              framework (str): The framework that is used to train the original model. Allowed values: 'mxnet',
                  'tensorflow', 'pytorch', 'onnx', 'xgboost'
              framework_version (str)
          Returns:
              sagemaker.model.Model: A SageMaker ``Model`` object. See :func:`~sagemaker.model.Model` for full details.
          """
          framework = self._framework() or framework
          if framework is None:
              raise ValueError("You must specify framework, allowed values {}".format(NEO_ALLOWED_FRAMEWORKS))
          if framework not in NEO_ALLOWED_FRAMEWORKS:
              raise ValueError("You must provide valid framework, allowed values {}".format(NEO_ALLOWED_FRAMEWORKS))
          if job_name is None:
              raise ValueError("You must provide a compilation job name")
  
          framework = framework.upper()
          framework_version = self._get_framework_version() or framework_version
  
          config = self._compilation_job_config(target_instance_family, input_shape, output_path, role,
                                                compile_max_run, job_name, framework, tags)
          self.sagemaker_session.compile_model(**config)
          job_status = self.sagemaker_session.wait_for_compilation_job(job_name)
          self.model_data = job_status['ModelArtifacts']['S3ModelArtifacts']
          if target_instance_family.startswith('ml_'):
              self.image = self._neo_image(self.sagemaker_session.boto_region_name, target_instance_family, framework,
                                           framework_version)
              self._is_compiled_model = True
          else:
              LOGGER.warning("The intance type {} is not supported to deploy via SageMaker,"
                             "please deploy the model on the device by yourself.".format(target_instance_family))
          return self