chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
# DeepSpeed Team
|
||||
|
||||
import pytest
|
||||
import torch
|
||||
import deepspeed
|
||||
|
||||
from deepspeed.accelerator import get_accelerator
|
||||
from deepspeed.linear.quantization import QuantizedParameter
|
||||
from deepspeed.linear.config import QuantizationConfig
|
||||
|
||||
from deepspeed.ops.op_builder import FPQuantizerBuilder
|
||||
|
||||
from unit.common import DistributedTest
|
||||
|
||||
if not deepspeed.ops.__compatible_ops__[FPQuantizerBuilder.NAME]:
|
||||
pytest.skip("FPQuantizer op is not available on this system", allow_module_level=True)
|
||||
|
||||
|
||||
class TestQuantParam(DistributedTest):
|
||||
world_size = 1
|
||||
|
||||
@pytest.mark.parametrize('dtype', [torch.half, torch.float])
|
||||
def test_unsupported_dtypes(self, dtype):
|
||||
device = get_accelerator().current_device_name()
|
||||
data = torch.rand(5, 5, device='cpu', dtype=dtype)
|
||||
qp = QuantizedParameter(data)
|
||||
with pytest.raises(AssertionError):
|
||||
qp.to(device)
|
||||
|
||||
def test_requires_grad(self):
|
||||
data = torch.rand(5, 5, dtype=torch.bfloat16)
|
||||
with pytest.raises(ValueError):
|
||||
QuantizedParameter(data, requires_grad=True)
|
||||
|
||||
def test_move_to_accelerator(self):
|
||||
device = get_accelerator().current_device()
|
||||
data = torch.rand(5, 5, device='cpu', dtype=torch.bfloat16)
|
||||
quantization_config = QuantizationConfig()
|
||||
quantization_config.q_dtype = FPQuantizerBuilder.get_default_quant_dtype()
|
||||
qp = QuantizedParameter(data, quantization_config=quantization_config)
|
||||
assert qp.device == torch.device('cpu')
|
||||
qp = qp.to(get_accelerator().current_device_name())
|
||||
assert qp.device == torch.device(device)
|
||||
assert qp.dtype == quantization_config.q_dtype
|
||||
|
||||
def test_hf_clone(self):
|
||||
device = get_accelerator().current_device_name()
|
||||
data = torch.rand(5, 5, device=device, dtype=torch.bfloat16)
|
||||
|
||||
quantization_config = QuantizationConfig(q_bits=6)
|
||||
qp = QuantizedParameter(data, quantization_config=quantization_config)
|
||||
|
||||
# should be able to clone parameter via dict, HF expects this to work
|
||||
qp_copy = QuantizedParameter(qp.data, **qp.__dict__)
|
||||
|
||||
assert all(qp.data == qp_copy.data)
|
||||
assert qp.quantization_config == qp_copy.quantization_config
|
||||
Reference in New Issue
Block a user