AffineQuantizedTensor¶
- class torchao.dtypes.AffineQuantizedTensor(tensor_impl: AQTTensorImpl, block_size: Tuple[int, ...], shape: Size, quant_min: Optional[Union[int, float]] = None, quant_max: Optional[Union[int, float]] = None, zero_point_domain: ZeroPointDomain = ZeroPointDomain.INT, dtype=None, strides=None)[source]¶
- 仿射量化張量子類別。仿射量化意味著我們使用仿射轉換來量化浮點張量。
quantized_tensor = float_tensor / scale + zero_point
若要了解在仿射量化的 choose_qparams、量化和反量化期間會發生什麼情況,請查看https://github.com/pytorch/ao/blob/main/torchao/quantization/quant_primitives.py 並檢查三個量化基本運算:choose_qparams_affine、quantize_affine 和 dequantize_affine。
張量子類別的 shape 和 dtype 代表張量子類別在外部的呈現方式,無論內部表示的類型或方向為何。
- 欄位
- tensor_impl (AQTTensorImpl):作為量化資料的通用張量 impl 儲存體的張量,
例如,根據裝置和運算子/核心,儲存純張量 (int_data、scale、zero_point) 或封裝格式
- block_size (Tuple[int, …]):量化的粒度,這意味著共享相同 qparam 的張量元素的大小
例如,當大小與輸入張量維度相同時,我們使用每個張量的量化
shape (torch.Size):原始高精度張量的形狀。 quant_min (Optional[int]):張量的最小量化值,如果未指定,它將從 int_data 的 dtype 推導而來。 quant_max (Optional[int]):張量的最大量化值,如果未指定,它將從 int_data 的 dtype 推導而來。 zero_point_domain (ZeroPointDomain):zero_point 所在的域,應該是整數或浮點數
如果 zero_point 在整數域中,則在量化期間將 zero point 新增至量化的整數值。如果 zero_point 在浮點域中,則在量化期間從浮點(未量化)值中減去 zero point。預設值為 ZeroPointDomain.INT
dtype:原始高精度張量的 dtype,例如 torch.float32
- to(*args, **kwargs) Tensor [source]¶
執行張量 dtype 和/或裝置轉換。
torch.dtype
和torch.device
是從self.to(*args, **kwargs)
的引數推斷而來。注意
如果
self
張量已經具有正確的torch.dtype
和torch.device
,則會傳回self
。 否則,傳回的張量是具有所需torch.dtype
和torch.device
的self
副本。以下是呼叫
to
的方法- to(dtype, non_blocking=False, copy=False, memory_format=torch.preserve_format) Tensor [source]
傳回具有指定
dtype
的 Tensor。- Args (引數)
memory_format (
torch.memory_format
, optional (可選)): 傳回 Tensor 所需的記憶體格式。預設值:torch.preserve_format
。
- to(device=None, dtype=None, non_blocking=False, copy=False, memory_format=torch.preserve_format) Tensor [source]
傳回具有指定
device
和(可選)dtype
的 Tensor。如果dtype
為None
,則推斷為self.dtype
。當non_blocking
時,如果可能,嘗試相對於主機非同步轉換,例如,將具有固定記憶體的 CPU Tensor 轉換為 CUDA Tensor。當設定copy
時,即使 Tensor 已經符合所需的轉換,也會建立一個新的 Tensor。- Args (引數)
memory_format (
torch.memory_format
, optional (可選)): 傳回 Tensor 所需的記憶體格式。預設值:torch.preserve_format
。
- to(other, non_blocking=False, copy=False) Tensor [source]
傳回具有與 Tensor
other
相同的torch.dtype
和torch.device
的 Tensor。當non_blocking
時,如果可能,嘗試相對於主機非同步轉換,例如,將具有固定記憶體的 CPU Tensor 轉換為 CUDA Tensor。當設定copy
時,即使 Tensor 已經符合所需的轉換,也會建立一個新的 Tensor。
範例
>>> tensor = torch.randn(2, 2) # Initially dtype=float32, device=cpu >>> tensor.to(torch.float64) tensor([[-0.5044, 0.0005], [ 0.3310, -0.0584]], dtype=torch.float64) >>> cuda0 = torch.device('cuda:0') >>> tensor.to(cuda0) tensor([[-0.5044, 0.0005], [ 0.3310, -0.0584]], device='cuda:0') >>> tensor.to(cuda0, dtype=torch.float64) tensor([[-0.5044, 0.0005], [ 0.3310, -0.0584]], dtype=torch.float64, device='cuda:0') >>> other = torch.randn((), dtype=torch.float64, device=cuda0) >>> tensor.to(other, non_blocking=True) tensor([[-0.5044, 0.0005], [ 0.3310, -0.0584]], dtype=torch.float64, device='cuda:0')