[perf] dsv3 bmm fallback to bf16 (#5662)
This commit is contained in:
@@ -235,6 +235,41 @@ def block_quant_to_tensor_quant(
|
||||
return x_q_tensor, scale
|
||||
|
||||
|
||||
def block_quant_dequant(
|
||||
x_q_block: torch.Tensor,
|
||||
x_s: torch.Tensor,
|
||||
block_size: List[int],
|
||||
dtype: torch.dtype,
|
||||
) -> torch.Tensor:
|
||||
"""This function converts block-wise quantization to unquantized.
|
||||
The inputs are block-wise quantization tensor `x_q_block`, block-wise quantization scale
|
||||
and the block size.
|
||||
The output is an unquantized tensor with dtype.
|
||||
"""
|
||||
block_n, block_k = block_size[0], block_size[1]
|
||||
n, k = x_q_block.shape
|
||||
n_tiles = (n + block_n - 1) // block_n
|
||||
k_tiles = (k + block_k - 1) // block_k
|
||||
assert n_tiles == x_s.shape[0]
|
||||
assert k_tiles == x_s.shape[1]
|
||||
|
||||
x_dq_block = torch.empty_like(x_q_block, dtype=dtype)
|
||||
|
||||
for j in range(n_tiles):
|
||||
for i in range(k_tiles):
|
||||
x_q_block_tile = x_q_block[
|
||||
j * block_n : min((j + 1) * block_n, n),
|
||||
i * block_k : min((i + 1) * block_k, k),
|
||||
]
|
||||
x_dq_block_tile = x_dq_block[
|
||||
j * block_n : min((j + 1) * block_n, n),
|
||||
i * block_k : min((i + 1) * block_k, k),
|
||||
]
|
||||
x_dq_block_tile[:, :] = x_q_block_tile.to(torch.float32) * x_s[j][i]
|
||||
|
||||
return x_dq_block
|
||||
|
||||
|
||||
def channel_quant_to_tensor_quant(
|
||||
x_q_channel: torch.Tensor,
|
||||
x_s: torch.Tensor,
|
||||
|
||||
Reference in New Issue
Block a user