diff --git a/unsloth/__init__.py b/unsloth/__init__.py index c7f3ea94cf..63689802d9 100644 --- a/unsloth/__init__.py +++ b/unsloth/__init__.py @@ -12,5 +12,44 @@ # See the License for the specific language governing permissions and # limitations under the License. __version__ = "2023.11" +import os +try: + import torch +except: + raise ImportError("Pytorch is not installed. Go to https://pytorch.org/.\n"\ + "We have some installation instructions on our Github page.") + +# We only support torch 2.1 +major_torch, minor_torch, _ = torch.__version__.split(".") +major_torch, minor_torch = int(major_torch), int(minor_torch) +if (major_torch != 2) or (major_torch == 2 and minor_torch < 1): + raise ImportError("Unsloth only supports Pytorch 2.1 for now. Please update your Pytorch to 2.1.\n"\ + "We have some installation instructions on our Github page.") + +# Currently only supports 1 GPU, or else seg faults will occur. +reload_package = False +n_gpus = torch.cuda.device_count() +if n_gpus == 0: + raise RuntimeError("Unsloth: Requires at least 1 GPU. Found 0.") +elif n_gpus > 1: + if "CUDA_VISIBLE_DEVICES" in os.environ: + device = os.environ["CUDA_VISIBLE_DEVICES"] + if not device.isdigit(): + print(f"Unsloth: 'CUDA_VISIBLE_DEVICES' is currently {device} "\ + "but we require 'CUDA_VISIBLE_DEVICES=0'\n"\ + "We shall set it ourselves.") + os.environ["CUDA_VISIBLE_DEVICES"] = "0" + reload_package = True + else: + print("Unsloth: 'CUDA_VISIBLE_DEVICES' is not set. We shall set it ourselves.") + os.environ["CUDA_VISIBLE_DEVICES"] = "0" + reload_package = True +pass + +# Reload Pytorch with CUDA_VISIBLE_DEVICES +if reload_package: + import importlib + importlib.reload(torch) +pass from .models import * diff --git a/unsloth/models/__init__.py b/unsloth/models/__init__.py index 46529ccab6..4df2e937e4 100644 --- a/unsloth/models/__init__.py +++ b/unsloth/models/__init__.py @@ -12,33 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -import torch -import os - -# Currently only supports 1 GPU, or else seg faults will occur. -reload_package = False -n_gpus = torch.cuda.device_count() -if n_gpus == 0: - raise RuntimeError("Unsloth: Requires at least 1 GPU. Found 0.") -elif n_gpus > 1: - if "CUDA_VISIBLE_DEVICES" in os.environ: - device = os.environ["CUDA_VISIBLE_DEVICES"] - if not device.isdigit(): - print(f"Unsloth: 'CUDA_VISIBLE_DEVICES' is currently {device} "\ - "but we require 'CUDA_VISIBLE_DEVICES=0'\n"\ - "We shall set it ourselves.") - os.environ["CUDA_VISIBLE_DEVICES"] = "0" - reload_package = True - else: - print("Unsloth: 'CUDA_VISIBLE_DEVICES' is not set. We shall set it ourselves.") - os.environ["CUDA_VISIBLE_DEVICES"] = "0" - reload_package = True -pass - -# Reload Pytorch with CUDA_VISIBLE_DEVICES -if reload_package: - import importlib - importlib.reload(torch) -pass - from .llama import FastLlamaModel