code: def save_tuner_exp_info(self):
      TimeInspector.set_time_mark()
      save_path = os.path.join(
          self.pipeline_ex_config.tuner_ex_dir,
          Pipeline.GLOBAL_BEST_PARAMS_NAME,
      )
      with open(save_path, "w") as fp:
          json.dump(self.global_best_params, fp)
      TimeInspector.log_cost_time(
          "Finished save global best tuner parameters."
      )
  
      self.logger.info(
          "Best Tuner id: {}.".format(self.best_tuner_index)
      )
      self.logger.info(
          "Global best parameters: {}.".format(self.global_best_params)
      )
      self.logger.info(
          "You can check the best parameters at {}.".format(save_path)
      )
  
file_path: qlib/qlib/contrib/tuner/pipeline.py
imports: import os
  import json
  import logging
  import importlib
  from abc import abstractmethod
  from ...log import get_module_logger, TimeInspector
  from ...utils import get_module_by_module_path
label_desc: Use image node_id 4 for calling the Pipeline obj's underlying member method code with example usage: obj.save_tuner_exp_info() without return types