{ "op": "com.microsoft.PagedAttention", "tunableSpace": { "WORKGROUP_SIZE": [32, 64, 128], "SCATTER_WORKGROUP_SIZE": [64, 128, 256], "SPLIT_TARGET_WORKGROUPS": [512, 1024, 2048, 4096], "SPLIT_MIN_KEYS": [64, 128, 256], "MAX_SPLITS": [8, 16, 32] }, "cases": [ { "name": "paged-decode-b8-past1024-h32kv8-d128", "preset": "smoke", "vars": { "dtype": "float16", "batch": 8, "past": 1024, "heads": 32, "kvHeads": 8, "headDim": 128 }, "attrs": { "num_heads": 32, "kv_num_heads": 8 }, "inputs": { "queryT": { "shape": [8, 4096], "dtype": "float16", "dist": "normal", "seed": 9201, "scale": 1 }, "keyT": { "shape": [8, 1024], "dtype": "float16", "dist": "normal", "seed": 9202, "scale": 1 }, "valueT": { "shape": [8, 1024], "dtype": "float16", "dist": "normal", "seed": 9203, "scale": 1 }, "keyCacheT": { "shape": [512, 16, 8, 128], "dtype": "float16", "dist": "normal", "seed": 9204, "scale": 1 }, "valueCacheT": { "shape": [512, 16, 8, 128], "dtype": "float16", "dist": "normal", "seed": 9205, "scale": 1 }, "cumulativeSequenceLengthT": { "shape": [9], "dtype": "int32", "data": { "kind": "values", "values": [0, 1, 2, 3, 4, 5, 6, 7, 8] } }, "pastSeqlensT": { "shape": [8], "dtype": "int32", "dist": "constant", "value": 1023 }, "blockTableT": { "shape": [8, 64], "dtype": "int32", "dist": "linearMod", "seed": 9208, "step": 1, "mod": 512 } }, "outputs": { "outputT": { "shape": [8, 4096], "dtype": "float16" } }, "bench": { "metrics": [{ "type": "bandwidth", "value": "2 * args.batch * args.kvHeads * args.past * args.headDim * 2" }] }, "provenance": { "notes": "The KV bytes are counted off named vars like the model cases, not hardcoded: the literal this replaced used the QUERY head count for a grouped-query shape and four bytes for a float16 cache, so it over-stated the traffic eightfold and the case reported an impossible rate." } }, { "name": "paged-decode-llama-b16-past2048-h32kv32-d128", "preset": "model", "provenance": { "notes": "Llama class defaults (32 query heads, no GQA, head_dim 128) decoding 16 concurrent sequences with 2048 tokens of paged KV each." }, "vars": { "dtype": "float16", "batch": 16, "past": 2048, "heads": 32, "kvHeads": 32, "headDim": 128 }, "attrs": { "num_heads": 32, "kv_num_heads": 32 }, "inputs": { "queryT": { "shape": [16, 4096], "dtype": "float16", "dist": "normal", "seed": 7600, "scale": 0.3 }, "keyT": { "shape": [16, 4096], "dtype": "float16", "dist": "normal", "seed": 7601, "scale": 0.3 }, "valueT": { "shape": [16, 4096], "dtype": "float16", "dist": "normal", "seed": 7602, "scale": 0.3 }, "keyCacheT": { "shape": [2048, 16, 32, 128], "dtype": "float16", "dist": "normal", "seed": 7603, "scale": 0.3 }, "valueCacheT": { "shape": [2048, 16, 32, 128], "dtype": "float16", "dist": "normal", "seed": 7604, "scale": 0.3 }, "cumulativeSequenceLengthT": { "shape": [17], "dtype": "int32", "dist": "linearMod", "seed": 7605, "step": 1, "mod": 17 }, "pastSeqlensT": { "shape": [16], "dtype": "int32", "dist": "constant", "value": 2048 }, "blockTableT": { "shape": [16, 128], "dtype": "int32", "dist": "linearMod", "seed": 7606, "step": 1, "mod": 2048 } }, "outputs": { "outputT": { "shape": [16, 4096], "dtype": "float16" } }, "bench": { "metrics": [{ "type": "bandwidth", "value": "2 * args.batch * args.kvHeads * args.past * args.headDim * 2" }] } }, { "name": "paged-decode-mistral-b16-past4096-h32kv8-d128", "preset": "model", "provenance": { "notes": "Mistral class defaults (32 query heads, 8 key/value heads, head_dim 128) at 4096 tokens of history -- the GQA case, where the cache is a quarter the size for the same context." }, "vars": { "dtype": "float16", "batch": 16, "past": 4096, "heads": 32, "kvHeads": 8, "headDim": 128 }, "attrs": { "num_heads": 32, "kv_num_heads": 8 }, "inputs": { "queryT": { "shape": [16, 4096], "dtype": "float16", "dist": "normal", "seed": 7700, "scale": 0.3 }, "keyT": { "shape": [16, 1024], "dtype": "float16", "dist": "normal", "seed": 7701, "scale": 0.3 }, "valueT": { "shape": [16, 1024], "dtype": "float16", "dist": "normal", "seed": 7702, "scale": 0.3 }, "keyCacheT": { "shape": [4096, 16, 8, 128], "dtype": "float16", "dist": "normal", "seed": 7703, "scale": 0.3 }, "valueCacheT": { "shape": [4096, 16, 8, 128], "dtype": "float16", "dist": "normal", "seed": 7704, "scale": 0.3 }, "cumulativeSequenceLengthT": { "shape": [17], "dtype": "int32", "dist": "linearMod", "seed": 7705, "step": 1, "mod": 17 }, "pastSeqlensT": { "shape": [16], "dtype": "int32", "dist": "constant", "value": 4096 }, "blockTableT": { "shape": [16, 256], "dtype": "int32", "dist": "linearMod", "seed": 7706, "step": 1, "mod": 4096 } }, "outputs": { "outputT": { "shape": [16, 4096], "dtype": "float16" } }, "bench": { "metrics": [{ "type": "bandwidth", "value": "2 * args.batch * args.kvHeads * args.past * args.headDim * 2" }] } }, { "name": "paged-decode-gemma3-b8-past2048-h8kv4-d256", "preset": "model", "provenance": { "notes": "Gemma3 class defaults (8 query heads, 4 key/value heads, head_dim 256) -- few heads but the widest head dimension in this set." }, "vars": { "dtype": "float16", "batch": 8, "past": 2048, "heads": 8, "kvHeads": 4, "headDim": 256 }, "attrs": { "num_heads": 8, "kv_num_heads": 4 }, "inputs": { "queryT": { "shape": [8, 2048], "dtype": "float16", "dist": "normal", "seed": 7800, "scale": 0.3 }, "keyT": { "shape": [8, 1024], "dtype": "float16", "dist": "normal", "seed": 7801, "scale": 0.3 }, "valueT": { "shape": [8, 1024], "dtype": "float16", "dist": "normal", "seed": 7802, "scale": 0.3 }, "keyCacheT": { "shape": [1024, 16, 4, 256], "dtype": "float16", "dist": "normal", "seed": 7803, "scale": 0.3 }, "valueCacheT": { "shape": [1024, 16, 4, 256], "dtype": "float16", "dist": "normal", "seed": 7804, "scale": 0.3 }, "cumulativeSequenceLengthT": { "shape": [9], "dtype": "int32", "dist": "linearMod", "seed": 7805, "step": 1, "mod": 9 }, "pastSeqlensT": { "shape": [8], "dtype": "int32", "dist": "constant", "value": 2048 }, "blockTableT": { "shape": [8, 128], "dtype": "int32", "dist": "linearMod", "seed": 7806, "step": 1, "mod": 1024 } }, "outputs": { "outputT": { "shape": [8, 2048], "dtype": "float16" } }, "bench": { "metrics": [{ "type": "bandwidth", "value": "2 * args.batch * args.kvHeads * args.past * args.headDim * 2" }] } } ] }