From 188105a21b68a6497c8ac8ad8cfa0c77e63b30d7 Mon Sep 17 00:00:00 2001 From: Juwan Yoo Date: Thu, 27 Mar 2025 14:35:36 -0700 Subject: [PATCH] deps: lazy import optional dependencies `gguf` and `torchvision` (#4826) --- python/sglang/srt/configs/deepseekvl2.py | 11 ++++++++++- python/sglang/srt/model_loader/loader.py | 12 +++++++++++- python/sglang/srt/model_loader/weight_utils.py | 5 ++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/python/sglang/srt/configs/deepseekvl2.py b/python/sglang/srt/configs/deepseekvl2.py index 274074203..a04549224 100644 --- a/python/sglang/srt/configs/deepseekvl2.py +++ b/python/sglang/srt/configs/deepseekvl2.py @@ -4,7 +4,6 @@ from dataclasses import dataclass from typing import Dict, List, Optional, Tuple import torch -import torchvision.transforms as T from PIL import Image, ImageOps from transformers import ( AutoProcessor, @@ -76,6 +75,16 @@ class ImageTransform(object): self.std = std self.normalize = normalize + # only load torchvision.transforms when needed + try: + import torchvision.transforms as T + + # FIXME: add version check for gguf + except ImportError as err: + raise ImportError( + "Please install torchvision via `pip install torchvision` to use Deepseek-VL2." + ) from err + transform_pipelines = [T.ToTensor()] if normalize: diff --git a/python/sglang/srt/model_loader/loader.py b/python/sglang/srt/model_loader/loader.py index e01eb8ad5..07e582cc5 100644 --- a/python/sglang/srt/model_loader/loader.py +++ b/python/sglang/srt/model_loader/loader.py @@ -14,7 +14,6 @@ from abc import ABC, abstractmethod from contextlib import contextmanager from typing import Any, Dict, Generator, Iterable, List, Optional, Tuple, cast -import gguf import huggingface_hub import numpy as np import torch @@ -1155,6 +1154,17 @@ class GGUFModelLoader(BaseModelLoader): See "Standardized tensor names" in https://github.com/ggerganov/ggml/blob/master/docs/gguf.md for details. """ + + # only load the gguf module when needed + try: + import gguf + + # FIXME: add version check for gguf + except ImportError as err: + raise ImportError( + "Please install gguf via `pip install gguf` to use gguf quantizer." + ) from err + config = model_config.hf_config model_type = config.model_type # hack: ggufs have a different name than transformers diff --git a/python/sglang/srt/model_loader/weight_utils.py b/python/sglang/srt/model_loader/weight_utils.py index 92751b3c1..0fb975e65 100644 --- a/python/sglang/srt/model_loader/weight_utils.py +++ b/python/sglang/srt/model_loader/weight_utils.py @@ -22,7 +22,6 @@ from typing import ( ) import filelock -import gguf import huggingface_hub.constants import numpy as np import safetensors.torch @@ -464,6 +463,8 @@ def pt_weights_iterator( def get_gguf_extra_tensor_names( gguf_file: str, gguf_to_hf_name_map: Dict[str, str] ) -> List[str]: + import gguf + reader = gguf.GGUFReader(gguf_file) expected_gguf_keys = set(gguf_to_hf_name_map.keys()) exact_gguf_keys = set([tensor.name for tensor in reader.tensors]) @@ -479,6 +480,8 @@ def gguf_quant_weights_iterator( them to torch tensors """ + import gguf + reader = gguf.GGUFReader(gguf_file) for tensor in reader.tensors: