Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,810 changes: 1,405 additions & 1,405 deletions aiter/configs/model_configs/a8w8_blockscale_bpreshuffle_tuned_gemm_dsv3.csv

Large diffs are not rendered by default.

1,360 changes: 680 additions & 680 deletions aiter/configs/model_configs/dsv4_a8w8_blockscale_bpreshuffle_tuned_gemm.csv

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -12,76 +12,76 @@
"NUM_KSPLIT": 4
},
"M_LEQ_4": {
"BLOCK_SIZE_M": 8,
"BLOCK_SIZE_M": 16,
"BLOCK_SIZE_N": 16,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 1,
"num_stages": 2,
"num_stages": 3,
"waves_per_eu": 2,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 4
"NUM_KSPLIT": 8
},
"M_LEQ_8": {
"BLOCK_SIZE_M": 4,
"BLOCK_SIZE_M": 16,
"BLOCK_SIZE_N": 16,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 1,
"num_stages": 2,
"waves_per_eu": 2,
"num_stages": 3,
"waves_per_eu": 1,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 4
"NUM_KSPLIT": 8
},
"M_LEQ_16": {
"BLOCK_SIZE_M": 16,
"BLOCK_SIZE_N": 16,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 1,
"num_stages": 2,
"num_stages": 3,
"waves_per_eu": 2,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 4
"NUM_KSPLIT": 8
},
"M_LEQ_32": {
"BLOCK_SIZE_M": 16,
"BLOCK_SIZE_N": 16,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 1,
"num_stages": 2,
"num_stages": 3,
"waves_per_eu": 2,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 4
"NUM_KSPLIT": 8
},
"M_LEQ_64": {
"BLOCK_SIZE_M": 32,
"BLOCK_SIZE_N": 64,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 4,
"num_stages": 2,
"num_stages": 3,
"waves_per_eu": 2,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 4
"NUM_KSPLIT": 8
},
"M_LEQ_128": {
"BLOCK_SIZE_M": 32,
"BLOCK_SIZE_M": 128,
"BLOCK_SIZE_N": 32,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 1,
"num_stages": 2,
"num_warps": 4,
"num_stages": 3,
"waves_per_eu": 2,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 4
"NUM_KSPLIT": 8
},
"M_LEQ_256": {
"BLOCK_SIZE_M": 64,
Expand All @@ -107,4 +107,4 @@
"cache_modifier": null,
"NUM_KSPLIT": 1
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"M_LEQ_8": {
"BLOCK_SIZE_M": 8,
"BLOCK_SIZE_M": 16,
"BLOCK_SIZE_N": 32,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
Expand All @@ -13,12 +13,12 @@
},
"M_LEQ_16": {
"BLOCK_SIZE_M": 16,
"BLOCK_SIZE_N": 16,
"BLOCK_SIZE_N": 32,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 1,
"num_stages": 3,
"waves_per_eu": 8,
"num_warps": 2,
"num_stages": 2,
"waves_per_eu": 4,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 8
Expand All @@ -29,20 +29,20 @@
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 1,
"num_stages": 3,
"waves_per_eu": 4,
"num_stages": 2,
"waves_per_eu": 2,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 8
},
"M_LEQ_64": {
"BLOCK_SIZE_M": 64,
"BLOCK_SIZE_N": 64,
"BLOCK_SIZE_N": 128,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 1,
"num_stages": 2,
"waves_per_eu": 1,
"num_warps": 4,
"num_stages": 3,
"waves_per_eu": 2,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 8
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
{
"M_LEQ_4": {
"BLOCK_SIZE_M": 16,
"BLOCK_SIZE_N": 32,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 2,
"num_stages": 3,
"waves_per_eu": 4,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 8
},
"M_LEQ_8": {
"BLOCK_SIZE_M": 16,
"BLOCK_SIZE_N": 32,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 2,
"num_stages": 3,
"waves_per_eu": 4,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 8
},
"M_LEQ_16": {
"BLOCK_SIZE_M": 16,
"BLOCK_SIZE_N": 32,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 2,
"num_stages": 3,
"waves_per_eu": 4,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 8
},
"M_LEQ_32": {
"BLOCK_SIZE_M": 32,
"BLOCK_SIZE_N": 32,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 2,
"num_stages": 3,
"waves_per_eu": 2,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 4
},
"M_LEQ_64": {
"BLOCK_SIZE_M": 32,
"BLOCK_SIZE_N": 128,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 4,
"num_stages": 2,
"waves_per_eu": 4,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 4
},
"M_LEQ_128": {
"BLOCK_SIZE_M": 64,
"BLOCK_SIZE_N": 64,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 4,
"num_stages": 3,
"waves_per_eu": 4,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 2
},
"M_LEQ_256": {
"BLOCK_SIZE_M": 128,
"BLOCK_SIZE_N": 128,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 8,
"num_stages": 2,
"waves_per_eu": 2,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 2
},
"any": {
"BLOCK_SIZE_M": 128,
"BLOCK_SIZE_N": 128,
"BLOCK_SIZE_K": 128,
"GROUP_SIZE_M": 1,
"num_warps": 8,
"num_stages": 2,
"waves_per_eu": 4,
"matrix_instr_nonkdim": 16,
"cache_modifier": ".cg",
"NUM_KSPLIT": 1
}
}
60 changes: 31 additions & 29 deletions op_tests/test_gemm_a8w8_blockscale.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,26 @@ def run_gemm_bpreshuffle(x, weightshuffle, x_scale, w_scale, dtype=dtypes.bf16):
)


@perftest(num_iters=TEST_NUM_ITERS)
def run_triton(x, weightshuffle, x_scale, w_scale, dtype=dtypes.bf16, backend=None):
# Direct call into the triton preshuffle kernel, mirroring the dispatch in
# gemm_a8w8_blockscale_bpreshuffle: reshape the (n, k) preshuffled weight to
# (n // 16, k * 16) and pass the transposed x_scale.
from aiter.ops.triton.gemm.basic.gemm_a8w8_blockscale import (
gemm_a8w8_blockscale_preshuffle,
)

n, k = weightshuffle.shape
return gemm_a8w8_blockscale_preshuffle(
x,
weightshuffle.reshape(n // 16, k * 16),
x_scale,
w_scale,
dtype=dtype,
backend=backend,
)


@benchmark()
def test_gemm(dtype, m, n, k, ck_preshuffle=True):
ret = {}
Expand Down Expand Up @@ -97,6 +117,17 @@ def test_gemm(dtype, m, n, k, ck_preshuffle=True):
ret[f"{tag} err"] = err_asm
ret["asm/ck"] = avg_c / avg_b

# Triton path requires a preshuffled weight. When not preshuffled we simply omit
# these columns; pd.DataFrame NaN-fills them for those rows in the summary.
if ck_preshuffle:
d, avg_d = run_triton(x, gemm_weight, x_scale_t, w_scale, dtype)
err_triton = checkAllclose(a, d, msg="triton", catastrophic_check=True)
ret["triton us"] = avg_d
ret["triton TFLOPS"] = m * n * k * 2 / avg_d / 1e6
ret["triton TB/s"] = (x.nbytes + weight.nbytes) / avg_d / 1e6
ret["triton err"] = err_triton
ret["triton/ck"] = avg_d / avg_b

return ret


Expand Down Expand Up @@ -201,35 +232,6 @@ def test_splitk_correctness(m=4, n=2112, k=7168, dtype=dtypes.bf16, splitK=1):
"-m",
type=int,
nargs="*",
choices=[
1,
2,
4,
8,
16,
32,
64,
96,
128,
160,
192,
224,
256,
288,
320,
352,
384,
416,
448,
480,
512,
1024,
2048,
4096,
6144,
8192,
10240,
],
default=[
1,
2,
Expand Down
Loading