test_weight_utils.py 2.16 KB
Newer Older
1
# SPDX-License-Identifier: Apache-2.0
2
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3

4
import os
5
import tempfile
6
7
8

import huggingface_hub.constants
import pytest
9
from huggingface_hub.utils import LocalEntryNotFoundError
10

11
12
from vllm.model_executor.model_loader.weight_utils import (
    download_weights_from_hf, enable_hf_transfer)
13
from ..utils import models_path_prefix
14
15
16
17
18
19
20
21
22
23
24


def test_hf_transfer_auto_activation():
    if "HF_HUB_ENABLE_HF_TRANSFER" in os.environ:
        # in case it is already set, we can't test the auto activation
        pytest.skip(
            "HF_HUB_ENABLE_HF_TRANSFER is set, can't test auto activation")
    enable_hf_transfer()
    try:
        # enable hf hub transfer if available
        import hf_transfer  # type: ignore # noqa
omahs's avatar
omahs committed
25
        HF_TRANSFER_ACTIVE = True
26
    except ImportError:
omahs's avatar
omahs committed
27
        HF_TRANSFER_ACTIVE = False
28
    assert (huggingface_hub.constants.HF_HUB_ENABLE_HF_TRANSFER ==
omahs's avatar
omahs committed
29
            HF_TRANSFER_ACTIVE)
30
31


32
33
34
35
36
37
def test_download_weights_from_hf():
    with tempfile.TemporaryDirectory() as tmpdir:
        # assert LocalEntryNotFoundError error is thrown
        # if offline is set and model is not cached
        huggingface_hub.constants.HF_HUB_OFFLINE = True
        with pytest.raises(LocalEntryNotFoundError):
38
            download_weights_from_hf(os.path.join(models_path_prefix, "facebook/opt-125m"),
39
40
41
42
43
                                     allow_patterns=["*.safetensors", "*.bin"],
                                     cache_dir=tmpdir)

        # download the model
        huggingface_hub.constants.HF_HUB_OFFLINE = False
44
        download_weights_from_hf(os.path.join(models_path_prefix, "facebook/opt-125m"),
45
46
47
48
49
50
                                 allow_patterns=["*.safetensors", "*.bin"],
                                 cache_dir=tmpdir)

        # now it should work offline
        huggingface_hub.constants.HF_HUB_OFFLINE = True
        assert download_weights_from_hf(
51
            os.path.join(models_path_prefix, "facebook/opt-125m"),
52
53
54
55
            allow_patterns=["*.safetensors", "*.bin"],
            cache_dir=tmpdir) is not None


56
57
if __name__ == "__main__":
    test_hf_transfer_auto_activation()
58
    test_download_weights_from_hf()