test_weight_utils.py 2.17 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
from vllm.model_executor.model_loader.weight_utils import (
12
13
14
    download_weights_from_hf,
    enable_hf_transfer,
)
15
from ..utils import models_path_prefix
16
17
18
19
20


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
21
        pytest.skip("HF_HUB_ENABLE_HF_TRANSFER is set, can't test auto activation")
22
23
24
25
    enable_hf_transfer()
    try:
        # enable hf hub transfer if available
        import hf_transfer  # type: ignore # noqa
26

omahs's avatar
omahs committed
27
        HF_TRANSFER_ACTIVE = True
28
    except ImportError:
omahs's avatar
omahs committed
29
        HF_TRANSFER_ACTIVE = False
30
    assert huggingface_hub.constants.HF_HUB_ENABLE_HF_TRANSFER == HF_TRANSFER_ACTIVE
31
32


33
34
35
36
37
38
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):
39
            download_weights_from_hf(
40
                os.path.join(models_path_prefix, "facebook/opt-125m"),
41
42
43
                allow_patterns=["*.safetensors", "*.bin"],
                cache_dir=tmpdir,
            )
44
45
46

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

        # now it should work offline
        huggingface_hub.constants.HF_HUB_OFFLINE = True
55
56
        assert (
            download_weights_from_hf(
57
                os.path.join(models_path_prefix, "facebook/opt-125m"),
58
59
60
61
62
                allow_patterns=["*.safetensors", "*.bin"],
                cache_dir=tmpdir,
            )
            is not None
        )
63
64


65
66
if __name__ == "__main__":
    test_hf_transfer_auto_activation()
67
    test_download_weights_from_hf()