docstr: Saves the model to the given path.
docstr_tok: ["Saves","the","model","to","the","given","path","."]
code: def save(self, save_path):
      """Saves the model to the given path."""
      if self.lgbm_model is None:
          raise ValueError("Model has not been trained yet.")
  
      import joblib
  
      weights_save_path = os.path.join(
          save_path, MODEL_WEIGHTS_FILE_NAME
      )
      joblib.dump(self.lgbm_model, weights_save_path)
  
imports: import os
  from contextlib import contextmanager
  from typing import Dict, Optional, Tuple, Union
  import lightgbm
  import numpy
  import torch
  from hummingbird.ml import convert
  from ludwig.accounting.used_tokens import get_used_tokens_for_gbm
  from ludwig.constants import BINARY, LOGITS, MODEL_GBM, NUMBER, USED_TOKENS
  from ludwig.features.base_feature import OutputFeature
  from ludwig.globals import MODEL_WEIGHTS_FILE_NAME
  from ludwig.models.base import BaseModel
  from ludwig.schema.features.base import BaseOutputFeatureConfig, FeatureCollection
  from ludwig.schema.model_config import ModelConfig
  from ludwig.utils import output_feature_utils
  from ludwig.utils.fs_utils import path_exists
  from ludwig.utils.gbm_utils import reshape_logits
  from ludwig.utils.torch_utils import get_torch_device
  from ludwig.utils.types import TorchDevice
label_desc: Use image node_id 6 for calling the GBM obj's underlying member method code with example usage: obj.save(save_path) without return types