From 8c4bee49a773733fd4967c5ec4d37b2079386236 Mon Sep 17 00:00:00 2001 From: ryan Date: Thu, 27 Mar 2025 11:23:15 -0700 Subject: [PATCH] deps: lazy load optional dependencies gguf, torchvision --- 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 2740742031be..a04549224206 100644 --- a/python/sglang/srt/configs/deepseekvl2.py +++ b/python/sglang/srt/configs/deepseekvl2.py @@ -4,7 +4,6 @@ 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 @@ def __init__( 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 e01eb8ad5801..07e582cc5d74 100644 --- a/python/sglang/srt/model_loader/loader.py +++ b/python/sglang/srt/model_loader/loader.py @@ -14,7 +14,6 @@ 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 @@ def _get_gguf_weights_map(self, model_config: ModelConfig): 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 92751b3c130d..0fb975e657ce 100644 --- a/python/sglang/srt/model_loader/weight_utils.py +++ b/python/sglang/srt/model_loader/weight_utils.py @@ -22,7 +22,6 @@ ) 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: