code: def _save_low_bit(self, save_dir, *args, **kwargs):
      invalidInputError(
          self._bigdl_config.get("bigdl_transformers_low_bit", False),
          f"Detected this model is not a low-bit model, please use from_pretrained's"
          f" load_in_4bit or load_in_low_bit parameter to load a 4-bit model first.",
      )
      os.makedirs(save_dir, exist_ok=True)
      model_path = os.path.join(save_dir, PYTORCH_MODEL_NAME)
      if isinstance(self, PreTrainedModel):
          # We borrowed this method to adapt to Transformer model cases
          # as much as possible, and later we may merge these two situations
          self.save_pretrained(save_dir)
      else:
          # TODO: For the lowbit model still larger than 8GB,
          #       save it into shards.
          torch.save(self.state_dict(), model_path, *args, **kwargs)
      with open(os.path.join(save_dir, CONFIG_NAME), "w") as json_file:
          json.dump(self._bigdl_config, json_file)
  
imports: import torch
  import os
  import json
  from .transformers import ggml_convert_low_bit
  from torch.nn.modules import Module
  from torch.nn.modules.module import _IncompatibleKeys
  from accelerate import init_empty_weights
  from accelerate.utils import set_module_tensor_to_device
  from bigdl.llm.ggml.quantize import ggml_tensor_qtype
  from bigdl.llm.utils.common import invalidInputError
  from bigdl.llm.transformers.utils import extract_local_archive_file, get_local_shard_files
  import transformers
  import warnings
  from transformers import PreTrainedModel
  from .utils.common import MuteHFLogger
  from .utils.lazy_load_torch import LazyLoadTensors
  from contextlib import ExitStack, contextmanager
label_desc: Use image node_id 1 for calling a global function with example usage: _save_low_bit(save_dir) without return types