From 2d425b6cfd9057387c47990ee52680ae158beb37 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Wed, 29 Jul 2026 11:14:22 +0000 Subject: [PATCH 01/42] test: update sparse bf16 validation status --- .../ark/SPARSE_BF16_STATUS_20260729.md | 169 +++++++++++++++++ .../ark/SPARSE_BF16_STATUS_20260729_CN.md | 169 +++++++++++++++++ .../test/test_sage_sparse_prefill_e2e.py | 175 +++++++++++++++++- 3 files changed, 504 insertions(+), 9 deletions(-) create mode 100644 auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md create mode 100644 auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md diff --git a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md new file mode 100644 index 0000000000..dc5208b971 --- /dev/null +++ b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md @@ -0,0 +1,169 @@ +# Sparse BF16 Status 2026-07-29 + +## Scope + +This note captures the current sparse attention status on Wednesday, July 29, 2026 after rebuilding with oneAPI 2025 and rerunning focused accuracy and performance checks on XPU 7. + +Environment: + +- `ONEAPI_ROOT=/home/yiliu4/intel/oneapi` +- Python: `/home/yiliu4/workspace/auto-round-prefill-clean-sparse-pr/auto_round_extension/ark/ark-torch-212/bin/python` +- device: `XPU_MASK=7` +- native BF16 sparse enabled with `SAGE_ATTN_XPU_SPARSE_BF16_NATIVE=1` +- rebuilt extension: `auto_round_kernel/xbuild_bf16_v2/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so` + +Kernel config under test: + +- `head_dim=128` +- `q_tile_override=256` +- `sparse_q_block_tokens=256` +- `sparse_k_block_tokens=64` +- layout: `HND` + +## Accuracy Status + +### Fixed-LUT sparse kernel + +`fixed-LUT sparse` means the sparse mask is explicitly provided by `lut` and `valid_block_num`, and the kernel is checked against an exact dense BF16 reference with the same mask. + +Target correctness case: + +- shape: `B=1, Hq=32, Hkv=8, Sq=512, Skv=768, D=128` +- sparse pattern: first Q tile uses K blocks `[0, 1, 2]`, second Q tile uses `[9, 10, 11]` +- reference: explicit BF16 `Q @ K^T`, add exact mask, softmax, then `P @ V` + +Result: + +- `bf16_sparse` vs exact BF16 reference: + - `max_diff=0.003906` + - `mean_diff=0.000127` + +Comparison on the same case: + +- `int8_sparse` vs exact BF16 reference: + - `max_diff=3.826172` + - `mean_diff=0.344735` +- `int8_sparse` vs `bf16_sparse`: + - `max_diff=3.826172` + - `mean_diff=0.344735` + +Conclusion: + +- `bf16_sparse` is accurate for the exact fixed-LUT sparse kernel path. +- `int8_sparse` is materially less accurate than `bf16_sparse` on the same case. + +### Heuristic top-k end-to-end path + +The `sparge_sage2_attn_meansim_topk_xpu_bf16` path is heuristic. It should not be treated as an exact correctness reference for a handcrafted LUT mask. + +Because of that, the BF16 sparse test now treats: + +- exact correctness: `sage_sparse_bf16` vs explicit masked BF16 reference +- heuristic top-k path: benchmark/perf path, not exact reference + +## Test Harness Status + +File updated: + +- `auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py` + +Current test harness behavior: + +- force-loads the rebuilt BF16-capable extension from `xbuild_bf16_v2` +- uses explicit masked BF16 math as the BF16 sparse correctness reference +- no longer treats heuristic BF16 top-k output as an exact oracle for the fixed-LUT kernel + +Verified run: + +```bash +source benchmarks/source_env_xpu67_oneapi2025.sh +export XPU_MASK=7 +export SAGE_ATTN_XPU_SPARSE_BF16_NATIVE=1 +${ARK_BENCH_PYTHON} auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +``` + +Observed result: + +- full script exits successfully under oneAPI 2025 +- INT8 sparse cases pass +- BF16 sparse exact-reference cases pass + +## Performance Status + +### Medium-size exact sparse case + +Shape: + +- `B=1, Hq=32, Hkv=8, Sq=512, Skv=768, D=128` + +Latency: + +- dense BF16 with exact mask: `0.105 ms` +- `bf16_sparse`: `0.096 ms` +- `int8_sparse`: `0.090 ms` +- INT8 Q/K quantization only: `0.027 ms` + +Speedup vs dense BF16 exact-mask baseline: + +- `bf16_sparse`: `1.093x` +- `int8_sparse`: `1.175x` +- `int8_sparse + quant`: `0.902x` + +Conclusion: + +- kernel-only, `int8_sparse` is slightly faster +- including quantization, this small/medium case does not favor the INT8 path +- `bf16_sparse` is the better accuracy point here + +### Long-sequence benchmark + +Shape: + +- `B=1, Hq=40, Hkv=40, S=75000, D=128` +- layout: `HND` +- `topk=0.5` +- `q_tile_override=256` +- `sparse_q_block_tokens=256` +- `sparse_k_block_tokens=64` + +Sparse selection stats: + +- `selected_ratio=0.502557` +- `selected_blocks_per_row=588.997` + +Sparse timings: + +- `preprocess=127.809 ms` +- `int8_sparse_kernel=390.990 ms` +- `int8_sparse_e2e=501.369 ms` +- `bf16_sparse_kernel=804.864 ms` +- `bf16_sparse_e2e=919.896 ms` + +Dense BF16 baselines on the same shape: + +- `dense_torch_sdpa_bf16=2154.809 ms` +- `dense_ark_sdpa_bf16=2494.633 ms` +- `dense_ark_sagev1_bf16=10848.612 ms` + +Speedup vs dense torch BF16 SDPA: + +- `int8_sparse_e2e`: about `4.30x` +- `bf16_sparse_e2e`: about `2.34x` + +Speedup vs dense ARK BF16 SDPA: + +- `int8_sparse_e2e`: about `4.98x` +- `bf16_sparse_e2e`: about `2.71x` + +Conclusion: + +- at `75k / 40 / 128`, both sparse paths are substantially faster than dense BF16 +- `int8_sparse` remains the fastest path +- `bf16_sparse` is slower than `int8_sparse` but still much faster than dense BF16 + +## Current Summary + +- BF16 sparse fixed-LUT kernel correctness is in good shape after rebuilding with oneAPI 2025. +- The previous BF16 mismatch was caused by stale extension loading and an unreliable masked-XPU reference path in the test harness. +- For long sequences, BF16 sparse is a valid accuracy-oriented sparse path with meaningful speedup over dense BF16. +- INT8 sparse is still the fastest sparse option, but it gives up substantial accuracy relative to BF16 sparse on the exact fixed-LUT check. diff --git a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md new file mode 100644 index 0000000000..8581393545 --- /dev/null +++ b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md @@ -0,0 +1,169 @@ +# Sparse BF16 状态 2026-07-29 + +## 范围 + +本文档记录了 2026 年 7 月 29 日(星期三)在 oneAPI 2025 环境下重新构建并在 XPU 7 上复测后的 sparse attention 当前状态。 + +环境: + +- `ONEAPI_ROOT=/home/yiliu4/intel/oneapi` +- Python: `/home/yiliu4/workspace/auto-round-prefill-clean-sparse-pr/auto_round_extension/ark/ark-torch-212/bin/python` +- 设备:`XPU_MASK=7` +- 原生 BF16 sparse 打开:`SAGE_ATTN_XPU_SPARSE_BF16_NATIVE=1` +- 重建后的扩展:`auto_round_kernel/xbuild_bf16_v2/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so` + +本次测试的 kernel 配置: + +- `head_dim=128` +- `q_tile_override=256` +- `sparse_q_block_tokens=256` +- `sparse_k_block_tokens=64` +- layout:`HND` + +## 精度状态 + +### 固定 LUT sparse kernel + +这里的 `fixed-LUT sparse` 指 sparse mask 由 `lut` 和 `valid_block_num` 显式给出,然后用相同 mask 的精确 dense BF16 参考结果进行校验。 + +目标正确性用例: + +- shape:`B=1, Hq=32, Hkv=8, Sq=512, Skv=768, D=128` +- sparse pattern:第一个 Q tile 使用 K blocks `[0, 1, 2]`,第二个 Q tile 使用 `[9, 10, 11]` +- 参考实现:显式 BF16 `Q @ K^T`,加精确 mask,softmax,然后 `P @ V` + +结果: + +- `bf16_sparse` 对比精确 BF16 参考: + - `max_diff=0.003906` + - `mean_diff=0.000127` + +同一用例下的对比: + +- `int8_sparse` 对比精确 BF16 参考: + - `max_diff=3.826172` + - `mean_diff=0.344735` +- `int8_sparse` 对比 `bf16_sparse`: + - `max_diff=3.826172` + - `mean_diff=0.344735` + +结论: + +- `bf16_sparse` 在精确 fixed-LUT sparse kernel 路径上是准确的。 +- 同一用例下,`int8_sparse` 的精度明显差于 `bf16_sparse`。 + +### 启发式 top-k 端到端路径 + +`sparge_sage2_attn_meansim_topk_xpu_bf16` 是启发式路径,不应该作为手工构造 LUT mask 的精确正确性参考。 + +因此当前 BF16 sparse 测试的含义是: + +- 精确正确性:`sage_sparse_bf16` 对比显式 masked BF16 参考 +- 启发式 top-k 路径:用于 benchmark / perf,不作为精确 oracle + +## 测试状态 + +更新文件: + +- `auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py` + +当前测试脚本行为: + +- 强制加载 `xbuild_bf16_v2` 中带 BF16 sparse 能力的扩展 +- 使用显式 masked BF16 数学结果作为 BF16 sparse 正确性参考 +- 不再把启发式 BF16 top-k 输出当成 fixed-LUT kernel 的精确标准答案 + +验证命令: + +```bash +source benchmarks/source_env_xpu67_oneapi2025.sh +export XPU_MASK=7 +export SAGE_ATTN_XPU_SPARSE_BF16_NATIVE=1 +${ARK_BENCH_PYTHON} auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +``` + +观察结果: + +- 整个脚本在 oneAPI 2025 下成功退出 +- INT8 sparse 用例通过 +- BF16 sparse 精确参考用例通过 + +## 性能状态 + +### 中等尺寸精确 sparse 用例 + +Shape: + +- `B=1, Hq=32, Hkv=8, Sq=512, Skv=768, D=128` + +时延: + +- 带精确 mask 的 dense BF16:`0.105 ms` +- `bf16_sparse`:`0.096 ms` +- `int8_sparse`:`0.090 ms` +- 仅 INT8 Q/K 量化:`0.027 ms` + +相对 dense BF16 精确 mask 基线的加速比: + +- `bf16_sparse`:`1.093x` +- `int8_sparse`:`1.175x` +- `int8_sparse + quant`:`0.902x` + +结论: + +- 只看 kernel,`int8_sparse` 略快 +- 如果把量化时间算进去,这个中等尺寸用例并不偏向 INT8 路径 +- 这里 `bf16_sparse` 是更好的精度点 + +### 长序列 benchmark + +Shape: + +- `B=1, Hq=40, Hkv=40, S=75000, D=128` +- layout:`HND` +- `topk=0.5` +- `q_tile_override=256` +- `sparse_q_block_tokens=256` +- `sparse_k_block_tokens=64` + +sparse 选择统计: + +- `selected_ratio=0.502557` +- `selected_blocks_per_row=588.997` + +sparse 时延: + +- `preprocess=127.809 ms` +- `int8_sparse_kernel=390.990 ms` +- `int8_sparse_e2e=501.369 ms` +- `bf16_sparse_kernel=804.864 ms` +- `bf16_sparse_e2e=919.896 ms` + +同一 shape 下的 dense BF16 基线: + +- `dense_torch_sdpa_bf16=2154.809 ms` +- `dense_ark_sdpa_bf16=2494.633 ms` +- `dense_ark_sagev1_bf16=10848.612 ms` + +相对 dense torch BF16 SDPA 的加速比: + +- `int8_sparse_e2e`:约 `4.30x` +- `bf16_sparse_e2e`:约 `2.34x` + +相对 dense ARK BF16 SDPA 的加速比: + +- `int8_sparse_e2e`:约 `4.98x` +- `bf16_sparse_e2e`:约 `2.71x` + +结论: + +- 在 `75k / 40 / 128` 下,两条 sparse 路径都明显快于 dense BF16 +- `int8_sparse` 仍然是最快路径 +- `bf16_sparse` 虽然慢于 `int8_sparse`,但仍然显著快于 dense BF16 + +## 当前结论 + +- 在 oneAPI 2025 重新构建后,BF16 sparse fixed-LUT kernel 的正确性状态是好的。 +- 之前 BF16 mismatch 的主要原因是旧扩展被错误加载,以及测试里使用了不可靠的 masked XPU 参考路径。 +- 对长序列来说,BF16 sparse 是一个兼顾精度的 sparse 路径,并且相对 dense BF16 有明显加速。 +- `int8_sparse` 仍然是最快的 sparse 方案,但在精确 fixed-LUT 检查里,相比 `bf16_sparse` 牺牲了明显精度。 diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py index 27ab86385c..60c9a87922 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py @@ -15,8 +15,20 @@ from auto_round_kernel.xpu_loader import ensure_xpu_lib -def ensure_sparse_binding() -> None: - ensure_xpu_lib(required_symbols=("sage_sparse",)) +def ensure_sparse_binding(*, required_symbols: tuple[str, ...] = ("sage_sparse",)) -> None: + bf16_ext = ( + REPO_PARENT / "auto_round_kernel" / "xbuild_bf16_v2" / "auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so" + ) + search_roots = ( + REPO_PARENT / "auto_round_kernel", + REPO_PARENT / "auto_round_kernel" / "xbuild", + REPO_PARENT / "auto_round_kernel" / "xbuild_diffuser", + ) + ensure_xpu_lib( + required_symbols=required_symbols, + ext_path=bf16_ext if bf16_ext.is_file() else None, + search_roots=search_roots, + ) def quantize_qk(tensor: torch.Tensor, block_size: int) -> tuple[torch.Tensor, torch.Tensor]: @@ -43,7 +55,7 @@ def quantize_qk(tensor: torch.Tensor, block_size: int) -> tuple[torch.Tensor, to def build_sparse_metadata_and_mask( batch: int, heads: int, - seq_len: int, + seq_len_q: int, quant_block_size: int, query_tile_tokens: int, per_query_tile_selection: list[list[int]], @@ -51,17 +63,19 @@ def build_sparse_metadata_and_mask( is_causal: bool = False, sparse_q_block_tokens: int | None = None, sparse_k_block_tokens: int | None = None, + seq_len_kv: int | None = None, ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + seq_len_kv = seq_len_q if seq_len_kv is None else seq_len_kv q_block_tokens = quant_block_size if sparse_q_block_tokens is None else sparse_q_block_tokens k_block_tokens = quant_block_size if sparse_k_block_tokens is None else sparse_k_block_tokens - q_blocks = (seq_len + q_block_tokens - 1) // q_block_tokens - kv_blocks = (seq_len + k_block_tokens - 1) // k_block_tokens - active_query_tiles = (seq_len + query_tile_tokens - 1) // query_tile_tokens + q_blocks = (seq_len_q + q_block_tokens - 1) // q_block_tokens + kv_blocks = (seq_len_kv + k_block_tokens - 1) // k_block_tokens + active_query_tiles = (seq_len_q + query_tile_tokens - 1) // query_tile_tokens assert len(per_query_tile_selection) == active_query_tiles lut = torch.zeros((batch, heads, q_blocks, kv_blocks), dtype=torch.int32, device=device) valid = torch.zeros((batch, heads, q_blocks), dtype=torch.int32, device=device) - mask = torch.full((batch, 1, seq_len, seq_len), -1.0e9, dtype=torch.float32, device=device) + mask = torch.full((batch, 1, seq_len_q, seq_len_kv), -1.0e9, dtype=torch.float32, device=device) q_blocks_per_query_tile = max(1, query_tile_tokens // q_block_tokens) for qblk in range(q_blocks): @@ -75,11 +89,11 @@ def build_sparse_metadata_and_mask( for qtile, selected_blocks in enumerate(per_query_tile_selection): q_start = qtile * query_tile_tokens - q_end = min(q_start + query_tile_tokens, seq_len) + q_end = min(q_start + query_tile_tokens, seq_len_q) for qt in range(q_start, q_end): for selected in selected_blocks: k_start = selected * k_block_tokens - k_end = min(k_start + k_block_tokens, seq_len) + k_end = min(k_start + k_block_tokens, seq_len_kv) if not is_causal: mask[:, :, qt : qt + 1, k_start:k_end] = 0.0 else: @@ -98,6 +112,27 @@ def _clamp_selected_blocks(kv_blocks: int, per_query_tile_selection: list[list[i return clamped +def bf16_sparse_reference( + query: torch.Tensor, + key: torch.Tensor, + value: torch.Tensor, + attn_mask: torch.Tensor | None, + *, + scale: float, + enable_gqa: bool, +) -> torch.Tensor: + if enable_gqa and query.shape[1] != key.shape[1]: + repeat = query.shape[1] // key.shape[1] + key = key.repeat_interleave(repeat, dim=1) + value = value.repeat_interleave(repeat, dim=1) + + scores = torch.matmul(query.float(), key.float().transpose(-1, -2)) * scale + if attn_mask is not None: + scores = scores + attn_mask.float() + probs = torch.softmax(scores, dim=-1) + return torch.matmul(probs, value.float()).to(query.dtype) + + def run_case( head_dim: int, block_size: int = 64, @@ -201,6 +236,114 @@ def run_case( ) +def run_case_bf16( + head_dim: int, + *, + seq_len_q: int = 256, + seq_len_kv: int = 256, + num_heads_q: int = 4, + num_heads_kv: int | None = None, + is_causal: bool = False, + q_tile_override: int = 0, + sparse_q_block_tokens: int | None = None, + sparse_k_block_tokens: int | None = None, +) -> None: + ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_bf16")) + device = torch.device("xpu") + batch = 1 + num_heads_kv = num_heads_q if num_heads_kv is None else num_heads_kv + scale = 1.0 / math.sqrt(head_dim) + query_tile_tokens = q_tile_override or (64 if head_dim == 64 else 256) + k_block_tokens = 64 if sparse_k_block_tokens is None else sparse_k_block_tokens + kv_blocks = (seq_len_kv + k_block_tokens - 1) // k_block_tokens + active_query_tiles = (seq_len_q + query_tile_tokens - 1) // query_tile_tokens + if not is_causal: + per_query_tile_selection = [list(range(max(1, min(kv_blocks, 3)))) for _ in range(active_query_tiles)] + if active_query_tiles > 1 and kv_blocks > 3: + per_query_tile_selection[-1] = list(range(kv_blocks - 3, kv_blocks)) + case_name = "bf16_prefill" + else: + per_query_tile_selection = [list(range(min(kv_blocks, idx + 1))) for idx in range(active_query_tiles)] + case_name = "bf16_prefill_causal" + per_query_tile_selection = _clamp_selected_blocks(kv_blocks, per_query_tile_selection) + + torch.manual_seed(6026 + head_dim + num_heads_q + (num_heads_kv * 13) + seq_len_q + seq_len_kv) + query = torch.randn((batch, num_heads_q, seq_len_q, head_dim), dtype=torch.bfloat16, device=device) + key = torch.randn((batch, num_heads_kv, seq_len_kv, head_dim), dtype=torch.bfloat16, device=device) + value = torch.randn((batch, num_heads_kv, seq_len_kv, head_dim), dtype=torch.bfloat16, device=device) + + effective_sparse_q_block_tokens = 64 if sparse_q_block_tokens is None else sparse_q_block_tokens + effective_sparse_k_block_tokens = 64 if sparse_k_block_tokens is None else sparse_k_block_tokens + lut, valid, dense_mask = build_sparse_metadata_and_mask( + batch, + num_heads_q, + seq_len_q, + 64, + query_tile_tokens, + per_query_tile_selection, + device, + is_causal=is_causal, + sparse_q_block_tokens=effective_sparse_q_block_tokens, + sparse_k_block_tokens=effective_sparse_k_block_tokens, + seq_len_kv=seq_len_kv, + ) + + dense_out = bf16_sparse_reference( + query, + key, + value, + dense_mask, + scale=scale, + enable_gqa=num_heads_q != num_heads_kv, + ) + sparse_out = ark.sage_sparse_bf16( + query, + key, + value, + lut, + valid, + is_causal=is_causal, + scale=scale, + q_tile_override=q_tile_override, + sparse_q_block_tokens=sparse_q_block_tokens, + sparse_k_block_tokens=sparse_k_block_tokens, + tensor_layout="HND", + ) + e2e_out = ark.sparge_sage2_attn_meansim_topk_xpu_bf16( + query, + key, + value, + is_causal=is_causal, + scale=scale, + smooth_k=True, + simthreshd1=-1.0, + topk=0.5, + attention_sink=False, + tensor_layout="HND", + q_tile_override=q_tile_override, + sparse_q_block_tokens=sparse_q_block_tokens, + sparse_k_block_tokens=sparse_k_block_tokens, + ) + torch.xpu.synchronize() + + diff = (dense_out.float() - sparse_out.float()).abs() + e2e_diff = (e2e_out.float() - sparse_out.float()).abs() + max_diff = float(diff.max().cpu()) + mean_diff = float(diff.mean().cpu()) + e2e_max_diff = float(e2e_diff.max().cpu()) + e2e_mean_diff = float(e2e_diff.mean().cpu()) + print( + f"[sage_sparse_bf16][{case_name}] D={head_dim} Hq={num_heads_q} Hkv={num_heads_kv} " + f"Sq={seq_len_q} Skv={seq_len_kv} max_diff={max_diff:.6f} mean_diff={mean_diff:.6f} " + f"e2e_max_diff={e2e_max_diff:.6f} e2e_mean_diff={e2e_mean_diff:.6f}" + ) + if max_diff > 2e-2 or mean_diff > 2e-3: + raise RuntimeError( + f"sage_sparse_bf16 mismatch for D={head_dim}, Hq={num_heads_q}, Hkv={num_heads_kv}, " + f"Sq={seq_len_q}, Skv={seq_len_kv}, causal={is_causal}" + ) + + def run_multi_row_tile_case() -> None: device = torch.device("xpu") batch = 1 @@ -341,6 +484,20 @@ def main() -> None: ) run_case(64, is_causal=True) run_case(128, is_causal=True) + run_case_bf16(64) + run_case_bf16(64, seq_len_q=192, seq_len_kv=256, num_heads_q=16, num_heads_kv=4) + run_case_bf16(128, q_tile_override=64, num_heads_q=32, num_heads_kv=8) + run_case_bf16( + 128, + seq_len_q=512, + seq_len_kv=768, + num_heads_q=32, + num_heads_kv=8, + q_tile_override=256, + sparse_q_block_tokens=256, + sparse_k_block_tokens=64, + ) + run_case_bf16(128, is_causal=True, q_tile_override=64) if __name__ == "__main__": From ddaad538be3f3d3cd590dfb6fd3cd65288421076 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 30 Jul 2026 03:34:50 +0000 Subject: [PATCH 02/42] feat: add bf16 sparse mode to flux example --- .../ark/SPARSE_BF16_STATUS_20260729.md | 36 +++++++++ .../ark/SPARSE_BF16_STATUS_20260729_CN.md | 36 +++++++++ .../ark/examples/flux_sparse_patch.py | 76 ++++++++++++++----- auto_round_extension/ark/examples/run_flux.py | 33 ++++++-- .../ark/examples/wan_sparse_patch.py | 13 +++- 5 files changed, 168 insertions(+), 26 deletions(-) diff --git a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md index dc5208b971..87902eafa6 100644 --- a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md +++ b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md @@ -167,3 +167,39 @@ Conclusion: - The previous BF16 mismatch was caused by stale extension loading and an unreliable masked-XPU reference path in the test harness. - For long sequences, BF16 sparse is a valid accuracy-oriented sparse path with meaningful speedup over dense BF16. - INT8 sparse is still the fastest sparse option, but it gives up substantial accuracy relative to BF16 sparse on the exact fixed-LUT check. + +## July 30 Rerun Summary + +On Thursday, July 30, 2026, the `75k / topk=0.5` case was rerun on an idle `XPU 7` with oneAPI 2025 and the BF16-capable sparse extension explicitly loaded from `auto_round_kernel/xbuild_bf16_v2/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so`. + +Shape and config: + +- `B=1, Hq=40, Hkv=40, S=75000, D=128` +- layout: `HND` +- `topk=0.5` +- `q_tile_override=256` +- `sparse_q_block_tokens=256` +- `sparse_k_block_tokens=64` +- warmup `2`, iters `3` + +Sparse selection stats: + +- `selected_ratio=0.502557` +- `selected_blocks_per_row=588.997` + +Latency and throughput summary: + +| Mode | Latency (ms) | Speedup vs Torch BF16 | Speedup vs SageV1 BF16 | Baseline TFLOPS | Effective TFLOPS | +|---|---:|---:|---:|---:|---:| +| `dense_torch_sdpa_bf16` | 1263.297 | 1.000 | 0.595 | 91.190 | 91.190 | +| `dense_sagev1_bf16` | 751.410 | 1.681 | 1.000 | 153.312 | 153.312 | +| `sparse_qtile256_row64k_kernel_only` | 398.381 | 3.305 | 1.944 | 289.171 | 145.325 | +| `sparse_qtile256_row64k_e2e` | 514.271 | 2.560 | 1.506 | 224.007 | 112.576 | +| `sparse_bf16_qtile256_row64k_kernel_only` | 812.091 | 1.556 | 0.925 | 141.856 | 71.291 | +| `sparse_bf16_qtile256_row64k_e2e` | 928.958 | 1.360 | 0.809 | 124.010 | 62.322 | + +Notes: + +- `kernel_only` is sparse kernel time after preprocess. +- `e2e` includes preprocess plus kernel. +- On this rerun, BF16 sparse is faster than dense torch BF16 SDPA, but still slower than dense `sagev1_bf16`. diff --git a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md index 8581393545..a6cb5fde5c 100644 --- a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md +++ b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md @@ -167,3 +167,39 @@ sparse 时延: - 之前 BF16 mismatch 的主要原因是旧扩展被错误加载,以及测试里使用了不可靠的 masked XPU 参考路径。 - 对长序列来说,BF16 sparse 是一个兼顾精度的 sparse 路径,并且相对 dense BF16 有明显加速。 - `int8_sparse` 仍然是最快的 sparse 方案,但在精确 fixed-LUT 检查里,相比 `bf16_sparse` 牺牲了明显精度。 + +## 2026-07-30 复测摘要 + +在 2026 年 7 月 30 日(星期四),对 `75k / topk=0.5` 用例进行了重新测试。测试使用空闲的 `XPU 7`、oneAPI 2025,并且显式加载了带 BF16 sparse 能力的扩展 `auto_round_kernel/xbuild_bf16_v2/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so`。 + +Shape 和配置: + +- `B=1, Hq=40, Hkv=40, S=75000, D=128` +- layout:`HND` +- `topk=0.5` +- `q_tile_override=256` +- `sparse_q_block_tokens=256` +- `sparse_k_block_tokens=64` +- warmup `2`,iters `3` + +sparse 选择统计: + +- `selected_ratio=0.502557` +- `selected_blocks_per_row=588.997` + +时延和吞吐摘要: + +| Mode | Latency (ms) | Speedup vs Torch BF16 | Speedup vs SageV1 BF16 | Baseline TFLOPS | Effective TFLOPS | +|---|---:|---:|---:|---:|---:| +| `dense_torch_sdpa_bf16` | 1263.297 | 1.000 | 0.595 | 91.190 | 91.190 | +| `dense_sagev1_bf16` | 751.410 | 1.681 | 1.000 | 153.312 | 153.312 | +| `sparse_qtile256_row64k_kernel_only` | 398.381 | 3.305 | 1.944 | 289.171 | 145.325 | +| `sparse_qtile256_row64k_e2e` | 514.271 | 2.560 | 1.506 | 224.007 | 112.576 | +| `sparse_bf16_qtile256_row64k_kernel_only` | 812.091 | 1.556 | 0.925 | 141.856 | 71.291 | +| `sparse_bf16_qtile256_row64k_e2e` | 928.958 | 1.360 | 0.809 | 124.010 | 62.322 | + +说明: + +- `kernel_only` 表示 preprocess 之后仅 kernel 的时间。 +- `e2e` 表示 preprocess 加 kernel 的总时间。 +- 这次复测中,BF16 sparse 比 dense torch BF16 SDPA 更快,但仍然慢于 dense `sagev1_bf16`。 diff --git a/auto_round_extension/ark/examples/flux_sparse_patch.py b/auto_round_extension/ark/examples/flux_sparse_patch.py index 6695bcbb92..abe9bfcc0e 100644 --- a/auto_round_extension/ark/examples/flux_sparse_patch.py +++ b/auto_round_extension/ark/examples/flux_sparse_patch.py @@ -20,6 +20,19 @@ from wan_sparse_patch import _parse_bool_env, _parse_optional_int_env, ensure_ark_sparse_binding +def _parse_sparse_kernel_env(name: str = "FLUX_SPARSE_KERNEL", default: str = "int8") -> str: + value = os.getenv(name, default).strip().lower() + aliases = { + "int8": "int8", + "qks8": "int8", + "bf16": "bf16", + } + normalized = aliases.get(value) + if normalized is None: + raise ValueError(f"{name} must be one of: int8, bf16") + return normalized + + def _normalize_attention_mask( attn_mask: torch.Tensor | None, batch: int, @@ -90,6 +103,7 @@ def __init__( q_tile_override: int, sparse_q_block_tokens: int | None, sparse_k_block_tokens: int | None, + sparse_kernel: str, ): self.original_processor = original_processor self.stats = stats @@ -100,6 +114,7 @@ def __init__( self.q_tile_override = q_tile_override self.sparse_q_block_tokens = sparse_q_block_tokens self.sparse_k_block_tokens = sparse_k_block_tokens + self.sparse_kernel = sparse_kernel self._warned_runtime_fallback = False @staticmethod @@ -192,22 +207,40 @@ def __call__( seq_kv=key.shape[1], device=query.device, ) - hidden_states, sparsity = ark.sparge_sage2_attn_meansim_topk_xpu( - query, - key, - value, - attn_mask=mask, - is_causal=False, - smooth_k=self.smooth_k, - simthreshd1=-1.0, - topk=self.topk, - attention_sink=self.attention_sink, - tensor_layout="NHD", - q_tile_override=self.q_tile_override, - sparse_q_block_tokens=self.sparse_q_block_tokens, - sparse_k_block_tokens=self.sparse_k_block_tokens, - return_sparsity=True, - ) + if self.sparse_kernel == "bf16": + hidden_states, sparsity = ark.sparge_sage2_attn_meansim_topk_xpu_bf16( + query, + key, + value, + attn_mask=mask, + is_causal=False, + smooth_k=self.smooth_k, + simthreshd1=-1.0, + topk=self.topk, + attention_sink=self.attention_sink, + tensor_layout="NHD", + q_tile_override=self.q_tile_override, + sparse_q_block_tokens=self.sparse_q_block_tokens, + sparse_k_block_tokens=self.sparse_k_block_tokens, + return_sparsity=True, + ) + else: + hidden_states, sparsity = ark.sparge_sage2_attn_meansim_topk_xpu( + query, + key, + value, + attn_mask=mask, + is_causal=False, + smooth_k=self.smooth_k, + simthreshd1=-1.0, + topk=self.topk, + attention_sink=self.attention_sink, + tensor_layout="NHD", + q_tile_override=self.q_tile_override, + sparse_q_block_tokens=self.sparse_q_block_tokens, + sparse_k_block_tokens=self.sparse_k_block_tokens, + return_sparsity=True, + ) self.stats.sparse_calls += 1 self.stats.sparse_sparsity_sum += float(sparsity) @@ -270,8 +303,15 @@ def patch_flux_sparse_attention( q_tile_override: int = 0, sparse_q_block_tokens: int | None = None, sparse_k_block_tokens: int | None = None, + sparse_kernel: str = "int8", ): - ensure_ark_sparse_binding() + ensure_ark_sparse_binding( + required_symbols=( + ("sage_sparse_bf16", "sage_dynamic_quant_layout") + if sparse_kernel == "bf16" + else ("sage_sparse", "sage_dynamic_quant_layout") + ) + ) originals: list[tuple[FluxAttention, object]] = [] stats = FluxSparseAttentionStats() @@ -289,6 +329,7 @@ def patch_flux_sparse_attention( q_tile_override=q_tile_override, sparse_q_block_tokens=sparse_q_block_tokens, sparse_k_block_tokens=sparse_k_block_tokens, + sparse_kernel=sparse_kernel, ) ) originals.append((module, original)) @@ -310,4 +351,5 @@ def patch_flux_sparse_attention_from_env(transformer): q_tile_override=int(os.getenv("FLUX_SPARSE_Q_TILE_OVERRIDE", "0")), sparse_q_block_tokens=_parse_optional_int_env("FLUX_SPARSE_Q_BLOCK_TOKENS"), sparse_k_block_tokens=_parse_optional_int_env("FLUX_SPARSE_K_BLOCK_TOKENS"), + sparse_kernel=_parse_sparse_kernel_env(), ) diff --git a/auto_round_extension/ark/examples/run_flux.py b/auto_round_extension/ark/examples/run_flux.py index 0c1bd3544c..0bc89fec53 100644 --- a/auto_round_extension/ark/examples/run_flux.py +++ b/auto_round_extension/ark/examples/run_flux.py @@ -24,6 +24,19 @@ def env_flag(name, default="0"): return os.getenv(name, default).lower() not in {"0", "false", "no", "off"} +def env_sparse_kernel(name="FLUX_SPARSE_KERNEL", default="int8"): + value = os.getenv(name, default).strip().lower() + aliases = { + "int8": "int8", + "qks8": "int8", + "bf16": "bf16", + } + normalized = aliases.get(value) + if normalized is None: + raise ValueError(f"{name} must be one of: int8, bf16") + return normalized + + benchmark_enabled = env_flag("FLUX_BENCHMARK_ENABLE", "0") profiler_enabled = env_flag("FLUX_PROFILER_ENABLE", "0") benchmark_scope = os.getenv("FLUX_BENCHMARK_SCOPE", "full").strip().lower() @@ -53,11 +66,15 @@ def env_flag(name, default="0"): max_sequence_length = int(os.getenv("FLUX_MAX_SEQUENCE_LENGTH", "512")) seed = int(os.getenv("FLUX_SEED", "0")) use_sparse = os.getenv("FLUX_USE_SPARSE", "1").lower() not in {"0", "false", "no", "off"} +sparse_kernel = env_sparse_kernel() -output_file = ( - f"flux_output_{height}x{width}_{num_inference_steps}steps_" - f"{guidance_scale}gs_sparse{os.getenv('FLUX_SPARSE_TOPK', '0.5')}.png" -) +if use_sparse: + output_file = ( + f"flux_output_{height}x{width}_{num_inference_steps}steps_" + f"{guidance_scale}gs_sparse_{sparse_kernel}_topk{os.getenv('FLUX_SPARSE_TOPK', '0.5')}.png" + ) +else: + output_file = f"flux_output_{height}x{width}_{num_inference_steps}steps_{guidance_scale}gs_dense.png" output_path = os.getenv("FLUX_OUTPUT", output_file) prompt = os.getenv("FLUX_PROMPT", "A cat holding a sign that says hello world") @@ -195,7 +212,8 @@ def sparse_patch_context(): if not use_sparse: return contextlib.nullcontext(None) print( - f"[flux_sparse] enabled attention sparse patch: topk={os.getenv('FLUX_SPARSE_TOPK', '0.5')} " + f"[flux_sparse] enabled attention sparse patch: kernel={sparse_kernel}" + f" topk={os.getenv('FLUX_SPARSE_TOPK', '0.5')} " f"smooth_k={os.getenv('FLUX_SPARSE_SMOOTH_K', '1')}" f" q_tile={os.getenv('FLUX_SPARSE_Q_TILE_OVERRIDE', '0')}" f" q_block={os.getenv('FLUX_SPARSE_Q_BLOCK_TOKENS', 'default')}" @@ -524,6 +542,7 @@ def run_block_benchmark(current_run_tag): "max_sequence_length": max_sequence_length, "seed": seed, "use_sparse": use_sparse, + "sparse_kernel": sparse_kernel if use_sparse else None, "cpu_offload_enabled": cpu_offload_enabled, "block_kind": block_state["block_kind"], "block_index": block_state["block_index"], @@ -543,7 +562,7 @@ def run_block_benchmark(current_run_tag): return result -run_tag = "sparse" if use_sparse else "dense" +run_tag = f"sparse_{sparse_kernel}" if use_sparse else "dense" def maybe_run_with_profiler(run_callable, current_run_tag, record_label="flux_generate"): @@ -615,6 +634,7 @@ def run_benchmark(run_callable, current_run_tag, benchmark_scope): "max_sequence_length": max_sequence_length, "seed": seed, "use_sparse": use_sparse, + "sparse_kernel": sparse_kernel if use_sparse else None, "sparse_topk": os.getenv("FLUX_SPARSE_TOPK", "0.5"), "sparse_smooth_k": os.getenv("FLUX_SPARSE_SMOOTH_K", "1"), "output_path": output_path, @@ -704,6 +724,7 @@ def run_denoising_benchmark(current_run_tag): "max_sequence_length": max_sequence_length, "seed": seed, "use_sparse": use_sparse, + "sparse_kernel": sparse_kernel if use_sparse else None, "sparse_topk": os.getenv("FLUX_SPARSE_TOPK", "0.5"), "sparse_smooth_k": os.getenv("FLUX_SPARSE_SMOOTH_K", "1"), "output_path": output_path, diff --git a/auto_round_extension/ark/examples/wan_sparse_patch.py b/auto_round_extension/ark/examples/wan_sparse_patch.py index 2e61ca6cdc..6418209521 100644 --- a/auto_round_extension/ark/examples/wan_sparse_patch.py +++ b/auto_round_extension/ark/examples/wan_sparse_patch.py @@ -36,10 +36,17 @@ def _parse_optional_int_env(name: str) -> int | None: return None if parsed == 0 else parsed -def ensure_ark_sparse_binding() -> None: +def ensure_ark_sparse_binding( + *, required_symbols: tuple[str, ...] = ("sage_sparse", "sage_dynamic_quant_layout") +) -> None: ensure_xpu_lib( - required_symbols=("sage_sparse", "sage_dynamic_quant_layout"), - search_roots=(KERNEL_DIR, KERNEL_DIR / "xbuild", KERNEL_DIR / "xbuild_diffuser"), + required_symbols=required_symbols, + search_roots=( + KERNEL_DIR, + KERNEL_DIR / "xbuild", + KERNEL_DIR / "xbuild_bf16_v2", + KERNEL_DIR / "xbuild_diffuser", + ), ) From 2e2ecb5481be5e8d1226f630f7801936c1b8d984 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Wed, 5 Aug 2026 06:18:46 +0000 Subject: [PATCH 03/42] feat: add bf16 sparse kernel sources --- .../auto_round_kernel/sdpa_sparse_bf16.cpp | 229 +++++++ .../stla/xe_sparse_sdpa_fwd_mainloop.hpp | 634 ++++++++++++++++++ 2 files changed, 863 insertions(+) create mode 100644 auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp create mode 100644 auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp diff --git a/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp b/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp new file mode 100644 index 0000000000..1384aba2ce --- /dev/null +++ b/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp @@ -0,0 +1,229 @@ +// Copyright (c) 2026 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#if defined(ARK_XPU) && defined(ARK_SYCL_TLA) + +#include +#include +#include "bestla/bestla.h" + +#include +#include "sycl_tla_sdpa_sparse.hpp" + +namespace ark { + +namespace detail = sparse_detail; + +namespace { + +using KernelLauncher = int (*)(detail::Options const& options); + +int launch_prefill_kernel_bf16_128_sparse_sdpa(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_128(options); +} + +int launch_prefill_kernel_bf16_128_sparse_sdpa_qtile64(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_128_qtile64< + cute::bfloat16_t, cute::bfloat16_t, cute::bfloat16_t>( + options); +} + +int launch_prefill_kernel_bf16_64_sparse_sdpa(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_64(options); +} + +int launch_prefill_kernel_bf16_64_sparse_sdpa_qtile64(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_64_qtile64< + cute::bfloat16_t, cute::bfloat16_t, cute::bfloat16_t>(options); +} + +KernelLauncher select_sparse_bf16_prefill_launcher(int head_dim, int q_tile_override) { + switch (head_dim) { + case 128: + if (q_tile_override == 64) return launch_prefill_kernel_bf16_128_sparse_sdpa_qtile64; + if (q_tile_override != 0 && q_tile_override != 256) return nullptr; + return launch_prefill_kernel_bf16_128_sparse_sdpa; + case 64: + if (q_tile_override == 64) return launch_prefill_kernel_bf16_64_sparse_sdpa_qtile64; + if (q_tile_override != 0 && q_tile_override != 128) return nullptr; + return launch_prefill_kernel_bf16_64_sparse_sdpa; + default: + return nullptr; + } +} + +detail::Options make_common_options(void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, int q_stride_s, + int q_stride_d, int q_stride_h, int q_stride_b, int k_stride_s, int k_stride_d, + int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, int v_stride_h, + int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, + int batch, int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, + int head_dim, float softmax_scale, bool is_causal) { + if (q_stride_d != 1 || k_stride_d != 1 || v_stride_d != 1 || o_stride_d != 1) { + throw std::invalid_argument("make_common_options: head-dim stride must be 1 for Q/K/V/O"); + } + detail::Options options; + options.q = Q_ptr; + options.k = K_ptr; + options.v = V_ptr; + options.mask = mask; + options.o = O_ptr; + options.use_tensor_strides = true; + options.q_stride_s = q_stride_s; + options.q_stride_d = q_stride_d; + options.q_stride_h = q_stride_h; + options.q_stride_b = q_stride_b; + options.k_stride_s = k_stride_s; + options.k_stride_d = k_stride_d; + options.k_stride_h = k_stride_h; + options.k_stride_b = k_stride_b; + options.v_stride_d = v_stride_d; + options.v_stride_s = v_stride_s; + options.v_stride_h = v_stride_h; + options.v_stride_b = v_stride_b; + options.o_stride_s = o_stride_s; + options.o_stride_d = o_stride_d; + options.o_stride_h = o_stride_h; + options.o_stride_b = o_stride_b; + options.batch = batch; + options.num_heads_q = num_heads_q; + options.num_heads_kv = num_heads_kv; + options.seq_len_qo = seq_len_q; + options.seq_len_kv = seq_len_kv; + options.head_size_qk = head_dim; + options.head_size_vo = head_dim; + options.softmax_scale = softmax_scale; + options.is_causal = is_causal; + return options; +} + +void sparse_bf16_prefill(sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, + void* valid_block_num, int num_q_blocks, int num_k_blocks, int q_tile_override, + int q_stride_s, int q_stride_d, int q_stride_h, int q_stride_b, int k_stride_s, + int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, + int o_stride_b, int batch, int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, + int head_dim, float softmax_scale, bool is_causal, int sparse_q_block_size = 0) { + const int effective_q_tile_override = + (head_dim == 128 && q_tile_override == 0) ? 64 : ((head_dim == 64 && q_tile_override == 0) ? 64 : q_tile_override); + detail::Options options = + make_common_options(Q_ptr, K_ptr, V_ptr, O_ptr, mask, q_stride_s, q_stride_d, q_stride_h, q_stride_b, + k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, + num_heads_kv, seq_len_q, seq_len_kv, head_dim, softmax_scale, is_causal); + options.scale_block_size = 0; + options.sparse_q_block_size = sparse_q_block_size; + options.q_tile_override = effective_q_tile_override; + options.qscale = nullptr; + options.kscale = nullptr; + options.lut = static_cast(lut); + options.valid_block_num = static_cast(valid_block_num); + options.num_q_blocks = num_q_blocks; + options.num_k_blocks = num_k_blocks; + compat::set_default_queue(*q); + + KernelLauncher launcher = select_sparse_bf16_prefill_launcher(head_dim, effective_q_tile_override); + if (launcher == nullptr) { + throw std::runtime_error("Unsupported sparse_bf16_prefill config"); + } + + launcher(options); +} + +} // namespace + +void sdpa_impl_bf16_sparse_d64( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (mask && is_causal) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: mask and is_causal cannot both be set"); + } + if (seq_len_q <= 0 || seq_len_kv <= 0) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: seq_len_q and seq_len_kv must be greater than 0"); + } + if (lut == nullptr || valid_block_num == nullptr) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: lut and valid_block_num must be provided"); + } + if (num_q_blocks <= 0 || num_k_blocks <= 0) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: num_q_blocks and num_k_blocks must be greater than 0"); + } + if (head_dim != 64) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: head_dim must be 64"); + } + + sparse_bf16_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, + q_tile_override, q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, + k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, + o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, + softmax_scale, is_causal, /*sparse_q_block_size=*/64); +} + +void sdpa_impl_bf16_sparse_row_linear( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (q_tile_override != 0 && q_tile_override != 64) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_row_linear: q_tile_override must be 0 or 64"); + } + if (mask && is_causal) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_row_linear: mask and is_causal cannot both be set"); + } + if (seq_len_q <= 0 || seq_len_kv <= 0) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_row_linear: seq_len_q and seq_len_kv must be greater than 0"); + } + if (lut == nullptr || valid_block_num == nullptr) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_row_linear: lut and valid_block_num must be provided"); + } + if (num_q_blocks <= 0 || num_k_blocks <= 0) { + throw std::invalid_argument( + "sdpa_impl_bf16_sparse_row_linear: num_q_blocks and num_k_blocks must be greater than 0"); + } + + sparse_bf16_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, 64, + q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, k_stride_h, + k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, o_stride_h, + o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, softmax_scale, + is_causal, /*sparse_q_block_size=*/64); +} + +void sdpa_impl_bf16_sparse_qtile256_row64k( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (q_tile_override != 256) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_qtile256_row64k: q_tile_override must be 256"); + } + if (head_dim != 128) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_qtile256_row64k: head_dim must be 128"); + } + + sparse_bf16_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, + q_tile_override, q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, + k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, + o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, + softmax_scale, is_causal, /*sparse_q_block_size=*/256); +} + +} // namespace ark + +#endif // ARK_XPU && ARK_SYCL_TLA diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp new file mode 100644 index 0000000000..45563462a8 --- /dev/null +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp @@ -0,0 +1,634 @@ +/*************************************************************************************************** + * Copyright (C) 2026 Intel Corporation, All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + **************************************************************************************************/ + +#pragma once + +#include "cute/util/print_tensor.hpp" +#include "cutlass/cutlass.h" +#include "cutlass/gemm/dispatch_policy.hpp" + +#include "cute/algorithm/functional.hpp" +#include "cute/algorithm/gemm.hpp" +#include "cute/algorithm/subgroup_algorithms.hpp" +#include "cute/atom/mma_atom.hpp" +#include "flash_attention_v2/collective/fmha_fusion.hpp" +#include + +namespace cutlass::sdpa { + +template +class XeDefault {}; + +} // namespace cutlass::sdpa + +namespace cutlass::fmha::collective { + +using namespace cute; + +template +struct SPARSESDPAFwdMainloop { + static_assert(cutlass::detail::dependent_false, "Could not find a mainloop specialization."); +}; + +template +struct SPARSESDPAFwdMainloop, CausalMask_, FullMask_, CachedKV_, PagedKV_, + TiledMMAQK_, TiledMMAPV_, VTiles_, TensorQ_, TensorK_, TensorV_, TensorK_cache_, + TensorV_cache_, TiledCopyQ_, TiledCopyK_, TiledCopyV_, TiledCopyK_cache_, + TiledCopyV_cache_> { + using TiledMMAQK = TiledMMAQK_; + using TiledMMAPV = TiledMMAPV_; + using TileShapeQK = decltype(TiledMMAQK{}.tile_mnk()); + using TileShapePV = decltype(TiledMMAPV{}.tile_mnk()); + static constexpr int VTiles = VTiles_; + using SubgroupLayoutQK = decltype(TiledMMAQK{}.get_atom_layout_mnk()); + using SGPerWG = decltype(product(take<1, 4>(shape(typename TiledMMAQK::ThrLayoutVMNK{})))); + + using TensorQ = TensorQ_; + using TensorK = TensorK_; + using TensorV = TensorV_; + + using TensorQ2D = decltype(TensorQ_{}(append>(make_coord(_, _), 0))); + using TensorK2D = decltype(TensorK_{}(append>(make_coord(_, _), 0))); + using TensorV2D = decltype(TensorV_{}(append>(make_coord(_, _), 0))); + + using TiledCopyQ = + conditional_t, decltype(make_block_2d_copy_A(TiledMMAQK{}, TensorQ2D{})), TiledCopyQ_>; + using TiledCopyK = + conditional_t, decltype(make_block_2d_copy_B(TiledMMAQK{}, TensorK2D{})), TiledCopyK_>; + using TiledCopyV = + conditional_t, decltype(make_block_2d_copy_B(TiledMMAPV{}, TensorV2D{})), TiledCopyV_>; + using TensorK_cache = TensorK_cache_; + using TensorV_cache = TensorV_cache_; + using TensorK_cache2D = decltype(TensorK_cache_{}(append>(make_coord(_, _), 0))); + using TensorV_cache2D = decltype(TensorV_cache_{}(append>(make_coord(_, _), 0))); + using TiledCopyK_cache = + conditional_t, decltype(make_block_2d_copy_B(TiledMMAQK{}, TensorK_cache2D{})), + TiledCopyK_cache_>; + using TiledCopyV_cache = + conditional_t, decltype(make_block_2d_copy_B(TiledMMAPV{}, TensorV_cache2D{})), + TiledCopyV_cache_>; + + template + using FragC = decltype(TiledMMA{}.get_slice(0).partition_sg_fragment_C( + make_identity_tensor(select<0, 1>(TiledMMA{}.tile_mnk())))); + + using FragS = FragC; + using FragSRow = decltype(reduce<1>(FragS{}, sycl::plus{})); + using FragSCol = decltype(reduce<0>(FragS{}, sycl::plus{})); + using ElementS = typename TiledMMAQK::ValTypeD; + using ElementM = typename TiledMMAQK::ValTypeA; + + using SingleFragA = FragC; + using FragA = expand_sg_fragment_t; + using FragARow = decltype(reduce<1>(FragA{}, sycl::plus{})); + using ElementA = typename TiledMMAPV::ValTypeD; + + static constexpr bool CausalMask = CausalMask_; + static constexpr bool CachedKV = CachedKV_; + static constexpr bool PagedKV = PagedKV_; + + struct Arguments { + float const scale; + float const* mask = nullptr; + int scale_block_size = 0; + float const* qscale = nullptr; + float const* kscale = nullptr; + float const* vscale = nullptr; + int const* lut = nullptr; + int const* valid_block_num = nullptr; + int num_q_blocks = 0; + int num_k_blocks = 0; + int sparse_q_block_size = 0; + bool canonical_nhd_k = false; + int const* ptr_page_table = nullptr; + int page_size = 0; + int const* num_pages_per_seq = nullptr; + }; + + using Params = Arguments; + struct EmptySharedStorage {}; + using SharedStorage = EmptySharedStorage; + + Params params; + SharedStorage& shared_storage; + + SPARSESDPAFwdMainloop(Params const& params_, SharedStorage& shared_storage_) + : params(params_), shared_storage(shared_storage_) {} + + static constexpr Params to_underlying_arguments(Arguments const& args, void* /* workspace */) { + constexpr double kLog2e = 1.4426950408889634074; + float val = args.scale * static_cast(kLog2e); + return Params{val, args.mask, args.scale_block_size, args.qscale, args.kscale, args.vscale, args.lut, + args.valid_block_num, args.num_q_blocks, args.num_k_blocks, args.sparse_q_block_size, + args.canonical_nhd_k, args.ptr_page_table, args.page_size, args.num_pages_per_seq}; + } + + CUTLASS_HOST_DEVICE static bool can_implement(Arguments const&) { return true; } + + CUTLASS_DEVICE + int get_physical_k_tile(int K, int l_coord, int seq_len_kv_cache) { + int next_page_logical_idx = K * get<1>(TileShapeQK{}) / params.page_size; + int tiles_per_page = params.page_size / get<1>(TileShapeQK{}); + int batch_offset = + params.num_pages_per_seq ? params.num_pages_per_seq[l_coord] : l_coord * (seq_len_kv_cache / params.page_size); + + return params.ptr_page_table[batch_offset + next_page_logical_idx] * tiles_per_page + K % tiles_per_page; + } + + CUTLASS_DEVICE + static int logical_block_from_delta_row(int const* row, int valid_blocks, int idx) { + int logical_block = 0; + for (int i = 0; i <= idx && i < valid_blocks; ++i) { + logical_block += row[i]; + } + return logical_block; + } + + template + CUTLASS_DEVICE void operator()(TensorQ2D const& Q_2D, TensorK2D const& K_2D, TensorV2D const& V_2D, FragA& tArA, + FragARow& tA_max, FragARow& tA_sum, QVCoord blk_qv, int blk_k0, int blk_k1, + int total_blk, int thr_id, int seq_len, int seq_len_kv_cache, int l_coord, + [[maybe_unused]] float* scaleQ, [[maybe_unused]] float* scaleK, + [[maybe_unused]] float* scaleV, int full_tile_offset, int discard_seq_coord, + int const* lut_rows_base = nullptr, int const* valid_blocks_base = nullptr, + int sparse_q_rows_in_tile = 1, + TensorK_cache2D const& K_cache_2D = TensorK_cache2D{}, + TensorV_cache2D const& V_cache_2D = TensorV_cache2D{}) { + using namespace sycl::ext::oneapi::this_work_item; + + auto tile_shape_v = make_shape(get<1>(TileShapePV{}) * C{}, get<2>(TileShapePV{})); + + Tensor cQ = make_identity_tensor(Q_2D.shape()); + Tensor cK = make_identity_tensor(K_2D.shape()); + Tensor cV = make_identity_tensor(V_2D.shape()); + Tensor cK_cache = make_identity_tensor(K_cache_2D.shape()); + Tensor cV_cache = make_identity_tensor(V_cache_2D.shape()); + Tensor cP = make_identity_tensor(take<0, 2>(TileShapeQK{})); + + Tensor gQ = local_tile(cQ, TileShapeQK{}, append(blk_qv, _), Step<_1, X, _1>{}); + Tensor gK = local_tile(cK, TileShapeQK{}, make_coord(_, _, _), Step{}); + Tensor gV = local_tile(cV, tile_shape_v, make_coord(get<1>(blk_qv), _)); + Tensor gV_split = local_tile(gV, TileShapePV{}, make_coord(_, _, 0), Step{}); + + Tensor gK_cache = local_tile(cK_cache, TileShapeQK{}, make_coord(_, _, _), Step{}); + Tensor gV_cache = local_tile(cV_cache, tile_shape_v, make_coord(get<1>(blk_qv), _)); + Tensor gV_cache_split = local_tile(gV_cache, TileShapePV{}, make_coord(_, _, 0), Step{}); + + TiledCopyQ copy_q{Q_2D}; + TiledCopyK copy_k{K_2D}; + TiledCopyV copy_v{V_2D}; + TiledCopyK_cache copy_k_cache{K_cache_2D}; + TiledCopyV_cache copy_v_cache{V_cache_2D}; + + TiledMMAQK mma_qk{}; + TiledMMAPV mma_pv{}; + + auto thr_copy_q = copy_q.get_slice(thr_id); + auto thr_copy_k = copy_k.get_slice(thr_id); + auto thr_copy_v = copy_v.get_slice(thr_id); + auto thr_copy_k_cache = copy_k_cache.get_slice(thr_id); + auto thr_copy_v_cache = copy_v_cache.get_slice(thr_id); + auto thr_mma_qk = mma_qk.get_slice(thr_id); + auto thr_mma_pv = mma_pv.get_slice(thr_id); + + auto tQgQ = thr_copy_q.partition_S(gQ); + auto tKgK = thr_copy_k.partition_S(gK); + auto tVgV = thr_copy_v.partition_S(gV_split); + auto tKgK_cache = thr_copy_k_cache.partition_S(gK_cache); + auto tVgV_cache = thr_copy_v_cache.partition_S(gV_cache_split); + + auto tQrQ = thr_copy_q.partition_sg_fragment_D(gQ(_, _, 0)); + auto tSrQ = thr_mma_qk.partition_sg_fragment_A(gQ(_, _, 0)); + auto tKrK = thr_copy_k.partition_sg_fragment_D(gK(_, _, 0, 0)); + auto tSrK = thr_mma_qk.partition_sg_fragment_B(gK(_, _, 0, 0)); + auto tSrS = thr_mma_qk.partition_sg_fragment_C(cP); + auto tArP = thr_mma_pv.partition_sg_fragment_A(cP); + auto tVrV = thr_copy_v.partition_sg_fragment_D(gV_split(_, _, 0, 0)); + auto tArV = thr_mma_pv.partition_sg_fragment_B(gV_split(_, _, 0, 0)); + + auto prefetch_q = make_block_2d_prefetch(copy_q); + auto prefetch_k = make_block_2d_prefetch(copy_k); + auto prefetch_v = make_block_2d_prefetch(copy_v); + auto prefetch_k_cache = make_block_2d_prefetch(copy_k_cache); + auto prefetch_v_cache = make_block_2d_prefetch(copy_v_cache); + + auto pQgQ = prefetch_q.get_slice(thr_id).partition_S(gQ); + auto pKgK = prefetch_k.get_slice(thr_id).partition_S(gK); + auto pVgV = prefetch_v.get_slice(thr_id).partition_S(gV_split); + auto pKgK_cache = prefetch_k_cache.get_slice(thr_id).partition_S(gK_cache); + auto pVgV_cache = prefetch_v_cache.get_slice(thr_id).partition_S(gV_cache_split); + + int kblocks_cache = ceil_div(seq_len_kv_cache, get<1>(TileShapeQK{})); + for (int D = 0; D < size<3>(pQgQ); D++) { + prefetch(prefetch_q, pQgQ(_, _, _, D)); + } + if (lut_rows_base == nullptr) { + for (int D = 0; D < size<4>(pKgK); D++) { + CUTLASS_PRAGMA_UNROLL + for (int K = 0; K < Stages; K++) { + if (K < kblocks_cache) { + if constexpr (PagedKV) { + int physical_K_tile = get_physical_k_tile(K, l_coord, seq_len_kv_cache); + prefetch(prefetch_k_cache, pKgK_cache(_, _, _, physical_K_tile, D)); + } else { + prefetch(prefetch_k_cache, pKgK_cache(_, _, _, K, D)); + } + } else { + prefetch(prefetch_k, pKgK(_, _, _, K - kblocks_cache, D)); + } + } + } + } + if (blk_k0 == 0) { + clear(tArA); + fill(tA_max, cutlass::platform::numeric_limits::lowest()); + clear(tA_sum); + } + + bool check_remainder_k = (seq_len % get<1>(TileShapeQK{}) != 0); + int q_sg_tile = get<0>(shape_div(TileShapeQK{}, shape(SubgroupLayoutQK{}))); + int sparse_q_block_size = params.sparse_q_block_size > 0 ? params.sparse_q_block_size : params.scale_block_size; + int q_blocks_per_wg_tile = + sparse_q_block_size > 0 ? cute::max(1, int(get<0>(TileShapeQK{})) / sparse_q_block_size) : 1; + int sg_rows_per_sparse_q_block = + sparse_q_block_size > 0 ? cute::max(1, sparse_q_block_size / q_sg_tile) : 1; + int subgroup_q_row_in_tile = get_sub_group_id() / sg_rows_per_sparse_q_block; + subgroup_q_row_in_tile = cute::min(subgroup_q_row_in_tile, q_blocks_per_wg_tile - 1); + + auto prefetch_sparse_k_block = [&](int logical_block) { + if (logical_block < 0 || logical_block >= total_blk) return; + for (int D = 0; D < size<4>(pKgK); D++) { + if constexpr (CachedKV) { + if (logical_block < kblocks_cache) { + int physical_block = logical_block; + if constexpr (PagedKV) { + physical_block = get_physical_k_tile(logical_block, l_coord, seq_len_kv_cache); + } + prefetch(prefetch_k_cache, pKgK_cache(_, _, _, physical_block, D)); + } else { + prefetch(prefetch_k, pKgK(_, _, _, logical_block - kblocks_cache, D)); + } + } else { + prefetch(prefetch_k, pKgK(_, _, _, logical_block - kblocks_cache, D)); + } + } + }; + + auto mainloop_body = [&](auto cached_k, int K, bool first_block, bool subgroup_selected, int sparse_prefetch_block, + auto& copy_k_cur, auto& copy_v_cur, auto& prefetch_v_cur, auto& tKgK_cur, + auto& tVgV_cur, auto& pVgV_cur) { + barrier_arrive(ScopeWorkgroup); + constexpr bool is_cache = decltype(cached_k)::value; + + int k_idx; + if constexpr (is_cache) { + k_idx = K; + if constexpr (PagedKV) { + k_idx = get_physical_k_tile(K, l_coord, seq_len_kv_cache); + } + } else { + k_idx = K - kblocks_cache; + } + + clear(tSrS); + CUTLASS_PRAGMA_UNROLL + for (int D = 0; D < size<4>(tKgK); D++) { + copy(copy_q, tQgQ(_, _, _, D), tQrQ); + copy(copy_k_cur, tKgK_cur(_, _, _, k_idx, D), tKrK); + reorder(tQrQ, tSrQ); + reorder(tKrK, tSrK); + cute::gemm(mma_qk, tSrQ, tSrK, tSrS); + } + + CUTLASS_PRAGMA_UNROLL + for (int VV = 0; VV < VTiles; VV++) { + prefetch(prefetch_v_cur, pVgV_cur(_, _, _, VV, k_idx)); + } + + if (subgroup_selected) { + if constexpr (!is_cache && CausalMask) { + if (K == total_blk - 1) { + Tensor cPgP = make_identity_tensor(make_shape(seq_len, seq_len)); + Tensor gP = local_tile(cPgP, take<0, 2>(TileShapeQK{}), make_coord(get<0>(blk_qv), K)); + auto cS_thread = thr_mma_qk.partition_C(gP); + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tSrS.size(); ++i) { + int row_idx = get<0>(cS_thread(i)); + int col_idx = get<1>(cS_thread(i)); + if (col_idx - seq_len_kv_cache - full_tile_offset > row_idx - discard_seq_coord) { + tSrS(i) = ElementS(-INFINITY); + } + } + } + } else if constexpr (FullMask_) { + Tensor cPgP = make_identity_tensor(make_shape(seq_len, seq_len)); + Tensor gP = local_tile(cPgP, take<0, 2>(TileShapeQK{}), make_coord(get<0>(blk_qv), K)); + auto cS_thread = thr_mma_qk.partition_C(gP); + int row_idx_begin = get<0>(cS_thread(0)); + int row_idx_end = row_idx_begin + q_sg_tile; + int col_idx_begin = get<1>(cS_thread(0)); + int col_idx_end = col_idx_begin + get<1>(TileShapeQK{}); + if (row_idx_end <= seq_len && col_idx_end <= seq_len) { + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tSrS.size(); ++i) { + int row_idx = get<0>(cS_thread(i)); + int col_idx = get<1>(cS_thread(i)); + tSrS(i) += ElementS(params.mask[col_idx + row_idx * seq_len]); + } + } else { + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tSrS.size(); ++i) { + int row_idx = get<0>(cS_thread(i)); + int col_idx = get<1>(cS_thread(i)); + tSrS(i) += + (row_idx < seq_len && col_idx < seq_len) ? ElementS(params.mask[col_idx + row_idx * seq_len]) + : ElementS(-INFINITY); + } + } + } + + if constexpr (!is_cache) { + if (check_remainder_k && K == total_blk - 1) { + FragSCol k_rem_mask; + int k_val = get<0>(tKgK_cur(0, 0, 0, k_idx, 0)) + kblocks_cache * get<1>(TileShapeQK{}); + int k = k_val + get_sub_group().get_local_id()[0]; + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < k_rem_mask.size(); i++, k += intel::sg_size) { + k_rem_mask(i) = (k < seq_len) ? ElementS(sycl::nan(0u)) : ElementS(-INFINITY); + } + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tSrS.size(); i++) { + tSrS(i) = sycl::fmin(tSrS(i), broadcast<1>(k_rem_mask, tSrS, i)); + } + } + } + + auto rescale = softmax(first_block, tSrS, tA_max, tA_sum); + reorder(tSrS, tArP); + + CUTLASS_PRAGMA_UNROLL + for (int VV = 0; VV < VTiles; VV++) { + copy(copy_v_cur, tVgV_cur(_, _, _, VV, k_idx), tVrV); + reorder(tVrV, tArV); + if (!first_block) { + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tArA.size() / VTiles; i++) { + tArA(_, _, _, VV)(i) *= broadcast<0>(rescale, tArA, i); + } + } + cute::gemm(mma_pv, tArP, tArV, tArA(_, _, _, VV)); + } + } + + if (lut_rows_base == nullptr) { + int K_next = K + Stages; + for (int D = 0; D < size<4>(pKgK); D++) { + if constexpr (is_cache) { + bool is_cache_next = K_next < kblocks_cache; + int physical_K_next = K_next; + if constexpr (PagedKV) { + if (is_cache_next) { + physical_K_next = get_physical_k_tile(K_next, l_coord, seq_len_kv_cache); + } + } + if (is_cache_next) { + prefetch(prefetch_k_cache, pKgK_cache(_, _, _, physical_K_next, D)); + } else { + prefetch(prefetch_k, pKgK(_, _, _, K_next - kblocks_cache, D)); + } + } else { + prefetch(prefetch_k, pKgK(_, _, _, K_next - kblocks_cache, D)); + } + } + } else if (sparse_prefetch_block < total_blk) { + prefetch_sparse_k_block(sparse_prefetch_block); + } + + barrier_wait(ScopeWorkgroup); + }; + + if (lut_rows_base != nullptr && valid_blocks_base != nullptr) { + bool subgroup_started = false; + if (sparse_q_rows_in_tile == 1) { + int const* row_ptr = lut_rows_base; + int row_valid = valid_blocks_base[0]; + int row_pos = 0; + int row_cur_block = row_valid > 0 ? logical_block_from_delta_row(row_ptr, row_valid, 0) : total_blk; + int prefetch_pos = row_pos; + int prefetch_cur_block = row_cur_block; + + auto advance_single_sparse_block = [&](int& frontier_pos, int& frontier_cur_block) { + if (frontier_cur_block >= total_blk) return; + frontier_pos += 1; + if (frontier_pos < row_valid) { + frontier_cur_block += row_ptr[frontier_pos]; + } else { + frontier_cur_block = total_blk; + } + }; + + auto pop_single_sparse_block = [&](int& frontier_pos, int& frontier_cur_block) { + int block = frontier_cur_block; + advance_single_sparse_block(frontier_pos, frontier_cur_block); + return block; + }; + + for (int stage = 0; stage < Stages; ++stage) { + int sparse_prefetch_block = pop_single_sparse_block(prefetch_pos, prefetch_cur_block); + if (sparse_prefetch_block >= total_blk) break; + prefetch_sparse_k_block(sparse_prefetch_block); + } + + while (row_cur_block < total_blk) { + int next_block = row_cur_block; + bool subgroup_selected = (subgroup_q_row_in_tile == 0); + bool first_selected_block = !subgroup_started; + int sparse_prefetch_block = pop_single_sparse_block(prefetch_pos, prefetch_cur_block); + int K = next_block; + if constexpr (CachedKV) { + if (K < kblocks_cache) { + if (K >= blk_k0 && K < blk_k1) { + mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, + sparse_prefetch_block, copy_k_cache, copy_v_cache, prefetch_v_cache, tKgK_cache, + tVgV_cache, pVgV_cache); + subgroup_started = true; + } + } else { + K += kblocks_cache; + if (K >= (blk_k0 > kblocks_cache ? blk_k0 : kblocks_cache) && K < blk_k1) { + mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, + sparse_prefetch_block, copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); + subgroup_started = true; + } + } + } else if (K >= blk_k0 && K < blk_k1) { + mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, sparse_prefetch_block, + copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); + subgroup_started = true; + } + advance_single_sparse_block(row_pos, row_cur_block); + } + } else { + static constexpr int kMaxSparseRowsPerTile = cute::max(1, int(get<0>(TileShapeQK{})) / 64); + int const* row_ptrs[kMaxSparseRowsPerTile]; + int active_rows[kMaxSparseRowsPerTile]; + int active_row_count = 0; + bool subgroup_started_rows[kMaxSparseRowsPerTile]; + int row_valid[kMaxSparseRowsPerTile]; + int row_pos[kMaxSparseRowsPerTile]; + int row_cur_block[kMaxSparseRowsPerTile]; + + for (int row = 0; row < kMaxSparseRowsPerTile; ++row) { + row_ptrs[row] = lut_rows_base + row * params.num_k_blocks; + subgroup_started_rows[row] = false; + if (row < sparse_q_rows_in_tile) { + row_valid[row] = valid_blocks_base[row]; + row_pos[row] = 0; + row_cur_block[row] = + row_valid[row] > 0 ? logical_block_from_delta_row(row_ptrs[row], row_valid[row], 0) : total_blk; + if (row_valid[row] > 0) { + active_rows[active_row_count++] = row; + } + } else { + row_valid[row] = 0; + row_pos[row] = 0; + row_cur_block[row] = total_blk; + } + } + + auto find_sparse_block = [&](int* frontier_pos, int* frontier_cur_block) { + int block = total_blk; + for (int active = 0; active < active_row_count; ++active) { + int row = active_rows[active]; + if (frontier_pos[row] < row_valid[row]) { + block = cute::min(block, frontier_cur_block[row]); + } + } + return block; + }; + + auto advance_sparse_block = [&](int block, int* frontier_pos, int* frontier_cur_block) { + if (block >= total_blk) return; + for (int active = 0; active < active_row_count; ++active) { + int row = active_rows[active]; + if (frontier_pos[row] < row_valid[row] && frontier_cur_block[row] == block) { + frontier_pos[row] += 1; + if (frontier_pos[row] < row_valid[row]) { + frontier_cur_block[row] += row_ptrs[row][frontier_pos[row]]; + } else { + frontier_cur_block[row] = total_blk; + } + } + } + }; + + auto pop_sparse_block = [&](int* frontier_pos, int* frontier_cur_block) { + int block = find_sparse_block(frontier_pos, frontier_cur_block); + advance_sparse_block(block, frontier_pos, frontier_cur_block); + return block; + }; + + int prefetch_pos[kMaxSparseRowsPerTile]; + int prefetch_cur_block[kMaxSparseRowsPerTile]; + for (int row = 0; row < kMaxSparseRowsPerTile; ++row) { + prefetch_pos[row] = row_pos[row]; + prefetch_cur_block[row] = row_cur_block[row]; + } + + for (int stage = 0; stage < Stages; ++stage) { + int sparse_prefetch_block = pop_sparse_block(prefetch_pos, prefetch_cur_block); + if (sparse_prefetch_block >= total_blk) break; + prefetch_sparse_k_block(sparse_prefetch_block); + } + + int next_block = find_sparse_block(row_pos, row_cur_block); + while (next_block < total_blk) { + int selected_row = subgroup_q_row_in_tile; + bool subgroup_selected = subgroup_q_row_in_tile < sparse_q_rows_in_tile && + row_pos[selected_row] < row_valid[selected_row] && + row_cur_block[selected_row] == next_block; + bool first_selected_block = subgroup_selected ? !subgroup_started_rows[selected_row] : false; + int sparse_prefetch_block = pop_sparse_block(prefetch_pos, prefetch_cur_block); + int K = next_block; + if constexpr (CachedKV) { + if (K < kblocks_cache) { + if (K >= blk_k0 && K < blk_k1) { + mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, + sparse_prefetch_block, copy_k_cache, copy_v_cache, prefetch_v_cache, tKgK_cache, + tVgV_cache, pVgV_cache); + if (subgroup_selected) subgroup_started_rows[selected_row] = true; + } + } else { + K += kblocks_cache; + if (K >= (blk_k0 > kblocks_cache ? blk_k0 : kblocks_cache) && K < blk_k1) { + mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, + sparse_prefetch_block, copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); + if (subgroup_selected) subgroup_started_rows[selected_row] = true; + } + } + } else if (K >= blk_k0 && K < blk_k1) { + mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, sparse_prefetch_block, + copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); + if (subgroup_selected) subgroup_started_rows[selected_row] = true; + } + + advance_sparse_block(next_block, row_pos, row_cur_block); + next_block = find_sparse_block(row_pos, row_cur_block); + } + } + } else { + if constexpr (CachedKV) { + for (int K = blk_k0; K < kblocks_cache; K++) { + mainloop_body(std::bool_constant{}, K, K == blk_k0, true, total_blk, copy_k_cache, copy_v_cache, + prefetch_v_cache, tKgK_cache, tVgV_cache, pVgV_cache); + } + } + for (int K = (blk_k0 > kblocks_cache ? blk_k0 : kblocks_cache); K < blk_k1; K++) { + mainloop_body(std::bool_constant{}, K, + K == (blk_k0 > kblocks_cache ? blk_k0 : kblocks_cache), true, total_blk, copy_k, copy_v, + prefetch_v, tKgK, tVgV, pVgV); + } + } + } + + CUTLASS_DEVICE + FragSRow softmax(bool first_block, FragS& tS, FragSRow& tS_max, FragSRow& tS_sum) { + auto tS_bmax = reduce<1>(tS, sycl::maximum{}); + FragSRow rescale; + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tS_max.size(); i++) { + ElementS new_max = sycl::max(tS_max(i), params.scale * tS_bmax(i)); + rescale(i) = sycl::native::exp2(tS_max(i) - new_max); + tS_max(i) = new_max; + } + + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tS.size(); i++) { + tS(i) = sycl::native::exp2(params.scale * tS(i) - broadcast<0>(tS_max, tS, i)); + } + + if (!first_block) { + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tS_sum.size(); i++) { + tS_sum(i) *= rescale(i); + } + } + + auto tS_bsum = reduce<1>(tS, sycl::plus{}); + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tS_sum.size(); i++) { + tS_sum(i) += tS_bsum(i); + } + return rescale; + } +}; + +} // namespace cutlass::fmha::collective From 0850714f1873fbfa2be3a22288edd14a8df08c7c Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 09:55:22 +0800 Subject: [PATCH 04/42] chore: ignore XPU build artifact directories Add ark-xbuild*, ark-xbuild-builtin*, and xbuild_bf16* to the ark .gitignore. These are local CMake build outputs (hundreds of MB each) and must not be tracked. --- auto_round_extension/ark/.gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/auto_round_extension/ark/.gitignore b/auto_round_extension/ark/.gitignore index f0294d5764..17e27ad2a0 100644 --- a/auto_round_extension/ark/.gitignore +++ b/auto_round_extension/ark/.gitignore @@ -1,5 +1,8 @@ build xbuild +ark-xbuild* +ark-xbuild-builtin* +xbuild_bf16* *.csv *.so -*.pyc \ No newline at end of file +*.pyc From 95f2c0603415617a0d921a53030b0fe66936ce34 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 09:55:31 +0800 Subject: [PATCH 05/42] feat: wire native BF16 sparse SDPA kernel and launchers - sdpa_sparse_bf16.cpp: route BF16 sparse prefill through the sparse SAGE launchers (launch_sparse_sage_prefill_kernel_{128,64}). - sycl_tla_common.hpp: declare the BF16 sparse sdpa entry points (d64, row_linear, qtile256_row64k). - ark.cpp: expose the low-level BF16 sparse binding via pybind. - __init__.py: export sage_sparse_bf16 and the BF16 e2e entry point. - CMakeLists.txt: add the BF16 sparse kernel sources to the build. --- .../ark/auto_round_kernel/CMakeLists.txt | 21 +++++++ .../ark/auto_round_kernel/__init__.py | 2 + .../ark/auto_round_kernel/ark.cpp | 60 +++++++++++++++++++ .../auto_round_kernel/sdpa_sparse_bf16.cpp | 16 ++--- .../wrapper/include/sycl_tla_common.hpp | 24 ++++++++ 5 files changed, 113 insertions(+), 10 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/CMakeLists.txt b/auto_round_extension/ark/auto_round_kernel/CMakeLists.txt index 6cdf56e12f..cf55ee0c23 100755 --- a/auto_round_extension/ark/auto_round_kernel/CMakeLists.txt +++ b/auto_round_extension/ark/auto_round_kernel/CMakeLists.txt @@ -171,6 +171,18 @@ if(ARK_XPU AND ARK_SYCL_TLA) target_compile_definitions(${PY_NAME} PRIVATE ARK_SYCL_TLA=1 CUTLASS_ENABLE_SYCL=1 SYCL_INTEL_TARGET=1) target_include_directories(${PY_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/wrapper/include) target_include_directories(${PY_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated/sdpa) + # sycl-tla may provision oneMKL through an ExternalProject. Wire its staged + # headers into this module directly so parallel builds do not compile before + # oneMKL has been downloaded and installed. + if(TARGET onemkl_project) + add_dependencies(${PY_NAME} onemkl_project) + target_include_directories(${PY_NAME} SYSTEM PRIVATE ${CMAKE_BINARY_DIR}/deps/oneMKL/include) + elseif(TARGET MKL::MKL) + target_link_libraries(${PY_NAME} PRIVATE MKL::MKL) + if(DEFINED ENV{MKLROOT} AND EXISTS "$ENV{MKLROOT}/include") + target_include_directories(${PY_NAME} SYSTEM PRIVATE "$ENV{MKLROOT}/include") + endif() + endif() # Use SYSTEM include directories for sycl-tla to suppress warnings/errors from third-party headers # (e.g., std::common_type specialization issues in traits.hpp) foreach(_inc_dir IN LISTS _sycl_tla_include_dirs) @@ -197,6 +209,15 @@ if(ARK_UT) if(ARK_XPU AND ARK_SYCL_TLA) target_compile_definitions(${TEST_NAME} PRIVATE ARK_SYCL_TLA=1 CUTLASS_ENABLE_SYCL=1 SYCL_INTEL_TARGET=1) target_include_directories(${TEST_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated/sdpa) + if(TARGET onemkl_project) + add_dependencies(${TEST_NAME} onemkl_project) + target_include_directories(${TEST_NAME} SYSTEM PRIVATE ${CMAKE_BINARY_DIR}/deps/oneMKL/include) + elseif(TARGET MKL::MKL) + target_link_libraries(${TEST_NAME} PRIVATE MKL::MKL) + if(DEFINED ENV{MKLROOT} AND EXISTS "$ENV{MKLROOT}/include") + target_include_directories(${TEST_NAME} SYSTEM PRIVATE "$ENV{MKLROOT}/include") + endif() + endif() foreach(_inc_dir IN LISTS _sycl_tla_include_dirs) if(EXISTS "${_inc_dir}") target_include_directories(${TEST_NAME} SYSTEM PRIVATE "${_inc_dir}") diff --git a/auto_round_extension/ark/auto_round_kernel/__init__.py b/auto_round_extension/ark/auto_round_kernel/__init__.py index b66e180d82..93e5244e29 100644 --- a/auto_round_extension/ark/auto_round_kernel/__init__.py +++ b/auto_round_extension/ark/auto_round_kernel/__init__.py @@ -1292,9 +1292,11 @@ def sageattn( _slice_sequence_native_layout, _to_hnd, sage_sparse, + sage_sparse_bf16, sparge_block_map_to_mask, sparge_preprocess_topk, sparge_sage2_attn_meansim_topk_xpu, + sparge_sage2_attn_meansim_topk_xpu_bf16, ) diff --git a/auto_round_extension/ark/auto_round_kernel/ark.cpp b/auto_round_extension/ark/auto_round_kernel/ark.cpp index d9c9c7c03f..20cd9d6974 100755 --- a/auto_round_extension/ark/auto_round_kernel/ark.cpp +++ b/auto_round_extension/ark/auto_round_kernel/ark.cpp @@ -478,6 +478,65 @@ static void sage_sparse(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_ptr V, throw std::invalid_argument("ark::sage_sparse: unsupported head_dim; supported values are 64 and 128"); } +static void sage_sparse_bf16(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_ptr V, torch_ptr O, torch_ptr mask, + torch_ptr lut, torch_ptr valid_block_num, int num_q_blocks, int num_k_blocks, + int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, int q_stride_b, + int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, + int v_stride_s, int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, + int o_stride_h, int o_stride_b, int batch, int num_heads_q, int num_heads_kv, + int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, bool is_causal) { + if (mask && is_causal) { + throw std::invalid_argument("ark::sage_sparse_bf16: mask and is_causal cannot both be set"); + } + if (!lut || !valid_block_num) { + throw std::invalid_argument("ark::sage_sparse_bf16: lut and valid_block_num must be provided"); + } + auto matches_block_size = [](int seq_len, int num_blocks, int block_size) { + return block_size > 0 && num_blocks == ((seq_len + block_size - 1) / block_size); + }; + const bool key_block_is_64 = matches_block_size(seq_len_kv, num_k_blocks, 64); + if (!key_block_is_64) { + throw std::invalid_argument("ark::sage_sparse_bf16: only key block size 64 is supported"); + } + if (head_dim == 64) { + if (!matches_block_size(seq_len_q, num_q_blocks, 64)) { + throw std::invalid_argument("ark::sage_sparse_bf16: head_dim=64 requires query block size 64"); + } + ark::sdpa_impl_bf16_sparse_d64( + (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, + (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, + q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, + seq_len_kv, head_dim, softmax_scale, is_causal); + return; + } + if (head_dim == 128) { + if (matches_block_size(seq_len_q, num_q_blocks, 256)) { + if (q_tile_override != 256) { + throw std::invalid_argument("ark::sage_sparse_bf16: head_dim=128 query block size 256 requires q_tile_override=256"); + } + ark::sdpa_impl_bf16_sparse_qtile256_row64k( + (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, + (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, + q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, + seq_len_kv, head_dim, softmax_scale, is_causal); + return; + } + if (matches_block_size(seq_len_q, num_q_blocks, 64)) { + ark::sdpa_impl_bf16_sparse_row_linear( + (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, + (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, + q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, + seq_len_kv, head_dim, softmax_scale, is_causal); + return; + } + throw std::invalid_argument("ark::sage_sparse_bf16: head_dim=128 supports query block sizes 64 and 256 only"); + } + throw std::invalid_argument("ark::sage_sparse_bf16: unsupported head_dim; supported values are 64 and 128"); +} + static void moe_gemm_wrapper(torch_ptr stream, torch_ptr activations, torch_ptr weights, torch_ptr scales, torch_ptr outputs, int dtype, int N, int K, torch_ptr num_tokens_per_expert, int num_experts) { @@ -784,6 +843,7 @@ PYBIND11_MODULE(PY_NAME, m) { pybind11::arg("head_dim"), pybind11::arg("softmax_scale"), pybind11::arg("is_causal"), pybind11::arg("tensor_layout"), pybind11::arg("lse") = 0); m.def("sage_sparse", &ark::sage_sparse); + m.def("sage_sparse_bf16", &ark::sage_sparse_bf16); // Low-level SAGE PVi8 API: input Q/K/V are pre-quantized int8 with qscale/kscale/vscale. m.def("sage_pvi8", &ark::sage_pvi8, pybind11::arg("stream"), pybind11::arg("Q"), pybind11::arg("K"), pybind11::arg("V"), pybind11::arg("O"), pybind11::arg("mask"), diff --git a/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp b/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp index 1384aba2ce..5ea82a35d3 100644 --- a/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp +++ b/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp @@ -30,22 +30,19 @@ namespace { using KernelLauncher = int (*)(detail::Options const& options); int launch_prefill_kernel_bf16_128_sparse_sdpa(detail::Options const& options) { - return detail::launch_sparse_sdpa_prefill_kernel_128(options); + return detail::launch_sparse_sage_prefill_kernel_128( + options); } int launch_prefill_kernel_bf16_128_sparse_sdpa_qtile64(detail::Options const& options) { - return detail::launch_sparse_sdpa_prefill_kernel_128_qtile64< + return detail::launch_sparse_sage_prefill_kernel_128_qtile64< cute::bfloat16_t, cute::bfloat16_t, cute::bfloat16_t>( options); } int launch_prefill_kernel_bf16_64_sparse_sdpa(detail::Options const& options) { - return detail::launch_sparse_sdpa_prefill_kernel_64(options); -} - -int launch_prefill_kernel_bf16_64_sparse_sdpa_qtile64(detail::Options const& options) { - return detail::launch_sparse_sdpa_prefill_kernel_64_qtile64< - cute::bfloat16_t, cute::bfloat16_t, cute::bfloat16_t>(options); + return detail::launch_sparse_sage_prefill_kernel_64( + options); } KernelLauncher select_sparse_bf16_prefill_launcher(int head_dim, int q_tile_override) { @@ -55,8 +52,7 @@ KernelLauncher select_sparse_bf16_prefill_launcher(int head_dim, int q_tile_over if (q_tile_override != 0 && q_tile_override != 256) return nullptr; return launch_prefill_kernel_bf16_128_sparse_sdpa; case 64: - if (q_tile_override == 64) return launch_prefill_kernel_bf16_64_sparse_sdpa_qtile64; - if (q_tile_override != 0 && q_tile_override != 128) return nullptr; + if (q_tile_override != 0 && q_tile_override != 64 && q_tile_override != 128) return nullptr; return launch_prefill_kernel_bf16_64_sparse_sdpa; default: return nullptr; diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp index ee417c114f..c6d6fa9e00 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp @@ -255,6 +255,30 @@ void sdpa_impl_qks8_sparse_qtile256_row64k_pvhalf( int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, bool is_causal, BTLA_DTYPE pv_dtype = BTLA_DTYPE::F16); + +void sdpa_impl_bf16_sparse_d64( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal); + +void sdpa_impl_bf16_sparse_row_linear( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal); + +void sdpa_impl_bf16_sparse_qtile256_row64k( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal); #endif // ARK_SYCL_TLA } // namespace ark From f96ec416556de5d52a316351d740dc39d7d796aa Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 09:55:51 +0800 Subject: [PATCH 06/42] fix: BF16 sparse native kernel element-aware MMA and softmax scale Two device-level bugs made the native BF16 sparse kernel unusable: - SparseSageConfig hardcoded the Q*K MMA to an int8 DPAS (XE_DPAS_TT<..., int32_t, int8_t>) regardless of ElementQ. Feeding bf16 fragments into the int8 DPAS hung the device; INT8 worked only because its fragments genuinely are int8. The MMA is now ElementQ-aware: int8 keeps the int32/int8 DPAS, while bf16/fp16 use a float/ DPAS. - The mainloop applied the softmax scale only inside the scale_block_size != 0 branches. The native BF16 path uses scale_block_size 0 (no quantization), so the 1/sqrt(d) scale was never applied and the softmax ran on unscaled scores. Added the else branch that multiplies by params.scale. --- .../include/stla/xe_sparse_sagev1_fwd_mainloop.hpp | 7 +++++++ .../wrapper/include/sycl_tla_sdpa_sparse.hpp | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp index 0124fd21de..c88496b7f8 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp @@ -521,6 +521,13 @@ struct SPARSESAGEV1FwdMainloop, CausalMask_, FullMask_, CUTLASS_PRAGMA_UNROLL for (int i = 0; i < tPrS.size(); i++) tPrS(i) *= _scale; } + } else { + // Native FP16/BF16 Q/K path (scale_block_size == 0): there is no + // qscale/kscale dequantization, so apply the raw softmax scale here. + // INT8 gets it via dq_scale above; without this branch the softmax + // runs on unscaled scores and the output is numerically wrong. + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tPrS.size(); i++) tPrS(i) *= params.scale; } } else { float _scale = dq_scale * scaleK[scalek_idx]; diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp index a8b4d2d10c..3c935e56d1 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp @@ -937,8 +937,18 @@ template struct SparseSageConfig { static constexpr int SGTileQ = get<0>(shape_div(TileShapeQK{}, shape(SubgroupLayoutQK{})))(); - using MMAOperation = - cute::conditional_t, XE_DPAS_TT, MMAOperation_>; + // The Q*K MMA must match ElementQ. The sparse mainloop dequantizes INT8 Q/K with + // qscale/kscale, so INT8 keeps an int32/int8 DPAS. Native BF16/FP16 Q/K must use a + // float/ DPAS; reusing the int8 DPAS on bf16 fragments hangs the device. + using MMAOperation = cute::conditional_t< + is_void_v, + typename cute::conditional_t< + cute::is_same_v || cute::is_same_v, + XE_DPAS_TT, + cute::conditional_t, + XE_DPAS_TT, + XE_DPAS_TT>>, + MMAOperation_>; using MMAOperationPV = cute::conditional_t, XE_DPAS_TT, MMAOperation_>; using SubgroupLayoutPV = From f9e8612232b092271d703c1c72ea4a2f37908bb6 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 09:56:08 +0800 Subject: [PATCH 07/42] fix: sparse BF16 LUT crash, lossless round-trip, and preprocess speed - _block_map_lut_torch: replace the boolean-mask assignment (filled_matrix[~block_map] = 10_000_000) with torch.where. On the XPU backend that assignment silently misses entries, leaving 0s that become -1 LUT entries and drive _lut_to_block_map's scatter_ out of bounds (ScatterGatherKernels assert). Replace the same unsafe pattern (final_tile_map[~mask] = True) with |= in sparse_attention and the triton preprocess. - _lut_to_block_map: scatter True at the recovered block positions instead of scattering the valid mask. Masked-out tail indices all point at slot 0, so their trailing False writes were silently dropping a selected block at position 0; the round-trip is now lossless (empty rows cleared explicitly). - sage_sparse_bf16: route to the native BF16 sparse kernel when available, keeping the dense-mask fallback for unsupported configs. The fallback materializes a [B,Hq,Sq,Skv] mask and OOMs at long sequences. - _fill_block_map_torch: vectorize the O(k_blocks) python loop (thousands of sequential kernel launches at long sequences) into a gather/cumsum/scatter. Preprocess at seq 75600 drops from ~1170 ms to ~450 ms. --- .../sparge_preprocess_triton.py | 5 +- .../ark/auto_round_kernel/sparse_attention.py | 349 +++++++++++++++++- 2 files changed, 333 insertions(+), 21 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py b/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py index 5306cf4e84..d18eab1d71 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py +++ b/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py @@ -387,8 +387,9 @@ def _run_triton_xpu_preprocess(ctx: Any) -> dict[str, Any]: .contiguous() ) final_tile_map = torch.zeros_like(pooled_prob, dtype=torch.bool) - final_tile_map[~sim_k_expand] = True - final_tile_map[~sim_q_expand] = True + # Boolean-mask assignment (`t[mask] = val`) is unreliable on XPU; use |= instead. + final_tile_map |= ~sim_k_expand + final_tile_map |= ~sim_q_expand final_tile_map = _fill_block_map_triton(final_tile_map, num_to_select, sorted_prob.indices) if causal_mask is not None: final_tile_map &= causal_mask.view(1, 1, ctx.num_q_tiles, num_k_route_blocks) diff --git a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py index 0d5932747c..71a537931a 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py +++ b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py @@ -199,6 +199,164 @@ def sage_sparse( return O +def sage_sparse_bf16( + query: torch.Tensor, + key: torch.Tensor, + value: torch.Tensor, + lut: torch.Tensor, + valid_block_num: torch.Tensor, + attn_mask: torch.Tensor | None = None, + dropout_p: float = 0.0, + is_causal: bool = False, + scale: float | None = None, + enable_gqa: bool = False, + q_tile_override: int = 0, + sparse_q_block_tokens: int | None = None, + sparse_k_block_tokens: int | None = None, + tensor_layout: str = "HND", +) -> torch.Tensor: + """Low-level sparse BF16 attention routed by sparse LUT metadata.""" + del dropout_p, enable_gqa + if query.device.type != "xpu": + raise NotImplementedError("sage_sparse_bf16 is only supported on XPU") + if query.dtype != torch.bfloat16 or key.dtype != torch.bfloat16: + raise ValueError(f"Q/K must be bfloat16, got Q={query.dtype}, K={key.dtype}") + if value.dtype != torch.bfloat16: + raise ValueError(f"V must be bfloat16, got {value.dtype}") + if lut.dtype != torch.int32 or valid_block_num.dtype != torch.int32: + raise ValueError("lut and valid_block_num must be int32 tensors") + if lut.device != query.device or valid_block_num.device != query.device: + raise ValueError("lut and valid_block_num must be on the same XPU device as Q/K/V") + + B, Hq, Sq, D = _validate_attention_tensor(query, "Q", tensor_layout) + Bk, Hkv, Skv, Dk = _validate_attention_tensor(key, "K", tensor_layout) + Bv, Hkv2, Skv2, Dv = _validate_attention_tensor(value, "V", tensor_layout) + + if Bk != B or Bv != B: + raise ValueError("Batch size mismatch between Q/K/V") + if Hkv2 != Hkv or Skv2 != Skv or Dv != Dk: + raise ValueError("K/V shape mismatch") + if Dk != D: + raise ValueError("Head dim mismatch between Q and K/V") + _validate_gqa_head_config(Hq, Hkv, op_name="sage_sparse_bf16") + if D not in (64, 128): + raise ValueError(f"Unsupported head_dim={D}; supported: 64, 128") + effective_sparse_q_block_tokens = 64 if sparse_q_block_tokens is None else int(sparse_q_block_tokens) + effective_sparse_k_block_tokens = 64 if sparse_k_block_tokens is None else int(sparse_k_block_tokens) + if effective_sparse_q_block_tokens <= 0 or effective_sparse_k_block_tokens <= 0: + raise ValueError( + "sparse_q_block_tokens and sparse_k_block_tokens must be positive when provided; " + f"got {effective_sparse_q_block_tokens} and {effective_sparse_k_block_tokens}" + ) + + q_sparse_blocks = (Sq + effective_sparse_q_block_tokens - 1) // effective_sparse_q_block_tokens + kv_sparse_blocks = (Skv + effective_sparse_k_block_tokens - 1) // effective_sparse_k_block_tokens + if tuple(lut.shape) != (B, Hq, q_sparse_blocks, kv_sparse_blocks): + raise ValueError(f"lut must have shape {(B, Hq, q_sparse_blocks, kv_sparse_blocks)}, got {tuple(lut.shape)}") + if tuple(valid_block_num.shape) != (B, Hq, q_sparse_blocks): + raise ValueError( + f"valid_block_num must have shape {(B, Hq, q_sparse_blocks)}, got {tuple(valid_block_num.shape)}" + ) + if torch.any(valid_block_num < 0).item(): + raise ValueError("valid_block_num entries must be non-negative") + if torch.any(valid_block_num > kv_sparse_blocks).item(): + raise ValueError(f"valid_block_num entries must be <= {kv_sparse_blocks}") + + if D == 64 and q_tile_override not in (0, 64, 128): + raise ValueError( + f"q_tile_override must be one of {{0, 64, 128}} for sage_sparse_bf16 with head_dim=64, got {q_tile_override}" + ) + + # Preferred path: the native XPU sparse kernel. The dense fallback below is + # numerically correct but materializes a full [B, Hq, Sq, Skv] mask, which OOMs + # at long sequence lengths. Unsupported configs fall through to the fallback. + if query.device.type == "xpu": + try: + lib = get_lib(query) + if hasattr(lib, "sage_sparse_bf16"): + effective_q_tile_override = _resolve_sparse_prefill_q_tile_override( + head_dim=D, + quant_block_size=64, + q_tile_override=q_tile_override, + sparse_q_block_tokens=effective_sparse_q_block_tokens, + sparse_k_block_tokens=effective_sparse_k_block_tokens, + tensor_layout=tensor_layout, + ) + stream = get_stream(query) + O = _empty_attention_output( + B, Hq, Sq, D, dtype=value.dtype, device=query.device, tensor_layout=tensor_layout + ) + lib.sage_sparse_bf16( + stream, + query.data_ptr(), + key.data_ptr(), + value.data_ptr(), + O.data_ptr(), + attn_mask.data_ptr() if attn_mask is not None else 0, + lut.data_ptr(), + valid_block_num.data_ptr(), + q_sparse_blocks, + kv_sparse_blocks, + effective_q_tile_override, + *_attention_strides_qko(query, tensor_layout), + *_attention_strides_qko(key, tensor_layout), + *_attention_strides_v(value, tensor_layout), + *_attention_strides_qko(O, tensor_layout), + B, + Hq, + Hkv, + Sq, + Skv, + D, + float(scale) if scale is not None else 1.0 / (D**0.5), + bool(is_causal), + ) + return O + except (NotImplementedError, RuntimeError, ValueError): + # Unsupported native sparse config; fall through to the dense fallback. + pass + + block_map = _lut_to_block_map(lut, valid_block_num) + sparse_mask = sparge_block_map_to_mask( + block_map, + quant_block_size=64, + q_block_tokens=effective_sparse_q_block_tokens, + k_block_tokens=effective_sparse_k_block_tokens, + seq_len_q=Sq, + seq_len_kv=Skv, + is_causal=is_causal, + ) + normalized_mask = _normalize_sparse_mask(attn_mask, B, Sq, Skv, query.device) + if normalized_mask is not None: + sparse_mask = torch.minimum(sparse_mask, normalized_mask.expand(-1, Hq, -1, -1)) + + query_hnd = _to_hnd(query, tensor_layout) + key_hnd = _to_hnd(key, tensor_layout) + value_hnd = _to_hnd(value, tensor_layout) + kv_head_index = _kv_head_index_for_q_heads(Hq, Hkv, query.device) + outputs: list[torch.Tensor] = [] + effective_scale = float(scale) if scale is not None else 1.0 / (D**0.5) + for q_head in range(Hq): + kv_head = int(kv_head_index[q_head].item()) + query_head = torch.empty((B, 1, Sq, D), dtype=query_hnd.dtype, device=query.device) + key_head = torch.empty((B, 1, Skv, D), dtype=key_hnd.dtype, device=key.device) + value_head = torch.empty((B, 1, Skv, D), dtype=value_hnd.dtype, device=value.device) + query_head.copy_(query_hnd[:, q_head : q_head + 1]) + key_head.copy_(key_hnd[:, kv_head : kv_head + 1]) + value_head.copy_(value_hnd[:, kv_head : kv_head + 1]) + head_out = _dense_sagev1( + query_head, + key_head, + value_head, + attn_mask=sparse_mask[:, q_head : q_head + 1].contiguous(), + is_causal=False, + scale=effective_scale, + tensor_layout="HND", + ) + outputs.append(head_out) + return _from_hnd(torch.cat(outputs, dim=1), tensor_layout) + + def sage_sparse_row_linear( query: torch.Tensor, key: torch.Tensor, @@ -616,19 +774,25 @@ def _build_block_causal_mask( def _fill_block_map_torch( final_map: torch.Tensor, num_to_select: torch.Tensor, sorted_indices: torch.Tensor ) -> torch.Tensor: + """Fill ``final_map`` with the top ``num_to_select`` NEW blocks in sorted order. + + The naive implementation looped over every K block (``for rank in range(k_blocks)``), + launching a handful of elementwise kernels per iteration. At long sequences that is + thousands of sequential kernel launches and dominates the torch preprocess. This + version is fully vectorized: for a block at sorted ``rank r`` it is the + ``(r - #already_filled_before_r)``-th *new* block, and it is selected iff that index + is below the per-row quota. + """ k_blocks = final_map.shape[-1] - filled = final_map.clone() - column_ids = torch.arange(k_blocks, device=final_map.device).view(1, 1, 1, k_blocks) target_new = torch.maximum(num_to_select, torch.ones_like(num_to_select)) - added = torch.zeros_like(num_to_select) - for rank in range(k_blocks): - idx_match = column_ids == sorted_indices[..., rank : rank + 1] - is_new = idx_match & ~filled - should_add = (added < target_new).unsqueeze(-1) - newly_selected = should_add & is_new - filled |= newly_selected - added = added + newly_selected.any(dim=-1).to(added.dtype) - return filled + already = torch.gather(final_map, -1, sorted_indices) # is the block at this rank already filled? + already_cum = torch.cumsum(already.to(torch.int64), dim=-1) - already.to(torch.int64) + rank = torch.arange(k_blocks, device=final_map.device).view(1, 1, 1, k_blocks) + new_idx = rank - already_cum # 0-based index among new blocks at this rank + add_new = (new_idx < target_new.unsqueeze(-1)) & ~already + chosen = torch.zeros_like(final_map) + chosen.scatter_(-1, sorted_indices, add_new) + return final_map | chosen def _block_map_lut_torch(block_map: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]: @@ -637,8 +801,13 @@ def _block_map_lut_torch(block_map: torch.Tensor) -> tuple[torch.Tensor, torch.T one_matrix = torch.ones(block_map.shape, dtype=torch.int32, device=block_map.device) cum_matrix = torch.cumsum(one_matrix, dim=-1) masked_cum_matrix = cum_matrix * block_map.to(torch.int32) - filled_matrix = masked_cum_matrix.clone() - filled_matrix[~block_map] = 10_000_000 + # NOTE: do not use `filled_matrix[~block_map] = 10_000_000` here — boolean-mask + # in-place assignment silently misses entries on the XPU backend (torch-xpu-ops), + # leaving 0s in the mask that become -1 in the LUT after sort and drive the + # ScatterGatherKernels out-of-bounds assert downstream. Use torch.where instead. + filled_matrix = torch.where( + block_map, masked_cum_matrix, torch.full_like(masked_cum_matrix, 10_000_000) + ) lut = torch.sort(filled_matrix, dim=-1)[0] - 1 lut[..., 1:] = lut[..., 1:] - lut[..., :-1] invalid_mask = torch.arange(num_k_blocks, device=block_map.device).view( @@ -648,6 +817,27 @@ def _block_map_lut_torch(block_map: torch.Tensor) -> tuple[torch.Tensor, torch.T return lut.to(torch.int32).contiguous(), valid_block_num.to(torch.int32).contiguous() +def _lut_to_block_map(lut: torch.Tensor, valid_block_num: torch.Tensor) -> torch.Tensor: + if lut.dtype != torch.int32 or valid_block_num.dtype != torch.int32: + raise ValueError("lut and valid_block_num must be int32 tensors") + if lut.shape[:-1] != valid_block_num.shape: + raise ValueError( + f"lut and valid_block_num shape mismatch: expected lut.shape[:-1] == valid_block_num.shape, " + f"got {tuple(lut.shape)} and {tuple(valid_block_num.shape)}" + ) + # Run-length encoded LUT: cumsum recovers the 0-indexed selected block positions. + logical_blocks = torch.cumsum(lut.to(torch.int64), dim=-1) + # Scatter True at every recovered position. The invalid tail of `logical_blocks` + # plateaus at the last selected position, so those duplicate indices do not add + # spurious blocks. Do NOT scatter the tail with False (e.g. `scatter_(-1, idx, mask)`): + # masked-out positions all index slot 0, and their trailing False writes clobber a + # selected block at position 0, silently dropping it. Empty rows are cleared below. + block_map = torch.zeros_like(lut, dtype=torch.bool) + block_map.scatter_(-1, logical_blocks, True) + block_map &= valid_block_num.unsqueeze(-1) > 0 + return block_map.contiguous() + + def _prefix_keep_cross_attn_enabled() -> bool: return os.getenv("SPARGE_KEEP_PREFIX_ON_CROSS_ATTN", "0").strip().lower() in {"1", "true", "yes"} @@ -1088,8 +1278,8 @@ def _sparge_preprocess_topk_torch_impl(ctx: _SpargePreprocessContext) -> dict[st .contiguous() ) tail_map = torch.zeros_like(tail_prob, dtype=torch.bool) - tail_map[~tail_sim_k_expand] = True - tail_map[~tail_sim_q_expand] = True + tail_map |= ~tail_sim_k_expand + tail_map |= ~tail_sim_q_expand tail_map = _fill_block_map_torch(tail_map, num_to_select_tail, tail_sorted_prob.indices) if ctx.cdfthreshd is not None: prefix_mass = pooled_prob[..., :prefix_route_blocks].sum(dim=-1, keepdim=True) @@ -1111,8 +1301,9 @@ def _sparge_preprocess_topk_torch_impl(ctx: _SpargePreprocessContext) -> dict[st .contiguous() ) final_tile_map = torch.zeros_like(pooled_prob, dtype=torch.bool) - final_tile_map[~sim_k_expand] = True - final_tile_map[~sim_q_expand] = True + # Boolean-mask assignment (`t[mask] = val`) is unreliable on XPU; use |= instead. + final_tile_map |= ~sim_k_expand + final_tile_map |= ~sim_q_expand final_tile_map = _fill_block_map_torch(final_tile_map, num_to_select, sorted_prob.indices) if ctx.cdfthreshd is not None: final_tile_map |= _select_blocks_for_cdf( @@ -1383,17 +1574,31 @@ def sparge_sage2_attn_meansim_topk_xpu( effective_query_tile_tokens = query_tile_tokens effective_q_tile_override = q_tile_override + if D == 64 and effective_query_tile_tokens is None and q_tile_override == 0: + effective_query_tile_tokens = 64 if effective_query_tile_tokens is None and q_tile_override in (64, 128, 256): effective_query_tile_tokens = q_tile_override elif effective_query_tile_tokens is not None: if q_tile_override == 0: - effective_q_tile_override = int(effective_query_tile_tokens) + effective_q_tile_override = 0 if D == 64 and int(effective_query_tile_tokens) == 64 else int( + effective_query_tile_tokens + ) elif q_tile_override != int(effective_query_tile_tokens): raise ValueError( "query_tile_tokens and q_tile_override must match when both are set; " f"got query_tile_tokens={effective_query_tile_tokens}, q_tile_override={q_tile_override}" ) - _validate_sparse_q_tile_override_for_head_dim(D, effective_q_tile_override) + if D == 64: + supported_q_tiles = (0, 64, 128) + elif D == 128: + supported_q_tiles = (0, 64, 256) + else: + raise ValueError(f"Unsupported head_dim={D}; supported: 64, 128") + if effective_q_tile_override not in supported_q_tiles: + raise ValueError( + f"q_tile_override={effective_q_tile_override} is not supported for BF16 sparse head_dim={D}; " + f"supported values: {', '.join(str(v) for v in supported_q_tiles)}" + ) normalized_mask = _normalize_sparse_mask(attn_mask, B, Sq, Skv, query.device) metadata = sparge_preprocess_topk( @@ -1438,3 +1643,109 @@ def sparge_sage2_attn_meansim_topk_xpu( if return_sparsity: return out, sparsity_ratio return out + + +def sparge_sage2_attn_meansim_topk_xpu_bf16( + query: torch.Tensor, + key: torch.Tensor, + value: torch.Tensor, + attn_mask: torch.Tensor | None = None, + dropout_p: float = 0.0, + is_causal: bool = False, + scale: float | None = None, + smooth_k: bool = True, + simthreshd1: float | torch.Tensor = -0.1, + cdfthreshd: float | torch.Tensor | None = None, + topk: float | torch.Tensor = 0.5, + pvthreshd: float | torch.Tensor = 50, + attention_sink: bool = False, + tensor_layout: str = "HND", + output_dtype: torch.dtype | None = None, + return_sparsity: bool = False, + return_metadata: bool = False, + k_quant_granularity: int = 64, + query_tile_tokens: int | None = None, + q_tile_override: int = 0, + sparse_q_block_tokens: int | None = None, + sparse_k_block_tokens: int | None = None, +) -> torch.Tensor | tuple[Any, ...]: + if query.device.type != "xpu": + raise NotImplementedError("sparge_sage2_attn_meansim_topk_xpu_bf16 is only supported on XPU") + if dropout_p != 0.0: + raise NotImplementedError("dropout_p must be 0.0 for sparge_sage2_attn_meansim_topk_xpu_bf16") + if attn_mask is not None and is_causal: + raise ValueError("attn_mask and is_causal cannot both be set") + if query.dtype != torch.bfloat16 or key.dtype != torch.bfloat16 or value.dtype != torch.bfloat16: + raise ValueError( + "sparge_sage2_attn_meansim_topk_xpu_bf16 requires bfloat16 Q/K/V, " + f"got Q={query.dtype}, K={key.dtype}, V={value.dtype}" + ) + if output_dtype is not None and output_dtype != torch.bfloat16: + raise ValueError(f"output_dtype must be torch.bfloat16 in the current implementation, got {output_dtype}") + if pvthreshd not in (None, 50): + warnings.warn("pvthreshd is not supported by the current ARK sparse kernel and is ignored", stacklevel=2) + + B, Hq, Sq, D = _validate_attention_tensor(query, "Q", tensor_layout, expected_dtype=query.dtype) + Bk, Hkv, Skv, Dk = _validate_attention_tensor(key, "K", tensor_layout, expected_dtype=key.dtype) + Bv, Hkv2, Skv2, Dv = _validate_attention_tensor(value, "V", tensor_layout, expected_dtype=value.dtype) + if Bk != B or Bv != B: + raise ValueError("Batch size mismatch between Q/K/V") + if Hkv2 != Hkv or Skv2 != Skv or Dv != Dk: + raise ValueError("K/V shape mismatch") + if Dk != D: + raise ValueError("Head dim mismatch between Q and K/V") + + effective_query_tile_tokens = query_tile_tokens + effective_q_tile_override = q_tile_override + if effective_query_tile_tokens is None and q_tile_override in (64, 128, 256): + effective_query_tile_tokens = q_tile_override + elif effective_query_tile_tokens is not None: + if q_tile_override == 0: + effective_q_tile_override = int(effective_query_tile_tokens) + elif q_tile_override != int(effective_query_tile_tokens): + raise ValueError( + "query_tile_tokens and q_tile_override must match when both are set; " + f"got query_tile_tokens={effective_query_tile_tokens}, q_tile_override={q_tile_override}" + ) + _validate_sparse_q_tile_override_for_head_dim(D, effective_q_tile_override) + + normalized_mask = _normalize_sparse_mask(attn_mask, B, Sq, Skv, query.device) + metadata = sparge_preprocess_topk( + query, + key, + is_causal=is_causal, + smooth_k=smooth_k, + simthreshd1=simthreshd1, + topk=topk, + cdfthreshd=cdfthreshd, + attention_sink=attention_sink, + quant_block_size=64, + tensor_layout=tensor_layout, + k_quant_granularity=k_quant_granularity, + query_tile_tokens=effective_query_tile_tokens, + sparse_q_block_tokens=sparse_q_block_tokens, + sparse_k_block_tokens=sparse_k_block_tokens, + ) + _get_xpu_sparse_kernel_backend() + out = sage_sparse_bf16( + query, + key, + value, + metadata["lut"], + metadata["valid_block_num"], + attn_mask=normalized_mask, + is_causal=is_causal, + scale=scale, + q_tile_override=effective_q_tile_override, + sparse_q_block_tokens=metadata["sparse_q_block_tokens"], + sparse_k_block_tokens=metadata["sparse_k_block_tokens"], + tensor_layout=tensor_layout, + ) + sparsity_ratio = metadata["stats"]["sparsity_ratio"] + if return_metadata and return_sparsity: + return out, sparsity_ratio, metadata + if return_metadata: + return out, metadata + if return_sparsity: + return out, sparsity_ratio + return out From c94a1b80cfed91ffa399afafad2c93289922e020 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 09:56:17 +0800 Subject: [PATCH 08/42] feat: BF16 sparse SDPA benchmark support and repro script - bench_sparse_topk.py: add --dtype bf16, the sparse_bf16_kernel_only / sparse_bf16_e2e modes, and baseline/effective TFLOPS columns. The binding loader also accepts the ark-xbuild artifact. - tools/repro_sparse_bf16_sdpa_bench.sh: one-command repro that sources oneAPI 2026.1, pins a device, and runs the BF16 sparse benchmark against the rebuilt ark-xbuild extension. --- .../ark/benchmarks/bench_sparse_topk.py | 192 +++++++++++++++++- .../ark/tools/repro_sparse_bf16_sdpa_bench.sh | 45 ++++ 2 files changed, 227 insertions(+), 10 deletions(-) create mode 100755 auto_round_extension/ark/tools/repro_sparse_bf16_sdpa_bench.sh diff --git a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py index 2813ed48b6..63eafd4646 100644 --- a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py +++ b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py @@ -23,13 +23,13 @@ from auto_round_kernel.xpu_loader import load_xpu_lib -def _load_sparse_binding(ext_path: Path) -> None: +def _load_sparse_binding(ext_path: Path, *, required_symbols: tuple[str, ...]) -> None: module_name = "auto_round_kernel._bench.auto_round_kernel_xpu" print(f"Loading XPU extension from {ext_path.resolve()} as {module_name}") - load_xpu_lib(ext_path, required_symbols=("sage_sparse",), module_name=module_name) + load_xpu_lib(ext_path, required_symbols=required_symbols, module_name=module_name) -def _resolve_sparse_binding(args: argparse.Namespace) -> Path | None: +def _resolve_sparse_binding(args: argparse.Namespace, *, required_symbols: tuple[str, ...]) -> Path | None: local_kernel_dir = REPO_ROOT / "auto_round_extension" / "ark" / "auto_round_kernel" current_file = getattr(getattr(ark, "xpu_lib", None), "__file__", None) if args.xpu_so is not None: @@ -37,9 +37,11 @@ def _resolve_sparse_binding(args: argparse.Namespace) -> Path | None: if args.xbuild_dir is not None: candidates = sorted(args.xbuild_dir.resolve().glob("auto_round_kernel_xpu*.so")) if not candidates: - raise RuntimeError(f"Unable to locate built XPU extension with sage_sparse in {args.xbuild_dir}") + raise RuntimeError( + f"Unable to locate built XPU extension with required symbols {required_symbols} in {args.xbuild_dir}" + ) return candidates[-1] - if current_file is not None and hasattr(ark.xpu_lib, "sage_sparse"): + if current_file is not None and all(hasattr(ark.xpu_lib, symbol) for symbol in required_symbols): try: current_path = Path(current_file).resolve() if current_path.is_relative_to(local_kernel_dir.resolve()): @@ -47,22 +49,38 @@ def _resolve_sparse_binding(args: argparse.Namespace) -> Path | None: return None except Exception: pass - candidates = sorted((local_kernel_dir / "xbuild").glob("auto_round_kernel_xpu*.so")) + build_roots = [root for root in local_kernel_dir.iterdir() if root.is_dir() and "build" in root.name] + candidates: list[Path] = [] + for root in build_roots: + candidates.extend(sorted(root.glob("auto_round_kernel_xpu*.so"))) if not candidates: - raise RuntimeError("Unable to locate built XPU extension with sage_sparse in auto_round_kernel/xbuild") + raise RuntimeError( + f"Unable to locate built XPU extension with required symbols {required_symbols} under {local_kernel_dir}" + ) + candidates.sort(key=lambda path: path.stat().st_mtime) return candidates[-1] def ensure_sparse_binding(args: argparse.Namespace) -> None: - ext_path = _resolve_sparse_binding(args) + required_symbols = ("sage_sparse", "sage_sparse_bf16") if args.dtype == "bf16" else ("sage_sparse",) + ext_path = _resolve_sparse_binding(args, required_symbols=required_symbols) if ext_path is not None: - _load_sparse_binding(ext_path) + _load_sparse_binding(ext_path, required_symbols=required_symbols) def is_xpu_available() -> bool: return hasattr(torch, "xpu") and torch.xpu.is_available() +def resolve_dtype(name: str) -> torch.dtype: + normalized = name.strip().lower() + if normalized == "fp16": + return torch.float16 + if normalized == "bf16": + return torch.bfloat16 + raise ValueError(f"Unsupported dtype={name!r}; supported values: fp16, bf16") + + def bench(fn, warmup: int, iters: int) -> float: for _ in range(warmup): out = fn() @@ -501,6 +519,8 @@ def summarize_speedups(rows: list[dict[str, object]]) -> list[dict[str, object]] "dense_sagev1", "sparse_kernel_only", "sparse_e2e", + "sparse_bf16_kernel_only", + "sparse_bf16_e2e", "sparse_qtile256_row64k_kernel_only", "sparse_qtile256_row64k_e2e", }: @@ -548,7 +568,7 @@ def write_csv(rows: list[dict[str, object]], output_csv: Path) -> None: def run_single_benchmark(args: argparse.Namespace, *, seq_len: int, tensor_layout: str) -> list[dict[str, object]]: device = torch.device("xpu") - dtype = torch.float16 + dtype = resolve_dtype(args.dtype) scale = 1.0 / math.sqrt(args.head_dim) enable_gqa = args.num_heads_q // args.num_heads_kv > 1 q_hnd_src, k_hnd_src, v_hnd_src = build_inputs( @@ -710,6 +730,49 @@ def run_single_benchmark(args: argparse.Namespace, *, seq_len: int, tensor_layou note=f"preprocess failed before e2e benchmark: {preprocess_note}", ) ) + if dtype == torch.bfloat16: + rows.append( + make_row( + mode="sparse_bf16_kernel_only", + batch=args.batch, + num_heads_q=args.num_heads_q, + num_heads_kv=args.num_heads_kv, + seq_len=seq_len, + tensor_layout=tensor_layout, + head_dim=args.head_dim, + dtype=dtype, + is_causal=args.causal, + warmup=args.warmup, + iters=args.iters, + requested_topk=topk, + selected_ratio=None, + selected_blocks_per_row=None, + latency_ms=None, + status=status, + note=f"preprocess failed before bf16 kernel benchmark: {preprocess_note}", + ) + ) + rows.append( + make_row( + mode="sparse_bf16_e2e", + batch=args.batch, + num_heads_q=args.num_heads_q, + num_heads_kv=args.num_heads_kv, + seq_len=seq_len, + tensor_layout=tensor_layout, + head_dim=args.head_dim, + dtype=dtype, + is_causal=args.causal, + warmup=args.warmup, + iters=args.iters, + requested_topk=topk, + selected_ratio=None, + selected_blocks_per_row=None, + latency_ms=None, + status=status, + note=f"preprocess failed before bf16 e2e benchmark: {preprocess_note}", + ) + ) continue # try: @@ -891,6 +954,109 @@ def run_single_benchmark(args: argparse.Namespace, *, seq_len: int, tensor_layou selected_blocks_per_row=selected_blocks_per_row, ) ) + if dtype == torch.bfloat16: + rows.append( + try_benchmark( + "sparse_bf16_kernel_only", + lambda preprocess=preprocess: ( + hnd_to_nhd( + ark.sage_sparse_bf16( + nhd_to_hnd(q_nhd_src), + nhd_to_hnd(k_nhd_src), + nhd_to_hnd(v_nhd_src), + preprocess["lut"], + preprocess["valid_block_num"], + is_causal=args.causal, + scale=scale, + q_tile_override=args.q_tile_override, + sparse_q_block_tokens=preprocess["sparse_q_block_tokens"], + sparse_k_block_tokens=preprocess["sparse_k_block_tokens"], + tensor_layout="HND", + ) + ) + if tensor_layout == "HND" + else ark.sage_sparse_bf16( + q, + k, + v, + preprocess["lut"], + preprocess["valid_block_num"], + is_causal=args.causal, + scale=scale, + q_tile_override=args.q_tile_override, + sparse_q_block_tokens=preprocess["sparse_q_block_tokens"], + sparse_k_block_tokens=preprocess["sparse_k_block_tokens"], + tensor_layout=tensor_layout, + ) + ), + batch=args.batch, + num_heads_q=args.num_heads_q, + num_heads_kv=args.num_heads_kv, + seq_len=seq_len, + tensor_layout=tensor_layout, + head_dim=args.head_dim, + dtype=dtype, + is_causal=args.causal, + warmup=args.warmup, + iters=args.iters, + requested_topk=topk, + selected_ratio=selected_ratio, + selected_blocks_per_row=selected_blocks_per_row, + ) + ) + rows.append( + try_benchmark( + "sparse_bf16_e2e", + lambda topk=topk: ( + hnd_to_nhd( + ark.sparge_sage2_attn_meansim_topk_xpu_bf16( + nhd_to_hnd(q_nhd_src), + nhd_to_hnd(k_nhd_src), + nhd_to_hnd(v_nhd_src), + is_causal=args.causal, + scale=scale, + smooth_k=True, + simthreshd1=-1.0, + topk=topk, + attention_sink=False, + tensor_layout="HND", + q_tile_override=args.q_tile_override, + sparse_q_block_tokens=args.sparse_q_block_tokens, + sparse_k_block_tokens=args.sparse_k_block_tokens, + ) + ) + if tensor_layout == "HND" + else ark.sparge_sage2_attn_meansim_topk_xpu_bf16( + q, + k, + v, + is_causal=args.causal, + scale=scale, + smooth_k=True, + simthreshd1=-1.0, + topk=topk, + attention_sink=False, + tensor_layout=tensor_layout, + q_tile_override=args.q_tile_override, + sparse_q_block_tokens=args.sparse_q_block_tokens, + sparse_k_block_tokens=args.sparse_k_block_tokens, + ) + ), + batch=args.batch, + num_heads_q=args.num_heads_q, + num_heads_kv=args.num_heads_kv, + seq_len=seq_len, + tensor_layout=tensor_layout, + head_dim=args.head_dim, + dtype=dtype, + is_causal=args.causal, + warmup=args.warmup, + iters=args.iters, + requested_topk=topk, + selected_ratio=selected_ratio, + selected_blocks_per_row=selected_blocks_per_row, + ) + ) del preprocess empty_xpu_cache() @@ -921,6 +1087,12 @@ def parse_args() -> argparse.Namespace: parser.add_argument("--num-heads-kv", type=int, default=40) parser.add_argument("--seq-len", type=int, nargs="+", default=[32768, 75600]) parser.add_argument("--head-dim", type=int, default=128) + parser.add_argument( + "--dtype", + choices=("fp16", "bf16"), + default="fp16", + help="Input/output dtype used for dense SDPA, dense SAGE, and sparse attention benchmarks.", + ) parser.add_argument("--topk", type=float, nargs="+", default=[0.5, 0.25, 0.125]) parser.add_argument("--quant-block-size", type=int, default=64) parser.add_argument( diff --git a/auto_round_extension/ark/tools/repro_sparse_bf16_sdpa_bench.sh b/auto_round_extension/ark/tools/repro_sparse_bf16_sdpa_bench.sh new file mode 100755 index 0000000000..d26c692b48 --- /dev/null +++ b/auto_round_extension/ark/tools/repro_sparse_bf16_sdpa_bench.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +set -euo pipefail + +SCRIPT_PATH="$(readlink -f "$0")" +REPO_ROOT="/home/yiliu4/workspace/auto-round/auto_round_extension/ark" +PYTHON_BIN="${REPO_ROOT}/.venv/bin/python" +OUTPUT_CSV="${OUTPUT_CSV:-/tmp/bench_sparse_topk_bf16_dev6.csv}" +ZE_AFFINITY_MASK_VALUE="${ZE_AFFINITY_MASK_VALUE:-6}" +XPU_SO="${XPU_SO:-}" + +cd "${REPO_ROOT}" + +if [[ "${1:-}" == "--inner" ]]; then + shift +elif command -v sg >/dev/null 2>&1; then + current_groups="$(id -nG || true)" + if [[ ! " ${current_groups} " =~ [[:space:]]render[[:space:]] ]] || [[ ! " ${current_groups} " =~ [[:space:]]video[[:space:]] ]]; then + exec sg render -c "sg video -c '${SCRIPT_PATH} --inner'" + fi +fi + +# oneAPI's setvars.sh is not compatible with `set -u` in this environment. +set +u +source /opt/intel/oneapi/setvars.sh --force >/dev/null 2>&1 +set -u + +export MKLROOT=/opt/intel/oneapi/mkl/2026.1 +export ZE_AFFINITY_MASK="${ZE_AFFINITY_MASK_VALUE}" +export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch + +if [[ -z "${XPU_SO}" ]]; then + XPU_SO="$(find "${REPO_ROOT}/auto_round_kernel/ark-xbuild" -maxdepth 1 -name 'auto_round_kernel_xpu*.so' | sort | tail -n 1)" +fi + +echo "XPU process snapshot:" +xpu-smi ps || true +echo +echo "Running sparse BF16 SDPA benchmark on device ${ZE_AFFINITY_MASK}..." +echo "Using XPU extension: ${XPU_SO}" + +exec "${PYTHON_BIN}" benchmarks/bench_sparse_topk.py \ + --dtype bf16 \ + --xpu-so "${XPU_SO}" \ + --output-csv "${OUTPUT_CSV}" From e34327a619293b108645bdb025d01c8fa86f4cf8 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 09:56:27 +0800 Subject: [PATCH 09/42] test: BF16 sparse preprocess and LUT regression tests - run_lut_roundtrip_case: the LUT must be non-negative and the block_map -> lut -> block_map round-trip lossless (regression for the XPU boolean-mask assignment bug that produced -1 LUT entries). - run_fill_block_map_case: the vectorized _fill_block_map_torch must match the reference loop implementation (regression for the preprocess speedup). - test_sage_sparse_prefill_e2e: include ark-xbuild in the binding search roots. --- .../test/test_sage_sparse_prefill_e2e.py | 8 +- .../test/test_sparge_preprocess_topk_e2e.py | 81 ++++++++++++++++++- 2 files changed, 83 insertions(+), 6 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py index 60c9a87922..7d372a2858 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py @@ -16,17 +16,15 @@ def ensure_sparse_binding(*, required_symbols: tuple[str, ...] = ("sage_sparse",)) -> None: - bf16_ext = ( - REPO_PARENT / "auto_round_kernel" / "xbuild_bf16_v2" / "auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so" - ) search_roots = ( REPO_PARENT / "auto_round_kernel", - REPO_PARENT / "auto_round_kernel" / "xbuild", REPO_PARENT / "auto_round_kernel" / "xbuild_diffuser", + REPO_PARENT / "auto_round_kernel" / "xbuild", + REPO_PARENT / "auto_round_kernel" / "xbuild_bf16_v2", + REPO_PARENT / "auto_round_kernel" / "ark-xbuild", ) ensure_xpu_lib( required_symbols=required_symbols, - ext_path=bf16_ext if bf16_ext.is_file() else None, search_roots=search_roots, ) diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py index 02426f3913..5476207284 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py @@ -16,7 +16,16 @@ def ensure_sparse_binding() -> None: - ensure_xpu_lib(required_symbols=("sage_sparse",)) + ensure_xpu_lib( + required_symbols=("sage_sparse",), + search_roots=( + REPO_PARENT / "auto_round_kernel", + REPO_PARENT / "auto_round_kernel" / "xbuild_diffuser", + REPO_PARENT / "auto_round_kernel" / "xbuild", + REPO_PARENT / "auto_round_kernel" / "xbuild_bf16_v2", + REPO_PARENT / "auto_round_kernel" / "ark-xbuild", + ), + ) def _to_layout(tensor: torch.Tensor, tensor_layout: str) -> torch.Tensor: @@ -264,6 +273,74 @@ def run_case( assert torch.equal(crafted_meta["block_map"], crafted_meta["raw_block_map"]) +def run_lut_roundtrip_case(*, num_heads_q: int = 40, q_blocks: int = 8, k_blocks: int = 32) -> None: + """Regression test for the XPU boolean-mask assignment bug. + + torch-xpu-ops' boolean-mask in-place assignment (`tensor[mask] = value`) silently + misses entries on 4-D int64/bool tensors of these sizes, which used to leave 0s in + ``_block_map_lut_torch``'s ``filled_matrix`` and produce **-1** LUT entries. Those + -1s then drove the ``scatter_`` in ``_lut_to_block_map`` out of bounds + (``ScatterGatherKernels.cpp:233``). The LUT must be non-negative and the + block_map -> lut -> block_map round-trip must be lossless. + """ + from auto_round_kernel.sparse_attention import _block_map_lut_torch, _lut_to_block_map + + device = torch.device("xpu") + torch.manual_seed(1234) + block_map = torch.rand(1, num_heads_q, q_blocks, k_blocks, device=device) < 0.5 + lut, valid_block_num = _block_map_lut_torch(block_map) + torch.xpu.synchronize() + + assert lut.dtype == torch.int32 + assert valid_block_num.dtype == torch.int32 + assert tuple(lut.shape) == tuple(block_map.shape) + # Regression: on XPU this was -1 because the masked assignment silently failed. + assert int(lut.min().item()) >= 0, f"lut must be non-negative, got min={int(lut.min().item())}" + assert int(valid_block_num.max().item()) <= k_blocks + + reconstructed = _lut_to_block_map(lut, valid_block_num) + torch.xpu.synchronize() + assert torch.equal(reconstructed, block_map), "block_map -> lut -> block_map round-trip must be lossless" + + +def run_fill_block_map_case() -> None: + """Regression test for the vectorized ``_fill_block_map_torch``. + + The naive implementation looped ``for rank in range(k_blocks)`` (thousands of + sequential kernel launches at long sequences); the vectorized rewrite must be + exactly equivalent. Runs on CPU against a reference loop implementation. + """ + from auto_round_kernel.sparse_attention import _fill_block_map_torch + + def reference_loop(final_map, num_to_select, sorted_indices): + k_blocks = final_map.shape[-1] + filled = final_map.clone() + column_ids = torch.arange(k_blocks, device=final_map.device).view(1, 1, 1, k_blocks) + target_new = torch.maximum(num_to_select, torch.ones_like(num_to_select)) + added = torch.zeros_like(num_to_select) + for rank in range(k_blocks): + idx_match = column_ids == sorted_indices[..., rank : rank + 1] + is_new = idx_match & ~filled + should_add = (added < target_new).unsqueeze(-1) + newly_selected = should_add & is_new + filled |= newly_selected + added = added + newly_selected.any(dim=-1).to(added.dtype) + return filled + + for shape in [(1, 4, 8, 32), (1, 40, 8, 32), (1, 40, 128, 512), (2, 16, 64, 128)]: + b, h, q, k = shape + for seed in range(4): + torch.manual_seed(seed) + probs = torch.rand(shape) + _, sorted_indices = torch.sort(probs, dim=-1, descending=True) + num_to_select = torch.randint(0, k + 1, (b, h, q), dtype=torch.int64) + final_map = torch.rand(shape) < 0.1 # some blocks already forced + assert torch.equal( + _fill_block_map_torch(final_map, num_to_select, sorted_indices), + reference_loop(final_map, num_to_select, sorted_indices), + ), f"vectorized _fill_block_map_torch differs from reference at shape={shape} seed={seed}" + + def run_causal_decoupled_wrapper_case(*, tensor_layout: str) -> None: device = torch.device("xpu") batch = 1 @@ -410,6 +487,8 @@ def main() -> None: num_heads_kv=1, ) run_causal_decoupled_wrapper_case(tensor_layout=tensor_layout) + run_lut_roundtrip_case() + run_fill_block_map_case() if __name__ == "__main__": From 9c86dda62d7dc70d5362e61cdee8044df40f3924 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 09:56:35 +0800 Subject: [PATCH 10/42] feat: include ark-xbuild in wan sparse binding search roots --- auto_round_extension/ark/examples/wan_sparse_patch.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/auto_round_extension/ark/examples/wan_sparse_patch.py b/auto_round_extension/ark/examples/wan_sparse_patch.py index 6418209521..0d82071f84 100644 --- a/auto_round_extension/ark/examples/wan_sparse_patch.py +++ b/auto_round_extension/ark/examples/wan_sparse_patch.py @@ -43,9 +43,10 @@ def ensure_ark_sparse_binding( required_symbols=required_symbols, search_roots=( KERNEL_DIR, + KERNEL_DIR / "xbuild_diffuser", KERNEL_DIR / "xbuild", KERNEL_DIR / "xbuild_bf16_v2", - KERNEL_DIR / "xbuild_diffuser", + KERNEL_DIR / "ark-xbuild", ), ) From 743cece1a6d119ea5447bf030cfa285cc56c9fbe Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 10:09:13 +0800 Subject: [PATCH 11/42] refactor: remove dense-mask fallback from sage_sparse_bf16 sage_sparse_bf16 now uses the native XPU sparse kernel exclusively. The dense-mask fallback (rebuild the full block map, then run per-head dense sagev1) is removed: it materialized a [B, Hq, Sq, Skv] mask and OOM'd at long sequences, and the native kernel now covers every supported config. Unsupported configs raise instead of silently degrading to the slow path. --- .../ark/auto_round_kernel/sparse_attention.py | 129 ++++++------------ 1 file changed, 43 insertions(+), 86 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py index 71a537931a..2342a10707 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py +++ b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py @@ -267,94 +267,51 @@ def sage_sparse_bf16( f"q_tile_override must be one of {{0, 64, 128}} for sage_sparse_bf16 with head_dim=64, got {q_tile_override}" ) - # Preferred path: the native XPU sparse kernel. The dense fallback below is - # numerically correct but materializes a full [B, Hq, Sq, Skv] mask, which OOMs - # at long sequence lengths. Unsupported configs fall through to the fallback. - if query.device.type == "xpu": - try: - lib = get_lib(query) - if hasattr(lib, "sage_sparse_bf16"): - effective_q_tile_override = _resolve_sparse_prefill_q_tile_override( - head_dim=D, - quant_block_size=64, - q_tile_override=q_tile_override, - sparse_q_block_tokens=effective_sparse_q_block_tokens, - sparse_k_block_tokens=effective_sparse_k_block_tokens, - tensor_layout=tensor_layout, - ) - stream = get_stream(query) - O = _empty_attention_output( - B, Hq, Sq, D, dtype=value.dtype, device=query.device, tensor_layout=tensor_layout - ) - lib.sage_sparse_bf16( - stream, - query.data_ptr(), - key.data_ptr(), - value.data_ptr(), - O.data_ptr(), - attn_mask.data_ptr() if attn_mask is not None else 0, - lut.data_ptr(), - valid_block_num.data_ptr(), - q_sparse_blocks, - kv_sparse_blocks, - effective_q_tile_override, - *_attention_strides_qko(query, tensor_layout), - *_attention_strides_qko(key, tensor_layout), - *_attention_strides_v(value, tensor_layout), - *_attention_strides_qko(O, tensor_layout), - B, - Hq, - Hkv, - Sq, - Skv, - D, - float(scale) if scale is not None else 1.0 / (D**0.5), - bool(is_causal), - ) - return O - except (NotImplementedError, RuntimeError, ValueError): - # Unsupported native sparse config; fall through to the dense fallback. - pass - - block_map = _lut_to_block_map(lut, valid_block_num) - sparse_mask = sparge_block_map_to_mask( - block_map, + # Native XPU sparse kernel only. The historical dense-mask fallback (rebuild the + # full block map, then run per-head dense sagev1) is removed: it materialized a + # [B, Hq, Sq, Skv] mask and OOM'd at long sequences, and the native kernel now + # covers every supported config. + lib = get_lib(query) + if not hasattr(lib, "sage_sparse_bf16"): + raise RuntimeError("Loaded XPU extension does not expose sage_sparse_bf16") + effective_q_tile_override = _resolve_sparse_prefill_q_tile_override( + head_dim=D, quant_block_size=64, - q_block_tokens=effective_sparse_q_block_tokens, - k_block_tokens=effective_sparse_k_block_tokens, - seq_len_q=Sq, - seq_len_kv=Skv, - is_causal=is_causal, + q_tile_override=q_tile_override, + sparse_q_block_tokens=effective_sparse_q_block_tokens, + sparse_k_block_tokens=effective_sparse_k_block_tokens, + tensor_layout=tensor_layout, ) - normalized_mask = _normalize_sparse_mask(attn_mask, B, Sq, Skv, query.device) - if normalized_mask is not None: - sparse_mask = torch.minimum(sparse_mask, normalized_mask.expand(-1, Hq, -1, -1)) - - query_hnd = _to_hnd(query, tensor_layout) - key_hnd = _to_hnd(key, tensor_layout) - value_hnd = _to_hnd(value, tensor_layout) - kv_head_index = _kv_head_index_for_q_heads(Hq, Hkv, query.device) - outputs: list[torch.Tensor] = [] - effective_scale = float(scale) if scale is not None else 1.0 / (D**0.5) - for q_head in range(Hq): - kv_head = int(kv_head_index[q_head].item()) - query_head = torch.empty((B, 1, Sq, D), dtype=query_hnd.dtype, device=query.device) - key_head = torch.empty((B, 1, Skv, D), dtype=key_hnd.dtype, device=key.device) - value_head = torch.empty((B, 1, Skv, D), dtype=value_hnd.dtype, device=value.device) - query_head.copy_(query_hnd[:, q_head : q_head + 1]) - key_head.copy_(key_hnd[:, kv_head : kv_head + 1]) - value_head.copy_(value_hnd[:, kv_head : kv_head + 1]) - head_out = _dense_sagev1( - query_head, - key_head, - value_head, - attn_mask=sparse_mask[:, q_head : q_head + 1].contiguous(), - is_causal=False, - scale=effective_scale, - tensor_layout="HND", - ) - outputs.append(head_out) - return _from_hnd(torch.cat(outputs, dim=1), tensor_layout) + stream = get_stream(query) + O = _empty_attention_output( + B, Hq, Sq, D, dtype=value.dtype, device=query.device, tensor_layout=tensor_layout + ) + lib.sage_sparse_bf16( + stream, + query.data_ptr(), + key.data_ptr(), + value.data_ptr(), + O.data_ptr(), + attn_mask.data_ptr() if attn_mask is not None else 0, + lut.data_ptr(), + valid_block_num.data_ptr(), + q_sparse_blocks, + kv_sparse_blocks, + effective_q_tile_override, + *_attention_strides_qko(query, tensor_layout), + *_attention_strides_qko(key, tensor_layout), + *_attention_strides_v(value, tensor_layout), + *_attention_strides_qko(O, tensor_layout), + B, + Hq, + Hkv, + Sq, + Skv, + D, + float(scale) if scale is not None else 1.0 / (D**0.5), + bool(is_causal), + ) + return O def sage_sparse_row_linear( From c6bd14a52ce4ba2f2b000af38e85955a0d8396cf Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 10:36:02 +0800 Subject: [PATCH 12/42] docs: add documented BF16 sparse benchmark runner script tools/run_bf16_sparse_bench.sh documents and runs the exact BF16 sparse SDPA benchmark command: sources oneAPI 2026.1, pins a GPU via ZE_AFFINITY_MASK, uses the rebuilt ark-xbuild extension, and saves a timestamped CSV + log under benchmarks/results/. Includes env overrides and prerequisites in the header. --- .../ark/tools/run_bf16_sparse_bench.sh | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 auto_round_extension/ark/tools/run_bf16_sparse_bench.sh diff --git a/auto_round_extension/ark/tools/run_bf16_sparse_bench.sh b/auto_round_extension/ark/tools/run_bf16_sparse_bench.sh new file mode 100755 index 0000000000..fb5e1b5e65 --- /dev/null +++ b/auto_round_extension/ark/tools/run_bf16_sparse_bench.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# +# run_bf16_sparse_bench.sh +# ======================== +# Documented reproduce command for the BF16 sparse SDPA benchmark on Intel XPU. +# +# WHAT IT DOES +# Runs benchmarks/bench_sparse_topk.py --dtype bf16 against the rebuilt +# XPU extension (auto_round_kernel/ark-xbuild), pinning a GPU device, and +# saves the CSV + a readable log under benchmarks/results/. +# +# USAGE +# ./tools/run_bf16_sparse_bench.sh +# +# ENV OVERRIDES +# ZE_AFFINITY_MASK_VALUE GPU device index to run on (default: 6) +# OUTPUT_DIR where CSV + log are written (default: benchmarks/results) +# XPU_SO explicit path to the built auto_round_kernel_xpu*.so +# (default: newest under auto_round_kernel/ark-xbuild) +# +# PREREQUISITES +# - oneAPI 2026.1 runtime (sourced from /opt/intel/oneapi/setvars.sh) +# - Python venv at .venv/bin/python (PyTorch 2.13.0+xpu) +# - a rebuilt extension with BF16 sparse symbols under auto_round_kernel/ark-xbuild/ +# - a free GPU (pick via ZE_AFFINITY_MASK_VALUE; check `xpu-smi ps` first) +# +# BENCHMARK CONFIG (bench_sparse_topk.py defaults) +# batch=1 num_heads_q/kv=40 head_dim=128 dtype=bf16 qtile=256 +# seq_len=[32768, 75600] tensor_layout=[HND, NHD] topk=[0.5, 0.25, 0.125] +# warmup=2 iters=3 +# +# NOTE +# First call per process pays a ~30s SYCL JIT for the sparse kernels; the +# full sweep above takes roughly 15-25 minutes on one GPU. + +set -euo pipefail + +SCRIPT_PATH="$(readlink -f "$0")" +REPO_ROOT="$(cd "$(dirname "${SCRIPT_PATH}")/.." && pwd)" +PYTHON_BIN="${REPO_ROOT}/.venv/bin/python" +OUTPUT_DIR="${OUTPUT_DIR:-${REPO_ROOT}/benchmarks/results}" +ZE_AFFINITY_MASK_VALUE="${ZE_AFFINITY_MASK_VALUE:-6}" +XPU_SO="${XPU_SO:-}" + +cd "${REPO_ROOT}" + +# Re-exec under the render/video groups if this shell does not already have them. +if [[ "${1:-}" == "--inner" ]]; then + shift +elif command -v sg >/dev/null 2>&1; then + current_groups="$(id -nG || true)" + if [[ ! " ${current_groups} " =~ [[:space:]]render[[:space:]] ]] || [[ ! " ${current_groups} " =~ [[:space:]]video[[:space:]] ]]; then + exec sg render -c "sg video -c '${SCRIPT_PATH} --inner'" + fi +fi + +# oneAPI's setvars.sh is not compatible with `set -u` in this environment. +set +u +source /opt/intel/oneapi/setvars.sh --force >/dev/null 2>&1 +set -u + +export MKLROOT=/opt/intel/oneapi/mkl/2026.1 +export ZE_AFFINITY_MASK="${ZE_AFFINITY_MASK_VALUE}" +export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch + +if [[ -z "${XPU_SO}" ]]; then + XPU_SO="$(find "${REPO_ROOT}/auto_round_kernel/ark-xbuild" -maxdepth 1 -name 'auto_round_kernel_xpu*.so' | sort | tail -n 1)" +fi +if [[ -z "${XPU_SO}" ]]; then + echo "error: no auto_round_kernel_xpu*.so found under auto_round_kernel/ark-xbuild" >&2 + exit 1 +fi + +mkdir -p "${OUTPUT_DIR}" +stamp="$(date +%Y%m%d_%H%M%S)" +out_csv="${OUTPUT_DIR}/bf16_sparse_${stamp}.csv" +out_log="${OUTPUT_DIR}/bf16_sparse_${stamp}.log" + +echo "XPU process snapshot:" +xpu-smi ps || true +echo +echo "Running BF16 sparse SDPA benchmark on device ${ZE_AFFINITY_MASK}..." +echo "Using XPU extension: ${XPU_SO}" +echo "CSV: ${out_csv}" +echo "Log: ${out_log}" +echo + +"${PYTHON_BIN}" benchmarks/bench_sparse_topk.py \ + --dtype bf16 \ + --xpu-so "${XPU_SO}" \ + --output-csv "${out_csv}" 2>&1 | tee "${out_log}" From 625d483110bd2547fca689273f0360213c69e575 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 11:39:12 +0800 Subject: [PATCH 13/42] fix: work around triton SPV_INTEL_predicated_io on Intel XPU triton 3.7.x enables has_predicated_io for non-LTS Intel GPU drivers and emits the SPV_INTEL_predicated_io SPIR-V extension. Some level-zero loaders (e.g. 1.13.35563) reject that extension at kernel load time, aborting every triton kernel launch with 'InvalidModule: ... unknown extension'. Since it is not a catchable Python exception, the torch preprocess fallback never ran and the whole benchmark died. Add auto_round_kernel/_xpu_triton_compat.py which patches the intel triton backend to force has_predicated_io off (standard predicated loads instead), and apply it when the triton preprocess module loads. The triton-xpu preprocess backend now works and is faster than torch (seq 32768/50% e2e: 327ms -> 206ms). --- .../auto_round_kernel/_xpu_triton_compat.py | 49 +++++++++++++++++++ .../sparge_preprocess_triton.py | 4 ++ 2 files changed, 53 insertions(+) create mode 100644 auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py diff --git a/auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py b/auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py new file mode 100644 index 0000000000..f86e7f5763 --- /dev/null +++ b/auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py @@ -0,0 +1,49 @@ +# # Copyright (C) 2026 Intel Corporation +# # SPDX-License-Identifier: Apache-2.0 + +"""Workarounds for the Intel XPU triton backend on this platform. + +Triton 3.7.x enables ``has_predicated_io`` for non-LTS Intel GPU drivers and then +emits the ``SPV_INTEL_predicated_io`` SPIR-V extension in its JIT kernels. Some +level-zero loaders (e.g. 1.13.35563) reject that extension at kernel-load time:: + + InvalidModule: Invalid SPIR-V module: input SPIR-V module uses unknown + extension 'SPV_INTEL_predicated_io' + +which aborts any triton kernel launch and kills the process (it is not a +catchable Python exception, so the torch preprocess fallback never runs). + +The workaround forces ``has_predicated_io`` off so triton emits standard +(non-extension) predicated loads/stores. This disables a minor codegen +optimization on every XPU driver, but the ark triton preprocess kernels are small +and the trade-off is only safe correctness on the affected drivers. +""" + +import logging + +logger = logging.getLogger(__name__) + +_APPLIED = False + + +def apply_xpu_triton_workarounds() -> None: + """Patch triton's Intel compiler so JIT kernels avoid the rejected SPIR-V extension.""" + global _APPLIED + if _APPLIED: + return + try: + import triton.backends.intel.compiler as _intel_compiler + except ImportError: + # No intel triton backend (e.g. stock triton); nothing to patch. + return + + _orig_parse_target = _intel_compiler.XPUBackend.parse_target + + def _patched_parse_target(self, tgt_prop): + dev_prop = _orig_parse_target(self, tgt_prop) + dev_prop["has_predicated_io"] = False + return dev_prop + + _intel_compiler.XPUBackend.parse_target = _patched_parse_target + _APPLIED = True + logger.info("Applied XPU triton workaround: has_predicated_io forced off (SPV_INTEL_predicated_io)") diff --git a/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py b/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py index 5306cf4e84..4e9e710f4a 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py +++ b/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py @@ -10,6 +10,10 @@ import triton import triton.language as tl +from ._xpu_triton_compat import apply_xpu_triton_workarounds + +apply_xpu_triton_workarounds() + logger = logging.getLogger(__name__) _TRITON_FALLBACK_WARNING_LOGGED = False From cf191c45ab60909e80b33cf0d211e7ce844b40de Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 11:39:12 +0800 Subject: [PATCH 14/42] docs: add sparse SAGE v1 benchmark runner script tools/run_sparse_sagev1_bench.sh documents and runs the sparse SAGE v1 (fp16 / INT8) benchmark on main: sources oneAPI, pins a GPU, uses the rebuilt extension, and saves timestamped CSV + log under benchmarks/results/. Includes env overrides and a note on the triton preprocess backend. --- .../ark/tools/run_sparse_sagev1_bench.sh | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100755 auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh diff --git a/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh b/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh new file mode 100755 index 0000000000..41c6701b43 --- /dev/null +++ b/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash +# +# run_sparse_sagev1_bench.sh +# ========================== +# Documented reproduce command for the sparse SAGE v1 SDPA benchmark on Intel XPU. +# +# This runs the INT8 sparse path (fp16 Q/K/V inputs, int8 quantized routing) that +# lives on the `main` branch: dense torch SDPA + dense sagev1 + the sparse +# kernel-only and sparse e2e modes, across top-k selections. +# +# WHAT IT DOES +# Runs benchmarks/bench_sparse_topk.py (fp16 / INT8 sparse) against the rebuilt +# XPU extension, pinning a GPU device, and saves a timestamped CSV + log under +# benchmarks/results/. +# +# USAGE +# ./tools/run_sparse_sagev1_bench.sh +# +# ENV OVERRIDES +# ZE_AFFINITY_MASK_VALUE GPU device index to run on (default: 6) +# OUTPUT_DIR where CSV + log are written (default: benchmarks/results) +# XPU_SO explicit path to the built auto_round_kernel_xpu*.so +# (default: newest under auto_round_kernel/ark-xbuild) +# BENCH_ARGS extra args passed to bench_sparse_topk.py +# (e.g. "--seq-len 32768 --topk 0.5 --iters 3 --tensor-layout HND") +# +# PREREQUISITES +# - oneAPI 2026.1 runtime (sourced from /opt/intel/oneapi/setvars.sh) +# - Python venv at .venv/bin/python (PyTorch 2.13.0+xpu) +# - a rebuilt extension with the sage_sparse binding under +# auto_round_kernel/ark-xbuild/ (on `main`: rebuild after `git checkout main`) +# - a free GPU (pick via ZE_AFFINITY_MASK_VALUE; check `xpu-smi ps` first) +# +# IMPORTANT +# The default preprocess backend is triton-xpu (via "auto"), which is faster +# than torch. On some level-zero drivers triton's JIT emitted SPIR-V that the +# runtime rejected ("InvalidModule: ... unknown extension +# 'SPV_INTEL_predicated_io'); that is fixed by auto_round_kernel/_xpu_triton_compat.py +# (forces has_predicated_io off), applied when the triton preprocess loads. +# If you still hit the SPIR-V error, force the torch backend: +# export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch +# +# BENCHMARK CONFIG (bench_sparse_topk.py defaults on `main`) +# dtype=fp16 batch=1 num_heads_q/kv=40 head_dim=128 qtile=256 +# seq_len=[32768, 75600] tensor_layout=[HND, NHD] topk=[0.5, 0.25, 0.125] +# warmup=2 iters=3 +# +# NOTE +# First call per process pays a ~30s SYCL JIT for the sparse kernels; the full +# sweep takes roughly 15-25 minutes on one GPU. + +set -euo pipefail + +SCRIPT_PATH="$(readlink -f "$0")" +REPO_ROOT="$(cd "$(dirname "${SCRIPT_PATH}")/.." && pwd)" +PYTHON_BIN="${REPO_ROOT}/.venv/bin/python" +OUTPUT_DIR="${OUTPUT_DIR:-${REPO_ROOT}/benchmarks/results}" +ZE_AFFINITY_MASK_VALUE="${ZE_AFFINITY_MASK_VALUE:-6}" +XPU_SO="${XPU_SO:-}" +BENCH_ARGS="${BENCH_ARGS:-}" + +cd "${REPO_ROOT}" + +# Re-exec under the render/video groups if this shell does not already have them. +if [[ "${1:-}" == "--inner" ]]; then + shift +elif command -v sg >/dev/null 2>&1; then + current_groups="$(id -nG || true)" + if [[ ! " ${current_groups} " =~ [[:space:]]render[[:space:]] ]] || [[ ! " ${current_groups} " =~ [[:space:]]video[[:space:]] ]]; then + exec sg render -c "sg video -c '${SCRIPT_PATH} --inner'" + fi +fi + +# oneAPI's setvars.sh is not compatible with `set -u` in this environment. +set +u +source /opt/intel/oneapi/setvars.sh --force >/dev/null 2>&1 +set -u + +export MKLROOT=/opt/intel/oneapi/mkl/2026.1 +export ZE_AFFINITY_MASK="${ZE_AFFINITY_MASK_VALUE}" +# Required: the triton-xpu preprocess backend is rejected by the runtime on this +# machine (SPV_INTEL_predicated_io); force the torch backend. +# export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch + +if [[ -z "${XPU_SO}" ]]; then + XPU_SO="$(find "${REPO_ROOT}/auto_round_kernel/ark-xbuild" -maxdepth 1 -name 'auto_round_kernel_xpu*.so' | sort | tail -n 1)" +fi +if [[ -z "${XPU_SO}" ]]; then + echo "error: no auto_round_kernel_xpu*.so found under auto_round_kernel/ark-xbuild" >&2 + exit 1 +fi + +mkdir -p "${OUTPUT_DIR}" +stamp="$(date +%Y%m%d_%H%M%S)" +out_csv="${OUTPUT_DIR}/sparse_sagev1_${stamp}.csv" +out_log="${OUTPUT_DIR}/sparse_sagev1_${stamp}.log" + +echo "XPU process snapshot:" +xpu-smi ps || true +echo +echo "Running sparse SAGE v1 SDPA benchmark on device ${ZE_AFFINITY_MASK}..." +echo "Using XPU extension: ${XPU_SO}" +echo "CSV: ${out_csv}" +echo "Log: ${out_log}" +echo + +# shellcheck disable=SC2086 +"${PYTHON_BIN}" benchmarks/bench_sparse_topk.py \ + --xpu-so "${XPU_SO}" \ + --output-csv "${out_csv}" \ + ${BENCH_ARGS} 2>&1 | tee "${out_log}" From de2eca03c2402ed32f72ca05e2de87f0fa6af8a9 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 11:39:12 +0800 Subject: [PATCH 15/42] fix: work around triton SPV_INTEL_predicated_io on Intel XPU triton 3.7.x enables has_predicated_io for non-LTS Intel GPU drivers and emits the SPV_INTEL_predicated_io SPIR-V extension. Some level-zero loaders (e.g. 1.13.35563) reject that extension at kernel load time, aborting every triton kernel launch with 'InvalidModule: ... unknown extension'. Since it is not a catchable Python exception, the torch preprocess fallback never ran and the whole benchmark died. Add auto_round_kernel/_xpu_triton_compat.py which patches the intel triton backend to force has_predicated_io off (standard predicated loads instead), and apply it when the triton preprocess module loads. The triton-xpu preprocess backend now works and is faster than torch (seq 32768/50% e2e: 327ms -> 206ms). --- .../auto_round_kernel/_xpu_triton_compat.py | 49 +++++++++++++++++++ .../sparge_preprocess_triton.py | 4 ++ 2 files changed, 53 insertions(+) create mode 100644 auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py diff --git a/auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py b/auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py new file mode 100644 index 0000000000..f86e7f5763 --- /dev/null +++ b/auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py @@ -0,0 +1,49 @@ +# # Copyright (C) 2026 Intel Corporation +# # SPDX-License-Identifier: Apache-2.0 + +"""Workarounds for the Intel XPU triton backend on this platform. + +Triton 3.7.x enables ``has_predicated_io`` for non-LTS Intel GPU drivers and then +emits the ``SPV_INTEL_predicated_io`` SPIR-V extension in its JIT kernels. Some +level-zero loaders (e.g. 1.13.35563) reject that extension at kernel-load time:: + + InvalidModule: Invalid SPIR-V module: input SPIR-V module uses unknown + extension 'SPV_INTEL_predicated_io' + +which aborts any triton kernel launch and kills the process (it is not a +catchable Python exception, so the torch preprocess fallback never runs). + +The workaround forces ``has_predicated_io`` off so triton emits standard +(non-extension) predicated loads/stores. This disables a minor codegen +optimization on every XPU driver, but the ark triton preprocess kernels are small +and the trade-off is only safe correctness on the affected drivers. +""" + +import logging + +logger = logging.getLogger(__name__) + +_APPLIED = False + + +def apply_xpu_triton_workarounds() -> None: + """Patch triton's Intel compiler so JIT kernels avoid the rejected SPIR-V extension.""" + global _APPLIED + if _APPLIED: + return + try: + import triton.backends.intel.compiler as _intel_compiler + except ImportError: + # No intel triton backend (e.g. stock triton); nothing to patch. + return + + _orig_parse_target = _intel_compiler.XPUBackend.parse_target + + def _patched_parse_target(self, tgt_prop): + dev_prop = _orig_parse_target(self, tgt_prop) + dev_prop["has_predicated_io"] = False + return dev_prop + + _intel_compiler.XPUBackend.parse_target = _patched_parse_target + _APPLIED = True + logger.info("Applied XPU triton workaround: has_predicated_io forced off (SPV_INTEL_predicated_io)") diff --git a/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py b/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py index d18eab1d71..420529f0b9 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py +++ b/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py @@ -10,6 +10,10 @@ import triton import triton.language as tl +from ._xpu_triton_compat import apply_xpu_triton_workarounds + +apply_xpu_triton_workarounds() + logger = logging.getLogger(__name__) _TRITON_FALLBACK_WARNING_LOGGED = False From 31fad6e30ddf60cf1c918423e13b3a08cedf5219 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 13:17:38 +0800 Subject: [PATCH 16/42] docs: default BF16 benchmark runner to triton preprocess backend run_bf16_sparse_bench.sh now uses the triton_xpu preprocess backend by default (override via SPARGE_PREPROCESS_BACKEND=torch), enabled by the SPV_INTEL_predicated_io workaround in _xpu_triton_compat. This lifts BF16 sparse e2e speedup vs dense torch SDPA to 1.1-1.3x at 50% selection and ~4x at 12.5%. Update the speedup chart with the triton-backend results. --- .../ark/bf16_sparse_speedup_vs_dense_sdpa.png | Bin 0 -> 157588 bytes .../ark/tools/run_bf16_sparse_bench.sh | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 auto_round_extension/ark/bf16_sparse_speedup_vs_dense_sdpa.png diff --git a/auto_round_extension/ark/bf16_sparse_speedup_vs_dense_sdpa.png b/auto_round_extension/ark/bf16_sparse_speedup_vs_dense_sdpa.png new file mode 100644 index 0000000000000000000000000000000000000000..d8bd6b2c0f19613be9a5ceb709c47db2d01cc883 GIT binary patch literal 157588 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 Date: Thu, 6 Aug 2026 15:58:27 +0800 Subject: [PATCH 17/42] feat: add independent native-precision sparse SDPA kernel path Wire up the dormant SPARSESDPAFwdMainloop into a new SparseSDPAConfig with ElementQ-aware (bf16/fp16) MMA, plus launchers, a wrapper, declarations, and a sage_sparse_sdpa pybind. Native-precision path applies the softmax scale directly and carries no INT8 dequant baggage, unlike the shared sparse-SAGE path. --- .../ark/auto_round_kernel/ark.cpp | 93 +++++ .../auto_round_kernel/sdpa_sparse_sdpa.cpp | 330 ++++++++++++++++++ .../wrapper/include/sycl_tla_common.hpp | 48 +++ .../wrapper/include/sycl_tla_sdpa_sparse.hpp | 166 +++++++++ 4 files changed, 637 insertions(+) create mode 100644 auto_round_extension/ark/auto_round_kernel/sdpa_sparse_sdpa.cpp diff --git a/auto_round_extension/ark/auto_round_kernel/ark.cpp b/auto_round_extension/ark/auto_round_kernel/ark.cpp index 20cd9d6974..57dd6ecb7d 100755 --- a/auto_round_extension/ark/auto_round_kernel/ark.cpp +++ b/auto_round_extension/ark/auto_round_kernel/ark.cpp @@ -537,6 +537,98 @@ static void sage_sparse_bf16(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_p throw std::invalid_argument("ark::sage_sparse_bf16: unsupported head_dim; supported values are 64 and 128"); } +static void sage_sparse_sdpa(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_ptr V, torch_ptr O, torch_ptr mask, + torch_ptr lut, torch_ptr valid_block_num, int num_q_blocks, int num_k_blocks, + int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, int q_stride_b, + int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, + int v_stride_s, int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, + int o_stride_h, int o_stride_b, int q_dtype, int batch, int num_heads_q, + int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (q_dtype != (int)FlashAttnDtype::FP16 && q_dtype != (int)FlashAttnDtype::BF16) { + throw std::invalid_argument("ark::sage_sparse_sdpa: q_dtype must be FP16 or BF16"); + } + if (mask && is_causal) { + throw std::invalid_argument("ark::sage_sparse_sdpa: mask and is_causal cannot both be set"); + } + if (!lut || !valid_block_num) { + throw std::invalid_argument("ark::sage_sparse_sdpa: lut and valid_block_num must be provided"); + } + auto matches_block_size = [](int seq_len, int num_blocks, int block_size) { + return block_size > 0 && num_blocks == ((seq_len + block_size - 1) / block_size); + }; + const bool key_block_is_64 = matches_block_size(seq_len_kv, num_k_blocks, 64); + if (!key_block_is_64) { + throw std::invalid_argument("ark::sage_sparse_sdpa: only key block size 64 is supported"); + } + const bool is_bf16 = (q_dtype == (int)FlashAttnDtype::BF16); + if (head_dim == 64) { + if (!matches_block_size(seq_len_q, num_q_blocks, 64)) { + throw std::invalid_argument("ark::sage_sparse_sdpa: head_dim=64 requires query block size 64"); + } + if (is_bf16) { + ark::sdpa_impl_bf16_sparse_sdpa_d64( + (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, + (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, + q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, + seq_len_kv, head_dim, softmax_scale, is_causal); + } else { + ark::sdpa_impl_fp16_sparse_sdpa_d64( + (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, + (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, + q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, + seq_len_kv, head_dim, softmax_scale, is_causal); + } + return; + } + if (head_dim == 128) { + if (matches_block_size(seq_len_q, num_q_blocks, 256)) { + if (q_tile_override != 256) { + throw std::invalid_argument( + "ark::sage_sparse_sdpa: head_dim=128 query block size 256 requires q_tile_override=256"); + } + if (is_bf16) { + ark::sdpa_impl_bf16_sparse_sdpa_qtile256_row64k( + (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, + (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, + q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, + seq_len_kv, head_dim, softmax_scale, is_causal); + } else { + ark::sdpa_impl_fp16_sparse_sdpa_qtile256_row64k( + (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, + (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, + q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, + seq_len_kv, head_dim, softmax_scale, is_causal); + } + return; + } + if (matches_block_size(seq_len_q, num_q_blocks, 64)) { + if (is_bf16) { + ark::sdpa_impl_bf16_sparse_sdpa_row_linear( + (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, + (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, + q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, + seq_len_kv, head_dim, softmax_scale, is_causal); + } else { + ark::sdpa_impl_fp16_sparse_sdpa_row_linear( + (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, + (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, + q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, + seq_len_kv, head_dim, softmax_scale, is_causal); + } + return; + } + throw std::invalid_argument("ark::sage_sparse_sdpa: head_dim=128 supports query block sizes 64 and 256 only"); + } + throw std::invalid_argument("ark::sage_sparse_sdpa: unsupported head_dim; supported values are 64 and 128"); +} + static void moe_gemm_wrapper(torch_ptr stream, torch_ptr activations, torch_ptr weights, torch_ptr scales, torch_ptr outputs, int dtype, int N, int K, torch_ptr num_tokens_per_expert, int num_experts) { @@ -844,6 +936,7 @@ PYBIND11_MODULE(PY_NAME, m) { pybind11::arg("tensor_layout"), pybind11::arg("lse") = 0); m.def("sage_sparse", &ark::sage_sparse); m.def("sage_sparse_bf16", &ark::sage_sparse_bf16); + m.def("sage_sparse_sdpa", &ark::sage_sparse_sdpa); // Low-level SAGE PVi8 API: input Q/K/V are pre-quantized int8 with qscale/kscale/vscale. m.def("sage_pvi8", &ark::sage_pvi8, pybind11::arg("stream"), pybind11::arg("Q"), pybind11::arg("K"), pybind11::arg("V"), pybind11::arg("O"), pybind11::arg("mask"), diff --git a/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_sdpa.cpp b/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_sdpa.cpp new file mode 100644 index 0000000000..2a69823c51 --- /dev/null +++ b/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_sdpa.cpp @@ -0,0 +1,330 @@ +// Copyright (c) 2026 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Independent native-precision sparse SDPA path (BF16 + FP16). This dispatches to +// the sparse SDPA mainloop (SPARSESDPAFwdMainloop via SparseSDPAConfig), separate +// from the INT8-centric sparse SAGE path in sdpa_sparse.cpp / sdpa_sparse_bf16.cpp. + +#if defined(ARK_XPU) && defined(ARK_SYCL_TLA) + +#include +#include +#include "bestla/bestla.h" + +#include +#include "sycl_tla_sdpa_sparse.hpp" + +namespace ark { + +namespace detail = sparse_detail; + +namespace { + +using KernelLauncher = int (*)(detail::Options const& options); + +int launch_prefill_kernel_bf16_128_sparse_sdpa(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_128(options); +} + +int launch_prefill_kernel_bf16_128_sparse_sdpa_qtile64(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_128_qtile64< + cute::bfloat16_t, cute::bfloat16_t, cute::bfloat16_t>(options); +} + +int launch_prefill_kernel_bf16_64_sparse_sdpa(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_64(options); +} + +int launch_prefill_kernel_f16_128_sparse_sdpa(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_128(options); +} + +int launch_prefill_kernel_f16_128_sparse_sdpa_qtile64(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_128_qtile64(options); +} + +int launch_prefill_kernel_f16_64_sparse_sdpa(detail::Options const& options) { + return detail::launch_sparse_sdpa_prefill_kernel_64(options); +} + +KernelLauncher select_sparse_sdpa_prefill_launcher(BTLA_DTYPE q_dtype, int head_dim, int q_tile_override) { + switch (head_dim) { + case 128: + if (q_tile_override == 64) { + return q_dtype == BTLA_DTYPE::BF16 ? launch_prefill_kernel_bf16_128_sparse_sdpa_qtile64 + : launch_prefill_kernel_f16_128_sparse_sdpa_qtile64; + } + if (q_tile_override != 0 && q_tile_override != 256) return nullptr; + return q_dtype == BTLA_DTYPE::BF16 ? launch_prefill_kernel_bf16_128_sparse_sdpa + : launch_prefill_kernel_f16_128_sparse_sdpa; + case 64: + if (q_tile_override != 0 && q_tile_override != 64 && q_tile_override != 128) return nullptr; + return q_dtype == BTLA_DTYPE::BF16 ? launch_prefill_kernel_bf16_64_sparse_sdpa + : launch_prefill_kernel_f16_64_sparse_sdpa; + default: + return nullptr; + } +} + +detail::Options make_common_options(void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, int q_stride_s, + int q_stride_d, int q_stride_h, int q_stride_b, int k_stride_s, int k_stride_d, + int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, int v_stride_h, + int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, + int batch, int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, + int head_dim, float softmax_scale, bool is_causal) { + if (q_stride_d != 1 || k_stride_d != 1 || v_stride_d != 1 || o_stride_d != 1) { + throw std::invalid_argument("make_common_options: head-dim stride must be 1 for Q/K/V/O"); + } + detail::Options options; + options.q = Q_ptr; + options.k = K_ptr; + options.v = V_ptr; + options.mask = mask; + options.o = O_ptr; + options.use_tensor_strides = true; + options.q_stride_s = q_stride_s; + options.q_stride_d = q_stride_d; + options.q_stride_h = q_stride_h; + options.q_stride_b = q_stride_b; + options.k_stride_s = k_stride_s; + options.k_stride_d = k_stride_d; + options.k_stride_h = k_stride_h; + options.k_stride_b = k_stride_b; + options.v_stride_d = v_stride_d; + options.v_stride_s = v_stride_s; + options.v_stride_h = v_stride_h; + options.v_stride_b = v_stride_b; + options.o_stride_s = o_stride_s; + options.o_stride_d = o_stride_d; + options.o_stride_h = o_stride_h; + options.o_stride_b = o_stride_b; + options.batch = batch; + options.num_heads_q = num_heads_q; + options.num_heads_kv = num_heads_kv; + options.seq_len_qo = seq_len_q; + options.seq_len_kv = seq_len_kv; + options.head_size_qk = head_dim; + options.head_size_vo = head_dim; + options.softmax_scale = softmax_scale; + options.is_causal = is_causal; + return options; +} + +void sparse_sdpa_prefill(sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, + void* valid_block_num, int num_q_blocks, int num_k_blocks, int q_tile_override, + int q_stride_s, int q_stride_d, int q_stride_h, int q_stride_b, int k_stride_s, + int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, + int o_stride_b, int batch, int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, + int head_dim, float softmax_scale, bool is_causal, BTLA_DTYPE q_dtype, + int sparse_q_block_size = 0) { + const int effective_q_tile_override = + (head_dim == 128 && q_tile_override == 0) ? 64 : ((head_dim == 64 && q_tile_override == 0) ? 64 : q_tile_override); + detail::Options options = + make_common_options(Q_ptr, K_ptr, V_ptr, O_ptr, mask, q_stride_s, q_stride_d, q_stride_h, q_stride_b, + k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, + v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, + num_heads_kv, seq_len_q, seq_len_kv, head_dim, softmax_scale, is_causal); + // Native-precision path: no INT8 dequant scales, softmax scale applied directly. + options.scale_block_size = 0; + options.sparse_q_block_size = sparse_q_block_size; + options.q_tile_override = effective_q_tile_override; + options.qscale = nullptr; + options.kscale = nullptr; + options.vscale = nullptr; + options.lut = static_cast(lut); + options.valid_block_num = static_cast(valid_block_num); + options.num_q_blocks = num_q_blocks; + options.num_k_blocks = num_k_blocks; + compat::set_default_queue(*q); + + KernelLauncher launcher = select_sparse_sdpa_prefill_launcher(q_dtype, head_dim, effective_q_tile_override); + if (launcher == nullptr) { + throw std::runtime_error("Unsupported sparse_sdpa_prefill config"); + } + + launcher(options); +} + +} // namespace + +void sdpa_impl_bf16_sparse_sdpa_d64( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (mask && is_causal) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_d64: mask and is_causal cannot both be set"); + } + if (seq_len_q <= 0 || seq_len_kv <= 0) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_d64: seq_len_q and seq_len_kv must be greater than 0"); + } + if (lut == nullptr || valid_block_num == nullptr) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_d64: lut and valid_block_num must be provided"); + } + if (num_q_blocks <= 0 || num_k_blocks <= 0) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_d64: num_q_blocks and num_k_blocks must be greater than 0"); + } + if (head_dim != 64) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_d64: head_dim must be 64"); + } + + sparse_sdpa_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, + q_tile_override, q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, + k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, + o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, + softmax_scale, is_causal, BTLA_DTYPE::BF16, /*sparse_q_block_size=*/64); +} + +void sdpa_impl_fp16_sparse_sdpa_d64( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (mask && is_causal) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_d64: mask and is_causal cannot both be set"); + } + if (seq_len_q <= 0 || seq_len_kv <= 0) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_d64: seq_len_q and seq_len_kv must be greater than 0"); + } + if (lut == nullptr || valid_block_num == nullptr) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_d64: lut and valid_block_num must be provided"); + } + if (num_q_blocks <= 0 || num_k_blocks <= 0) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_d64: num_q_blocks and num_k_blocks must be greater than 0"); + } + if (head_dim != 64) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_d64: head_dim must be 64"); + } + + sparse_sdpa_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, + q_tile_override, q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, + k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, + o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, + softmax_scale, is_causal, BTLA_DTYPE::F16, /*sparse_q_block_size=*/64); +} + +void sdpa_impl_bf16_sparse_sdpa_row_linear( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (q_tile_override != 0 && q_tile_override != 64) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_row_linear: q_tile_override must be 0 or 64"); + } + if (mask && is_causal) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_row_linear: mask and is_causal cannot both be set"); + } + if (seq_len_q <= 0 || seq_len_kv <= 0) { + throw std::invalid_argument( + "sdpa_impl_bf16_sparse_sdpa_row_linear: seq_len_q and seq_len_kv must be greater than 0"); + } + if (lut == nullptr || valid_block_num == nullptr) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_row_linear: lut and valid_block_num must be provided"); + } + if (num_q_blocks <= 0 || num_k_blocks <= 0) { + throw std::invalid_argument( + "sdpa_impl_bf16_sparse_sdpa_row_linear: num_q_blocks and num_k_blocks must be greater than 0"); + } + + sparse_sdpa_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, 64, + q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, k_stride_h, + k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, o_stride_h, + o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, softmax_scale, + is_causal, BTLA_DTYPE::BF16, /*sparse_q_block_size=*/64); +} + +void sdpa_impl_fp16_sparse_sdpa_row_linear( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (q_tile_override != 0 && q_tile_override != 64) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_row_linear: q_tile_override must be 0 or 64"); + } + if (mask && is_causal) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_row_linear: mask and is_causal cannot both be set"); + } + if (seq_len_q <= 0 || seq_len_kv <= 0) { + throw std::invalid_argument( + "sdpa_impl_fp16_sparse_sdpa_row_linear: seq_len_q and seq_len_kv must be greater than 0"); + } + if (lut == nullptr || valid_block_num == nullptr) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_row_linear: lut and valid_block_num must be provided"); + } + if (num_q_blocks <= 0 || num_k_blocks <= 0) { + throw std::invalid_argument( + "sdpa_impl_fp16_sparse_sdpa_row_linear: num_q_blocks and num_k_blocks must be greater than 0"); + } + + sparse_sdpa_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, 64, + q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, k_stride_h, + k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, o_stride_h, + o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, softmax_scale, + is_causal, BTLA_DTYPE::F16, /*sparse_q_block_size=*/64); +} + +void sdpa_impl_bf16_sparse_sdpa_qtile256_row64k( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (q_tile_override != 256) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_qtile256_row64k: q_tile_override must be 256"); + } + if (head_dim != 128) { + throw std::invalid_argument("sdpa_impl_bf16_sparse_sdpa_qtile256_row64k: head_dim must be 128"); + } + + sparse_sdpa_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, + q_tile_override, q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, + k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, + o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, + softmax_scale, is_causal, BTLA_DTYPE::BF16, /*sparse_q_block_size=*/256); +} + +void sdpa_impl_fp16_sparse_sdpa_qtile256_row64k( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { + if (q_tile_override != 256) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_qtile256_row64k: q_tile_override must be 256"); + } + if (head_dim != 128) { + throw std::invalid_argument("sdpa_impl_fp16_sparse_sdpa_qtile256_row64k: head_dim must be 128"); + } + + sparse_sdpa_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, + q_tile_override, q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, + k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, + o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, + softmax_scale, is_causal, BTLA_DTYPE::F16, /*sparse_q_block_size=*/256); +} + +} // namespace ark + +#endif // ARK_XPU && ARK_SYCL_TLA diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp index c6d6fa9e00..215213b0e0 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp @@ -279,6 +279,54 @@ void sdpa_impl_bf16_sparse_qtile256_row64k( int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, bool is_causal); + +void sdpa_impl_bf16_sparse_sdpa_d64( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal); + +void sdpa_impl_fp16_sparse_sdpa_d64( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal); + +void sdpa_impl_bf16_sparse_sdpa_row_linear( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal); + +void sdpa_impl_fp16_sparse_sdpa_row_linear( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal); + +void sdpa_impl_bf16_sparse_sdpa_qtile256_row64k( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal); + +void sdpa_impl_fp16_sparse_sdpa_qtile256_row64k( + sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, + int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, + int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, + int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, + int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal); #endif // ARK_SYCL_TLA } // namespace ark diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp index 3c935e56d1..1e5e690830 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp @@ -35,6 +35,7 @@ #if defined(ARK_SDPA_ENABLE_SPARSE) #include "stla/xe_sparse_fmha_fwd_epilogue.hpp" #include "stla/xe_sparse_sagev1_fwd_mainloop.hpp" +#include "stla/xe_sparse_sdpa_fwd_mainloop.hpp" #include "stla/xe_sparse_sage_fwd_kernel.hpp" #endif #include "flash_attention_v2/collective/fmha_fusion.hpp" @@ -1048,6 +1049,122 @@ struct SparseSageConfig { return run(options); } }; + +// Independent native-precision sparse path built on the dense SDPA mainloop +// (SPARSESDPAFwdMainloop). Unlike SparseSageConfig it does not dequantize INT8 +// Q/K: Q/K/V are bf16/fp16 and the softmax applies `params.scale` directly. +template , typename StrideK = Stride, + typename StrideV = Stride<_1, int, int, int>, typename StrideO = Stride, + typename GmemTiledCopyQ = void, typename GmemTiledCopyK = void, typename GmemTiledCopyV = void, + typename GmemTiledCopyO = void> +struct SparseSDPAConfig { + static constexpr int SGTileQ = get<0>(shape_div(TileShapeQK{}, shape(SubgroupLayoutQK{})))(); + // Native-precision Q*K MMA: bf16 -> float/bf16 DPAS, fp16 -> float/half DPAS. + using MMAOperation = cute::conditional_t< + is_void_v, + typename cute::conditional_t< + cute::is_same_v || cute::is_same_v, + XE_DPAS_TT, + XE_DPAS_TT>, + MMAOperation_>; + using MMAOperationPV = cute::conditional_t, + XE_DPAS_TT, MMAOperation_>; + using SubgroupLayoutPV = + cute::conditional_t, + decltype(cutlass::fmha::collective::get_sg_layout_pv(SubgroupLayoutQK{})), SubgroupLayoutPV_>; + + template + static int run(const Options& options) { + cutlass::KernelHardwareInfo hw_info; + hw_info.sm_count = cutlass::KernelHardwareInfo::query_device_multiprocessor_count(hw_info.device_id); + using ProblemShapeType = cutlass::fmha::kernel::SparseSageProblemShape; + using TiledMMAQK = typename TiledMMAHelper, Layout, SubgroupLayoutQK>::TiledMMA; + using TiledMMAPV = + typename TiledMMAHelper, Layout, SubgroupLayoutPV>::TiledMMA; + static_assert(get<0>(TileShapeOutput{}) == get<0>(TileShapePV{}), + "Output tile and P*V tile have different sizes in Q dimension"); + constexpr int VTiles = get<1>(TileShapeOutput{}) / get<1>(TileShapePV{}); + auto make_dummy_tensor = [&](auto val, auto stride) { + return make_tensor(make_gmem_ptr(&val), make_layout(repeat>(1), stride)); + }; + using TensorQ = decltype(make_dummy_tensor(ElementQ{}, StrideQ{})); + using TensorK = decltype(make_dummy_tensor(ElementK{}, StrideK{})); + using TensorV = decltype(make_dummy_tensor(ElementV{}, StrideV{})); + using TensorO = decltype(make_dummy_tensor(ElementO{}, StrideO{})); + using TensorK_cache = TensorK; + using TensorV_cache = TensorV; + using GmemTiledCopyK_cache = GmemTiledCopyK; + using GmemTiledCopyV_cache = GmemTiledCopyV; + using MainloopDispatchPolicy = cutlass::sdpa::XeDefault; + if constexpr (Causal) { + using CollectiveMainloop = + cutlass::fmha::collective::SPARSESDPAFwdMainloop; + using CollectiveEpilogue = + cutlass::fmha::collective::SparseFMHAFwdEpilogue; + using FMHAKernel = cutlass::fmha::kernel::XeSparseSageFwdKernel; + SageKernelRunner runner; + CUTLASS_CHECK(runner.run(options, hw_info)); + } else { + if (options.mask) { + using CollectiveMainloop = + cutlass::fmha::collective::SPARSESDPAFwdMainloop; + using CollectiveEpilogue = + cutlass::fmha::collective::SparseFMHAFwdEpilogue; + using FMHAKernel = cutlass::fmha::kernel::XeSparseSageFwdKernel; + SageKernelRunner runner; + CUTLASS_CHECK(runner.run(options, hw_info)); + } else { + using CollectiveMainloop = + cutlass::fmha::collective::SPARSESDPAFwdMainloop; + using CollectiveEpilogue = + cutlass::fmha::collective::SparseFMHAFwdEpilogue; + using FMHAKernel = cutlass::fmha::kernel::XeSparseSageFwdKernel; + SageKernelRunner runner; + CUTLASS_CHECK(runner.run(options, hw_info)); + } + } + return 0; + } + + static int run(const Options& options) { + if (options.use_paged_kv || options.varlen) { + throw std::runtime_error("Sparse SDPA does not support paged KV or varlen in v1"); + } + if (options.block_K != nullptr || options.block_V != nullptr) { + if (options.seq_len_kv_cache <= 0 || options.seq_len_qo != 1) { + throw std::runtime_error("Sparse SDPA only supports block_K/block_V for seq_len_q == 1 cached decode in v1"); + } + } else if (options.seq_len_kv_cache > 0) { + throw std::runtime_error("Sparse SDPA cached decode requires block_K/block_V cache tensors"); + } + if (options.lut == nullptr || options.valid_block_num == nullptr) { + throw std::runtime_error("Sparse SDPA requires lut and valid_block_num"); + } + if (options.seq_len_kv_cache > 0) { + return run(options); + } + return run(options); + } +}; #endif // ARK_SDPA_ENABLE_SPARSE // ======================================================================== @@ -1188,6 +1305,55 @@ inline int launch_sparse_sage_prefill_kernel_64(Options const& options) { SubgroupLayoutPV, PipelineStages, false, ElementQ, ElementK, ElementV, ElementO>::run(options); } + +template +inline int launch_sparse_sdpa_prefill_kernel_128(Options const& options) { + constexpr int PipelineStages = 2; + using ShapeQK = Shape<_256, _64, _32>; + using ShapePV = Shape<_256, _32, _64>; + using ShapeOut = Shape<_256, _128>; + using SubgroupLayoutQK = Layout>; + using ShapeQK1 = Shape<_256, _64, _32>; + using ShapePV1 = Shape<_256, _32, _64>; + using ShapeOut1 = Shape<_256, _128>; + using SubgroupLayoutQK1 = Layout>; + return options.is_causal ? SparseSDPAConfig::run(options) + : SparseSDPAConfig::run(options); +} + +template +inline int launch_sparse_sdpa_prefill_kernel_128_qtile64(Options const& options) { + constexpr int PipelineStages = 2; + using ShapeQK = Shape<_64, _64, _32>; + using ShapePV = Shape<_64, _32, _64>; + using ShapeOut = Shape<_64, _128>; + using SubgroupLayoutQK = Layout>; + using ShapeQK1 = Shape<_64, _64, _32>; + using ShapePV1 = Shape<_64, _32, _64>; + using ShapeOut1 = Shape<_64, _128>; + using SubgroupLayoutQK1 = Layout>; + return options.is_causal ? SparseSDPAConfig::run(options) + : SparseSDPAConfig::run(options); +} + +template +inline int launch_sparse_sdpa_prefill_kernel_64(Options const& options) { + constexpr int PipelineStages = 2; + using ShapeQK = Shape<_128, _64, _32>; + using ShapePV = Shape<_128, _32, _64>; + using ShapeOut = Shape<_128, _64>; + using SubgroupLayoutQK = Layout>; + using SubgroupLayoutPV = void; + return options.is_causal + ? SparseSDPAConfig::run(options) + : SparseSDPAConfig::run(options); +} #endif // ARK_SDPA_ENABLE_SPARSE #if defined(ARK_SDPA_ENABLE_DENSE) From 2127635a4c3c77e940acc43b98b4cd2ef76f43d2 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 15:58:27 +0800 Subject: [PATCH 18/42] feat: sparse-SDPA Python wrappers, switch sage_sparse_bf16, benchmark modes Add sage_sparse_sdpa and sparge_sage2_attn_meansim_topk_xpu_sdpa (bf16+fp16), route sage_sparse_bf16 through the sparse-SDPA path, and add sparse_sdpa_* modes to the benchmark. --- .../ark/auto_round_kernel/__init__.py | 2 + .../ark/auto_round_kernel/sparse_attention.py | 183 ++++++++++++++++-- .../ark/benchmarks/bench_sparse_topk.py | 111 ++++++++++- 3 files changed, 280 insertions(+), 16 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/__init__.py b/auto_round_extension/ark/auto_round_kernel/__init__.py index 93e5244e29..b625cfd741 100644 --- a/auto_round_extension/ark/auto_round_kernel/__init__.py +++ b/auto_round_extension/ark/auto_round_kernel/__init__.py @@ -1293,10 +1293,12 @@ def sageattn( _to_hnd, sage_sparse, sage_sparse_bf16, + sage_sparse_sdpa, sparge_block_map_to_mask, sparge_preprocess_topk, sparge_sage2_attn_meansim_topk_xpu, sparge_sage2_attn_meansim_topk_xpu_bf16, + sparge_sage2_attn_meansim_topk_xpu_sdpa, ) diff --git a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py index 2342a10707..fff58426a3 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py +++ b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py @@ -215,14 +215,60 @@ def sage_sparse_bf16( sparse_k_block_tokens: int | None = None, tensor_layout: str = "HND", ) -> torch.Tensor: - """Low-level sparse BF16 attention routed by sparse LUT metadata.""" + """Low-level sparse BF16 attention routed by sparse LUT metadata. + + Dispatched through the independent native-precision sparse-SDPA path + (``sage_sparse_sdpa``); kept as a bf16 convenience alias. + """ + if query.dtype != torch.bfloat16 or key.dtype != torch.bfloat16 or value.dtype != torch.bfloat16: + raise ValueError(f"sage_sparse_bf16 requires bfloat16 Q/K/V, got Q={query.dtype}, K={key.dtype}, V={value.dtype}") + return sage_sparse_sdpa( + query, + key, + value, + lut, + valid_block_num, + attn_mask=attn_mask, + dropout_p=dropout_p, + is_causal=is_causal, + scale=scale, + enable_gqa=enable_gqa, + q_tile_override=q_tile_override, + sparse_q_block_tokens=sparse_q_block_tokens, + sparse_k_block_tokens=sparse_k_block_tokens, + tensor_layout=tensor_layout, + ) + + +def sage_sparse_sdpa( + query: torch.Tensor, + key: torch.Tensor, + value: torch.Tensor, + lut: torch.Tensor, + valid_block_num: torch.Tensor, + attn_mask: torch.Tensor | None = None, + dropout_p: float = 0.0, + is_causal: bool = False, + scale: float | None = None, + enable_gqa: bool = False, + q_tile_override: int = 0, + sparse_q_block_tokens: int | None = None, + sparse_k_block_tokens: int | None = None, + tensor_layout: str = "HND", +) -> torch.Tensor: + """Low-level native-precision sparse attention (BF16/FP16) routed by sparse LUT metadata. + + Independent path built on the dense-SDPA sparse mainloop (SparseSDPAConfig). + Unlike ``sage_sparse_bf16`` it does not reuse the INT8-centric SAGE mainloop; + Q/K/V are native BF16/FP16 and the softmax scale is applied directly. + """ del dropout_p, enable_gqa if query.device.type != "xpu": - raise NotImplementedError("sage_sparse_bf16 is only supported on XPU") - if query.dtype != torch.bfloat16 or key.dtype != torch.bfloat16: - raise ValueError(f"Q/K must be bfloat16, got Q={query.dtype}, K={key.dtype}") - if value.dtype != torch.bfloat16: - raise ValueError(f"V must be bfloat16, got {value.dtype}") + raise NotImplementedError("sage_sparse_sdpa is only supported on XPU") + if query.dtype not in (torch.bfloat16, torch.float16): + raise ValueError(f"Q/K/V must be bfloat16 or float16, got {query.dtype}") + if key.dtype != query.dtype or value.dtype != query.dtype: + raise ValueError(f"Q/K/V dtypes must match, got Q={query.dtype}, K={key.dtype}, V={value.dtype}") if lut.dtype != torch.int32 or valid_block_num.dtype != torch.int32: raise ValueError("lut and valid_block_num must be int32 tensors") if lut.device != query.device or valid_block_num.device != query.device: @@ -238,7 +284,7 @@ def sage_sparse_bf16( raise ValueError("K/V shape mismatch") if Dk != D: raise ValueError("Head dim mismatch between Q and K/V") - _validate_gqa_head_config(Hq, Hkv, op_name="sage_sparse_bf16") + _validate_gqa_head_config(Hq, Hkv, op_name="sage_sparse_sdpa") if D not in (64, 128): raise ValueError(f"Unsupported head_dim={D}; supported: 64, 128") effective_sparse_q_block_tokens = 64 if sparse_q_block_tokens is None else int(sparse_q_block_tokens) @@ -264,16 +310,12 @@ def sage_sparse_bf16( if D == 64 and q_tile_override not in (0, 64, 128): raise ValueError( - f"q_tile_override must be one of {{0, 64, 128}} for sage_sparse_bf16 with head_dim=64, got {q_tile_override}" + f"q_tile_override must be one of {{0, 64, 128}} for sage_sparse_sdpa with head_dim=64, got {q_tile_override}" ) - # Native XPU sparse kernel only. The historical dense-mask fallback (rebuild the - # full block map, then run per-head dense sagev1) is removed: it materialized a - # [B, Hq, Sq, Skv] mask and OOM'd at long sequences, and the native kernel now - # covers every supported config. lib = get_lib(query) - if not hasattr(lib, "sage_sparse_bf16"): - raise RuntimeError("Loaded XPU extension does not expose sage_sparse_bf16") + if not hasattr(lib, "sage_sparse_sdpa"): + raise RuntimeError("Loaded XPU extension does not expose sage_sparse_sdpa") effective_q_tile_override = _resolve_sparse_prefill_q_tile_override( head_dim=D, quant_block_size=64, @@ -286,7 +328,8 @@ def sage_sparse_bf16( O = _empty_attention_output( B, Hq, Sq, D, dtype=value.dtype, device=query.device, tensor_layout=tensor_layout ) - lib.sage_sparse_bf16( + q_dtype = 1 if query.dtype == torch.bfloat16 else 0 # FlashAttnDtype: 0=FP16, 1=BF16 + lib.sage_sparse_sdpa( stream, query.data_ptr(), key.data_ptr(), @@ -302,6 +345,7 @@ def sage_sparse_bf16( *_attention_strides_qko(key, tensor_layout), *_attention_strides_v(value, tensor_layout), *_attention_strides_qko(O, tensor_layout), + q_dtype, B, Hq, Hkv, @@ -1602,6 +1646,115 @@ def sparge_sage2_attn_meansim_topk_xpu( return out +def sparge_sage2_attn_meansim_topk_xpu_sdpa( + query: torch.Tensor, + key: torch.Tensor, + value: torch.Tensor, + attn_mask: torch.Tensor | None = None, + dropout_p: float = 0.0, + is_causal: bool = False, + scale: float | None = None, + smooth_k: bool = True, + simthreshd1: float | torch.Tensor = -0.1, + cdfthreshd: float | torch.Tensor | None = None, + topk: float | torch.Tensor = 0.5, + pvthreshd: float | torch.Tensor = 50, + attention_sink: bool = False, + tensor_layout: str = "HND", + output_dtype: torch.dtype | None = None, + return_sparsity: bool = False, + return_metadata: bool = False, + k_quant_granularity: int = 64, + query_tile_tokens: int | None = None, + q_tile_override: int = 0, + sparse_q_block_tokens: int | None = None, + sparse_k_block_tokens: int | None = None, +) -> torch.Tensor | tuple[Any, ...]: + """E2E sparse attention on the independent native-precision (BF16/FP16) SDPA path.""" + if query.device.type != "xpu": + raise NotImplementedError("sparge_sage2_attn_meansim_topk_xpu_sdpa is only supported on XPU") + if dropout_p != 0.0: + raise NotImplementedError("dropout_p must be 0.0 for sparge_sage2_attn_meansim_topk_xpu_sdpa") + if attn_mask is not None and is_causal: + raise ValueError("attn_mask and is_causal cannot both be set") + if query.dtype not in (torch.bfloat16, torch.float16): + raise ValueError( + "sparge_sage2_attn_meansim_topk_xpu_sdpa requires bfloat16 or float16 Q/K/V, " + f"got Q={query.dtype}, K={key.dtype}, V={value.dtype}" + ) + if key.dtype != query.dtype or value.dtype != query.dtype: + raise ValueError(f"Q/K/V dtypes must match, got Q={query.dtype}, K={key.dtype}, V={value.dtype}") + if output_dtype is not None and output_dtype != query.dtype: + raise ValueError(f"output_dtype must match Q dtype in the current implementation, got {output_dtype}") + if pvthreshd not in (None, 50): + warnings.warn("pvthreshd is not supported by the current ARK sparse kernel and is ignored", stacklevel=2) + + B, Hq, Sq, D = _validate_attention_tensor(query, "Q", tensor_layout, expected_dtype=query.dtype) + Bk, Hkv, Skv, Dk = _validate_attention_tensor(key, "K", tensor_layout, expected_dtype=key.dtype) + Bv, Hkv2, Skv2, Dv = _validate_attention_tensor(value, "V", tensor_layout, expected_dtype=value.dtype) + if Bk != B or Bv != B: + raise ValueError("Batch size mismatch between Q/K/V") + if Hkv2 != Hkv or Skv2 != Skv or Dv != Dk: + raise ValueError("K/V shape mismatch") + if Dk != D: + raise ValueError("Head dim mismatch between Q and K/V") + + effective_query_tile_tokens = query_tile_tokens + effective_q_tile_override = q_tile_override + if effective_query_tile_tokens is None and q_tile_override in (64, 128, 256): + effective_query_tile_tokens = q_tile_override + elif effective_query_tile_tokens is not None: + if q_tile_override == 0: + effective_q_tile_override = int(effective_query_tile_tokens) + elif q_tile_override != int(effective_query_tile_tokens): + raise ValueError( + "query_tile_tokens and q_tile_override must match when both are set; " + f"got query_tile_tokens={effective_query_tile_tokens}, q_tile_override={q_tile_override}" + ) + _validate_sparse_q_tile_override_for_head_dim(D, effective_q_tile_override) + + normalized_mask = _normalize_sparse_mask(attn_mask, B, Sq, Skv, query.device) + metadata = sparge_preprocess_topk( + query, + key, + is_causal=is_causal, + smooth_k=smooth_k, + simthreshd1=simthreshd1, + topk=topk, + cdfthreshd=cdfthreshd, + attention_sink=attention_sink, + quant_block_size=64, + tensor_layout=tensor_layout, + k_quant_granularity=k_quant_granularity, + query_tile_tokens=effective_query_tile_tokens, + sparse_q_block_tokens=sparse_q_block_tokens, + sparse_k_block_tokens=sparse_k_block_tokens, + ) + _get_xpu_sparse_kernel_backend() + out = sage_sparse_sdpa( + query, + key, + value, + metadata["lut"], + metadata["valid_block_num"], + attn_mask=normalized_mask, + is_causal=is_causal, + scale=scale, + q_tile_override=effective_q_tile_override, + sparse_q_block_tokens=metadata["sparse_q_block_tokens"], + sparse_k_block_tokens=metadata["sparse_k_block_tokens"], + tensor_layout=tensor_layout, + ) + sparsity_ratio = metadata["stats"]["sparsity_ratio"] + if return_metadata and return_sparsity: + return out, sparsity_ratio, metadata + if return_metadata: + return out, metadata + if return_sparsity: + return out, sparsity_ratio + return out + + def sparge_sage2_attn_meansim_topk_xpu_bf16( query: torch.Tensor, key: torch.Tensor, diff --git a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py index 63eafd4646..ceb34e5588 100644 --- a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py +++ b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py @@ -62,7 +62,10 @@ def _resolve_sparse_binding(args: argparse.Namespace, *, required_symbols: tuple def ensure_sparse_binding(args: argparse.Namespace) -> None: - required_symbols = ("sage_sparse", "sage_sparse_bf16") if args.dtype == "bf16" else ("sage_sparse",) + if args.dtype == "bf16": + required_symbols = ("sage_sparse", "sage_sparse_bf16", "sage_sparse_sdpa") + else: + required_symbols = ("sage_sparse", "sage_sparse_sdpa") ext_path = _resolve_sparse_binding(args, required_symbols=required_symbols) if ext_path is not None: _load_sparse_binding(ext_path, required_symbols=required_symbols) @@ -523,6 +526,10 @@ def summarize_speedups(rows: list[dict[str, object]]) -> list[dict[str, object]] "sparse_bf16_e2e", "sparse_qtile256_row64k_kernel_only", "sparse_qtile256_row64k_e2e", + "sparse_sdpa_bf16_kernel_only", + "sparse_sdpa_bf16_e2e", + "sparse_sdpa_fp16_kernel_only", + "sparse_sdpa_fp16_e2e", }: row["baseline_tflops"] = flops_to_tflops(dense_flops, float(latency_ms)) work_ratio = 1.0 @@ -954,6 +961,108 @@ def run_single_benchmark(args: argparse.Namespace, *, seq_len: int, tensor_layou selected_blocks_per_row=selected_blocks_per_row, ) ) + rows.append( + try_benchmark( + "sparse_sdpa_fp16_kernel_only" if dtype == torch.float16 else "sparse_sdpa_bf16_kernel_only", + lambda preprocess=preprocess: ( + hnd_to_nhd( + ark.sage_sparse_sdpa( + nhd_to_hnd(q_nhd_src), + nhd_to_hnd(k_nhd_src), + nhd_to_hnd(v_nhd_src), + preprocess["lut"], + preprocess["valid_block_num"], + is_causal=args.causal, + scale=scale, + q_tile_override=args.q_tile_override, + sparse_q_block_tokens=preprocess["sparse_q_block_tokens"], + sparse_k_block_tokens=preprocess["sparse_k_block_tokens"], + tensor_layout="HND", + ) + ) + if tensor_layout == "HND" + else ark.sage_sparse_sdpa( + q, + k, + v, + preprocess["lut"], + preprocess["valid_block_num"], + is_causal=args.causal, + scale=scale, + q_tile_override=args.q_tile_override, + sparse_q_block_tokens=preprocess["sparse_q_block_tokens"], + sparse_k_block_tokens=preprocess["sparse_k_block_tokens"], + tensor_layout=tensor_layout, + ) + ), + batch=args.batch, + num_heads_q=args.num_heads_q, + num_heads_kv=args.num_heads_kv, + seq_len=seq_len, + tensor_layout=tensor_layout, + head_dim=args.head_dim, + dtype=dtype, + is_causal=args.causal, + warmup=args.warmup, + iters=args.iters, + requested_topk=topk, + selected_ratio=selected_ratio, + selected_blocks_per_row=selected_blocks_per_row, + ) + ) + rows.append( + try_benchmark( + "sparse_sdpa_fp16_e2e" if dtype == torch.float16 else "sparse_sdpa_bf16_e2e", + lambda topk=topk: ( + hnd_to_nhd( + ark.sparge_sage2_attn_meansim_topk_xpu_sdpa( + nhd_to_hnd(q_nhd_src), + nhd_to_hnd(k_nhd_src), + nhd_to_hnd(v_nhd_src), + is_causal=args.causal, + scale=scale, + smooth_k=True, + simthreshd1=-1.0, + topk=topk, + attention_sink=False, + tensor_layout="HND", + q_tile_override=args.q_tile_override, + sparse_q_block_tokens=args.sparse_q_block_tokens, + sparse_k_block_tokens=args.sparse_k_block_tokens, + ) + ) + if tensor_layout == "HND" + else ark.sparge_sage2_attn_meansim_topk_xpu_sdpa( + q, + k, + v, + is_causal=args.causal, + scale=scale, + smooth_k=True, + simthreshd1=-1.0, + topk=topk, + attention_sink=False, + tensor_layout=tensor_layout, + q_tile_override=args.q_tile_override, + sparse_q_block_tokens=args.sparse_q_block_tokens, + sparse_k_block_tokens=args.sparse_k_block_tokens, + ) + ), + batch=args.batch, + num_heads_q=args.num_heads_q, + num_heads_kv=args.num_heads_kv, + seq_len=seq_len, + tensor_layout=tensor_layout, + head_dim=args.head_dim, + dtype=dtype, + is_causal=args.causal, + warmup=args.warmup, + iters=args.iters, + requested_topk=topk, + selected_ratio=selected_ratio, + selected_blocks_per_row=selected_blocks_per_row, + ) + ) if dtype == torch.bfloat16: rows.append( try_benchmark( From 952ef649734c42726492b38298ebf50d6054a316 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 15:58:27 +0800 Subject: [PATCH 19/42] test: sparse-SDPA correctness tests; fix XPU softmax reference Add run_case_sdpa/run_case_sdpa_full (bf16+fp16 vs dense ref + sparse-SAGE parity + topk=1.0 dense gate). Compute the dense reference on CPU because XPU torch.softmax is numerically broken on large masked tensors (sums to <1), which also un-breaks the existing bf16 qtile256 test case. --- .../test/test_sage_sparse_prefill_e2e.py | 224 +++++++++++++++++- 1 file changed, 215 insertions(+), 9 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py index 7d372a2858..6626731533 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py @@ -119,16 +119,22 @@ def bf16_sparse_reference( scale: float, enable_gqa: bool, ) -> torch.Tensor: - if enable_gqa and query.shape[1] != key.shape[1]: - repeat = query.shape[1] // key.shape[1] - key = key.repeat_interleave(repeat, dim=1) - value = value.repeat_interleave(repeat, dim=1) - - scores = torch.matmul(query.float(), key.float().transpose(-1, -2)) * scale - if attn_mask is not None: - scores = scores + attn_mask.float() + # Run the reference on CPU: torch-xpu's softmax is numerically broken on large + # masked tensors (sums to <1, drops visible entries), which corrupts the reference. + q = query.float().cpu() + k = key.float().cpu() + v = value.float().cpu() + mask = None if attn_mask is None else attn_mask.float().cpu() + if enable_gqa and q.shape[1] != k.shape[1]: + repeat = q.shape[1] // k.shape[1] + k = k.repeat_interleave(repeat, dim=1) + v = v.repeat_interleave(repeat, dim=1) + + scores = torch.matmul(q, k.transpose(-1, -2)) * scale + if mask is not None: + scores = scores + mask probs = torch.softmax(scores, dim=-1) - return torch.matmul(probs, value.float()).to(query.dtype) + return torch.matmul(probs, v).to(query.dtype).to(query.device) def run_case( @@ -342,6 +348,188 @@ def run_case_bf16( ) +def run_case_sdpa( + dtype: torch.dtype, + head_dim: int, + *, + seq_len_q: int = 256, + seq_len_kv: int = 256, + num_heads_q: int = 4, + num_heads_kv: int | None = None, + is_causal: bool = False, + q_tile_override: int = 0, + sparse_q_block_tokens: int | None = None, + sparse_k_block_tokens: int | None = None, +) -> None: + """Validate the independent sparse-SDPA path (bf16/fp16) against the dense + reference and, for bf16, against the sparse-SAGE path (sage_sparse_bf16).""" + ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_bf16", "sage_sparse_sdpa")) + device = torch.device("xpu") + batch = 1 + num_heads_kv = num_heads_q if num_heads_kv is None else num_heads_kv + scale = 1.0 / math.sqrt(head_dim) + query_tile_tokens = q_tile_override or (64 if head_dim == 64 else 256) + k_block_tokens = 64 if sparse_k_block_tokens is None else sparse_k_block_tokens + kv_blocks = (seq_len_kv + k_block_tokens - 1) // k_block_tokens + active_query_tiles = (seq_len_q + query_tile_tokens - 1) // query_tile_tokens + if not is_causal: + per_query_tile_selection = [list(range(max(1, min(kv_blocks, 3)))) for _ in range(active_query_tiles)] + if active_query_tiles > 1 and kv_blocks > 3: + per_query_tile_selection[-1] = list(range(kv_blocks - 3, kv_blocks)) + case_name = f"{dtype}_prefill" + else: + per_query_tile_selection = [list(range(min(kv_blocks, idx + 1))) for idx in range(active_query_tiles)] + case_name = f"{dtype}_prefill_causal" + per_query_tile_selection = _clamp_selected_blocks(kv_blocks, per_query_tile_selection) + + torch.manual_seed(9026 + head_dim + num_heads_q + (num_heads_kv * 13) + seq_len_q + seq_len_kv) + query = torch.randn((batch, num_heads_q, seq_len_q, head_dim), dtype=dtype, device=device) + key = torch.randn((batch, num_heads_kv, seq_len_kv, head_dim), dtype=dtype, device=device) + value = torch.randn((batch, num_heads_kv, seq_len_kv, head_dim), dtype=dtype, device=device) + + effective_sparse_q_block_tokens = 64 if sparse_q_block_tokens is None else sparse_q_block_tokens + effective_sparse_k_block_tokens = 64 if sparse_k_block_tokens is None else sparse_k_block_tokens + lut, valid, dense_mask = build_sparse_metadata_and_mask( + batch, + num_heads_q, + seq_len_q, + 64, + query_tile_tokens, + per_query_tile_selection, + device, + is_causal=is_causal, + sparse_q_block_tokens=effective_sparse_q_block_tokens, + sparse_k_block_tokens=effective_sparse_k_block_tokens, + seq_len_kv=seq_len_kv, + ) + + dense_out = bf16_sparse_reference( + query, + key, + value, + dense_mask, + scale=scale, + enable_gqa=num_heads_q != num_heads_kv, + ) + sparse_out = ark.sage_sparse_sdpa( + query, + key, + value, + lut, + valid, + is_causal=is_causal, + scale=scale, + q_tile_override=q_tile_override, + sparse_q_block_tokens=sparse_q_block_tokens, + sparse_k_block_tokens=sparse_k_block_tokens, + tensor_layout="HND", + ) + torch.xpu.synchronize() + + diff = (dense_out.float() - sparse_out.float()).abs() + max_diff = float(diff.max().cpu()) + mean_diff = float(diff.mean().cpu()) + print( + f"[sage_sparse_sdpa][{case_name}] D={head_dim} Hq={num_heads_q} Hkv={num_heads_kv} " + f"Sq={seq_len_q} Skv={seq_len_kv} max_diff={max_diff:.6f} mean_diff={mean_diff:.6f}" + ) + if max_diff > 2e-2 or mean_diff > 2e-3: + raise RuntimeError( + f"sage_sparse_sdpa mismatch for dtype={dtype}, D={head_dim}, Hq={num_heads_q}, Hkv={num_heads_kv}, " + f"Sq={seq_len_q}, Skv={seq_len_kv}, causal={is_causal}" + ) + + if dtype == torch.bfloat16: + sage_out = ark.sage_sparse_bf16( + query, + key, + value, + lut, + valid, + is_causal=is_causal, + scale=scale, + q_tile_override=q_tile_override, + sparse_q_block_tokens=sparse_q_block_tokens, + sparse_k_block_tokens=sparse_k_block_tokens, + tensor_layout="HND", + ) + torch.xpu.synchronize() + sd_diff = (sparse_out.float() - sage_out.float()).abs() + sd_max = float(sd_diff.max().cpu()) + sd_mean = float(sd_diff.mean().cpu()) + print(f" sparse-SDPA vs sparse-SAGE: max={sd_max:.6f} mean={sd_mean:.6f}") + if sd_max > 5e-3 or sd_mean > 5e-4: + raise RuntimeError( + f"sage_sparse_sdpa vs sage_sparse_bf16 mismatch for D={head_dim}, Hq={num_heads_q}, " + f"Hkv={num_heads_kv}, Sq={seq_len_q}, Skv={seq_len_kv}" + ) + + +def run_case_sdpa_full( + dtype: torch.dtype, + head_dim: int, + *, + seq_len_q: int = 256, + seq_len_kv: int = 256, + num_heads_q: int = 4, + q_tile_override: int = 0, + sparse_q_block_tokens: int | None = None, + sparse_k_block_tokens: int | None = None, +) -> None: + """Dense gate: selecting every KV block must make sparse-SDPA match the dense reference.""" + ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_bf16", "sage_sparse_sdpa")) + device = torch.device("xpu") + batch = 1 + scale = 1.0 / math.sqrt(head_dim) + query_tile_tokens = q_tile_override or (64 if head_dim == 64 else 256) + k_block_tokens = 64 if sparse_k_block_tokens is None else sparse_k_block_tokens + kv_blocks = (seq_len_kv + k_block_tokens - 1) // k_block_tokens + active_query_tiles = (seq_len_q + query_tile_tokens - 1) // query_tile_tokens + per_query_tile_selection = [list(range(kv_blocks)) for _ in range(active_query_tiles)] + + torch.manual_seed(77 + head_dim + num_heads_q) + query = torch.randn((batch, num_heads_q, seq_len_q, head_dim), dtype=dtype, device=device) + key = torch.randn((batch, num_heads_q, seq_len_kv, head_dim), dtype=dtype, device=device) + value = torch.randn((batch, num_heads_q, seq_len_kv, head_dim), dtype=dtype, device=device) + + lut, valid, dense_mask = build_sparse_metadata_and_mask( + batch, + num_heads_q, + seq_len_q, + 64, + query_tile_tokens, + per_query_tile_selection, + device, + is_causal=False, + sparse_q_block_tokens=64 if sparse_q_block_tokens is None else sparse_q_block_tokens, + sparse_k_block_tokens=k_block_tokens, + seq_len_kv=seq_len_kv, + ) + + dense_out = bf16_sparse_reference(query, key, value, dense_mask, scale=scale, enable_gqa=False) + sparse_out = ark.sage_sparse_sdpa( + query, + key, + value, + lut, + valid, + is_causal=False, + scale=scale, + q_tile_override=q_tile_override, + sparse_q_block_tokens=sparse_q_block_tokens, + sparse_k_block_tokens=sparse_k_block_tokens, + tensor_layout="HND", + ) + torch.xpu.synchronize() + + diff = (dense_out.float() - sparse_out.float()).abs() + max_diff = float(diff.max().cpu()) + mean_diff = float(diff.mean().cpu()) + print(f"[sage_sparse_sdpa][{dtype}_all_selected] D={head_dim} max_diff={max_diff:.6f} mean_diff={mean_diff:.6f}") + if max_diff > 2e-2 or mean_diff > 2e-3: + raise RuntimeError(f"sage_sparse_sdpa all-selected mismatch for dtype={dtype}, D={head_dim}") + + def run_multi_row_tile_case() -> None: device = torch.device("xpu") batch = 1 @@ -496,6 +684,24 @@ def main() -> None: sparse_k_block_tokens=64, ) run_case_bf16(128, is_causal=True, q_tile_override=64) + # Independent sparse-SDPA path (bf16 + fp16) + for dtype in (torch.bfloat16, torch.float16): + run_case_sdpa(dtype, 64) + run_case_sdpa(dtype, 128, q_tile_override=64, num_heads_q=32, num_heads_kv=8) + run_case_sdpa( + dtype, + 128, + seq_len_q=512, + seq_len_kv=768, + num_heads_q=32, + num_heads_kv=8, + q_tile_override=256, + sparse_q_block_tokens=256, + sparse_k_block_tokens=64, + ) + run_case_sdpa(dtype, 128, is_causal=True, q_tile_override=64) + run_case_sdpa_full(dtype, 64) + run_case_sdpa_full(dtype, 128, q_tile_override=64) if __name__ == "__main__": From 1da474b35a166ead17a7e1ba399f85e8b4b2ab88 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 19:05:52 +0800 Subject: [PATCH 20/42] refactor: separate native-precision sparse SDPA from INT8 sparse SAGE path The BF16 native sparse attention path previously ran through the INT8-centric SAGE kernel structures (sage_sparse_bf16 -> SparseSageConfig -> SPARSESAGEV1FwdMainloop). Remove that coupling so each dtype has one clean path: - INT8: sage_sparse / sparge_sage2_attn_meansim_topk_xpu - BF16/FP16: sage_sparse_sdpa / sparge_sage2_attn_meansim_topk_xpu_sdpa Changes: - delete sdpa_sparse_bf16.cpp (superseded by sdpa_sparse_sdpa.cpp) - drop sage_sparse_bf16 pybind + Python alias and sparge_sage2_attn_meansim_topk_xpu_bf16, plus __init__ exports - remove sdpa_impl_bf16_sparse_* declarations from sycl_tla_common.hpp - hardcode SparseSageConfig MMA to int32/int8 DPAS; static_assert ElementQ==int8 - remove the native softmax-scale branch from the INT8 SAGE mainloop - guard the scale_block_size division in XeSparseSageFwdKernel (0 on native path) - align _query_tile_tokens_for_head_dim(64) default to 64 with the e2e wrappers - drop bf16-only cases from the prefill e2e test and bf16-only bench modes - switch the flux example to the native sparse-SDPA entry points - gitignore generated benchmarks/results/ Co-Authored-By: Claude --- auto_round_extension/ark/.gitignore | 1 + .../ark/auto_round_kernel/__init__.py | 2 - .../ark/auto_round_kernel/ark.cpp | 60 ----- .../auto_round_kernel/sdpa_sparse_bf16.cpp | 225 ------------------ .../auto_round_kernel/sdpa_sparse_sdpa.cpp | 2 +- .../ark/auto_round_kernel/sparse_attention.py | 153 +----------- .../stla/xe_sparse_sage_fwd_kernel.hpp | 11 +- .../stla/xe_sparse_sagev1_fwd_mainloop.hpp | 7 - .../wrapper/include/sycl_tla_common.hpp | 24 -- .../wrapper/include/sycl_tla_sdpa_sparse.hpp | 19 +- .../test/test_sage_sparse_prefill_e2e.py | 155 +----------- .../ark/benchmarks/bench_sparse_topk.py | 153 +----------- .../ark/examples/flux_sparse_patch.py | 4 +- 13 files changed, 30 insertions(+), 786 deletions(-) delete mode 100644 auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp diff --git a/auto_round_extension/ark/.gitignore b/auto_round_extension/ark/.gitignore index 17e27ad2a0..8e16b488bb 100644 --- a/auto_round_extension/ark/.gitignore +++ b/auto_round_extension/ark/.gitignore @@ -6,3 +6,4 @@ xbuild_bf16* *.csv *.so *.pyc +benchmarks/results/ diff --git a/auto_round_extension/ark/auto_round_kernel/__init__.py b/auto_round_extension/ark/auto_round_kernel/__init__.py index b625cfd741..12529d4dbe 100644 --- a/auto_round_extension/ark/auto_round_kernel/__init__.py +++ b/auto_round_extension/ark/auto_round_kernel/__init__.py @@ -1292,12 +1292,10 @@ def sageattn( _slice_sequence_native_layout, _to_hnd, sage_sparse, - sage_sparse_bf16, sage_sparse_sdpa, sparge_block_map_to_mask, sparge_preprocess_topk, sparge_sage2_attn_meansim_topk_xpu, - sparge_sage2_attn_meansim_topk_xpu_bf16, sparge_sage2_attn_meansim_topk_xpu_sdpa, ) diff --git a/auto_round_extension/ark/auto_round_kernel/ark.cpp b/auto_round_extension/ark/auto_round_kernel/ark.cpp index 57dd6ecb7d..ac085f8a43 100755 --- a/auto_round_extension/ark/auto_round_kernel/ark.cpp +++ b/auto_round_extension/ark/auto_round_kernel/ark.cpp @@ -478,65 +478,6 @@ static void sage_sparse(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_ptr V, throw std::invalid_argument("ark::sage_sparse: unsupported head_dim; supported values are 64 and 128"); } -static void sage_sparse_bf16(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_ptr V, torch_ptr O, torch_ptr mask, - torch_ptr lut, torch_ptr valid_block_num, int num_q_blocks, int num_k_blocks, - int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, int q_stride_b, - int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, - int v_stride_s, int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, - int o_stride_h, int o_stride_b, int batch, int num_heads_q, int num_heads_kv, - int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, bool is_causal) { - if (mask && is_causal) { - throw std::invalid_argument("ark::sage_sparse_bf16: mask and is_causal cannot both be set"); - } - if (!lut || !valid_block_num) { - throw std::invalid_argument("ark::sage_sparse_bf16: lut and valid_block_num must be provided"); - } - auto matches_block_size = [](int seq_len, int num_blocks, int block_size) { - return block_size > 0 && num_blocks == ((seq_len + block_size - 1) / block_size); - }; - const bool key_block_is_64 = matches_block_size(seq_len_kv, num_k_blocks, 64); - if (!key_block_is_64) { - throw std::invalid_argument("ark::sage_sparse_bf16: only key block size 64 is supported"); - } - if (head_dim == 64) { - if (!matches_block_size(seq_len_q, num_q_blocks, 64)) { - throw std::invalid_argument("ark::sage_sparse_bf16: head_dim=64 requires query block size 64"); - } - ark::sdpa_impl_bf16_sparse_d64( - (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, - (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, - q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, - v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, - seq_len_kv, head_dim, softmax_scale, is_causal); - return; - } - if (head_dim == 128) { - if (matches_block_size(seq_len_q, num_q_blocks, 256)) { - if (q_tile_override != 256) { - throw std::invalid_argument("ark::sage_sparse_bf16: head_dim=128 query block size 256 requires q_tile_override=256"); - } - ark::sdpa_impl_bf16_sparse_qtile256_row64k( - (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, - (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, - q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, - v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, - seq_len_kv, head_dim, softmax_scale, is_causal); - return; - } - if (matches_block_size(seq_len_q, num_q_blocks, 64)) { - ark::sdpa_impl_bf16_sparse_row_linear( - (sycl::queue*)stream, (void*)Q, (void*)K, (void*)V, (void*)O, (void*)mask, (void*)lut, - (void*)valid_block_num, num_q_blocks, num_k_blocks, q_tile_override, q_stride_s, q_stride_d, q_stride_h, - q_stride_b, k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, - v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, - seq_len_kv, head_dim, softmax_scale, is_causal); - return; - } - throw std::invalid_argument("ark::sage_sparse_bf16: head_dim=128 supports query block sizes 64 and 256 only"); - } - throw std::invalid_argument("ark::sage_sparse_bf16: unsupported head_dim; supported values are 64 and 128"); -} - static void sage_sparse_sdpa(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_ptr V, torch_ptr O, torch_ptr mask, torch_ptr lut, torch_ptr valid_block_num, int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, int q_stride_b, @@ -935,7 +876,6 @@ PYBIND11_MODULE(PY_NAME, m) { pybind11::arg("head_dim"), pybind11::arg("softmax_scale"), pybind11::arg("is_causal"), pybind11::arg("tensor_layout"), pybind11::arg("lse") = 0); m.def("sage_sparse", &ark::sage_sparse); - m.def("sage_sparse_bf16", &ark::sage_sparse_bf16); m.def("sage_sparse_sdpa", &ark::sage_sparse_sdpa); // Low-level SAGE PVi8 API: input Q/K/V are pre-quantized int8 with qscale/kscale/vscale. m.def("sage_pvi8", &ark::sage_pvi8, pybind11::arg("stream"), pybind11::arg("Q"), pybind11::arg("K"), diff --git a/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp b/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp deleted file mode 100644 index 5ea82a35d3..0000000000 --- a/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_bf16.cpp +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (c) 2026 Intel Corporation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#if defined(ARK_XPU) && defined(ARK_SYCL_TLA) - -#include -#include -#include "bestla/bestla.h" - -#include -#include "sycl_tla_sdpa_sparse.hpp" - -namespace ark { - -namespace detail = sparse_detail; - -namespace { - -using KernelLauncher = int (*)(detail::Options const& options); - -int launch_prefill_kernel_bf16_128_sparse_sdpa(detail::Options const& options) { - return detail::launch_sparse_sage_prefill_kernel_128( - options); -} - -int launch_prefill_kernel_bf16_128_sparse_sdpa_qtile64(detail::Options const& options) { - return detail::launch_sparse_sage_prefill_kernel_128_qtile64< - cute::bfloat16_t, cute::bfloat16_t, cute::bfloat16_t>( - options); -} - -int launch_prefill_kernel_bf16_64_sparse_sdpa(detail::Options const& options) { - return detail::launch_sparse_sage_prefill_kernel_64( - options); -} - -KernelLauncher select_sparse_bf16_prefill_launcher(int head_dim, int q_tile_override) { - switch (head_dim) { - case 128: - if (q_tile_override == 64) return launch_prefill_kernel_bf16_128_sparse_sdpa_qtile64; - if (q_tile_override != 0 && q_tile_override != 256) return nullptr; - return launch_prefill_kernel_bf16_128_sparse_sdpa; - case 64: - if (q_tile_override != 0 && q_tile_override != 64 && q_tile_override != 128) return nullptr; - return launch_prefill_kernel_bf16_64_sparse_sdpa; - default: - return nullptr; - } -} - -detail::Options make_common_options(void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, int q_stride_s, - int q_stride_d, int q_stride_h, int q_stride_b, int k_stride_s, int k_stride_d, - int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, int v_stride_h, - int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, - int batch, int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, - int head_dim, float softmax_scale, bool is_causal) { - if (q_stride_d != 1 || k_stride_d != 1 || v_stride_d != 1 || o_stride_d != 1) { - throw std::invalid_argument("make_common_options: head-dim stride must be 1 for Q/K/V/O"); - } - detail::Options options; - options.q = Q_ptr; - options.k = K_ptr; - options.v = V_ptr; - options.mask = mask; - options.o = O_ptr; - options.use_tensor_strides = true; - options.q_stride_s = q_stride_s; - options.q_stride_d = q_stride_d; - options.q_stride_h = q_stride_h; - options.q_stride_b = q_stride_b; - options.k_stride_s = k_stride_s; - options.k_stride_d = k_stride_d; - options.k_stride_h = k_stride_h; - options.k_stride_b = k_stride_b; - options.v_stride_d = v_stride_d; - options.v_stride_s = v_stride_s; - options.v_stride_h = v_stride_h; - options.v_stride_b = v_stride_b; - options.o_stride_s = o_stride_s; - options.o_stride_d = o_stride_d; - options.o_stride_h = o_stride_h; - options.o_stride_b = o_stride_b; - options.batch = batch; - options.num_heads_q = num_heads_q; - options.num_heads_kv = num_heads_kv; - options.seq_len_qo = seq_len_q; - options.seq_len_kv = seq_len_kv; - options.head_size_qk = head_dim; - options.head_size_vo = head_dim; - options.softmax_scale = softmax_scale; - options.is_causal = is_causal; - return options; -} - -void sparse_bf16_prefill(sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, - void* valid_block_num, int num_q_blocks, int num_k_blocks, int q_tile_override, - int q_stride_s, int q_stride_d, int q_stride_h, int q_stride_b, int k_stride_s, - int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, - int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, - int o_stride_b, int batch, int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, - int head_dim, float softmax_scale, bool is_causal, int sparse_q_block_size = 0) { - const int effective_q_tile_override = - (head_dim == 128 && q_tile_override == 0) ? 64 : ((head_dim == 64 && q_tile_override == 0) ? 64 : q_tile_override); - detail::Options options = - make_common_options(Q_ptr, K_ptr, V_ptr, O_ptr, mask, q_stride_s, q_stride_d, q_stride_h, q_stride_b, - k_stride_s, k_stride_d, k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, - v_stride_b, o_stride_s, o_stride_d, o_stride_h, o_stride_b, batch, num_heads_q, - num_heads_kv, seq_len_q, seq_len_kv, head_dim, softmax_scale, is_causal); - options.scale_block_size = 0; - options.sparse_q_block_size = sparse_q_block_size; - options.q_tile_override = effective_q_tile_override; - options.qscale = nullptr; - options.kscale = nullptr; - options.lut = static_cast(lut); - options.valid_block_num = static_cast(valid_block_num); - options.num_q_blocks = num_q_blocks; - options.num_k_blocks = num_k_blocks; - compat::set_default_queue(*q); - - KernelLauncher launcher = select_sparse_bf16_prefill_launcher(head_dim, effective_q_tile_override); - if (launcher == nullptr) { - throw std::runtime_error("Unsupported sparse_bf16_prefill config"); - } - - launcher(options); -} - -} // namespace - -void sdpa_impl_bf16_sparse_d64( - sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, - int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, - int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, - int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, - int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, - bool is_causal) { - if (mask && is_causal) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: mask and is_causal cannot both be set"); - } - if (seq_len_q <= 0 || seq_len_kv <= 0) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: seq_len_q and seq_len_kv must be greater than 0"); - } - if (lut == nullptr || valid_block_num == nullptr) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: lut and valid_block_num must be provided"); - } - if (num_q_blocks <= 0 || num_k_blocks <= 0) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: num_q_blocks and num_k_blocks must be greater than 0"); - } - if (head_dim != 64) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_d64: head_dim must be 64"); - } - - sparse_bf16_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, - q_tile_override, q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, - k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, - o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, - softmax_scale, is_causal, /*sparse_q_block_size=*/64); -} - -void sdpa_impl_bf16_sparse_row_linear( - sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, - int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, - int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, - int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, - int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, - bool is_causal) { - if (q_tile_override != 0 && q_tile_override != 64) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_row_linear: q_tile_override must be 0 or 64"); - } - if (mask && is_causal) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_row_linear: mask and is_causal cannot both be set"); - } - if (seq_len_q <= 0 || seq_len_kv <= 0) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_row_linear: seq_len_q and seq_len_kv must be greater than 0"); - } - if (lut == nullptr || valid_block_num == nullptr) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_row_linear: lut and valid_block_num must be provided"); - } - if (num_q_blocks <= 0 || num_k_blocks <= 0) { - throw std::invalid_argument( - "sdpa_impl_bf16_sparse_row_linear: num_q_blocks and num_k_blocks must be greater than 0"); - } - - sparse_bf16_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, 64, - q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, k_stride_h, - k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, o_stride_h, - o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, softmax_scale, - is_causal, /*sparse_q_block_size=*/64); -} - -void sdpa_impl_bf16_sparse_qtile256_row64k( - sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, - int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, - int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, - int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, - int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, - bool is_causal) { - if (q_tile_override != 256) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_qtile256_row64k: q_tile_override must be 256"); - } - if (head_dim != 128) { - throw std::invalid_argument("sdpa_impl_bf16_sparse_qtile256_row64k: head_dim must be 128"); - } - - sparse_bf16_prefill(q, Q_ptr, K_ptr, V_ptr, O_ptr, mask, lut, valid_block_num, num_q_blocks, num_k_blocks, - q_tile_override, q_stride_s, q_stride_d, q_stride_h, q_stride_b, k_stride_s, k_stride_d, - k_stride_h, k_stride_b, v_stride_d, v_stride_s, v_stride_h, v_stride_b, o_stride_s, o_stride_d, - o_stride_h, o_stride_b, batch, num_heads_q, num_heads_kv, seq_len_q, seq_len_kv, head_dim, - softmax_scale, is_causal, /*sparse_q_block_size=*/256); -} - -} // namespace ark - -#endif // ARK_XPU && ARK_SYCL_TLA diff --git a/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_sdpa.cpp b/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_sdpa.cpp index 2a69823c51..b569a49f2a 100644 --- a/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_sdpa.cpp +++ b/auto_round_extension/ark/auto_round_kernel/sdpa_sparse_sdpa.cpp @@ -14,7 +14,7 @@ // Independent native-precision sparse SDPA path (BF16 + FP16). This dispatches to // the sparse SDPA mainloop (SPARSESDPAFwdMainloop via SparseSDPAConfig), separate -// from the INT8-centric sparse SAGE path in sdpa_sparse.cpp / sdpa_sparse_bf16.cpp. +// from the INT8-centric sparse SAGE path in sdpa_sparse.cpp. #if defined(ARK_XPU) && defined(ARK_SYCL_TLA) diff --git a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py index fff58426a3..fc1da94539 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py +++ b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py @@ -199,47 +199,6 @@ def sage_sparse( return O -def sage_sparse_bf16( - query: torch.Tensor, - key: torch.Tensor, - value: torch.Tensor, - lut: torch.Tensor, - valid_block_num: torch.Tensor, - attn_mask: torch.Tensor | None = None, - dropout_p: float = 0.0, - is_causal: bool = False, - scale: float | None = None, - enable_gqa: bool = False, - q_tile_override: int = 0, - sparse_q_block_tokens: int | None = None, - sparse_k_block_tokens: int | None = None, - tensor_layout: str = "HND", -) -> torch.Tensor: - """Low-level sparse BF16 attention routed by sparse LUT metadata. - - Dispatched through the independent native-precision sparse-SDPA path - (``sage_sparse_sdpa``); kept as a bf16 convenience alias. - """ - if query.dtype != torch.bfloat16 or key.dtype != torch.bfloat16 or value.dtype != torch.bfloat16: - raise ValueError(f"sage_sparse_bf16 requires bfloat16 Q/K/V, got Q={query.dtype}, K={key.dtype}, V={value.dtype}") - return sage_sparse_sdpa( - query, - key, - value, - lut, - valid_block_num, - attn_mask=attn_mask, - dropout_p=dropout_p, - is_causal=is_causal, - scale=scale, - enable_gqa=enable_gqa, - q_tile_override=q_tile_override, - sparse_q_block_tokens=sparse_q_block_tokens, - sparse_k_block_tokens=sparse_k_block_tokens, - tensor_layout=tensor_layout, - ) - - def sage_sparse_sdpa( query: torch.Tensor, key: torch.Tensor, @@ -259,8 +218,8 @@ def sage_sparse_sdpa( """Low-level native-precision sparse attention (BF16/FP16) routed by sparse LUT metadata. Independent path built on the dense-SDPA sparse mainloop (SparseSDPAConfig). - Unlike ``sage_sparse_bf16`` it does not reuse the INT8-centric SAGE mainloop; - Q/K/V are native BF16/FP16 and the softmax scale is applied directly. + Unlike the INT8 ``sage_sparse`` path it does not reuse the INT8-centric SAGE + mainloop; Q/K/V are native BF16/FP16 and the softmax scale is applied directly. """ del dropout_p, enable_gqa if query.device.type != "xpu": @@ -558,8 +517,10 @@ def _normalize_per_head_hparam( def _query_tile_tokens_for_head_dim(head_dim: int) -> int: + # Keep the preprocess default aligned with the sparse e2e wrappers: for head_dim 64 + # the wrappers default to 64-token query tiles, for head_dim 128 to 64 as well. if head_dim == 64: - return 128 + return 64 if head_dim == 128: return 64 raise ValueError(f"Unsupported head_dim={head_dim}; supported: 64, 128") @@ -1755,107 +1716,3 @@ def sparge_sage2_attn_meansim_topk_xpu_sdpa( return out -def sparge_sage2_attn_meansim_topk_xpu_bf16( - query: torch.Tensor, - key: torch.Tensor, - value: torch.Tensor, - attn_mask: torch.Tensor | None = None, - dropout_p: float = 0.0, - is_causal: bool = False, - scale: float | None = None, - smooth_k: bool = True, - simthreshd1: float | torch.Tensor = -0.1, - cdfthreshd: float | torch.Tensor | None = None, - topk: float | torch.Tensor = 0.5, - pvthreshd: float | torch.Tensor = 50, - attention_sink: bool = False, - tensor_layout: str = "HND", - output_dtype: torch.dtype | None = None, - return_sparsity: bool = False, - return_metadata: bool = False, - k_quant_granularity: int = 64, - query_tile_tokens: int | None = None, - q_tile_override: int = 0, - sparse_q_block_tokens: int | None = None, - sparse_k_block_tokens: int | None = None, -) -> torch.Tensor | tuple[Any, ...]: - if query.device.type != "xpu": - raise NotImplementedError("sparge_sage2_attn_meansim_topk_xpu_bf16 is only supported on XPU") - if dropout_p != 0.0: - raise NotImplementedError("dropout_p must be 0.0 for sparge_sage2_attn_meansim_topk_xpu_bf16") - if attn_mask is not None and is_causal: - raise ValueError("attn_mask and is_causal cannot both be set") - if query.dtype != torch.bfloat16 or key.dtype != torch.bfloat16 or value.dtype != torch.bfloat16: - raise ValueError( - "sparge_sage2_attn_meansim_topk_xpu_bf16 requires bfloat16 Q/K/V, " - f"got Q={query.dtype}, K={key.dtype}, V={value.dtype}" - ) - if output_dtype is not None and output_dtype != torch.bfloat16: - raise ValueError(f"output_dtype must be torch.bfloat16 in the current implementation, got {output_dtype}") - if pvthreshd not in (None, 50): - warnings.warn("pvthreshd is not supported by the current ARK sparse kernel and is ignored", stacklevel=2) - - B, Hq, Sq, D = _validate_attention_tensor(query, "Q", tensor_layout, expected_dtype=query.dtype) - Bk, Hkv, Skv, Dk = _validate_attention_tensor(key, "K", tensor_layout, expected_dtype=key.dtype) - Bv, Hkv2, Skv2, Dv = _validate_attention_tensor(value, "V", tensor_layout, expected_dtype=value.dtype) - if Bk != B or Bv != B: - raise ValueError("Batch size mismatch between Q/K/V") - if Hkv2 != Hkv or Skv2 != Skv or Dv != Dk: - raise ValueError("K/V shape mismatch") - if Dk != D: - raise ValueError("Head dim mismatch between Q and K/V") - - effective_query_tile_tokens = query_tile_tokens - effective_q_tile_override = q_tile_override - if effective_query_tile_tokens is None and q_tile_override in (64, 128, 256): - effective_query_tile_tokens = q_tile_override - elif effective_query_tile_tokens is not None: - if q_tile_override == 0: - effective_q_tile_override = int(effective_query_tile_tokens) - elif q_tile_override != int(effective_query_tile_tokens): - raise ValueError( - "query_tile_tokens and q_tile_override must match when both are set; " - f"got query_tile_tokens={effective_query_tile_tokens}, q_tile_override={q_tile_override}" - ) - _validate_sparse_q_tile_override_for_head_dim(D, effective_q_tile_override) - - normalized_mask = _normalize_sparse_mask(attn_mask, B, Sq, Skv, query.device) - metadata = sparge_preprocess_topk( - query, - key, - is_causal=is_causal, - smooth_k=smooth_k, - simthreshd1=simthreshd1, - topk=topk, - cdfthreshd=cdfthreshd, - attention_sink=attention_sink, - quant_block_size=64, - tensor_layout=tensor_layout, - k_quant_granularity=k_quant_granularity, - query_tile_tokens=effective_query_tile_tokens, - sparse_q_block_tokens=sparse_q_block_tokens, - sparse_k_block_tokens=sparse_k_block_tokens, - ) - _get_xpu_sparse_kernel_backend() - out = sage_sparse_bf16( - query, - key, - value, - metadata["lut"], - metadata["valid_block_num"], - attn_mask=normalized_mask, - is_causal=is_causal, - scale=scale, - q_tile_override=effective_q_tile_override, - sparse_q_block_tokens=metadata["sparse_q_block_tokens"], - sparse_k_block_tokens=metadata["sparse_k_block_tokens"], - tensor_layout=tensor_layout, - ) - sparsity_ratio = metadata["stats"]["sparsity_ratio"] - if return_metadata and return_sparsity: - return out, sparsity_ratio, metadata - if return_metadata: - return out, metadata - if return_sparsity: - return out, sparsity_ratio - return out diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp index 90e0e32b9a..fe3d4a3702 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp @@ -245,9 +245,16 @@ class XeSparseSageFwdKernel { auto dcV = const_cast(p.V + offset_v); auto dcK_cache = const_cast(p.K_cache + offset_k_cache); auto dcV_cache = const_cast(p.V_cache + offset_v_cache); - int seq_q_pad = (seq_len_qo + params.mainloop.scale_block_size - 1) / params.mainloop.scale_block_size; + // scale_block_size is 0 on the native-precision sparse-SDPA path (no INT8 dequant); + // guard the pad computation so it does not divide by zero. The pads are only used + // inside the scale_block_size ? ... : nullptr ternaries below. + int seq_q_pad = params.mainloop.scale_block_size > 0 + ? (seq_len_qo + params.mainloop.scale_block_size - 1) / params.mainloop.scale_block_size + : 0; int seq_kv_total = seq_len_kv + seq_len_kv_cache; - int seq_kv_pad = (seq_kv_total + params.mainloop.scale_block_size - 1) / params.mainloop.scale_block_size; + int seq_kv_pad = params.mainloop.scale_block_size > 0 + ? (seq_kv_total + params.mainloop.scale_block_size - 1) / params.mainloop.scale_block_size + : 0; auto scaleQ = params.mainloop.scale_block_size ? (float*)params.mainloop.qscale + (idx_b * s.num_heads_q * seq_q_pad + head_q * seq_q_pad) : nullptr; diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp index c88496b7f8..0124fd21de 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp @@ -521,13 +521,6 @@ struct SPARSESAGEV1FwdMainloop, CausalMask_, FullMask_, CUTLASS_PRAGMA_UNROLL for (int i = 0; i < tPrS.size(); i++) tPrS(i) *= _scale; } - } else { - // Native FP16/BF16 Q/K path (scale_block_size == 0): there is no - // qscale/kscale dequantization, so apply the raw softmax scale here. - // INT8 gets it via dq_scale above; without this branch the softmax - // runs on unscaled scores and the output is numerically wrong. - CUTLASS_PRAGMA_UNROLL - for (int i = 0; i < tPrS.size(); i++) tPrS(i) *= params.scale; } } else { float _scale = dq_scale * scaleK[scalek_idx]; diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp index 215213b0e0..1d80f29d74 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_common.hpp @@ -256,30 +256,6 @@ void sdpa_impl_qks8_sparse_qtile256_row64k_pvhalf( int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, bool is_causal, BTLA_DTYPE pv_dtype = BTLA_DTYPE::F16); -void sdpa_impl_bf16_sparse_d64( - sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, - int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, - int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, - int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, - int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, - bool is_causal); - -void sdpa_impl_bf16_sparse_row_linear( - sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, - int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, - int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, - int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, - int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, - bool is_causal); - -void sdpa_impl_bf16_sparse_qtile256_row64k( - sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, - int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, - int q_stride_b, int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, int v_stride_s, - int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, int o_stride_h, int o_stride_b, int batch, - int num_heads_q, int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, - bool is_causal); - void sdpa_impl_bf16_sparse_sdpa_d64( sycl::queue* q, void* Q_ptr, void* K_ptr, void* V_ptr, void* O_ptr, void* mask, void* lut, void* valid_block_num, int num_q_blocks, int num_k_blocks, int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp index 1e5e690830..0073bd6a8d 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp @@ -938,18 +938,13 @@ template struct SparseSageConfig { static constexpr int SGTileQ = get<0>(shape_div(TileShapeQK{}, shape(SubgroupLayoutQK{})))(); - // The Q*K MMA must match ElementQ. The sparse mainloop dequantizes INT8 Q/K with - // qscale/kscale, so INT8 keeps an int32/int8 DPAS. Native BF16/FP16 Q/K must use a - // float/ DPAS; reusing the int8 DPAS on bf16 fragments hangs the device. - using MMAOperation = cute::conditional_t< - is_void_v, - typename cute::conditional_t< - cute::is_same_v || cute::is_same_v, - XE_DPAS_TT, - cute::conditional_t, - XE_DPAS_TT, - XE_DPAS_TT>>, - MMAOperation_>; + static_assert(cute::is_same_v, + "SparseSageConfig is INT8-only; use SparseSDPAConfig for native-precision BF16/FP16"); + // INT8-only sparse SAGE path: Q/K are int8 and dequantized via qscale/kscale, + // so the Q*K MMA is always an int32/int8 DPAS. Native-precision BF16/FP16 sparse + // uses the separate SparseSDPAConfig (float/ DPAS). + using MMAOperation = cute::conditional_t, + XE_DPAS_TT, MMAOperation_>; using MMAOperationPV = cute::conditional_t, XE_DPAS_TT, MMAOperation_>; using SubgroupLayoutPV = diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py index 6626731533..a08bccc10b 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py @@ -240,114 +240,6 @@ def run_case( ) -def run_case_bf16( - head_dim: int, - *, - seq_len_q: int = 256, - seq_len_kv: int = 256, - num_heads_q: int = 4, - num_heads_kv: int | None = None, - is_causal: bool = False, - q_tile_override: int = 0, - sparse_q_block_tokens: int | None = None, - sparse_k_block_tokens: int | None = None, -) -> None: - ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_bf16")) - device = torch.device("xpu") - batch = 1 - num_heads_kv = num_heads_q if num_heads_kv is None else num_heads_kv - scale = 1.0 / math.sqrt(head_dim) - query_tile_tokens = q_tile_override or (64 if head_dim == 64 else 256) - k_block_tokens = 64 if sparse_k_block_tokens is None else sparse_k_block_tokens - kv_blocks = (seq_len_kv + k_block_tokens - 1) // k_block_tokens - active_query_tiles = (seq_len_q + query_tile_tokens - 1) // query_tile_tokens - if not is_causal: - per_query_tile_selection = [list(range(max(1, min(kv_blocks, 3)))) for _ in range(active_query_tiles)] - if active_query_tiles > 1 and kv_blocks > 3: - per_query_tile_selection[-1] = list(range(kv_blocks - 3, kv_blocks)) - case_name = "bf16_prefill" - else: - per_query_tile_selection = [list(range(min(kv_blocks, idx + 1))) for idx in range(active_query_tiles)] - case_name = "bf16_prefill_causal" - per_query_tile_selection = _clamp_selected_blocks(kv_blocks, per_query_tile_selection) - - torch.manual_seed(6026 + head_dim + num_heads_q + (num_heads_kv * 13) + seq_len_q + seq_len_kv) - query = torch.randn((batch, num_heads_q, seq_len_q, head_dim), dtype=torch.bfloat16, device=device) - key = torch.randn((batch, num_heads_kv, seq_len_kv, head_dim), dtype=torch.bfloat16, device=device) - value = torch.randn((batch, num_heads_kv, seq_len_kv, head_dim), dtype=torch.bfloat16, device=device) - - effective_sparse_q_block_tokens = 64 if sparse_q_block_tokens is None else sparse_q_block_tokens - effective_sparse_k_block_tokens = 64 if sparse_k_block_tokens is None else sparse_k_block_tokens - lut, valid, dense_mask = build_sparse_metadata_and_mask( - batch, - num_heads_q, - seq_len_q, - 64, - query_tile_tokens, - per_query_tile_selection, - device, - is_causal=is_causal, - sparse_q_block_tokens=effective_sparse_q_block_tokens, - sparse_k_block_tokens=effective_sparse_k_block_tokens, - seq_len_kv=seq_len_kv, - ) - - dense_out = bf16_sparse_reference( - query, - key, - value, - dense_mask, - scale=scale, - enable_gqa=num_heads_q != num_heads_kv, - ) - sparse_out = ark.sage_sparse_bf16( - query, - key, - value, - lut, - valid, - is_causal=is_causal, - scale=scale, - q_tile_override=q_tile_override, - sparse_q_block_tokens=sparse_q_block_tokens, - sparse_k_block_tokens=sparse_k_block_tokens, - tensor_layout="HND", - ) - e2e_out = ark.sparge_sage2_attn_meansim_topk_xpu_bf16( - query, - key, - value, - is_causal=is_causal, - scale=scale, - smooth_k=True, - simthreshd1=-1.0, - topk=0.5, - attention_sink=False, - tensor_layout="HND", - q_tile_override=q_tile_override, - sparse_q_block_tokens=sparse_q_block_tokens, - sparse_k_block_tokens=sparse_k_block_tokens, - ) - torch.xpu.synchronize() - - diff = (dense_out.float() - sparse_out.float()).abs() - e2e_diff = (e2e_out.float() - sparse_out.float()).abs() - max_diff = float(diff.max().cpu()) - mean_diff = float(diff.mean().cpu()) - e2e_max_diff = float(e2e_diff.max().cpu()) - e2e_mean_diff = float(e2e_diff.mean().cpu()) - print( - f"[sage_sparse_bf16][{case_name}] D={head_dim} Hq={num_heads_q} Hkv={num_heads_kv} " - f"Sq={seq_len_q} Skv={seq_len_kv} max_diff={max_diff:.6f} mean_diff={mean_diff:.6f} " - f"e2e_max_diff={e2e_max_diff:.6f} e2e_mean_diff={e2e_mean_diff:.6f}" - ) - if max_diff > 2e-2 or mean_diff > 2e-3: - raise RuntimeError( - f"sage_sparse_bf16 mismatch for D={head_dim}, Hq={num_heads_q}, Hkv={num_heads_kv}, " - f"Sq={seq_len_q}, Skv={seq_len_kv}, causal={is_causal}" - ) - - def run_case_sdpa( dtype: torch.dtype, head_dim: int, @@ -361,9 +253,9 @@ def run_case_sdpa( sparse_q_block_tokens: int | None = None, sparse_k_block_tokens: int | None = None, ) -> None: - """Validate the independent sparse-SDPA path (bf16/fp16) against the dense - reference and, for bf16, against the sparse-SAGE path (sage_sparse_bf16).""" - ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_bf16", "sage_sparse_sdpa")) + """Validate the independent native-precision sparse-SDPA path (bf16/fp16) + against a dense reference built from the same block selection.""" + ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_sdpa")) device = torch.device("xpu") batch = 1 num_heads_kv = num_heads_q if num_heads_kv is None else num_heads_kv @@ -439,31 +331,6 @@ def run_case_sdpa( f"Sq={seq_len_q}, Skv={seq_len_kv}, causal={is_causal}" ) - if dtype == torch.bfloat16: - sage_out = ark.sage_sparse_bf16( - query, - key, - value, - lut, - valid, - is_causal=is_causal, - scale=scale, - q_tile_override=q_tile_override, - sparse_q_block_tokens=sparse_q_block_tokens, - sparse_k_block_tokens=sparse_k_block_tokens, - tensor_layout="HND", - ) - torch.xpu.synchronize() - sd_diff = (sparse_out.float() - sage_out.float()).abs() - sd_max = float(sd_diff.max().cpu()) - sd_mean = float(sd_diff.mean().cpu()) - print(f" sparse-SDPA vs sparse-SAGE: max={sd_max:.6f} mean={sd_mean:.6f}") - if sd_max > 5e-3 or sd_mean > 5e-4: - raise RuntimeError( - f"sage_sparse_sdpa vs sage_sparse_bf16 mismatch for D={head_dim}, Hq={num_heads_q}, " - f"Hkv={num_heads_kv}, Sq={seq_len_q}, Skv={seq_len_kv}" - ) - def run_case_sdpa_full( dtype: torch.dtype, @@ -477,7 +344,7 @@ def run_case_sdpa_full( sparse_k_block_tokens: int | None = None, ) -> None: """Dense gate: selecting every KV block must make sparse-SDPA match the dense reference.""" - ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_bf16", "sage_sparse_sdpa")) + ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_sdpa")) device = torch.device("xpu") batch = 1 scale = 1.0 / math.sqrt(head_dim) @@ -670,20 +537,6 @@ def main() -> None: ) run_case(64, is_causal=True) run_case(128, is_causal=True) - run_case_bf16(64) - run_case_bf16(64, seq_len_q=192, seq_len_kv=256, num_heads_q=16, num_heads_kv=4) - run_case_bf16(128, q_tile_override=64, num_heads_q=32, num_heads_kv=8) - run_case_bf16( - 128, - seq_len_q=512, - seq_len_kv=768, - num_heads_q=32, - num_heads_kv=8, - q_tile_override=256, - sparse_q_block_tokens=256, - sparse_k_block_tokens=64, - ) - run_case_bf16(128, is_causal=True, q_tile_override=64) # Independent sparse-SDPA path (bf16 + fp16) for dtype in (torch.bfloat16, torch.float16): run_case_sdpa(dtype, 64) diff --git a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py index ceb34e5588..757cd6de65 100644 --- a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py +++ b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py @@ -62,10 +62,7 @@ def _resolve_sparse_binding(args: argparse.Namespace, *, required_symbols: tuple def ensure_sparse_binding(args: argparse.Namespace) -> None: - if args.dtype == "bf16": - required_symbols = ("sage_sparse", "sage_sparse_bf16", "sage_sparse_sdpa") - else: - required_symbols = ("sage_sparse", "sage_sparse_sdpa") + required_symbols = ("sage_sparse", "sage_sparse_sdpa") ext_path = _resolve_sparse_binding(args, required_symbols=required_symbols) if ext_path is not None: _load_sparse_binding(ext_path, required_symbols=required_symbols) @@ -522,8 +519,6 @@ def summarize_speedups(rows: list[dict[str, object]]) -> list[dict[str, object]] "dense_sagev1", "sparse_kernel_only", "sparse_e2e", - "sparse_bf16_kernel_only", - "sparse_bf16_e2e", "sparse_qtile256_row64k_kernel_only", "sparse_qtile256_row64k_e2e", "sparse_sdpa_bf16_kernel_only", @@ -737,49 +732,6 @@ def run_single_benchmark(args: argparse.Namespace, *, seq_len: int, tensor_layou note=f"preprocess failed before e2e benchmark: {preprocess_note}", ) ) - if dtype == torch.bfloat16: - rows.append( - make_row( - mode="sparse_bf16_kernel_only", - batch=args.batch, - num_heads_q=args.num_heads_q, - num_heads_kv=args.num_heads_kv, - seq_len=seq_len, - tensor_layout=tensor_layout, - head_dim=args.head_dim, - dtype=dtype, - is_causal=args.causal, - warmup=args.warmup, - iters=args.iters, - requested_topk=topk, - selected_ratio=None, - selected_blocks_per_row=None, - latency_ms=None, - status=status, - note=f"preprocess failed before bf16 kernel benchmark: {preprocess_note}", - ) - ) - rows.append( - make_row( - mode="sparse_bf16_e2e", - batch=args.batch, - num_heads_q=args.num_heads_q, - num_heads_kv=args.num_heads_kv, - seq_len=seq_len, - tensor_layout=tensor_layout, - head_dim=args.head_dim, - dtype=dtype, - is_causal=args.causal, - warmup=args.warmup, - iters=args.iters, - requested_topk=topk, - selected_ratio=None, - selected_blocks_per_row=None, - latency_ms=None, - status=status, - note=f"preprocess failed before bf16 e2e benchmark: {preprocess_note}", - ) - ) continue # try: @@ -1063,109 +1015,6 @@ def run_single_benchmark(args: argparse.Namespace, *, seq_len: int, tensor_layou selected_blocks_per_row=selected_blocks_per_row, ) ) - if dtype == torch.bfloat16: - rows.append( - try_benchmark( - "sparse_bf16_kernel_only", - lambda preprocess=preprocess: ( - hnd_to_nhd( - ark.sage_sparse_bf16( - nhd_to_hnd(q_nhd_src), - nhd_to_hnd(k_nhd_src), - nhd_to_hnd(v_nhd_src), - preprocess["lut"], - preprocess["valid_block_num"], - is_causal=args.causal, - scale=scale, - q_tile_override=args.q_tile_override, - sparse_q_block_tokens=preprocess["sparse_q_block_tokens"], - sparse_k_block_tokens=preprocess["sparse_k_block_tokens"], - tensor_layout="HND", - ) - ) - if tensor_layout == "HND" - else ark.sage_sparse_bf16( - q, - k, - v, - preprocess["lut"], - preprocess["valid_block_num"], - is_causal=args.causal, - scale=scale, - q_tile_override=args.q_tile_override, - sparse_q_block_tokens=preprocess["sparse_q_block_tokens"], - sparse_k_block_tokens=preprocess["sparse_k_block_tokens"], - tensor_layout=tensor_layout, - ) - ), - batch=args.batch, - num_heads_q=args.num_heads_q, - num_heads_kv=args.num_heads_kv, - seq_len=seq_len, - tensor_layout=tensor_layout, - head_dim=args.head_dim, - dtype=dtype, - is_causal=args.causal, - warmup=args.warmup, - iters=args.iters, - requested_topk=topk, - selected_ratio=selected_ratio, - selected_blocks_per_row=selected_blocks_per_row, - ) - ) - rows.append( - try_benchmark( - "sparse_bf16_e2e", - lambda topk=topk: ( - hnd_to_nhd( - ark.sparge_sage2_attn_meansim_topk_xpu_bf16( - nhd_to_hnd(q_nhd_src), - nhd_to_hnd(k_nhd_src), - nhd_to_hnd(v_nhd_src), - is_causal=args.causal, - scale=scale, - smooth_k=True, - simthreshd1=-1.0, - topk=topk, - attention_sink=False, - tensor_layout="HND", - q_tile_override=args.q_tile_override, - sparse_q_block_tokens=args.sparse_q_block_tokens, - sparse_k_block_tokens=args.sparse_k_block_tokens, - ) - ) - if tensor_layout == "HND" - else ark.sparge_sage2_attn_meansim_topk_xpu_bf16( - q, - k, - v, - is_causal=args.causal, - scale=scale, - smooth_k=True, - simthreshd1=-1.0, - topk=topk, - attention_sink=False, - tensor_layout=tensor_layout, - q_tile_override=args.q_tile_override, - sparse_q_block_tokens=args.sparse_q_block_tokens, - sparse_k_block_tokens=args.sparse_k_block_tokens, - ) - ), - batch=args.batch, - num_heads_q=args.num_heads_q, - num_heads_kv=args.num_heads_kv, - seq_len=seq_len, - tensor_layout=tensor_layout, - head_dim=args.head_dim, - dtype=dtype, - is_causal=args.causal, - warmup=args.warmup, - iters=args.iters, - requested_topk=topk, - selected_ratio=selected_ratio, - selected_blocks_per_row=selected_blocks_per_row, - ) - ) del preprocess empty_xpu_cache() diff --git a/auto_round_extension/ark/examples/flux_sparse_patch.py b/auto_round_extension/ark/examples/flux_sparse_patch.py index abe9bfcc0e..2e90ec387b 100644 --- a/auto_round_extension/ark/examples/flux_sparse_patch.py +++ b/auto_round_extension/ark/examples/flux_sparse_patch.py @@ -208,7 +208,7 @@ def __call__( device=query.device, ) if self.sparse_kernel == "bf16": - hidden_states, sparsity = ark.sparge_sage2_attn_meansim_topk_xpu_bf16( + hidden_states, sparsity = ark.sparge_sage2_attn_meansim_topk_xpu_sdpa( query, key, value, @@ -307,7 +307,7 @@ def patch_flux_sparse_attention( ): ensure_ark_sparse_binding( required_symbols=( - ("sage_sparse_bf16", "sage_dynamic_quant_layout") + ("sage_sparse_sdpa", "sage_dynamic_quant_layout") if sparse_kernel == "bf16" else ("sage_sparse", "sage_dynamic_quant_layout") ) From 333e242666c55d7150fab7256e4eab34ec8d3479 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Thu, 6 Aug 2026 19:05:57 +0800 Subject: [PATCH 21/42] docs: refresh sparse BF16 handoff after int8/bf16 path separation Bring the handoff in sync with the refactored state: one native sage_sparse_sdpa path per precision, the deleted sdpa_sparse_bf16.cpp, the re-configure requirement for the GLOB source list, the torch preprocess backend caveat, and the confirmed full-sweep benchmark numbers. Co-Authored-By: Claude --- .../ark/SPARSE_BF16_HANDOFF_20260805.md | 158 ++++++++++++++++++ .../ark/SPARSE_BF16_HANDOFF_20260805_CN.md | 153 +++++++++++++++++ 2 files changed, 311 insertions(+) create mode 100644 auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805.md create mode 100644 auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805_CN.md diff --git a/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805.md b/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805.md new file mode 100644 index 0000000000..53859d42e0 --- /dev/null +++ b/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805.md @@ -0,0 +1,158 @@ +# Sparse BF16 Handoff (updated 2026-08-06) + +> **Note:** This is a refresh of the 2026-08-05 handoff. The earlier version described a +> pre-refactor state and reported the BF16 benchmark as failing; both are stale. The BF16 +> sparse path has been cleanly separated from the INT8 sparse path, and recent benchmark +> runs complete successfully. + +## Scope + +Handoff for the `sparse BF16` work in `auto_round_extension/ark` after the INT8/BF16 +path-separation refactor on branch `feat/sparse-bf16-prefill-v2`. + +Covers: + +- the final architecture (two clean, per-dtype sparse attention paths) +- the public API +- build/verify/reproduce steps +- current benchmark status and known caveats + +## Goal + +Two independent sparse SDPA paths, one per precision: + +- **INT8** — `sage_sparse` / `sparge_sage2_attn_meansim_topk_xpu` +- **BF16 / FP16** — `sage_sparse_sdpa` / `sparge_sage2_attn_meansim_topk_xpu_sdpa` + +Previously the BF16 native path was mixed into the INT8-centric SAGE kernel path +(`sage_sparse_bf16` routed native Q/K through `SparseSageConfig` / +`SPARSESAGEV1FwdMainloop`). The refactor removed that coupling. + +## Current Environment + +- repo: `/home/yiliu4/workspace/auto-round/auto_round_extension/ark` +- Python: `.venv/bin/python` +- PyTorch: `2.13.0+xpu`, `torch.version.xpu=20260000` +- oneAPI compiler: `2026.1.1` (`/opt/intel/oneapi/compiler/2026.1`), MKL `2026.1` +- CMake XPU build target: `intel_gpu_bmg_g21`, `ARK_SYCL_TLA=ON`, icx + +## Architecture (post-refactor) + +**INT8 path:** `sparse_attention.py:sage_sparse` → pybind `ark.cpp:sage_sparse` → +`sdpa_sparse.cpp` (`sdpa_impl_qks8_sparse_{d64,row_linear,qtile256_row64k}_pvhalf`) → +`SparseSageConfig` → `SPARSESAGEV1FwdMainloop` +(`wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp`). + +- Q/K are `int8_t` (dequantized via qscale/kscale); V/PV is fp16/bf16. +- Q*K MMA is hardcoded to int32/int8 DPAS; `SparseSageConfig` carries a + `static_assert` that `ElementQ == int8_t` (INT8-only). + +**Native BF16/FP16 path:** `sparse_attention.py:sage_sparse_sdpa` → pybind +`ark.cpp:sage_sparse_sdpa` → `sdpa_sparse_sdpa.cpp` +(`sdpa_impl_{bf16,fp16}_sparse_sdpa_{d64,row_linear,qtile256_row64k}`) → +`SparseSDPAConfig` → `SPARSESDPAFwdMainloop` +(`wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`). + +- Q/K/V native precision; `scale_block_size = 0`, no dequant scales; softmax scale applied directly. +- Head dim 64/128, q_tile_override 0/64/256 (d64 / row_linear / qtile256_row64k). + +**Shared:** `sparge_preprocess_topk` (torch or triton preprocess backend), +`XeSparseSageFwdKernel` (`xe_sparse_sage_fwd_kernel.hpp`), `SparseFMHAFwdEpilogue`. + +**Removed by the refactor:** + +- `auto_round_kernel/sdpa_sparse_bf16.cpp` (superseded by `sdpa_sparse_sdpa.cpp`) +- `sage_sparse_bf16` (pybind binding + Python alias; was an alias of `sage_sparse_sdpa`) +- `sparge_sage2_attn_meansim_topk_xpu_bf16` (e2e wrapper) +- `sdpa_impl_bf16_sparse_{d64,row_linear,qtile256_row64k}` declarations +- native softmax-scale branch in the INT8 SAGE mainloop + +**Follow-up fix (verification pass):** `_query_tile_tokens_for_head_dim(64)` now returns +64 (was 128) so the preprocess None-default for head_dim 64 matches the sparse e2e +wrappers, fixing a pre-existing `tile_block_map` metadata mismatch that failed +`test_sparge_preprocess_topk_e2e.py`. + +## Public API Status + +BF16/FP16 sparse is exposed as: + +- `sage_sparse_sdpa(query, key, value, lut, valid_block_num, ...)` +- `sparge_sage2_attn_meansim_topk_xpu_sdpa(query, key, value, ...)` (end-to-end) + +INT8 sparse remains `sage_sparse` / `sparge_sage2_attn_meansim_topk_xpu`. +There is no `sage_sparse_bf16` anymore. + +## Build Status + +The XPU extension is rebuilt into `auto_round_kernel/ark-xbuild`: + +```bash +source /opt/intel/oneapi/setvars.sh --force >/dev/null 2>&1 +export MKLROOT=/opt/intel/oneapi/mkl/2026.1 +cmake -S auto_round_kernel -B auto_round_kernel/ark-xbuild \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=icx \ + -DARK_XPU=ON -DARK_SYCL_TLA=ON -DARK_DNNL=OFF -DARK_JOINT_MATRIX=OFF \ + -DDPCPP_SYCL_TARGET=intel_gpu_bmg_g21 +cmake --build auto_round_kernel/ark-xbuild -j 16 +``` + +**Important:** `auto_round_kernel/CMakeLists.txt` collects sources with +`file(GLOB SRCS .../*.cpp)` and has **no** `CONFIGURE_DEPENDS`. After adding/removing a +`.cpp` (e.g. the deleted `sdpa_sparse_bf16.cpp`), you MUST re-run `cmake -S ... -B ...` +before `cmake --build`, otherwise the stale build references the removed file and the old +`.so` still exports the old symbols. + +## Reproduce / Verify + +```bash +cd /home/yiliu4/workspace/auto-round/auto_round_extension/ark +# correctness (INT8 + BF16 + FP16). Set torch preprocess backend to avoid an XPU +# scatter/gather OOB assertion that the triton preprocess backend triggers on this host. +export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch +.venv/bin/python auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +.venv/bin/python auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py + +# benchmark (script already exports SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch, ZE_AFFINITY_MASK=6) +./tools/repro_sparse_bf16_sdpa_bench.sh +# CSV default: /tmp/bench_sparse_topk_bf16_dev6.csv +``` + +## Benchmark Status (2026-08-06) + +The BF16 sparse benchmark **completes successfully** (`status: ok`). Full sweep results +are in `benchmarks/results/bf16_sparse_20260806_full.csv`. Native-path +(`sparse_sdpa_bf16_*` via `sage_sparse_sdpa`) speedups vs dense torch SDPA: + +| case | kernel-only | e2e | +|---|---|---| +| seq 32768, topk 0.5 | 1.40–1.44x | 0.85–0.87x | +| seq 32768, topk 0.125 | 5.38–5.67x | 1.56–1.57x | +| seq 75600, topk 0.5 | 1.51–1.53x | 1.15x | +| seq 75600, topk 0.125 | 5.71–5.83x | 2.64–2.65x | + +The e2e mode is preprocess-bound at moderate sizes (topk 0.5 @ seq 32768) but wins at +larger seq_len / lower topk. These match the earlier mixed-path `sparse_bf16_*` numbers, +so the separation did not regress performance. + +## Known Caveats + +- **Preprocess backend:** use `SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch`. The triton + preprocess backend hits a PyTorch XPU scatter/gather "index out of bounds" assert on + this host (`ScatterGatherKernels.cpp:233`). The repro script already sets `torch`; + `tools/run_bf16_sparse_bench.sh` defaults to `triton_xpu` and should be overridden. +- **`scale_block_size == 0` on the native path:** `xe_sparse_sage_fwd_kernel.hpp` + guards the `seq_*_pad` division by `scale_block_size` to avoid div-by-zero UB; pads are + only used inside `scale_block_size ? ... : nullptr` ternaries. +- **INT8-only SAGE config:** `SparseSageConfig` enforces `ElementQ == int8_t` at compile + time. Use `SparseSDPAConfig` for native-precision BF16/FP16. +- **Stale docs:** `SPARSE_BF16_HANDOFF_20260805.md` (this file) supersedes the + pre-refactor handoff; `SPARSE_BF16_STATUS_20260729.md` / `SPARSE_BF16_BENCH_20260805.md` + are historical and refer to older builds/symbols. + +## Summary + +The BF16 native sparse path is fully separated from the INT8 SAGE path. The build wiring, +public API, correctness tests, and benchmark modes are in place; BF16 sparse completes and +outperforms dense torch SDPA. The main runtime caveat is the preprocess backend choice +(torch, not triton). Remaining work is any follow-up perf tuning or integration into the +Flux/Wan sparse examples via `sage_sparse_sdpa`. diff --git a/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805_CN.md b/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805_CN.md new file mode 100644 index 0000000000..5c8b7b0129 --- /dev/null +++ b/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805_CN.md @@ -0,0 +1,153 @@ +# Sparse BF16 交接文档(2026-08-06 更新) + +> **说明:** 本文档是 2026-08-05 交接文档的更新版。旧版描述的是重构前的状态,并且认为 +> BF16 benchmark 是失败的;这两点都已过时。BF16 sparse 路径已经从 INT8 sparse 路径中 +> 干净地分离出来,且最近的 benchmark 运行可以成功完成。 + +## 范围 + +交接 `auto_round_extension/ark` 中 `sparse BF16` 的工作,以 `feat/sparse-bf16-prefill-v2` +分支上的 INT8/BF16 路径分离重构之后的状态为准。 + +内容包括: + +- 最终架构(两条按精度分离的 sparse attention 路径) +- 公开 API +- 构建 / 验证 / 复现步骤 +- 当前 benchmark 状态与已知注意事项 + +## 目标 + +两条相互独立的 sparse SDPA 路径,每种精度一条: + +- **INT8** —— `sage_sparse` / `sparge_sage2_attn_meansim_topk_xpu` +- **BF16 / FP16** —— `sage_sparse_sdpa` / `sparge_sage2_attn_meansim_topk_xpu_sdpa` + +此前 BF16 原生路径被混进了以 INT8 为中心的 SAGE kernel 路径(`sage_sparse_bf16` 把原生 +Q/K 路由到 `SparseSageConfig` / `SPARSESAGEV1FwdMainloop`)。本次重构已移除该耦合。 + +## 当前环境 + +- 仓库:`/home/yiliu4/workspace/auto-round/auto_round_extension/ark` +- Python:`.venv/bin/python` +- PyTorch:`2.13.0+xpu`,`torch.version.xpu=20260000` +- oneAPI 编译器:`2026.1.1`(`/opt/intel/oneapi/compiler/2026.1`),MKL `2026.1` +- CMake XPU 构建目标:`intel_gpu_bmg_g21`,`ARK_SYCL_TLA=ON`,icx + +## 架构(重构后) + +**INT8 路径:** `sparse_attention.py:sage_sparse` → pybind `ark.cpp:sage_sparse` → +`sdpa_sparse.cpp`(`sdpa_impl_qks8_sparse_{d64,row_linear,qtile256_row64k}_pvhalf`)→ +`SparseSageConfig` → `SPARSESAGEV1FwdMainloop` +(`wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp`)。 + +- Q/K 为 `int8_t`(通过 qscale/kscale 反量化);V/PV 为 fp16/bf16。 +- Q*K MMA 固定为 int32/int8 DPAS;`SparseSageConfig` 内 `static_assert` 强制 + `ElementQ == int8_t`(仅支持 INT8)。 + +**BF16/FP16 原生路径:** `sparse_attention.py:sage_sparse_sdpa` → pybind +`ark.cpp:sage_sparse_sdpa` → `sdpa_sparse_sdpa.cpp` +(`sdpa_impl_{bf16,fp16}_sparse_sdpa_{d64,row_linear,qtile256_row64k}`)→ +`SparseSDPAConfig` → `SPARSESDPAFwdMainloop` +(`wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`)。 + +- Q/K/V 为原生精度;`scale_block_size = 0`,无反量化 scale;softmax scale 直接应用。 +- head_dim 64/128,q_tile_override 0/64/256(d64 / row_linear / qtile256_row64k)。 + +**共享部分:** `sparge_preprocess_topk`(torch 或 triton 的 preprocess 后端)、 +`XeSparseSageFwdKernel`(`xe_sparse_sage_fwd_kernel.hpp`)、`SparseFMHAFwdEpilogue`。 + +**本次重构移除的内容:** + +- `auto_round_kernel/sdpa_sparse_bf16.cpp`(由 `sdpa_sparse_sdpa.cpp` 取代) +- `sage_sparse_bf16`(pybind 绑定 + Python 别名;原先只是 `sage_sparse_sdpa` 的别名) +- `sparge_sage2_attn_meansim_topk_xpu_bf16`(端到端封装) +- `sdpa_impl_bf16_sparse_{d64,row_linear,qtile256_row64k}` 声明 +- INT8 SAGE mainloop 中的原生 softmax-scale 分支 + +**验证阶段的修复:** `_query_tile_tokens_for_head_dim(64)` 现在返回 64(原来返回 128),使 +head_dim 64 的 preprocess 默认值与 sparse e2e 封装保持一致,修复了导致 +`test_sparge_preprocess_topk_e2e.py` 失败的既有 `tile_block_map` 元数据不一致问题。 + +## 公开 API 状态 + +BF16/FP16 sparse 对外暴露为: + +- `sage_sparse_sdpa(query, key, value, lut, valid_block_num, ...)` +- `sparge_sage2_attn_meansim_topk_xpu_sdpa(query, key, value, ...)`(端到端) + +INT8 sparse 仍为 `sage_sparse` / `sparge_sage2_attn_meansim_topk_xpu`。不再有 +`sage_sparse_bf16`。 + +## 构建状态 + +XPU 扩展重建到 `auto_round_kernel/ark-xbuild`: + +```bash +source /opt/intel/oneapi/setvars.sh --force >/dev/null 2>&1 +export MKLROOT=/opt/intel/oneapi/mkl/2026.1 +cmake -S auto_round_kernel -B auto_round_kernel/ark-xbuild \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=icx \ + -DARK_XPU=ON -DARK_SYCL_TLA=ON -DARK_DNNL=OFF -DARK_JOINT_MATRIX=OFF \ + -DDPCPP_SYCL_TARGET=intel_gpu_bmg_g21 +cmake --build auto_round_kernel/ark-xbuild -j 16 +``` + +**重要:** `auto_round_kernel/CMakeLists.txt` 通过 `file(GLOB SRCS .../*.cpp)` 收集源文件, +且**没有** `CONFIGURE_DEPENDS`。新增/删除 `.cpp`(例如已删除的 `sdpa_sparse_bf16.cpp`)后, +**必须**先重新运行 `cmake -S ... -B ...` 再 `cmake --build`,否则旧构建仍会引用已删除的 +文件,且旧的 `.so` 仍然导出旧符号。 + +## 复现 / 验证 + +```bash +cd /home/yiliu4/workspace/auto-round/auto_round_extension/ark +# 正确性(INT8 + BF16 + FP16)。设置 torch preprocess 后端,避免 triton 后端在本机 +# 触发 XPU scatter/gather 越界断言。 +export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch +.venv/bin/python auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +.venv/bin/python auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py + +# benchmark(脚本已设置 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch、ZE_AFFINITY_MASK=6) +./tools/repro_sparse_bf16_sdpa_bench.sh +# CSV 默认输出:/tmp/bench_sparse_topk_bf16_dev6.csv +``` + +## Benchmark 状态(2026-08-06) + +BF16 sparse benchmark **可以成功跑完**(`status: ok`)。完整结果见 +`benchmarks/results/bf16_sparse_20260806_full.csv`。原生路径(`sparse_sdpa_bf16_*`, +经 `sage_sparse_sdpa`)相对 dense torch SDPA 的加速比: + +| 用例 | 仅 kernel | e2e | +|---|---|---| +| seq 32768、topk 0.5 | 1.40–1.44x | 0.85–0.87x | +| seq 32768、topk 0.125 | 5.38–5.67x | 1.56–1.57x | +| seq 75600、topk 0.5 | 1.51–1.53x | 1.15x | +| seq 75600、topk 0.125 | 5.71–5.83x | 2.64–2.65x | + +在中等规模(seq 32768、topk 0.5)下 e2e 主要受 preprocess 开销影响;在更大 seq_len 或 +更低 topk 下则更快。这些数字与此前混合路径 `sparse_bf16_*` 一致,说明分离没有造成 +性能回退。 + +## 已知注意事项 + +- **Preprocess 后端:** 使用 `SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch`。triton + preprocess 后端在本机会触发 PyTorch XPU scatter/gather 越界断言 + (`ScatterGatherKernels.cpp:233`)。复现脚本已设置 `torch`;`tools/run_bf16_sparse_bench.sh` + 默认是 `triton_xpu`,需要覆盖该变量。 +- **原生路径 `scale_block_size == 0`:** `xe_sparse_sage_fwd_kernel.hpp` 中对 + `seq_*_pad` 除以 `scale_block_size` 做了保护,避免除零 UB;pad 只在 + `scale_block_size ? ... : nullptr` 三元表达式中使用。 +- **仅 INT8 的 SAGE 配置:** `SparseSageConfig` 在编译期强制 `ElementQ == int8_t`。 + 原生精度 BF16/FP16 请使用 `SparseSDPAConfig`。 +- **过时文档:** 本文档(`SPARSE_BF16_HANDOFF_20260805.md`)取代重构前的交接文档; + `SPARSE_BF16_STATUS_20260729.md` / `SPARSE_BF16_BENCH_20260805.md` 属于历史记录, + 指向旧构建和旧符号。 + +## 总结 + +BF16 原生 sparse 路径已与 INT8 SAGE 路径完全分离。构建接线、公开 API、正确性测试和 +benchmark 模式均已就位;BF16 sparse 可以跑通并且快于 dense torch SDPA。主要运行时注意 +事项是 preprocess 后端的选择(用 torch,不要用 triton)。后续工作可继续在 Flux/Wan +sparse 示例中通过 `sage_sparse_sdpa` 做性能调优或集成。 From e39a2acb22827313bf33e726e8e2708b3502b354 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Mon, 10 Aug 2026 17:04:31 +0800 Subject: [PATCH 22/42] chore: add bf16-sparse FLUX.1-dev output image reference 512x512 render (50 steps) with the native bf16 sparse attention patch at topk 0.5 (avg sparsity 50%, all 2850 attention calls through the sparse path). Reference for the FLUX sparse-attention investigation. Co-Authored-By: Claude --- .../examples/flux_sparse_bf16_topk0.5_512.png | Bin 0 -> 343922 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 auto_round_extension/ark/examples/flux_sparse_bf16_topk0.5_512.png diff --git a/auto_round_extension/ark/examples/flux_sparse_bf16_topk0.5_512.png b/auto_round_extension/ark/examples/flux_sparse_bf16_topk0.5_512.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0e1eabf2c413ab9c056df492c0fe2bd694b06a GIT binary patch literal 343922 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%0DZpCGd(X1*6t*0r#V5VMQr?y$hh(Vl7 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%0DB{X*%MGM8uFj_HkjMhl@=sELA^?hvn#jbb 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 Date: Tue, 11 Aug 2026 08:02:28 +0000 Subject: [PATCH 23/42] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../ark/auto_round_kernel/sparse_attention.py | 14 ++++---------- .../ark/tools/repro_sparse_bf16_sdpa_bench.sh | 3 +++ .../ark/tools/run_bf16_sparse_bench.sh | 3 +++ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py index fc1da94539..6ff52a3245 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py +++ b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py @@ -284,9 +284,7 @@ def sage_sparse_sdpa( tensor_layout=tensor_layout, ) stream = get_stream(query) - O = _empty_attention_output( - B, Hq, Sq, D, dtype=value.dtype, device=query.device, tensor_layout=tensor_layout - ) + O = _empty_attention_output(B, Hq, Sq, D, dtype=value.dtype, device=query.device, tensor_layout=tensor_layout) q_dtype = 1 if query.dtype == torch.bfloat16 else 0 # FlashAttnDtype: 0=FP16, 1=BF16 lib.sage_sparse_sdpa( stream, @@ -767,9 +765,7 @@ def _block_map_lut_torch(block_map: torch.Tensor) -> tuple[torch.Tensor, torch.T # in-place assignment silently misses entries on the XPU backend (torch-xpu-ops), # leaving 0s in the mask that become -1 in the LUT after sort and drive the # ScatterGatherKernels out-of-bounds assert downstream. Use torch.where instead. - filled_matrix = torch.where( - block_map, masked_cum_matrix, torch.full_like(masked_cum_matrix, 10_000_000) - ) + filled_matrix = torch.where(block_map, masked_cum_matrix, torch.full_like(masked_cum_matrix, 10_000_000)) lut = torch.sort(filled_matrix, dim=-1)[0] - 1 lut[..., 1:] = lut[..., 1:] - lut[..., :-1] invalid_mask = torch.arange(num_k_blocks, device=block_map.device).view( @@ -1542,8 +1538,8 @@ def sparge_sage2_attn_meansim_topk_xpu( effective_query_tile_tokens = q_tile_override elif effective_query_tile_tokens is not None: if q_tile_override == 0: - effective_q_tile_override = 0 if D == 64 and int(effective_query_tile_tokens) == 64 else int( - effective_query_tile_tokens + effective_q_tile_override = ( + 0 if D == 64 and int(effective_query_tile_tokens) == 64 else int(effective_query_tile_tokens) ) elif q_tile_override != int(effective_query_tile_tokens): raise ValueError( @@ -1714,5 +1710,3 @@ def sparge_sage2_attn_meansim_topk_xpu_sdpa( if return_sparsity: return out, sparsity_ratio return out - - diff --git a/auto_round_extension/ark/tools/repro_sparse_bf16_sdpa_bench.sh b/auto_round_extension/ark/tools/repro_sparse_bf16_sdpa_bench.sh index d26c692b48..fb5f372ce1 100755 --- a/auto_round_extension/ark/tools/repro_sparse_bf16_sdpa_bench.sh +++ b/auto_round_extension/ark/tools/repro_sparse_bf16_sdpa_bench.sh @@ -1,5 +1,8 @@ #!/usr/bin/env bash +# # Copyright (C) 2026 Intel Corporation +# # SPDX-License-Identifier: Apache-2.0 + set -euo pipefail SCRIPT_PATH="$(readlink -f "$0")" diff --git a/auto_round_extension/ark/tools/run_bf16_sparse_bench.sh b/auto_round_extension/ark/tools/run_bf16_sparse_bench.sh index e2253a011f..93c4b65ca2 100755 --- a/auto_round_extension/ark/tools/run_bf16_sparse_bench.sh +++ b/auto_round_extension/ark/tools/run_bf16_sparse_bench.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# # Copyright (C) 2026 Intel Corporation +# # SPDX-License-Identifier: Apache-2.0 + # # run_bf16_sparse_bench.sh # ======================== From 0ca035fb045f0d3f0e4add984333e9c9a36aa245 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 11 Aug 2026 16:06:48 +0800 Subject: [PATCH 24/42] clean Signed-off-by: yiliu30 --- .../ark/SPARSE_BF16_HANDOFF_20260805_CN.md | 153 ------------- .../ark/SPARSE_BF16_STATUS_20260729.md | 205 ------------------ .../ark/SPARSE_BF16_STATUS_20260729_CN.md | 205 ------------------ 3 files changed, 563 deletions(-) delete mode 100644 auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805_CN.md delete mode 100644 auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md delete mode 100644 auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md diff --git a/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805_CN.md b/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805_CN.md deleted file mode 100644 index 5c8b7b0129..0000000000 --- a/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805_CN.md +++ /dev/null @@ -1,153 +0,0 @@ -# Sparse BF16 交接文档(2026-08-06 更新) - -> **说明:** 本文档是 2026-08-05 交接文档的更新版。旧版描述的是重构前的状态,并且认为 -> BF16 benchmark 是失败的;这两点都已过时。BF16 sparse 路径已经从 INT8 sparse 路径中 -> 干净地分离出来,且最近的 benchmark 运行可以成功完成。 - -## 范围 - -交接 `auto_round_extension/ark` 中 `sparse BF16` 的工作,以 `feat/sparse-bf16-prefill-v2` -分支上的 INT8/BF16 路径分离重构之后的状态为准。 - -内容包括: - -- 最终架构(两条按精度分离的 sparse attention 路径) -- 公开 API -- 构建 / 验证 / 复现步骤 -- 当前 benchmark 状态与已知注意事项 - -## 目标 - -两条相互独立的 sparse SDPA 路径,每种精度一条: - -- **INT8** —— `sage_sparse` / `sparge_sage2_attn_meansim_topk_xpu` -- **BF16 / FP16** —— `sage_sparse_sdpa` / `sparge_sage2_attn_meansim_topk_xpu_sdpa` - -此前 BF16 原生路径被混进了以 INT8 为中心的 SAGE kernel 路径(`sage_sparse_bf16` 把原生 -Q/K 路由到 `SparseSageConfig` / `SPARSESAGEV1FwdMainloop`)。本次重构已移除该耦合。 - -## 当前环境 - -- 仓库:`/home/yiliu4/workspace/auto-round/auto_round_extension/ark` -- Python:`.venv/bin/python` -- PyTorch:`2.13.0+xpu`,`torch.version.xpu=20260000` -- oneAPI 编译器:`2026.1.1`(`/opt/intel/oneapi/compiler/2026.1`),MKL `2026.1` -- CMake XPU 构建目标:`intel_gpu_bmg_g21`,`ARK_SYCL_TLA=ON`,icx - -## 架构(重构后) - -**INT8 路径:** `sparse_attention.py:sage_sparse` → pybind `ark.cpp:sage_sparse` → -`sdpa_sparse.cpp`(`sdpa_impl_qks8_sparse_{d64,row_linear,qtile256_row64k}_pvhalf`)→ -`SparseSageConfig` → `SPARSESAGEV1FwdMainloop` -(`wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp`)。 - -- Q/K 为 `int8_t`(通过 qscale/kscale 反量化);V/PV 为 fp16/bf16。 -- Q*K MMA 固定为 int32/int8 DPAS;`SparseSageConfig` 内 `static_assert` 强制 - `ElementQ == int8_t`(仅支持 INT8)。 - -**BF16/FP16 原生路径:** `sparse_attention.py:sage_sparse_sdpa` → pybind -`ark.cpp:sage_sparse_sdpa` → `sdpa_sparse_sdpa.cpp` -(`sdpa_impl_{bf16,fp16}_sparse_sdpa_{d64,row_linear,qtile256_row64k}`)→ -`SparseSDPAConfig` → `SPARSESDPAFwdMainloop` -(`wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`)。 - -- Q/K/V 为原生精度;`scale_block_size = 0`,无反量化 scale;softmax scale 直接应用。 -- head_dim 64/128,q_tile_override 0/64/256(d64 / row_linear / qtile256_row64k)。 - -**共享部分:** `sparge_preprocess_topk`(torch 或 triton 的 preprocess 后端)、 -`XeSparseSageFwdKernel`(`xe_sparse_sage_fwd_kernel.hpp`)、`SparseFMHAFwdEpilogue`。 - -**本次重构移除的内容:** - -- `auto_round_kernel/sdpa_sparse_bf16.cpp`(由 `sdpa_sparse_sdpa.cpp` 取代) -- `sage_sparse_bf16`(pybind 绑定 + Python 别名;原先只是 `sage_sparse_sdpa` 的别名) -- `sparge_sage2_attn_meansim_topk_xpu_bf16`(端到端封装) -- `sdpa_impl_bf16_sparse_{d64,row_linear,qtile256_row64k}` 声明 -- INT8 SAGE mainloop 中的原生 softmax-scale 分支 - -**验证阶段的修复:** `_query_tile_tokens_for_head_dim(64)` 现在返回 64(原来返回 128),使 -head_dim 64 的 preprocess 默认值与 sparse e2e 封装保持一致,修复了导致 -`test_sparge_preprocess_topk_e2e.py` 失败的既有 `tile_block_map` 元数据不一致问题。 - -## 公开 API 状态 - -BF16/FP16 sparse 对外暴露为: - -- `sage_sparse_sdpa(query, key, value, lut, valid_block_num, ...)` -- `sparge_sage2_attn_meansim_topk_xpu_sdpa(query, key, value, ...)`(端到端) - -INT8 sparse 仍为 `sage_sparse` / `sparge_sage2_attn_meansim_topk_xpu`。不再有 -`sage_sparse_bf16`。 - -## 构建状态 - -XPU 扩展重建到 `auto_round_kernel/ark-xbuild`: - -```bash -source /opt/intel/oneapi/setvars.sh --force >/dev/null 2>&1 -export MKLROOT=/opt/intel/oneapi/mkl/2026.1 -cmake -S auto_round_kernel -B auto_round_kernel/ark-xbuild \ - -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=icx \ - -DARK_XPU=ON -DARK_SYCL_TLA=ON -DARK_DNNL=OFF -DARK_JOINT_MATRIX=OFF \ - -DDPCPP_SYCL_TARGET=intel_gpu_bmg_g21 -cmake --build auto_round_kernel/ark-xbuild -j 16 -``` - -**重要:** `auto_round_kernel/CMakeLists.txt` 通过 `file(GLOB SRCS .../*.cpp)` 收集源文件, -且**没有** `CONFIGURE_DEPENDS`。新增/删除 `.cpp`(例如已删除的 `sdpa_sparse_bf16.cpp`)后, -**必须**先重新运行 `cmake -S ... -B ...` 再 `cmake --build`,否则旧构建仍会引用已删除的 -文件,且旧的 `.so` 仍然导出旧符号。 - -## 复现 / 验证 - -```bash -cd /home/yiliu4/workspace/auto-round/auto_round_extension/ark -# 正确性(INT8 + BF16 + FP16)。设置 torch preprocess 后端,避免 triton 后端在本机 -# 触发 XPU scatter/gather 越界断言。 -export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch -.venv/bin/python auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py -.venv/bin/python auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py - -# benchmark(脚本已设置 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch、ZE_AFFINITY_MASK=6) -./tools/repro_sparse_bf16_sdpa_bench.sh -# CSV 默认输出:/tmp/bench_sparse_topk_bf16_dev6.csv -``` - -## Benchmark 状态(2026-08-06) - -BF16 sparse benchmark **可以成功跑完**(`status: ok`)。完整结果见 -`benchmarks/results/bf16_sparse_20260806_full.csv`。原生路径(`sparse_sdpa_bf16_*`, -经 `sage_sparse_sdpa`)相对 dense torch SDPA 的加速比: - -| 用例 | 仅 kernel | e2e | -|---|---|---| -| seq 32768、topk 0.5 | 1.40–1.44x | 0.85–0.87x | -| seq 32768、topk 0.125 | 5.38–5.67x | 1.56–1.57x | -| seq 75600、topk 0.5 | 1.51–1.53x | 1.15x | -| seq 75600、topk 0.125 | 5.71–5.83x | 2.64–2.65x | - -在中等规模(seq 32768、topk 0.5)下 e2e 主要受 preprocess 开销影响;在更大 seq_len 或 -更低 topk 下则更快。这些数字与此前混合路径 `sparse_bf16_*` 一致,说明分离没有造成 -性能回退。 - -## 已知注意事项 - -- **Preprocess 后端:** 使用 `SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch`。triton - preprocess 后端在本机会触发 PyTorch XPU scatter/gather 越界断言 - (`ScatterGatherKernels.cpp:233`)。复现脚本已设置 `torch`;`tools/run_bf16_sparse_bench.sh` - 默认是 `triton_xpu`,需要覆盖该变量。 -- **原生路径 `scale_block_size == 0`:** `xe_sparse_sage_fwd_kernel.hpp` 中对 - `seq_*_pad` 除以 `scale_block_size` 做了保护,避免除零 UB;pad 只在 - `scale_block_size ? ... : nullptr` 三元表达式中使用。 -- **仅 INT8 的 SAGE 配置:** `SparseSageConfig` 在编译期强制 `ElementQ == int8_t`。 - 原生精度 BF16/FP16 请使用 `SparseSDPAConfig`。 -- **过时文档:** 本文档(`SPARSE_BF16_HANDOFF_20260805.md`)取代重构前的交接文档; - `SPARSE_BF16_STATUS_20260729.md` / `SPARSE_BF16_BENCH_20260805.md` 属于历史记录, - 指向旧构建和旧符号。 - -## 总结 - -BF16 原生 sparse 路径已与 INT8 SAGE 路径完全分离。构建接线、公开 API、正确性测试和 -benchmark 模式均已就位;BF16 sparse 可以跑通并且快于 dense torch SDPA。主要运行时注意 -事项是 preprocess 后端的选择(用 torch,不要用 triton)。后续工作可继续在 Flux/Wan -sparse 示例中通过 `sage_sparse_sdpa` 做性能调优或集成。 diff --git a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md deleted file mode 100644 index 87902eafa6..0000000000 --- a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729.md +++ /dev/null @@ -1,205 +0,0 @@ -# Sparse BF16 Status 2026-07-29 - -## Scope - -This note captures the current sparse attention status on Wednesday, July 29, 2026 after rebuilding with oneAPI 2025 and rerunning focused accuracy and performance checks on XPU 7. - -Environment: - -- `ONEAPI_ROOT=/home/yiliu4/intel/oneapi` -- Python: `/home/yiliu4/workspace/auto-round-prefill-clean-sparse-pr/auto_round_extension/ark/ark-torch-212/bin/python` -- device: `XPU_MASK=7` -- native BF16 sparse enabled with `SAGE_ATTN_XPU_SPARSE_BF16_NATIVE=1` -- rebuilt extension: `auto_round_kernel/xbuild_bf16_v2/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so` - -Kernel config under test: - -- `head_dim=128` -- `q_tile_override=256` -- `sparse_q_block_tokens=256` -- `sparse_k_block_tokens=64` -- layout: `HND` - -## Accuracy Status - -### Fixed-LUT sparse kernel - -`fixed-LUT sparse` means the sparse mask is explicitly provided by `lut` and `valid_block_num`, and the kernel is checked against an exact dense BF16 reference with the same mask. - -Target correctness case: - -- shape: `B=1, Hq=32, Hkv=8, Sq=512, Skv=768, D=128` -- sparse pattern: first Q tile uses K blocks `[0, 1, 2]`, second Q tile uses `[9, 10, 11]` -- reference: explicit BF16 `Q @ K^T`, add exact mask, softmax, then `P @ V` - -Result: - -- `bf16_sparse` vs exact BF16 reference: - - `max_diff=0.003906` - - `mean_diff=0.000127` - -Comparison on the same case: - -- `int8_sparse` vs exact BF16 reference: - - `max_diff=3.826172` - - `mean_diff=0.344735` -- `int8_sparse` vs `bf16_sparse`: - - `max_diff=3.826172` - - `mean_diff=0.344735` - -Conclusion: - -- `bf16_sparse` is accurate for the exact fixed-LUT sparse kernel path. -- `int8_sparse` is materially less accurate than `bf16_sparse` on the same case. - -### Heuristic top-k end-to-end path - -The `sparge_sage2_attn_meansim_topk_xpu_bf16` path is heuristic. It should not be treated as an exact correctness reference for a handcrafted LUT mask. - -Because of that, the BF16 sparse test now treats: - -- exact correctness: `sage_sparse_bf16` vs explicit masked BF16 reference -- heuristic top-k path: benchmark/perf path, not exact reference - -## Test Harness Status - -File updated: - -- `auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py` - -Current test harness behavior: - -- force-loads the rebuilt BF16-capable extension from `xbuild_bf16_v2` -- uses explicit masked BF16 math as the BF16 sparse correctness reference -- no longer treats heuristic BF16 top-k output as an exact oracle for the fixed-LUT kernel - -Verified run: - -```bash -source benchmarks/source_env_xpu67_oneapi2025.sh -export XPU_MASK=7 -export SAGE_ATTN_XPU_SPARSE_BF16_NATIVE=1 -${ARK_BENCH_PYTHON} auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py -``` - -Observed result: - -- full script exits successfully under oneAPI 2025 -- INT8 sparse cases pass -- BF16 sparse exact-reference cases pass - -## Performance Status - -### Medium-size exact sparse case - -Shape: - -- `B=1, Hq=32, Hkv=8, Sq=512, Skv=768, D=128` - -Latency: - -- dense BF16 with exact mask: `0.105 ms` -- `bf16_sparse`: `0.096 ms` -- `int8_sparse`: `0.090 ms` -- INT8 Q/K quantization only: `0.027 ms` - -Speedup vs dense BF16 exact-mask baseline: - -- `bf16_sparse`: `1.093x` -- `int8_sparse`: `1.175x` -- `int8_sparse + quant`: `0.902x` - -Conclusion: - -- kernel-only, `int8_sparse` is slightly faster -- including quantization, this small/medium case does not favor the INT8 path -- `bf16_sparse` is the better accuracy point here - -### Long-sequence benchmark - -Shape: - -- `B=1, Hq=40, Hkv=40, S=75000, D=128` -- layout: `HND` -- `topk=0.5` -- `q_tile_override=256` -- `sparse_q_block_tokens=256` -- `sparse_k_block_tokens=64` - -Sparse selection stats: - -- `selected_ratio=0.502557` -- `selected_blocks_per_row=588.997` - -Sparse timings: - -- `preprocess=127.809 ms` -- `int8_sparse_kernel=390.990 ms` -- `int8_sparse_e2e=501.369 ms` -- `bf16_sparse_kernel=804.864 ms` -- `bf16_sparse_e2e=919.896 ms` - -Dense BF16 baselines on the same shape: - -- `dense_torch_sdpa_bf16=2154.809 ms` -- `dense_ark_sdpa_bf16=2494.633 ms` -- `dense_ark_sagev1_bf16=10848.612 ms` - -Speedup vs dense torch BF16 SDPA: - -- `int8_sparse_e2e`: about `4.30x` -- `bf16_sparse_e2e`: about `2.34x` - -Speedup vs dense ARK BF16 SDPA: - -- `int8_sparse_e2e`: about `4.98x` -- `bf16_sparse_e2e`: about `2.71x` - -Conclusion: - -- at `75k / 40 / 128`, both sparse paths are substantially faster than dense BF16 -- `int8_sparse` remains the fastest path -- `bf16_sparse` is slower than `int8_sparse` but still much faster than dense BF16 - -## Current Summary - -- BF16 sparse fixed-LUT kernel correctness is in good shape after rebuilding with oneAPI 2025. -- The previous BF16 mismatch was caused by stale extension loading and an unreliable masked-XPU reference path in the test harness. -- For long sequences, BF16 sparse is a valid accuracy-oriented sparse path with meaningful speedup over dense BF16. -- INT8 sparse is still the fastest sparse option, but it gives up substantial accuracy relative to BF16 sparse on the exact fixed-LUT check. - -## July 30 Rerun Summary - -On Thursday, July 30, 2026, the `75k / topk=0.5` case was rerun on an idle `XPU 7` with oneAPI 2025 and the BF16-capable sparse extension explicitly loaded from `auto_round_kernel/xbuild_bf16_v2/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so`. - -Shape and config: - -- `B=1, Hq=40, Hkv=40, S=75000, D=128` -- layout: `HND` -- `topk=0.5` -- `q_tile_override=256` -- `sparse_q_block_tokens=256` -- `sparse_k_block_tokens=64` -- warmup `2`, iters `3` - -Sparse selection stats: - -- `selected_ratio=0.502557` -- `selected_blocks_per_row=588.997` - -Latency and throughput summary: - -| Mode | Latency (ms) | Speedup vs Torch BF16 | Speedup vs SageV1 BF16 | Baseline TFLOPS | Effective TFLOPS | -|---|---:|---:|---:|---:|---:| -| `dense_torch_sdpa_bf16` | 1263.297 | 1.000 | 0.595 | 91.190 | 91.190 | -| `dense_sagev1_bf16` | 751.410 | 1.681 | 1.000 | 153.312 | 153.312 | -| `sparse_qtile256_row64k_kernel_only` | 398.381 | 3.305 | 1.944 | 289.171 | 145.325 | -| `sparse_qtile256_row64k_e2e` | 514.271 | 2.560 | 1.506 | 224.007 | 112.576 | -| `sparse_bf16_qtile256_row64k_kernel_only` | 812.091 | 1.556 | 0.925 | 141.856 | 71.291 | -| `sparse_bf16_qtile256_row64k_e2e` | 928.958 | 1.360 | 0.809 | 124.010 | 62.322 | - -Notes: - -- `kernel_only` is sparse kernel time after preprocess. -- `e2e` includes preprocess plus kernel. -- On this rerun, BF16 sparse is faster than dense torch BF16 SDPA, but still slower than dense `sagev1_bf16`. diff --git a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md b/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md deleted file mode 100644 index a6cb5fde5c..0000000000 --- a/auto_round_extension/ark/SPARSE_BF16_STATUS_20260729_CN.md +++ /dev/null @@ -1,205 +0,0 @@ -# Sparse BF16 状态 2026-07-29 - -## 范围 - -本文档记录了 2026 年 7 月 29 日(星期三)在 oneAPI 2025 环境下重新构建并在 XPU 7 上复测后的 sparse attention 当前状态。 - -环境: - -- `ONEAPI_ROOT=/home/yiliu4/intel/oneapi` -- Python: `/home/yiliu4/workspace/auto-round-prefill-clean-sparse-pr/auto_round_extension/ark/ark-torch-212/bin/python` -- 设备:`XPU_MASK=7` -- 原生 BF16 sparse 打开:`SAGE_ATTN_XPU_SPARSE_BF16_NATIVE=1` -- 重建后的扩展:`auto_round_kernel/xbuild_bf16_v2/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so` - -本次测试的 kernel 配置: - -- `head_dim=128` -- `q_tile_override=256` -- `sparse_q_block_tokens=256` -- `sparse_k_block_tokens=64` -- layout:`HND` - -## 精度状态 - -### 固定 LUT sparse kernel - -这里的 `fixed-LUT sparse` 指 sparse mask 由 `lut` 和 `valid_block_num` 显式给出,然后用相同 mask 的精确 dense BF16 参考结果进行校验。 - -目标正确性用例: - -- shape:`B=1, Hq=32, Hkv=8, Sq=512, Skv=768, D=128` -- sparse pattern:第一个 Q tile 使用 K blocks `[0, 1, 2]`,第二个 Q tile 使用 `[9, 10, 11]` -- 参考实现:显式 BF16 `Q @ K^T`,加精确 mask,softmax,然后 `P @ V` - -结果: - -- `bf16_sparse` 对比精确 BF16 参考: - - `max_diff=0.003906` - - `mean_diff=0.000127` - -同一用例下的对比: - -- `int8_sparse` 对比精确 BF16 参考: - - `max_diff=3.826172` - - `mean_diff=0.344735` -- `int8_sparse` 对比 `bf16_sparse`: - - `max_diff=3.826172` - - `mean_diff=0.344735` - -结论: - -- `bf16_sparse` 在精确 fixed-LUT sparse kernel 路径上是准确的。 -- 同一用例下,`int8_sparse` 的精度明显差于 `bf16_sparse`。 - -### 启发式 top-k 端到端路径 - -`sparge_sage2_attn_meansim_topk_xpu_bf16` 是启发式路径,不应该作为手工构造 LUT mask 的精确正确性参考。 - -因此当前 BF16 sparse 测试的含义是: - -- 精确正确性:`sage_sparse_bf16` 对比显式 masked BF16 参考 -- 启发式 top-k 路径:用于 benchmark / perf,不作为精确 oracle - -## 测试状态 - -更新文件: - -- `auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py` - -当前测试脚本行为: - -- 强制加载 `xbuild_bf16_v2` 中带 BF16 sparse 能力的扩展 -- 使用显式 masked BF16 数学结果作为 BF16 sparse 正确性参考 -- 不再把启发式 BF16 top-k 输出当成 fixed-LUT kernel 的精确标准答案 - -验证命令: - -```bash -source benchmarks/source_env_xpu67_oneapi2025.sh -export XPU_MASK=7 -export SAGE_ATTN_XPU_SPARSE_BF16_NATIVE=1 -${ARK_BENCH_PYTHON} auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py -``` - -观察结果: - -- 整个脚本在 oneAPI 2025 下成功退出 -- INT8 sparse 用例通过 -- BF16 sparse 精确参考用例通过 - -## 性能状态 - -### 中等尺寸精确 sparse 用例 - -Shape: - -- `B=1, Hq=32, Hkv=8, Sq=512, Skv=768, D=128` - -时延: - -- 带精确 mask 的 dense BF16:`0.105 ms` -- `bf16_sparse`:`0.096 ms` -- `int8_sparse`:`0.090 ms` -- 仅 INT8 Q/K 量化:`0.027 ms` - -相对 dense BF16 精确 mask 基线的加速比: - -- `bf16_sparse`:`1.093x` -- `int8_sparse`:`1.175x` -- `int8_sparse + quant`:`0.902x` - -结论: - -- 只看 kernel,`int8_sparse` 略快 -- 如果把量化时间算进去,这个中等尺寸用例并不偏向 INT8 路径 -- 这里 `bf16_sparse` 是更好的精度点 - -### 长序列 benchmark - -Shape: - -- `B=1, Hq=40, Hkv=40, S=75000, D=128` -- layout:`HND` -- `topk=0.5` -- `q_tile_override=256` -- `sparse_q_block_tokens=256` -- `sparse_k_block_tokens=64` - -sparse 选择统计: - -- `selected_ratio=0.502557` -- `selected_blocks_per_row=588.997` - -sparse 时延: - -- `preprocess=127.809 ms` -- `int8_sparse_kernel=390.990 ms` -- `int8_sparse_e2e=501.369 ms` -- `bf16_sparse_kernel=804.864 ms` -- `bf16_sparse_e2e=919.896 ms` - -同一 shape 下的 dense BF16 基线: - -- `dense_torch_sdpa_bf16=2154.809 ms` -- `dense_ark_sdpa_bf16=2494.633 ms` -- `dense_ark_sagev1_bf16=10848.612 ms` - -相对 dense torch BF16 SDPA 的加速比: - -- `int8_sparse_e2e`:约 `4.30x` -- `bf16_sparse_e2e`:约 `2.34x` - -相对 dense ARK BF16 SDPA 的加速比: - -- `int8_sparse_e2e`:约 `4.98x` -- `bf16_sparse_e2e`:约 `2.71x` - -结论: - -- 在 `75k / 40 / 128` 下,两条 sparse 路径都明显快于 dense BF16 -- `int8_sparse` 仍然是最快路径 -- `bf16_sparse` 虽然慢于 `int8_sparse`,但仍然显著快于 dense BF16 - -## 当前结论 - -- 在 oneAPI 2025 重新构建后,BF16 sparse fixed-LUT kernel 的正确性状态是好的。 -- 之前 BF16 mismatch 的主要原因是旧扩展被错误加载,以及测试里使用了不可靠的 masked XPU 参考路径。 -- 对长序列来说,BF16 sparse 是一个兼顾精度的 sparse 路径,并且相对 dense BF16 有明显加速。 -- `int8_sparse` 仍然是最快的 sparse 方案,但在精确 fixed-LUT 检查里,相比 `bf16_sparse` 牺牲了明显精度。 - -## 2026-07-30 复测摘要 - -在 2026 年 7 月 30 日(星期四),对 `75k / topk=0.5` 用例进行了重新测试。测试使用空闲的 `XPU 7`、oneAPI 2025,并且显式加载了带 BF16 sparse 能力的扩展 `auto_round_kernel/xbuild_bf16_v2/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so`。 - -Shape 和配置: - -- `B=1, Hq=40, Hkv=40, S=75000, D=128` -- layout:`HND` -- `topk=0.5` -- `q_tile_override=256` -- `sparse_q_block_tokens=256` -- `sparse_k_block_tokens=64` -- warmup `2`,iters `3` - -sparse 选择统计: - -- `selected_ratio=0.502557` -- `selected_blocks_per_row=588.997` - -时延和吞吐摘要: - -| Mode | Latency (ms) | Speedup vs Torch BF16 | Speedup vs SageV1 BF16 | Baseline TFLOPS | Effective TFLOPS | -|---|---:|---:|---:|---:|---:| -| `dense_torch_sdpa_bf16` | 1263.297 | 1.000 | 0.595 | 91.190 | 91.190 | -| `dense_sagev1_bf16` | 751.410 | 1.681 | 1.000 | 153.312 | 153.312 | -| `sparse_qtile256_row64k_kernel_only` | 398.381 | 3.305 | 1.944 | 289.171 | 145.325 | -| `sparse_qtile256_row64k_e2e` | 514.271 | 2.560 | 1.506 | 224.007 | 112.576 | -| `sparse_bf16_qtile256_row64k_kernel_only` | 812.091 | 1.556 | 0.925 | 141.856 | 71.291 | -| `sparse_bf16_qtile256_row64k_e2e` | 928.958 | 1.360 | 0.809 | 124.010 | 62.322 | - -说明: - -- `kernel_only` 表示 preprocess 之后仅 kernel 的时间。 -- `e2e` 表示 preprocess 加 kernel 的总时间。 -- 这次复测中,BF16 sparse 比 dense torch BF16 SDPA 更快,但仍然慢于 dense `sagev1_bf16`。 From a559dc82fcf2d851a388428bf0a0d501b3b862bd Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 11 Aug 2026 16:18:43 +0800 Subject: [PATCH 25/42] chore: drop dev handoff and generated images from bf16 sparse branch The bf16 sparse feature is source-only for the formal PR: remove the dev handoff note (no _CN counterpart) and the generated benchmark/render PNGs. Co-Authored-By: Claude --- .../ark/SPARSE_BF16_HANDOFF_20260805.md | 158 ------------------ .../ark/bf16_sparse_speedup_vs_dense_sdpa.png | Bin 157588 -> 0 bytes .../examples/flux_sparse_bf16_topk0.5_512.png | Bin 343922 -> 0 bytes 3 files changed, 158 deletions(-) delete mode 100644 auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805.md delete mode 100644 auto_round_extension/ark/bf16_sparse_speedup_vs_dense_sdpa.png delete mode 100644 auto_round_extension/ark/examples/flux_sparse_bf16_topk0.5_512.png diff --git a/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805.md b/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805.md deleted file mode 100644 index 53859d42e0..0000000000 --- a/auto_round_extension/ark/SPARSE_BF16_HANDOFF_20260805.md +++ /dev/null @@ -1,158 +0,0 @@ -# Sparse BF16 Handoff (updated 2026-08-06) - -> **Note:** This is a refresh of the 2026-08-05 handoff. The earlier version described a -> pre-refactor state and reported the BF16 benchmark as failing; both are stale. The BF16 -> sparse path has been cleanly separated from the INT8 sparse path, and recent benchmark -> runs complete successfully. - -## Scope - -Handoff for the `sparse BF16` work in `auto_round_extension/ark` after the INT8/BF16 -path-separation refactor on branch `feat/sparse-bf16-prefill-v2`. - -Covers: - -- the final architecture (two clean, per-dtype sparse attention paths) -- the public API -- build/verify/reproduce steps -- current benchmark status and known caveats - -## Goal - -Two independent sparse SDPA paths, one per precision: - -- **INT8** — `sage_sparse` / `sparge_sage2_attn_meansim_topk_xpu` -- **BF16 / FP16** — `sage_sparse_sdpa` / `sparge_sage2_attn_meansim_topk_xpu_sdpa` - -Previously the BF16 native path was mixed into the INT8-centric SAGE kernel path -(`sage_sparse_bf16` routed native Q/K through `SparseSageConfig` / -`SPARSESAGEV1FwdMainloop`). The refactor removed that coupling. - -## Current Environment - -- repo: `/home/yiliu4/workspace/auto-round/auto_round_extension/ark` -- Python: `.venv/bin/python` -- PyTorch: `2.13.0+xpu`, `torch.version.xpu=20260000` -- oneAPI compiler: `2026.1.1` (`/opt/intel/oneapi/compiler/2026.1`), MKL `2026.1` -- CMake XPU build target: `intel_gpu_bmg_g21`, `ARK_SYCL_TLA=ON`, icx - -## Architecture (post-refactor) - -**INT8 path:** `sparse_attention.py:sage_sparse` → pybind `ark.cpp:sage_sparse` → -`sdpa_sparse.cpp` (`sdpa_impl_qks8_sparse_{d64,row_linear,qtile256_row64k}_pvhalf`) → -`SparseSageConfig` → `SPARSESAGEV1FwdMainloop` -(`wrapper/include/stla/xe_sparse_sagev1_fwd_mainloop.hpp`). - -- Q/K are `int8_t` (dequantized via qscale/kscale); V/PV is fp16/bf16. -- Q*K MMA is hardcoded to int32/int8 DPAS; `SparseSageConfig` carries a - `static_assert` that `ElementQ == int8_t` (INT8-only). - -**Native BF16/FP16 path:** `sparse_attention.py:sage_sparse_sdpa` → pybind -`ark.cpp:sage_sparse_sdpa` → `sdpa_sparse_sdpa.cpp` -(`sdpa_impl_{bf16,fp16}_sparse_sdpa_{d64,row_linear,qtile256_row64k}`) → -`SparseSDPAConfig` → `SPARSESDPAFwdMainloop` -(`wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`). - -- Q/K/V native precision; `scale_block_size = 0`, no dequant scales; softmax scale applied directly. -- Head dim 64/128, q_tile_override 0/64/256 (d64 / row_linear / qtile256_row64k). - -**Shared:** `sparge_preprocess_topk` (torch or triton preprocess backend), -`XeSparseSageFwdKernel` (`xe_sparse_sage_fwd_kernel.hpp`), `SparseFMHAFwdEpilogue`. - -**Removed by the refactor:** - -- `auto_round_kernel/sdpa_sparse_bf16.cpp` (superseded by `sdpa_sparse_sdpa.cpp`) -- `sage_sparse_bf16` (pybind binding + Python alias; was an alias of `sage_sparse_sdpa`) -- `sparge_sage2_attn_meansim_topk_xpu_bf16` (e2e wrapper) -- `sdpa_impl_bf16_sparse_{d64,row_linear,qtile256_row64k}` declarations -- native softmax-scale branch in the INT8 SAGE mainloop - -**Follow-up fix (verification pass):** `_query_tile_tokens_for_head_dim(64)` now returns -64 (was 128) so the preprocess None-default for head_dim 64 matches the sparse e2e -wrappers, fixing a pre-existing `tile_block_map` metadata mismatch that failed -`test_sparge_preprocess_topk_e2e.py`. - -## Public API Status - -BF16/FP16 sparse is exposed as: - -- `sage_sparse_sdpa(query, key, value, lut, valid_block_num, ...)` -- `sparge_sage2_attn_meansim_topk_xpu_sdpa(query, key, value, ...)` (end-to-end) - -INT8 sparse remains `sage_sparse` / `sparge_sage2_attn_meansim_topk_xpu`. -There is no `sage_sparse_bf16` anymore. - -## Build Status - -The XPU extension is rebuilt into `auto_round_kernel/ark-xbuild`: - -```bash -source /opt/intel/oneapi/setvars.sh --force >/dev/null 2>&1 -export MKLROOT=/opt/intel/oneapi/mkl/2026.1 -cmake -S auto_round_kernel -B auto_round_kernel/ark-xbuild \ - -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=icx \ - -DARK_XPU=ON -DARK_SYCL_TLA=ON -DARK_DNNL=OFF -DARK_JOINT_MATRIX=OFF \ - -DDPCPP_SYCL_TARGET=intel_gpu_bmg_g21 -cmake --build auto_round_kernel/ark-xbuild -j 16 -``` - -**Important:** `auto_round_kernel/CMakeLists.txt` collects sources with -`file(GLOB SRCS .../*.cpp)` and has **no** `CONFIGURE_DEPENDS`. After adding/removing a -`.cpp` (e.g. the deleted `sdpa_sparse_bf16.cpp`), you MUST re-run `cmake -S ... -B ...` -before `cmake --build`, otherwise the stale build references the removed file and the old -`.so` still exports the old symbols. - -## Reproduce / Verify - -```bash -cd /home/yiliu4/workspace/auto-round/auto_round_extension/ark -# correctness (INT8 + BF16 + FP16). Set torch preprocess backend to avoid an XPU -# scatter/gather OOB assertion that the triton preprocess backend triggers on this host. -export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch -.venv/bin/python auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py -.venv/bin/python auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py - -# benchmark (script already exports SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch, ZE_AFFINITY_MASK=6) -./tools/repro_sparse_bf16_sdpa_bench.sh -# CSV default: /tmp/bench_sparse_topk_bf16_dev6.csv -``` - -## Benchmark Status (2026-08-06) - -The BF16 sparse benchmark **completes successfully** (`status: ok`). Full sweep results -are in `benchmarks/results/bf16_sparse_20260806_full.csv`. Native-path -(`sparse_sdpa_bf16_*` via `sage_sparse_sdpa`) speedups vs dense torch SDPA: - -| case | kernel-only | e2e | -|---|---|---| -| seq 32768, topk 0.5 | 1.40–1.44x | 0.85–0.87x | -| seq 32768, topk 0.125 | 5.38–5.67x | 1.56–1.57x | -| seq 75600, topk 0.5 | 1.51–1.53x | 1.15x | -| seq 75600, topk 0.125 | 5.71–5.83x | 2.64–2.65x | - -The e2e mode is preprocess-bound at moderate sizes (topk 0.5 @ seq 32768) but wins at -larger seq_len / lower topk. These match the earlier mixed-path `sparse_bf16_*` numbers, -so the separation did not regress performance. - -## Known Caveats - -- **Preprocess backend:** use `SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch`. The triton - preprocess backend hits a PyTorch XPU scatter/gather "index out of bounds" assert on - this host (`ScatterGatherKernels.cpp:233`). The repro script already sets `torch`; - `tools/run_bf16_sparse_bench.sh` defaults to `triton_xpu` and should be overridden. -- **`scale_block_size == 0` on the native path:** `xe_sparse_sage_fwd_kernel.hpp` - guards the `seq_*_pad` division by `scale_block_size` to avoid div-by-zero UB; pads are - only used inside `scale_block_size ? ... : nullptr` ternaries. -- **INT8-only SAGE config:** `SparseSageConfig` enforces `ElementQ == int8_t` at compile - time. Use `SparseSDPAConfig` for native-precision BF16/FP16. -- **Stale docs:** `SPARSE_BF16_HANDOFF_20260805.md` (this file) supersedes the - pre-refactor handoff; `SPARSE_BF16_STATUS_20260729.md` / `SPARSE_BF16_BENCH_20260805.md` - are historical and refer to older builds/symbols. - -## Summary - -The BF16 native sparse path is fully separated from the INT8 SAGE path. The build wiring, -public API, correctness tests, and benchmark modes are in place; BF16 sparse completes and -outperforms dense torch SDPA. The main runtime caveat is the preprocess backend choice -(torch, not triton). Remaining work is any follow-up perf tuning or integration into the -Flux/Wan sparse examples via `sage_sparse_sdpa`. diff --git a/auto_round_extension/ark/bf16_sparse_speedup_vs_dense_sdpa.png b/auto_round_extension/ark/bf16_sparse_speedup_vs_dense_sdpa.png deleted file mode 100644 index d8bd6b2c0f19613be9a5ceb709c47db2d01cc883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157588 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%0DB{X*%MGM8uFj_HkjMhl@=sELA^?hvn#jbb zKzIo%)EURc!>@;fVF3}PF6$^EGn;^Bb}PCE>y9Q=7L_r;Ci&cIC6ytuR|hC~ z?m5TG@(tNomN)Gp%IDm?UMbl?Kvlz229v`d3!?<0!yKA&23dPHQCkpX;&%pe*0g6R zIRdVUOd23gsT>`W@J%xuo0M?g!GHq4zN<7Q@-()yMa4Oz(g@{^ArUtd4I zk=qx~{mG}>B0Vq#0W-Tao=uLr86DI^xevKfLvl=jfIyF6Rpv@6pyXc2DpI91X|7dH z%!t6Anj#|GmiJOc=5tRo?<(PfKr9Qy=mabR;Wi-Y*j^M?ck5wUrv(P5j~}bCPH?`Q z7f)*9TTVWRWSiUwCO{piaG-xy1oU77%tK$;=LtE#JMU9_EM_?I@SPVY^6-fDDVJ`6 zbHmQCWk7u%A2p8_F@F{FUd??xUX-S@;9dk`!qNm=C=tul&h#K)wtxE5Z$E$j0z_L@ zRXuO+?oC8oM1dGHvnHvROHu%zMqwcIaYAXoN0(ETVq6f+lb@}tOii}h-r1j0AyW}h zf?<)z!r)O+Afr7O;V!C@Qps7Fb3Do9L^vvpM>S*#W|aIxGF|Q=6t|ug?jD}qXAXo% z+NrGl9(`Im5cb6Jvs#gd|DOH=NUk8gNH!~^BE85=iV%?*njym;47V|8u%evt{PQxa z0dPX~xX3mae^HPhL?P1(8D^wV`qOntpHH~7Jy1!poJCPLmEkT$v!u!N%e^&vj1R=5 z!YIL}!ylEoo$fPD|5#R4fl%#osb7r>OIZO{L?{VmDyU-wq7_BVeytfC)#v2rLS@WO zNIQf;Kr}0?G{W|MZ`xuM??w(TEis&2Q9e!+TIHv7$&TDi>_~-I0*~m{g)4}@cRk@V zZ@=+-zx$hC`R{!}JcOFP4+OGQFDu+6d^~bVA@x)X8RITn^qxjr*xdST2(QFjVRU)` zDhQRfw7Nf4FT`z6SE?%ewj+?4cDD-ds*T+}+><*(%7;flq?%8V&U;XoBfiE!2?IzM zNk7dfhFOUTJ_aBjXn8sSG@&@NHPa`yi3%nPf8?=b{&uo2gY%tMqQEJ>%U6*ciDVzx z|6$QBehZwPO3@Q|}ntqxh1j@;W+4a?R z?|t8QiavSz=63rrdZhUqHfSQc+N?|>J~s;IoQ>RtBaeC9mEqfp%b4Tafwc7*mZn9< zVA|7Ck7t^+371Wg(m~?54TWjE6QdAeBss`9wI+7Dtp1q)g)I zot{mwV*&W^)68IF+>lyq7eJ*rvlv{{_-kUf`Gl*Ua^RSwgr=hE3l0hcp3g`jJbbn^ z=czI>|1vRNWiRRhCTCE5V>m@Hgn9DZd`uXX@$wlCjsI6A)`1~1FrAw=A^;!VwgBCx z0-+xEVYZn^;X)6Wkscui4WblEl0x}%2Xham0}i?fE$sHiCqMY-e&E~p&zBQL*`#G# zZXvhyQWtXq2m}sw(_CZ%pedXcb!V_9!#+&083JTDNp(1~I3!fGsRvhPa(UY_)0L0D znYnwImAR-n*Bvj(IO@uMLO|OgK2V9|oB?>|4Yoc{9H*P#QW?Ygr4?eE8B*sFU6`;o}rc0Q{ z>cTG!yNU6exO`QN3o2VRSg>3Jqw%#4ls#KPUR__meDM;*>9iu^eBKt~?*0t9W(m$D zD69=Ut@ng(<1+~yL>{6>&XUPvgy;TBu7B_e?`@F#8mQ5Fr zEY~4v)^lohJ)BaBnJj!#J#_$5B5a}$kI~J9ENMce3UI(Ij`1_8gQ=<)49oa`nXoeY zF&Yk1SHP_zEL`-sA%;~SAZ2!^m2b^)Y04O_(gP!6V8!7E=Kk@Bs*jx6l>9Uvp-}&y8$G%g2rRz;K74JJvdMu~k9H3U_vK%+d95Gv9llj`AF+Ktg!jR2*yI`bqVETVg8 zoKG9<9zB`FZRO45e5`HF7L>Q z4yVU?U&ozdw$YC$!At53XwvTQ@68=x)8*r5&lZRoZg20v>)a3`B7<8kqNci`0=3+W zi&Ux1XECQqz+7JK_&)I9u8vclro8aeYu@^`-=^ip;CaWbtKz=a8jgNc9Q@)$&=XoC z*<@NyN~}nOF_3J1c%Z12OmPhCk`E#~vpif?+ye9g2~t_!3kxGBdWsMs3={=a)C*HI zVLZSx`SsA|EtHWQA7l+KkZeLN)Ths;g9^?L(^|{O1678Kxg+b&4)iobC6)zdpj4@2 z;H|Kzl>M0RNj@;L=~8lKN7V>00y9NW=gmBGxxj_+1ClW-0jl$1)Uc*hPTrd=Ku-ot z##FeN>57TCl3bbKuAhD#o$zDfnF96dxqV^=?22~K!|AamJv2g zMqvt}CZGmF7rnVYJ^SRP*nYM6{j(2GZ+}K)ZA)|WFwdJqat!DRWG`EOg~X^?8hc7a z)M44Rh(S`7=RkTUfdo9XDXK**lV)LFmC-^jt@&C7b5}u7gEYd$oIQHCJ**G4?0ocI zLK&k;ewyD4J6qfNA}E+uv&WTWu~2R83o|*s3A9?-V+)M*-!K?Q*nglhTpTD(!G!gf z0n2N#$Nb28eGJTfT;W6Kb$tFf=|N540z3^2mCK5kCmEObWt8_#Z-4PA{Wxu9g~6^Pi*ousO6`__A3SMiSXxwp1>7f=!11Df+OM9eI4I>)xGQi^#G>rM}y zkEFQ~EOJ0!w0!L6%$84RNz9@5>H_Op(Pb z%0BK}sEB9TNVMNNVRdkT|A_pgXSQ2#M zu*j9~nMkn2)YPB^QW_#e;JYoV67k~0k6!t!S0BWWzVqj*^nj2iFm)G7r=x~C&)^sn z3Dj+pRNu-MB2|gTQpuY%o;8HY7)E+d5l}=mng(2B0boWIQwft$mDaR%S(l{;(`i^Y zc7wyL+I6N;IxK2t%U-vrlbpfa(iu+0L_CrFPRtEE7P|msc*A5R$|hYbm&5FikKsk+ zF|0tmep>U~Vgf2$zGE!Q*WNjqkk_wo{Q6=YUYuZo;7fOK1a%x`QIj-_ks6rie|#vv z;}$a}TFp=MNJhrz;VF!;ZQrZIOL^Wc)dhtNGvAG&k=(t_8YRol4in2*jiAUr2q}&p?c_uY631gfFA^ zCp=2aFAGa%7&h*8K96*Ab&t)C&4qxZgU=9R%rKZ_f#~!=m?Y9b3bw!3t8n{p97EF@OFiWfIm{zo0h=+^lAd%)tR{Erbd9n*`@TKlf zZMn&8GvB?5y#4m4Ps?(?<8S@iul~Rf{`C6k?+a-?P-CxP0oHhj^iiooK@kUzXaESn zAwo0-vLTbqB!n}WOG?J6GDib_)TOYiK?2*!@SVb zK?4j6Is=!(C=?-%VM@lY>-9&DYQEuE0cA|2WjV_6ni*mYE^z|(tli;}K^mr*$AYh_ zgPA!S#~DWCg1eaY1P^TfcYI~={V*9&SAPUUX}e?Gwdu@{Gpk6TtmXqBaC}Z3IxgOr zoJT^z?5Q1$bCxS3Xij8*V+cfq`|gk>V{wwXXCw>h+)+Vn?VoxO9!K&%>5YTN3aTK2 zD##qbao1uDHL0$BAb2rc#LS1#V?ChKw>h3~LS7F1h{@gvM-OLG*i``@F(GzI$3oBpMdjj-DqjIuqRs>>A^||D!7^2gbEq#=eelIfEfIVsxnI{2 zS;eTrDw!X>crm-2SVe#`My908Phi5DmV>CKYzV{)-vkgA0pu`C5z-}yk-4P+&^n)s z95|}xI0M!!8Vk4dRY$PTYI#w~q^_#Ah;a0hOb6U;G{gyIDbeD4=O_wKuY^!=axGTZ=lPp|8wlDW`( zK1Fv=V~^_I8}XGeYp+5IC!l3DlA!|um!8lf=oDo-Ds>A`0`8*KPG3B_s%ZC!0K5Ah z(cD&uWlp2{zVAWAd9#732a-6DK-sd&#SSRUWaJ7Q4RCiO(Gu$@Lr3Ow+Y{9VQK-tgv8h*>m`XxO z)5rn1!c%dU2b@HpS`CVgDN{L32x4?oMzH}(w=SY-wW|=-1Eg8@1dQyT8OSjwY2H#6 znicWxD597kW^GK2>}Y*xt-r+BFf*WFbUrd4YG0RXh{M+mbWWNX@H_fi-k!bRZWRP_XUM7X8= zUVxGvi%rJs11g+8i2-`HXrpq2$3EAl)t8)DE+Q4{FdED}K#I9h#ET&-fRL0u(u=EN zhfp*JpQ8cpa7MrwQPBXCc%(xlXD{WKdz2C&)zFco2}GJ? zO)A9P9i7OT9DOGn86lvO*sV%Ti$5ix^(9SPc8O-OQ1n!GL|dAuST~@LF5$9^V@AV8 z3FV+A1~CZ?Q{bb2Yiv_a_)}&DWQ2&cqJBBdVukY)!t>YSgi)W6+xOushP$}<_zQ+B62;Mud~fQ~4G;nWo5k#W;1Qh|pjPRb{dEsAN8 z!(EDr@`#aR0P}HE80O46d~1jR5PF6wD|x4ygeUZb-|!^o&0cz~3r{X1-Z8NXasgR2-nDu!xk{LE}<{(}{j z5P5$Oygj1|jMe(x?D0cF=Hj&nh=1)JoUVkkENLS85oTXr=j&e+c8+&Nm1xbkV#M!w zaQATWH|oVRU7lNUIE)bqCkHpW_ohk-*wz4FyEF7xOdk`ckBU-7u) z2l7{u%sS25%U?BUjN8m`304nuNjYOJTcb5fa$l!Zb%>OX$VGL zWEIV(5@+UuOV-q#LmMIWIclAa&bvwQm3#7$iHy2eLQ+%Fez0XFz>@YvV`gc=YTO>7 zH|2=o0>}YmAcSIObv>R1Gs)Kxgp*E0Se6G#20;;uqp}ph5WMi--KoOX+M0{k!rgXJ z0^z=^3LJ1R#&IZ$XH{s$FNiRwaiYVfZ@mA_FMZ|4ZkM+{|G6)I`t81c>V5-c$tvoJd_~oxhLX9vXI>c>_zv|L zy{y_OTTlutAVI6xBwU(OEIdS8xS6O+_cZMyphT%xEz(>ABHo&-Y%0>4NOxuiEMXam zV9&ms3`c7-P0M%G6OZtDhQ5=7sRw>RAC*;~Kz!n35G_r^^db4`;e!YsoBYCt^0jZK zHLoL2<8?`+i}~;b`FWR=QH&}WOmsRg3UP6+ zxS*bnaUZ!-Dn~P}l*04}RHcy6+xyLGlx~t64r4X&AX0>DuuvoZDZ?rSk}H!LmL~7g z15FEC)Y-u}GwJo=E%FaRHJ#?|%=(Io8)T#-vi1uZs-q%Sl35TxmYr(B3P0+&F#-jb zu?%9gFV3uD7V}hmTFWL~D-qT3ob@RfV#1lLsIFrveysdX#km;%+lPD0b18+1%liuG+^d;1sO~Jue&8s~8(nIk zrHTp)3n$)1rv1yO1}fke?cGX81ax;ZBN6ay-tuq>yIN0s-<6cK`XZ^_7m@9*j*s>9pQ$FZa!_udkQWjqPMxHxrS^FE+WA_80!r zUuMX!{_-#V{r}f*{p3&od;9HrwLS(O8`dh6Wfk>Aoi0Ti07{69bw*f}9u#Xe)aD$l z2q}tU_g(1jq0D*P-U8unVHVWjPOAn;0&s^Iqz6WV9RX(15X{`%E!)n?@&g#$L*B$G z@^b-zGce$Qc{pBufscpt;9>WMp#xCJhV8;uTq-p1FmlPad^c!*X+U55`GN0ImU(!C zxUd`-msN`}j^A<8DjHcEH7Z?afc$HGu z5`jBlpt!+IR+Zf>u?9UT5C~Fpu=4vh?nfeAO=n)yvXW28Z%a^lJizJp$JiHO8cHLX zHY**9hoIUY5zwWiW1gdf}wD+yd(ySW`REn6p>)kIMXHWiKCFJ>Q)J*<*~99d#7GgK8# zMg>F;nl}K1C!#kqs8R)>1m+NjkqvMyN>x9^?Wta~@_+tz!$`PS2D zv6;EA4mNEdKf3*7S+5BZUCiUj<2SjxpEtjH1oaL_Yv=Xulb0WU>*cxId0B5h_dTEQ zA>VrMPNS2AzO_ns=P;na;72m=2`mbtcJjXI0?kVcn8w zbvO6fZ9F~DVY{ZG6w^TGuU ze9nvIe#u~QzGG~j`61sKUL2=45PW`fxPs$kW*~C$(-9Dj54^PO;}{QI(7ad2zXo*@ zQL-VZVGj{WD3^5!qB_yXC>4?-Ti>H<2vA_3(rqUhZbQ*G3+HP}bQPPAyMm;Jkp>iH zk3g>q$QV3wJp-!L%^Y{BMx_oVLwNyRE$$|16#&AA~ms+90Wso6}GE{Xl6|Fc4PO4WCy_KV?rl!)c1VNE1UP7he ze5}MwiUJT->sHqZ2}{YFndFeH4%4;_8BV>venTHU`opjO$q)R%UwHNEHawnOJ=GR3 zU%oGXceP-@zjfP1T14dhtcXY_$`t4igSxqsN+B3MLRGR|7Sz-ya3CQ27Ej)I^L#$9 zr>kclz5Jf<{qn~jeXwo!>$OOf%98cX!s+e$`c3LpTjJ&I3pt(k-PfDzRobKF>Vps7 z|F3@aU;NmQ{P=phI-l+4$^LgJlfA%e$*6a4@jX(S2f9B?`&piF~XFj`JedWh~Qdfm)@Z=DOzh^ziMugKM>e!4c_iW??qbpmyJ}mkclJFY zT8ay)j`qK_HR*&n1SbYK&2#YD#nV6z6Iri0_IQkUXT&qiLR3xiLqppx-OEF?%?E$I z_7%fw;`nBO_(3I48hgH}qVVr9`VXu$Mwk*8KfQb<$DThveG*kiUs?Ti_=;Jdf6;2qKO*xr1XywfnPYFSp&UvbB{I5le72YMeb>s6OZpFRh+> zN=S&FRl*VU7$~}uzyL}OnTdHlacPava~GW@iNTT{DqWS*N*niqBJReT6M5m%58^a) ziO1T)u`V;!5aWqCSe23KBoe?lDsM5Juz+<~4sd?Z5QRL(V$OVwi(DvNSK<*DkF6@< zV#Wkyl0X3)=_97QPDS8aipjZqND!2sWju)R7!7xo9w5aH!cdj&2(#gXN5PW^HAQ%; z;}1d(u6ZzutV;*Iv@-$GpqRNxgH~e^6o7OvSPgU$eD?h1XWx0pmq*=BXWsoE|8M{B zZ~m>nbNA|_Kl;P3edSMoC6>=_=Z`nDw?6&O?aL2eJb$sQ*WG$+O2T$iZ5G~pZz64J zqM$Cf_vhA@tLsNO2z}qT`}_X##j7VzAKyHB%+tx;U!2$XzxC`>Z$D~pyz~G5wcq=T zf9Wr6AHCO`^s_yB{B&(?-_G0JJ*j7TWYN~^C-=7>K6>=@T2H#1?(X-GU){cUyDy*m zk$?HM-D1DGd3^PXS0{V)`0>*({3U4X77}YiSz6Vw0^z2qD6Q&_ z-rdPQ5}h5=9qxp>Qo;>-kt0ldh+GvV@+DFOAge&aErk(1T&g=VInP>SJ{F&6Kc<&8 z5+Ps!+)T6qjBr;KD7%8foCYb9Ie9mCx88TNLi`?PX4cKja&4M9=TaRO?9u}q;3?fh zU|Nr1?+ydSBEQBKzj#f%IC$QoVgJS!#wfWtK9ZQ0=mK@tejKMYENR)~!2H2@&9K7{ z$oI0#h2Ms8I9U9$D{&bJaN6qeN%Kr1l2o~{UpV-zaR-kdjigIvWK(?2ZR95N2vLkx z_6&fB5Ua@!Q|`edizf z^FJ!h}O^FRLKw?2CDa=m%yb8kHU^dG%=zy`Q|g zzrF7~FMYR&o7+1+dGn3O%Ud6O{NncZ?ta(n7cSbLyz%tWlh2+$d;O=raPOr5t<@b}7dfm-TJN;dJM}-IZ+uU`GHH?dENH6!(pxfN>BOBCy@E##|Te zTTc;%{2;c5Y}B7Ov-G*<$~eLTi6U{T1m263E{_{l$dqH~D@W{6LE((nkXh3h)k-{0Q5qb*nW_j_AT z?!38vvq$sRK6wA5ZO7)g-(%kc?)U9WfBN6~lDq%b*KZ%)==JGS|NdY5pFVr_?BnOp z-~8;KU$69|`zz5$U;N5n`L*ADzw!CwcYfm6{^*5mAKaYe>60tETwk^8$5)8uljpbM ze02TT?ae><`Zs{bFK*xX+IuhDFp1H|C=8*S-&V(PrvYeZ+>*v7hu17`n8Ys zy%*;%e&r{hZTsD~<;_q1shcO)qD$|lsyA){T3bK&)=k#rO4A5Zm$o!XJXFH?+QmHR*Ww}iuK{G=L1m?(Efo!OdaPOhn=n+v&8k<=M;1CZ%Sd#?;9^=3;@a2IP zF{B*`<{V;Fe|Rq&LmA?SX!R+9 zsBq6_ICF%%WWQQYv>%D~Y5EU)N6alS&?6q2vr8j8fbk5SNwlgY!SRB_=Hh`J#|8O) zVRB>qd|2=}&g(mpsKe^i;fKe2t%qQ|JTC2fUEyo&OI>`HtxPLFKX1^u({Env+i6$fk+2bGiTg(P?sg3qN|@x*6R+Tp3G#qdPFEf8r#|W*FXB^%iFuhPaeJd zt>=a&$KAyl5xl;6qphn4^|UN){q#Fe*_M6p+xbqw*4pXO_2=LI?CE;# zy`sWEy!Gbi-}+MYec#U8n<`DP@AvB>`+4tn{?P8X`&T@DX?ywNPrmW$`M>(=H^1@8 z+i!pF|NL|RriQ?3e+Kqwl*%?uH)TGd=dS!6eZNVr??8Oajx9>|iK zFp3Zs**(|0NCW8T1>Y~|)`KjeR27iNWj-^}4LD zoQ{Lp85E3Ag2(i+7%Z){iqO5bt17Ft#}IVu+7?Ij2yM;G`o5o*HEJ}NhnuSABufwG zy+MSB3R6-7O*AJLI#?rKooTZ|+H!ido*rYzwz)J3`gY!0TOK{Rw)5@jbk$C$7timO z_3>@L|K!E~$;21MIxt2YL7EY#{ik`}K?GjW^#OVis} z)E0VQEd z?Y=YlKp8JawPCcthylkgOCs)o-;^q0W<_7rl3n54=Q+ql(JdfCZE!a?8QZxO6$8N# zp<7p~d#7lLxH*O5d2W}?K~-=KF;*gy)rlBZ7|0rsq*y&e!~D%uQ7s8J3_aDVuk|LX z;$om^%OD_o3A@?8@7uoZ`)+0t5S4}&u-z;bSRVl3314fQR@!q?+YfPn+NMZO^+?dh zBtXVt$##jWD>k@*{e{yn_?Bd5FRk&kjmHQ5e{(A11;;-gIF2%^gCNTAq&2f3D$E_nk)e+sPf)ViK`gZH5tLyVK z^b+QzyQLy-CIcwy;chnJe6@g=5E3Y<#^QAi{;Buu|zB?L4pj>MH&G?DkM_YR`>bC$q|n*h=zpQDe6w$Psl z1Q2m^4~ni%Y3mitpc1|A!ghZaQS&fpTW`2ry^8idpZoqBIeqZ{M=xK#`smsF?|$={ zqX8d2fAR6{-F^4?@PilEkDj*n`0B}9(39Yk$4{Ov>j`pAk^8vcy_?yxT%BZP2v^Ny zg)9xAh=zsrJ9D^kH(OS5_fU`fI~Q5n($=f18=U)gcQ#q5rXsqC3KeW%>()KGhgk|R zI1pkKLRv2PkPugG+HS4@Y1}L}0@B>9K^a7M&5_QkA__EGCDEEi zK2`w2ti7TJ1B4@mw8VyjH-MJKnj|3ME+P%h;rTTvg(B`n6d;5i9g&HjGSL|Q`R1UA zN2iPwt_uKzRG)LP`3drzhQOd+XY4xao%XP_qf=lQ>4YZkK9u}H5<*!Teb=QS zy67UZkpfmL39~AL^l-C2#6a!%;G%ajP##HV9!7G4^pPkXx-yp*c;phY%zqfndS{y> zg{FOd?afEHbn#g+4D|7$f1A<&|Kn?BEiQ7Q;}MKMFMc)(^|HusyyQqYj2G6QIh1%_ z)8StO>1(pGC25f1%qj#xJ=YisRTULV%VI8Ov4Z>VPCUAPL%4t<(f|YDj@C5XBJ~L@ zAcOB=1ai3DaL=sl=3r_vWEnOT0g6SA$eSeKcs$u}W7gVIg9atw$y$vilCxe>GYv_G zb>vy1z=RK`yNqabRn3OXnpfur>Qg{+7@bItzk4FPQr6GdUz_GEa+D*nC9ujyn zPX)lujt2@r;B>bT(VVSkW+_!s0wE$4MYy|l+gi5#fT3%!LDn9GEJm=c?tJ>G&)(kN zuUAjDzI(W_%X+n5-C*k!{p7`q+q?a`z4h$n%isF#-+%n%lfCoV$1h*q-sx3q%L$Nu zKi}V9-QQ!|`?T~^iR#bF3Vv@KL` z=6l~$a3(w;-uFES(Nx80%hi={Sz2C-#l44!i-@)bqNMEm)_d>WDO3?N7f5#yVgW$S zpsl6&8Wic>85%dXLdvA(WuS8fhih`B)a?xEepMHvCM zh&~3W4f}&5&s%xjq9`u7%}G;CiYtK8=2sUwj6`G+6e6Mx%blSGFYP5U^+3kg5gOp~ zO_P_vcYM8`FsS#javOR4IIi|!mj-<^e>f2RK=PLce)2ivbS`Yhh?`IY?>R`Yu~rWM z#(8Puu6a3w87P2}sT~nXiO(t3ofyeQ`G*9q%WUiGl zGNNcXA%yH^ZE2c;f4F- zG3$sJ&8kDFIjuvgmr z7<#g3vOIqA^4?{+y*>Z&N6+7X?}JyjyO~iLAVjI_`P{qt^A|5(yt;4gWI@MQpgoZPUh8n>JDS-rdl5Z-{W0hDHk6nvg9`NAKM|h!AmV z4IrxKQih$4t>s)Dp%9`ii%0?yW)5L^rz$n8m+0=&Bl8{tiZ*k15Anp-W6mze7#~lM zAV}*v$^0 zZpBBlc^bJ{m5{3!EG5-ainZHepAKF69MYSzzUD~4S zs@vYyWw$OO0eHYHI|!KjEkoW5+j!U}$6@Y|dYl+W4RKgFR2)VRL%I>`#zA>j@}f?iSu z183DjE+sh4PtVWFV41UFl__n;r*D2bfLC|-Jw&+xj0QJfudkN2D)smN_3!QHyC42{ ze)!R+ZQJ+0L#`jax_y3sCtrW}!$0`y*Uo3WxZR-3($=<|lq%9du`qM*w(a)H+8=so-J5EGgKnx`eEYSk%$<_j;BqvT zcm%SL5?a03LNbI(I9;kWxS(S$Pf@8^6uohcBV&=*L z!OUJ|43{BMs)ry2lcJ|!4u&=?0u-o7?+y@N8hP1eO@JaviZ~qo!p?AXH40J}w&;cw zYT>xj!*Gm1{HUsoVJZ$=mP3zy*o`!cSrnK8dZJBJ4Q$^<8l|bW)=Xrf^krGi;enn* zgL4n&!Ekv#JWS%)R2)gz;RIqnTyR=C&b&u00G7RN!=7H0?hKCUk|nvs=7$NMmin;g zY5GUBcMwwLeCoCyn7feqW$B`==0&K*-ScA+oq0*%#KUPP86b zspJN7Kt}KRuroZ@M1;~#=G+5M9=~yQeRH?>kDh&eC2u}`^Hab38^8JfM|Yq9!k7ED z?-pNs_nST9vv0q1zwQ6(cRqan@ykE>VEy4A`O(&vfAO2Y_0@m#CogZ$ffHnP7h-i> zi|Z2W&3dD!({efmJkFb0@B8g}-^|fFs7<+uo@6;`YZmTqAquMKqPh@pKMR-eO{l4@ z<~>#Wn#vMhS|BPdKvla3LFv0$cU%0#W);k(^g>cWN-oxW(h6C#+Be(Vwk#{?qS90? z%)DH`5GZRGK!bit2Vgn_0M9i5pZh^2murN^s|f&WualeTy6ccTti#C_;+%4SVRbre#8PbG))2{kx_OCLb zY|G~;>KiwA+QUi)Bm!>J{+4@0y2H3Y`DN1|e8ua(ig8xsZ3)qbVP?HD@Eu=qSnY#* z8ez#e%KWegADw)E#D%9BzU`rtnC~4`M|Jtfl@aCSFE4QXk)%IUOpSy{CT}pkX+C(R z?C0CR{da!m|MBDc^T}Y-rGT~SdjGAKuM9q9y1Ocp`CB>|} zd4Q@dnf(AtnO%q+U<8<(l)q+^s>g@J+>%-9W`v-6DPa}>s4cBON$Xvg#k-^W;}(N{ z^2yyFeD(L=`JV58=X<{JU;g5MtIN&L{)d0ZPq%;a?uXC*@M}N!_kP7}-TLpENAIzF zs`CB5Y9lGqKKQNo|M1;^CeqIPem*}5c?z}&@l+@iQR->E=5nQ1*IXBd!`1B$vI>1m zQG~XfPFKsiwq+5~6z>(KXcJi?6arb+pi;y-w6$Cl$qlMD)s@mjS|w^kRGQI1vw#N- zkfx<`Eet@Hb&a^|p-sB=uxOcdF}L2g^O-ADq>0Lkt@piegNj#)Fn7{}r0TL<2^Z`8 zwr^8(EM-%}BWJfH45ACglu1YiL_nw(ddxyba*7qg-8)<>+h6@2S)SltYUeo}C5nb1 z@)u;K{V&W!%)OQcE=aH9pa?WjRbl25(TBo_Ab_kngRquuPWp0D44lRx>s7x8U`Qbc z6$C|dv}HxbF^m=wbBHN&f@hJXZnJ+qx&F-mmJ)5!r5M;fuTDfW?n&IRuBUxBRnyj& zb=mgr5#79-#c*;lZ!44O$|HK7qD-@eTvlld2W^95bVmx{fi0YPoMf9-HJ7F}rm;TK z4m02Q9R@t6t)9000T)y+dT6@8%U4iy!lN?`vU4o%zMl zj!!BNKdc%Lv~odG757xBA9odYwp%ZPPygV*_?6qc`}OA0FaP%6 zefs3h^JX7Ee+79OvN**BUC2coSeMhXt`vkvTh}eF2-zv78j+D?g1(@LtPP8XY7dCR zJ)G#_7SSVu6j5zUTb8!8?B&S>K}uw+Hc<_F2txo-ClkdwVQv63*asC%?nOu}t?m0B zX1nz@+$A7ER5cex2oYVE1?F8s+`3!1I~3>rEKO9Xnn9>6%M!8e`vzcH5EOUsFd`Hx zs@jyQ5Z(J`<`FJA{i;>{v1Zjz>@Ax6E_tQJkjsPmYY8A5+6R}LVQGRPmd#FpA~jD2 znbiswykeQupkyLp%nmN=Rz^B+st;x+J*$Oz2XdHz0EBq9_=!o3Y%xHj{7LeMWw>%y z-Q4Wu7M!UeSV`6-bTU$!a5e2}sc<23R1GQssNJ6yBOO7C`dDGom}~;HwdHg=MFeRe zq&eu6-LRVP79q0j8{qIHd24`2kq{ZLvA7ykO*T=Dt}H=_BCIZqHS4YU&?Xxbh&FBC zB~S(igN}pz34na*~c;5a&$b5(Uc>Qhj17=KcNjKH0y_USKb9jwkild}v z{`3-eJUIEf)FSt$L@vn5vDK=m)KP>ZSgKJ71gyLF{d+$5=0Etq|NX!GgJ1f-@Bi|v zSD!q(dUW^6eMa5^Gq+#|!mXz)V|b+PPB1q0$UH(t-MlReNxKks2M}~BJrl&GUYVPc zk=%-vpfpmC8acm(o_m(j&5~#`>-lg*Ti^G#ED`jYW#puYiknAwFYuAs5KR&lrMW1* zhwx_GZQuKHbp^AvHOCndq6?$}+ODql*ubmqBGRsIp0v{ysD0n9$+zGA){B?7Z++^` zSNG>{zW4Dj|LSi)dFLY7Q>5C?*G*2$i&=;)EXI-P+nvf+9?3BC_a;=qZ01W*uOlB7h1aL-e#Z zZLx&iZ++j1jO$VzHW-9cvt<)7-G6apn@PlT~NMVjWn3)_$ ziiJubl>)Oob68X#%tA;=c(}MhAXF(eg(}vp{BE%iWp%QhAjb!bibe~B_X>jvNK3(I z;mBto3@q2-Zb?}t>6CG5T5EvrU6?6YroIr5%PX7UV_-8VlqNvV1V%@|5OB#^(-9FV z@)LQ7JrM;^&L)o*Ahk7JmaD64(FLt>xuvdcy}G(N-=EL-_xHEAcl*Bg-jnxovpRi( zgNDkEBIKQ=_)uqfz_mnjzZd}AS(7*sgS2Rgi*P~C92mOTjgiis2KSO0`u~mVFHY;< z{>u5{X|3yIE@Y}-Bcm?<@xTE>D!tX)&3o~Hm3o*gncQPF8_c)NTX~r+&W{)oKvaa4 zUN~uX0aWzav*-WI|HXgy^Z(%g`Jer#|M4IG%U{-Ibx~LZJR+q|cGc<{gL`W&^&mV# zDPDUFrESm}K)w_^vhK)TB*o0+xKwhlim(NCQfClq-FQj^nsU{m+S1v(8`lMl%`D6uE~5Rs?b4LG zbCV`iIjtu^&iCiujcSW%Dq(bU2`p5St*!J9P(t0h^&GoW^9axp0yLHy6hR4wRNZ~8 z|CA@=u#Qg?&ffl#v%G1cC}_TKky=CDW^?9*}rq=~k+tXJ2MZXRuSclWoiUY@u6 zz3&+bqzD)I0Fjq*9_`JezA>Hup?WlFEsW&BDAR~Gw9+3~=fH)bJfQV!R`#HTE}8R@ zF8?lM(J;*a9X!G7Cv>3wOGq!@H6A%o{=;*A=&NEr%t9y^_$U8Y9@<*Y)IXRORqI1r0fPe2>-? zsaW8_){x-CyrzfbWvP;5D@K59O|ppFx&zQD|^xPj;TMo*ebwZMWW4msL)uCgQ=H$8UJBd%Jq$Nq_n3<8Qt9`C1}@= z*0#Q#(h9zB=Y88YUryHsX{ResL#f;y5lyKits8O-XSlZ3mQ{xAVpGWxF7DC0nOROp z&?cfS0MVvx&FVr666$dCB0WTx)>g<0Dkb56Wn8Rx%0f|X3!74$qErQiq8jPK7e~@T zHGih!^qk9;b6``3IFVQ60;~RQugpl5sHy0>p3e98);pE%?AxBBzf?si%c)(RP69da zeb3Bw!_t;qD*LvzrKJ!7MS9;6fhOU>2+_tUtu;4Gob3TtzJS@)HIt%aXAYcM10%^% zK1vqiX7%%?_-(dMIUv1TYjk#Ce>yVN=M;Bizh#06=~9l!O;hkaIk}i?r*To73sk`+j$ScXxZY?OX4AHkwfsm&K|1 zC?Y0jRg*=citA=A4KeDlGb|7wN)2?-L$g$JmWZ3MOndA9y0Gq03+vp`3Z6PLB|hb*#11zBor?ThyN!k#XJkKT2Ggx+o~x?vy}NsBl6E{5ugn}Fr|TOFyt=!mv`0_gYHhWg zJj~XliOS2{mwi89-CP0M+6rOswrzc<_w`MO`+9;bg5~DX({0JIVscfa+` zZ+`pj&+ygl-TiJap1=Is*S`M22OqZew4eLFA+ z>NKc8b!p3@4eJRadnzuN-=A;yZFl!&SrNMEItEwm=kpeUbzNIqD*1vSVHV5MR2HQ& zBu4?K3F`Zv`wk9i%pxWgZEbC`^yIj(L>6l~!oZ+PTb2_j%W|SBmzLEdIrvvwLy3G9 zNs*>pMQc?EwT69^;*^ga5%4S@80(In758I)OL7#{>NK(LBwK6N7B{$iF!r55sB+&# zM5MK4S+A~6L3T6iT}VSOlnR&|$R-UUOIvzC=pB|PB9-iMHv@gNcMBvHNMuN542>nC zBw8w$lvs1j6k=j!AmNEu)tLw2mW2jhc_DY0hz_M#!d)WUz$fR57@evDg3^{X2j3ID zdk;W7IxGdqQ-jEADse$cp+p?g0&U5MAlA@C$w@Pi+Q=cl36l+!lg%n-F z6kDK>Are_h0m~OhxMfQKDl?oRT}dS}1+J?j1Ef$?+R~_`=2$eRX=}^6USB`n_w9VX zzq`NN&iB3dKqk`5>trW{j7rx?>8->1GX}jqZ9E5X93j}S;xR~{guY1jKGP7x5+}1X z7C<^T9?oOf)&rY!kTJvP{&$E2#!Kq&i!5{IZbvHPA_B<$lh;|?{X83t!_*}L$8eww zIcMwM(HJrK{^M)-$C!#s^giL5G^gL5x7|N+e)!4r z4?cSK{`()^pSL&P{LHp(Uwij!AAR`ACof*Sy4~*1_vT>%H+Y1$1t4WxmqpmLUCRwS z*;aWfB`I!hd+*`iBeK9&Au1}FUrqHNvYT()c7HzGm>0O5PHkDT^(KY*m>mgZa>sq& zyZf>%t+f=Fmh8(GLALWmShwmn&4@lRWos#GvuL9zq649#P7!SxjR#Z3vZdKDbC3|W zWdTK-ItM;rPJLju*JM=}0Tqg9@rI0?OfoS4z-#X2-WI7m;|TInJIs1d3S~VlZnAHi z^}Tnf@cw)cQg%t6u&wKQTGZOUcQ>TTFz@^B zO~V_#Qx+n;Vx}n@92_Mm62rRzsZE zh90F@9ul=7%E=n52lqX>ADhfpNw|li%@p}G$hQ#(Oq2PY7XLe}f3Yz9E-xBguQ5Q!h$}8nAqM!Gg#SE6j*6W@ z^2{e*g$kVRDf<}5iH~EI-A~_G{paJ#E#=8PRFp_%`1t3)`I~>^umALq{qSG@m0$gh z@BPBtSh`uD^B?`AUwL(V|9Aew|M=yL=WW5hccvJSxrlV{Q1;%ld)>RYwzzTIx->Rb z2^DQk*ZY0bWo;t6cLUeus(1hJ*(b|_o5xR_%kx+LkG^q!mK!ut87BWRTLDgkt(-@-Btu=y?!@0ZdX6~U)ka^yQMU&io)IY-Fx4KAiAii%C-T>+uL*jSnaVXwi*%cyLrILRaK}0 zDghf^-^n<&rN!>nd#@3>9`J?$A=0W2JrGEB*HWmjT`4pVEx!zssx<3l7N!$FJ66r)JB~LhoJNChj7qCQ zP=j0=pNzPSIS#iq(+~5M;_{p^avSxg5f%|)F++?TqCN=0*8-b*s}FA%HDBGcbFm4Z zKYRYifBYwJzx{eV0p@xOWJbDtCH?d|QW+ZX5aeMH=!%~R%q z)VAodinMh-t?SM8^+Hiq2{5~e3Tq|FX>3giCa`k1BEPgH;DmM1P_RikaVU`)=V7l_qVKwoud~w!WXY&D?;<1~=6<`p9@%uUN7(ENe?r=)t|a zbt}F>RNEq|B29H6rCU#C{;2w*1W9ddOUf28i5?CC1G4&)DZ&P(0RW+*T7@4ZMOia^ z^3qwc3#Cvfvk|07tlrJdva+ZG>TJ~zZLOL0Fw11WwzjOxzHPnl6%{t+h#lH`lC`Z% zbB(Mh53ebJfk|I>f=PyhDM{Po*scmM8B{}2B+|LgzN&;G6d@f$a9eBTd#`RdW> zlTY5qqIY*)*40IVG^%n%RwJO8}tov@=dIzDJwP7@9+Yq7EFIdZe zE~gZ{K-C@9dQRE+Tv#dfI!n?-WLeg}?_2Mg*bvoqJw?Q}oz1tLy8=>slLm2fx2BCP z8=z{xh}5+4^m*Evin^n1>B_dS23Z7sUPXZuXW*4dvph|>s< zY)?!W?#0b!p}I%99R$f9a7Ofy)!EmGK)*3IDbZbcGKD>uNSc`sAQs600?bPNlojwhRDH-ixe zoYh1egbO{q_rCSrtoPoxZQr|v`H;%%5vg%)W@dwL@Iii*{bJtVKr+|aC!r!{W^R?A z^wH5!Ts{V8egN?n4=rwms6-H>8w7)JuVR>VbAic`Oq+h;fv4$x%|VRss{~?R({T!! zVTcE>&xV7L?{P}Q&&7xj#y=t= zTZ@EQ*X&%@_<m+)w9S=tGYR#OSO?IRMnP)Vv=BB z5Ft5h1VhPJE}Fb$h=#>zNEZ=mvdk#}GN4vMKT6CIq?~xG!o(PsB8A~|z-4KHReU1> zf#slBs0wwlW%b_8_5eg>S(kvD+qP}{ww+U4Xx~@S$YzlU5v4%2I?Np|BWq`tB0th{ zg87)uIk%!vRlCUEdk4Zx=-34A;VRPI&AR4f1%XII$;efC28XXh&e+M3F9_72!$Tl}U)9bXqxR5+Za-5*mcLyQM(lg@{h&H>W)h z0&Uo}7}k9t+Dj812f8mTKG609GyRZ~sqf?R1(%qg_0J2Bo~Rme96l~0mwN8_j;{*` z^&O{@xUJk(Ue%yy$ICd+vSKfeGS=ht(gu|3@=TVXybB0uKt#2Bf9Ffz|1W;$_y6|K z{P#cqzhY6PagmMU-_>iP_g`{#_S5=LOz4v|Fwtcs35mIffWd}odv+mu4 zx~Q_XMMOw3GZBplLOfz^O{Ixwvc3DhyL<0h>>U(QRb~KN^FuuQ;0Vc%$)XCUoQxEJE2|7-H4sv?2MgJN z&1^5A6lP|vNfzTol->j3qd#Db3#eV}6F}Etk=hL!5t(-#>BI<&j-G^8D)uCv%*xv; zq?x#7K;W@|S!yT^<|I0hr9D}mL?1K2GS!9%6Hx?3J&bdLO`6iwu+WHbrXoYkw%`8N<$b$$_b0#euYUL4Z@u@G zul%{Te$Q|H_6PsXKlzp2@BjFZzV2Ah`|^MJxnGiHT~D9+_!D)z23=2&5U#4Ev}Gw= z|KHgs2;-1%2jO}+%gPJRX9e9_GBqD;=G@C z+o4cZSviI~X2{I^pcuofr6tWE2zYlh&zgOJ!Dwr1i>idhZoTjIU-t-YO_oNLOpEpI zy*r`gOfX1=h&eG8E~KiaBDa~J&s!?-_TGys&Dmikwt;S)Idn0#mHl} zJ>1NVP8C^}Wm!+Yoy~0TeeKB>c==d@h-^HQ)_~|v9|hdzF5y-{ILa%Rq)t|ULKZ54 z&TtDsfF99)u*nz1Qh3f9=^3;@Cbh8yOv7iMl)(mr@dPKQBcORI~+@*5F^O#QFY zfCa$e2O@G%07uRMDeN&ewZow?CX0?twWoqJgND9`s7Od_Spk@Jr~m}wNX#?4W2=8S zfq4x1#*rKdq*mih5T)Xlh(OVnyd7|Zh4mhQTP4OwQ_Usm-c5sRTM&Czg&ExT?d)Lc zN+I(~B_2KvTCSQ*FNbH1Q4BjQfk>r|loKq*B6+$L2B)_HeNhqI1#`m-hGlx*Bc7Pn zvLJMY2_s>UN!po^#YEB%gNBLmhbKB<{4nbmR{Mw`2EG_(IPuv)<`bf0xTVW;=J>P$ z{3dCXLnnsA;mpQdTyIfeB?DdSo08Wnlx2DR^o<|=!5{tFHy*#dizkmBw^jb>KmVPd z`?;Tg{`{4j*#2Kj(?{2j-RK^7+ciavy4*a1&>?W9ZdX$UEX$ySkrL=;#sx&=9NSz3 zQ4RNX$!;!WSU!PFJBntjW|h9xi32rz3CM~CF3YOYK)9o)I&;KsTkjo#^|YQ&r=_(C z--f-Kk1{i{O+_WAZovYXQxsB`RoBz1N-rB??$~?xBskisovxrQf^Ob>B63mHX;kx> zm|0F4)3v4AXhbzxg5l=-z9S$iOIt*8{77DGsm7;lTmf?=o~pjnZe6nBmztf@<9bnD zTq5B>tK}I?q1A{b%iHsS4(USzVYcHR z|KorBOaJxH!(RTvfBB0~pWGl~+xy*pKcACr5b4YQa$~msi-ZNm;i;9cnVlA}_dQ!= zQr-olnB8{^BuiYf%TWywiNqpMt@G1^=lT#3CY54A(E_FX3Ia+|asgBE%{=HH-Fi0@ z%Cff8)oESUd{WFte85M+L68)!EU8EuB{%E62LfTOXfVS?s>`bpYiD30yQL&6rqQT#t0))m3M}llLSk?cC5xS93DCAoTrl#0pz^m zpgYqvEKBAE-JJoUw6PTP8Nh{Ys<1Mr=?l%v7-YBk8BR86=`tW2EF51 zJuKRqHf0JFmX2>kb(swVIQoHyIrnm>li!{>fD52q`G65E40?sr%wlSGU!Zy(p!>Vo zSIjpbKYsYT?`HHLykf>RwKgydurB?;`(H#FB#=lN1 z9R@{5ze_=30pRxPliSA5z<&1oyH^9S0xA*ka19HGHWjLSM?kV03c?8UPDEOfET0sK zq6Mrgv!E?S^H)X^N7*&!s{1LE`~9hk`r$w)LLXUo*UnL^@2ATHJBIF6d7K@za+E)FnC zKxlwJuek#={>&#){5WtJt1{)__2y zYH!ka-7G*c@3eIF1-fzvMz)gqw0?QxNLC+QxwmrM;a+ka`J!R{X3$nYXKj+w>b@|9 z2l+Bw=%w*K;@^>im`(!~avZO}H2fpd7?yZg`xt!D_+^am2l13RLW+?eVbSE3#`kp+ z7smcFU7i*MDAkAQdycQFoGS}Tpaj5JXV76JvKt&kN)U$^hw0IU2(v(_ifRLcZ0XLG z>9kx_hCambP&wf!>mry%3E7q-y(R|F=Tpzl=)zLmt?3wS6`X_^xY7u|PQ?Cvn9 zN?X@;Sy!dHA>37(G+CF{7AX@ESqZ-H`|fT{by=D!E7h5TOcj<#pekE3W9x@{Z?X;; z2ATp|cvM<4!DJvpC1*Svpct)eqLNKZ9ws5_AOWPnP|6-SF(#g1Y(G5s8gqNHOKT(% zA{|e-r4_Q?T{P(B)fr8tXDz))g6!P?bn^(a&Q1W!vSc$VRdc#SgbWKGs#^0D-6;Zd zFe+UEz)ghk0TeTZn*!sxswCHOsvZYaRRkd(0dvUkjS-Pk>asU1$#~T0iwpqs8Rg0r z&^+KC;s9y@RC>XVgty3<8FS0l&Ktd>)4BPWV4NF9M9~Vir$Q4V<6cJ?;I!5X6ozD1 ze(hoon4g8wWj8!+$ORKo03yS|T7?MDxib-#1N;IYMYKtWKw9>{fQ{0qi!MtuTYc-D zqKq8?BGFCOWWt?goB{z8jmUY}VKVu~vL1nm!vYR7K5+4X%EFe?wF58CrCPNLalCXi zf`bnh^fbm8YiQW_VSG`CnvP|#Ht882ZjHkoRY*|{%=Lt%Z1KE~BSrym)bAfIjq_Tj zGpxA04wQAYwXLTMJE$Z)h(!+mXB-sFB9a(xpiVaRO5B5_d4xceAkDj*tJZ;X^&=!` zq_k{19hc1#hp`#aP#A{n!q1?bWH#F5D$7mf8Ktj&K2!L>E<+tZh(*a9OYK&)tlz zof_EMlFeBOGL~gItyk-!ZPDzbGVA-cTd6Ach)`Xcswj2LQ44ss3q&9+PrLSVv1MkZ zkBHE!Z$-7dMub~B3~+>qIbN!$L9eMM#r36fj+plZE0P6Iun`|12CG&d5e(&0kcd21MAXAhN*}Rg#~xpkv52qdN7H(v(u(aQ9SQ zb3k)Iy9gjixx=)jfwbM#A0M8Ru5#!}An8AGb0NG+fwWMwM+n@UlAjP#)%Tp-J|gO& zyVE1W(d*MGGGjUBB)l-UK;d+Wh@^l3q}ao_?Zb=^Jjf<`06oX8B=_T0nxxuoCn=gE z&w|jj5a|?(8AkD(KF9z;Lzu?T7o|#XCnl!sESjH_qk2!S{^w z$zu;MPC}4YB70{pVuR`F$Hxrgp5QSmysz^KS78!CgcDKwHsjwBqE4AGAhabR&PEl= zs!BpNje8CM%9)OdZ?j4mh?-d$A%n}yG;YPM(=#%!$AJdqa9ua|9HmWW$W1aT_>A6r zcZZpK_`dH1PV2g^O;xf!AFg&7fy9Y%=u&2gJ3TY8&ZOPixWod0yU36Wq z9$h~Qwyh^lgtn!%)|MrA$I_Oo)4DFLEiGuhTfnuckCxqKY3pfKl?$XD;ZZfw2q09o zsgx9aPVI&vT%<~ET6P{KrBGa2GE*)>(OOh28qm`pWTpr1pn14;bMw@4EQDAZ1gQ&e z8BJlZv~JyO*Geo8-%z3Chz7`TGutCPVq~gomik!o5l9G6sz@i@%zBUNL3O6HDwRtg z0`-WL8+S^C_fD2FWO^_O(g!{d7gXWlh*aFV*T#n_d)gQYsR=nq%^gY2Bvcog00KyM07Q_~+M`~W2|i|yGN`$o z@-76zg7D~YMtDO*igDR`~CmbnNXn`sHH&3YUS(c(?DM&5k z%9V_Q%ZQMW3It@tIECW!gqUgxbVMayo66FfW(k63m<<(;GEkwa?l#XPP~ zPFL$`)uut;w(jOvSC5`NenVC6&-dLdBHGdxZA)8SB@7uPMpqZ&isIJR;bvm`C84@Kkkj_wZlz1x@ho((fYeNRn z)OfP0xDcwvs2AGL75i=V^ZqYkM+L&A4VMc_CFld@kGp8&#-BK-Ll(w7o zz3RAYjBc?KwO}J6LV@nKZ@Wl0?MrKgWouhyQ&m9K!<)2R&E4IKM9Ptbx#}`ck!?XV zGXSciSJgZK5y(ymnrle32CsJ8q_iWM_dvM!WW%ea1l0%-B+7|sILy40ecyEvmYOIK z4LLo?ap|`uvcA1<+gB!r>hc7{#D5Q-GA6uMCq6%JGj@KL{A=rkgq z7~y8!!$=}JTBw2|q0AN&Lq7<};M0-Sx7i8omSLRt?%v&c z8nnEJEPFx7D%=(%C>LVH# Date: Fri, 14 Aug 2026 16:52:36 +0800 Subject: [PATCH 26/42] fix: use k32 sparse sdpa tiles --- .../stla/xe_sparse_sdpa_fwd_mainloop.hpp | 135 +++++++++--------- .../wrapper/include/sycl_tla_sdpa_sparse.hpp | 16 +-- 2 files changed, 73 insertions(+), 78 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp index 45563462a8..a89d36aabe 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp @@ -263,21 +263,31 @@ struct SPARSESDPAFwdMainloop, CausalMask_, Full int subgroup_q_row_in_tile = get_sub_group_id() / sg_rows_per_sparse_q_block; subgroup_q_row_in_tile = cute::min(subgroup_q_row_in_tile, q_blocks_per_wg_tile - 1); - auto prefetch_sparse_k_block = [&](int logical_block) { - if (logical_block < 0 || logical_block >= total_blk) return; - for (int D = 0; D < size<4>(pKgK); D++) { - if constexpr (CachedKV) { - if (logical_block < kblocks_cache) { - int physical_block = logical_block; - if constexpr (PagedKV) { - physical_block = get_physical_k_tile(logical_block, l_coord, seq_len_kv_cache); + int sparse_route_blocks = params.num_k_blocks > 0 ? params.num_k_blocks : total_blk; + int k_tiles_per_sparse_route_block = cute::max(1, ceil_div(total_blk, sparse_route_blocks)); + auto route_block_to_k_tile = [&](int route_block, int micro_tile) { + return route_block * k_tiles_per_sparse_route_block + micro_tile; + }; + + auto prefetch_sparse_k_block = [&](int route_block) { + if (route_block < 0 || route_block >= sparse_route_blocks) return; + for (int micro_tile = 0; micro_tile < k_tiles_per_sparse_route_block; ++micro_tile) { + int logical_block = route_block_to_k_tile(route_block, micro_tile); + if (logical_block >= total_blk) break; + for (int D = 0; D < size<4>(pKgK); D++) { + if constexpr (CachedKV) { + if (logical_block < kblocks_cache) { + int physical_block = logical_block; + if constexpr (PagedKV) { + physical_block = get_physical_k_tile(logical_block, l_coord, seq_len_kv_cache); + } + prefetch(prefetch_k_cache, pKgK_cache(_, _, _, physical_block, D)); + } else { + prefetch(prefetch_k, pKgK(_, _, _, logical_block - kblocks_cache, D)); } - prefetch(prefetch_k_cache, pKgK_cache(_, _, _, physical_block, D)); } else { prefetch(prefetch_k, pKgK(_, _, _, logical_block - kblocks_cache, D)); } - } else { - prefetch(prefetch_k, pKgK(_, _, _, logical_block - kblocks_cache, D)); } } }; @@ -408,30 +418,58 @@ struct SPARSESDPAFwdMainloop, CausalMask_, Full prefetch(prefetch_k, pKgK(_, _, _, K_next - kblocks_cache, D)); } } - } else if (sparse_prefetch_block < total_blk) { + } else if (sparse_prefetch_block < sparse_route_blocks) { prefetch_sparse_k_block(sparse_prefetch_block); } barrier_wait(ScopeWorkgroup); }; + auto run_sparse_route_block = [&](int route_block, bool subgroup_selected, auto& subgroup_started, + int sparse_prefetch_block) { + if (route_block < 0 || route_block >= sparse_route_blocks) return; + for (int micro_tile = 0; micro_tile < k_tiles_per_sparse_route_block; ++micro_tile) { + int K = route_block_to_k_tile(route_block, micro_tile); + if (K >= total_blk) break; + bool first_selected_block = subgroup_selected ? !subgroup_started : false; + if constexpr (CachedKV) { + if (K < kblocks_cache) { + if (K >= blk_k0 && K < blk_k1) { + mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, + sparse_prefetch_block, copy_k_cache, copy_v_cache, prefetch_v_cache, tKgK_cache, + tVgV_cache, pVgV_cache); + if (subgroup_selected) subgroup_started = true; + } + } else if (K >= (blk_k0 > kblocks_cache ? blk_k0 : kblocks_cache) && K < blk_k1) { + mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, + sparse_prefetch_block, copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); + if (subgroup_selected) subgroup_started = true; + } + } else if (K >= blk_k0 && K < blk_k1) { + mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, sparse_prefetch_block, + copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); + if (subgroup_selected) subgroup_started = true; + } + } + }; + if (lut_rows_base != nullptr && valid_blocks_base != nullptr) { bool subgroup_started = false; if (sparse_q_rows_in_tile == 1) { int const* row_ptr = lut_rows_base; int row_valid = valid_blocks_base[0]; int row_pos = 0; - int row_cur_block = row_valid > 0 ? logical_block_from_delta_row(row_ptr, row_valid, 0) : total_blk; + int row_cur_block = row_valid > 0 ? logical_block_from_delta_row(row_ptr, row_valid, 0) : sparse_route_blocks; int prefetch_pos = row_pos; int prefetch_cur_block = row_cur_block; auto advance_single_sparse_block = [&](int& frontier_pos, int& frontier_cur_block) { - if (frontier_cur_block >= total_blk) return; + if (frontier_cur_block >= sparse_route_blocks) return; frontier_pos += 1; if (frontier_pos < row_valid) { frontier_cur_block += row_ptr[frontier_pos]; } else { - frontier_cur_block = total_blk; + frontier_cur_block = sparse_route_blocks; } }; @@ -443,37 +481,15 @@ struct SPARSESDPAFwdMainloop, CausalMask_, Full for (int stage = 0; stage < Stages; ++stage) { int sparse_prefetch_block = pop_single_sparse_block(prefetch_pos, prefetch_cur_block); - if (sparse_prefetch_block >= total_blk) break; + if (sparse_prefetch_block >= sparse_route_blocks) break; prefetch_sparse_k_block(sparse_prefetch_block); } - while (row_cur_block < total_blk) { + while (row_cur_block < sparse_route_blocks) { int next_block = row_cur_block; bool subgroup_selected = (subgroup_q_row_in_tile == 0); - bool first_selected_block = !subgroup_started; int sparse_prefetch_block = pop_single_sparse_block(prefetch_pos, prefetch_cur_block); - int K = next_block; - if constexpr (CachedKV) { - if (K < kblocks_cache) { - if (K >= blk_k0 && K < blk_k1) { - mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, - sparse_prefetch_block, copy_k_cache, copy_v_cache, prefetch_v_cache, tKgK_cache, - tVgV_cache, pVgV_cache); - subgroup_started = true; - } - } else { - K += kblocks_cache; - if (K >= (blk_k0 > kblocks_cache ? blk_k0 : kblocks_cache) && K < blk_k1) { - mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, - sparse_prefetch_block, copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); - subgroup_started = true; - } - } - } else if (K >= blk_k0 && K < blk_k1) { - mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, sparse_prefetch_block, - copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); - subgroup_started = true; - } + run_sparse_route_block(next_block, subgroup_selected, subgroup_started, sparse_prefetch_block); advance_single_sparse_block(row_pos, row_cur_block); } } else { @@ -493,19 +509,19 @@ struct SPARSESDPAFwdMainloop, CausalMask_, Full row_valid[row] = valid_blocks_base[row]; row_pos[row] = 0; row_cur_block[row] = - row_valid[row] > 0 ? logical_block_from_delta_row(row_ptrs[row], row_valid[row], 0) : total_blk; + row_valid[row] > 0 ? logical_block_from_delta_row(row_ptrs[row], row_valid[row], 0) : sparse_route_blocks; if (row_valid[row] > 0) { active_rows[active_row_count++] = row; } } else { row_valid[row] = 0; row_pos[row] = 0; - row_cur_block[row] = total_blk; + row_cur_block[row] = sparse_route_blocks; } } auto find_sparse_block = [&](int* frontier_pos, int* frontier_cur_block) { - int block = total_blk; + int block = sparse_route_blocks; for (int active = 0; active < active_row_count; ++active) { int row = active_rows[active]; if (frontier_pos[row] < row_valid[row]) { @@ -516,7 +532,7 @@ struct SPARSESDPAFwdMainloop, CausalMask_, Full }; auto advance_sparse_block = [&](int block, int* frontier_pos, int* frontier_cur_block) { - if (block >= total_blk) return; + if (block >= sparse_route_blocks) return; for (int active = 0; active < active_row_count; ++active) { int row = active_rows[active]; if (frontier_pos[row] < row_valid[row] && frontier_cur_block[row] == block) { @@ -524,7 +540,7 @@ struct SPARSESDPAFwdMainloop, CausalMask_, Full if (frontier_pos[row] < row_valid[row]) { frontier_cur_block[row] += row_ptrs[row][frontier_pos[row]]; } else { - frontier_cur_block[row] = total_blk; + frontier_cur_block[row] = sparse_route_blocks; } } } @@ -545,40 +561,19 @@ struct SPARSESDPAFwdMainloop, CausalMask_, Full for (int stage = 0; stage < Stages; ++stage) { int sparse_prefetch_block = pop_sparse_block(prefetch_pos, prefetch_cur_block); - if (sparse_prefetch_block >= total_blk) break; + if (sparse_prefetch_block >= sparse_route_blocks) break; prefetch_sparse_k_block(sparse_prefetch_block); } int next_block = find_sparse_block(row_pos, row_cur_block); - while (next_block < total_blk) { + while (next_block < sparse_route_blocks) { int selected_row = subgroup_q_row_in_tile; bool subgroup_selected = subgroup_q_row_in_tile < sparse_q_rows_in_tile && row_pos[selected_row] < row_valid[selected_row] && row_cur_block[selected_row] == next_block; - bool first_selected_block = subgroup_selected ? !subgroup_started_rows[selected_row] : false; int sparse_prefetch_block = pop_sparse_block(prefetch_pos, prefetch_cur_block); - int K = next_block; - if constexpr (CachedKV) { - if (K < kblocks_cache) { - if (K >= blk_k0 && K < blk_k1) { - mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, - sparse_prefetch_block, copy_k_cache, copy_v_cache, prefetch_v_cache, tKgK_cache, - tVgV_cache, pVgV_cache); - if (subgroup_selected) subgroup_started_rows[selected_row] = true; - } - } else { - K += kblocks_cache; - if (K >= (blk_k0 > kblocks_cache ? blk_k0 : kblocks_cache) && K < blk_k1) { - mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, - sparse_prefetch_block, copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); - if (subgroup_selected) subgroup_started_rows[selected_row] = true; - } - } - } else if (K >= blk_k0 && K < blk_k1) { - mainloop_body(std::bool_constant{}, K, first_selected_block, subgroup_selected, sparse_prefetch_block, - copy_k, copy_v, prefetch_v, tKgK, tVgV, pVgV); - if (subgroup_selected) subgroup_started_rows[selected_row] = true; - } + run_sparse_route_block(next_block, subgroup_selected, subgroup_started_rows[selected_row], + sparse_prefetch_block); advance_sparse_block(next_block, row_pos, row_cur_block); next_block = find_sparse_block(row_pos, row_cur_block); diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp index 0073bd6a8d..2233151b14 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp @@ -1171,12 +1171,12 @@ template ; - using ShapePV = Shape<_256, _32, _32>; + using ShapeQK = Shape<_256, _64, _32>; + using ShapePV = Shape<_256, _32, _64>; using ShapeOut = Shape<_256, _128>; using SubgroupLayoutQK = Layout>; - using ShapeQK1 = Shape<_256, _32, _32>; - using ShapePV1 = Shape<_256, _32, _32>; + using ShapeQK1 = Shape<_256, _64, _32>; + using ShapePV1 = Shape<_256, _32, _64>; using ShapeOut1 = Shape<_256, _128>; using SubgroupLayoutQK1 = Layout>; return options.is_causal ? FMHAConfig inline int launch_sparse_sdpa_prefill_kernel_128(Options const& options) { constexpr int PipelineStages = 2; - using ShapeQK = Shape<_256, _64, _32>; - using ShapePV = Shape<_256, _32, _64>; + using ShapeQK = Shape<_256, _32, _32>; + using ShapePV = Shape<_256, _32, _32>; using ShapeOut = Shape<_256, _128>; using SubgroupLayoutQK = Layout>; - using ShapeQK1 = Shape<_256, _64, _32>; - using ShapePV1 = Shape<_256, _32, _64>; + using ShapeQK1 = Shape<_256, _32, _32>; + using ShapePV1 = Shape<_256, _32, _32>; using ShapeOut1 = Shape<_256, _128>; using SubgroupLayoutQK1 = Layout>; return options.is_causal ? SparseSDPAConfig Date: Fri, 14 Aug 2026 16:52:41 +0800 Subject: [PATCH 27/42] bench: add ark sdpa baseline --- .../ark/benchmarks/bench_sparse_topk.py | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py index 757cd6de65..bbd4a95468 100644 --- a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py +++ b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py @@ -494,18 +494,22 @@ def hnd_to_nhd(x: torch.Tensor) -> torch.Tensor: def summarize_speedups(rows: list[dict[str, object]]) -> list[dict[str, object]]: torch_row = next((row for row in rows if row["mode"] == "dense_torch_sdpa" and row["status"] == "ok"), None) sage_row = next((row for row in rows if row["mode"] == "dense_sagev1" and row["status"] == "ok"), None) + ark_row = next((row for row in rows if row["mode"] == "dense_ark_sdpa" and row["status"] == "ok"), None) torch_ms = None if torch_row is None else float(torch_row["latency_ms"]) sage_ms = None if sage_row is None else float(sage_row["latency_ms"]) + ark_ms = None if ark_row is None else float(ark_row["latency_ms"]) for row in rows: latency_ms = row["latency_ms"] if latency_ms is None: row["speedup_vs_torch"] = None row["speedup_vs_sagev1"] = None + row["speedup_vs_ark"] = None row["baseline_tflops"] = None row["effective_tflops"] = None continue row["speedup_vs_torch"] = (torch_ms / latency_ms) if torch_ms is not None else None row["speedup_vs_sagev1"] = (sage_ms / latency_ms) if sage_ms is not None else None + row["speedup_vs_ark"] = (ark_ms / latency_ms) if ark_ms is not None else None batch = int(row["batch"]) num_heads_q = int(row["num_heads_q"]) seq_len = int(row["seq_len"]) @@ -517,6 +521,7 @@ def summarize_speedups(rows: list[dict[str, object]]) -> list[dict[str, object]] if mode in { "dense_torch_sdpa", "dense_sagev1", + "dense_ark_sdpa", "sparse_kernel_only", "sparse_e2e", "sparse_qtile256_row64k_kernel_only", @@ -536,9 +541,9 @@ def summarize_speedups(rows: list[dict[str, object]]) -> list[dict[str, object]] def print_summary(rows: list[dict[str, object]]) -> None: print( - "| layout | seq_len | mode | pattern | gqa_group | topk | selected_ratio | blocks/row | latency (ms) | baseline_tflops | effective_tflops | status | speedup_vs_torch | speedup_vs_sagev1 |" + "| layout | seq_len | mode | pattern | gqa_group | topk | selected_ratio | blocks/row | latency (ms) | baseline_tflops | effective_tflops | status | speedup_vs_torch | speedup_vs_sagev1 | speedup_vs_ark |" ) - print("|---|---|---|---|---|---|---|---|---|---|---|---|---|---|") + print("|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|") for row in rows: topk = "-" if row["requested_topk"] is None else f"{float(row['requested_topk']):.3f}" ratio = "-" if row["selected_ratio"] is None else f"{float(row['selected_ratio']):.6f}" @@ -548,10 +553,11 @@ def print_summary(rows: list[dict[str, object]]) -> None: effective_tflops = "-" if row.get("effective_tflops") is None else f"{float(row['effective_tflops']):.3f}" sp_torch = "-" if row.get("speedup_vs_torch") is None else f"{float(row['speedup_vs_torch']):.3f}" sp_sage = "-" if row.get("speedup_vs_sagev1") is None else f"{float(row['speedup_vs_sagev1']):.3f}" + sp_ark = "-" if row.get("speedup_vs_ark") is None else f"{float(row['speedup_vs_ark']):.3f}" print( f"| {row['tensor_layout']} | {row['seq_len']} | {row['mode']} | {row['attention_pattern']} | {row['gqa_group_size']} | {topk} | {ratio} | " f"{blocks} | {latency} | {baseline_tflops} | {effective_tflops} | {row['status']} | {sp_torch} | " - f"{sp_sage} |" + f"{sp_sage} | {sp_ark} |" ) if row["note"]: print(f"note[{row['mode']}]: {row['note']}") @@ -663,6 +669,29 @@ def run_single_benchmark(args: argparse.Namespace, *, seq_len: int, tensor_layou iters=args.iters, ) ) + rows.append( + try_benchmark( + "dense_ark_sdpa", + lambda: ark.sdpa( + q, + k, + v, + is_causal=args.causal, + scale=scale, + tensor_layout=tensor_layout, + ), + batch=args.batch, + num_heads_q=args.num_heads_q, + num_heads_kv=args.num_heads_kv, + seq_len=seq_len, + tensor_layout=tensor_layout, + head_dim=args.head_dim, + dtype=dtype, + is_causal=args.causal, + warmup=args.warmup, + iters=args.iters, + ) + ) for topk in args.topk: preprocess = None From ee565a16527480e634b8e858ad2a787cfa743902 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Fri, 14 Aug 2026 16:52:52 +0800 Subject: [PATCH 28/42] tools: add sparse bf16 sweep helpers --- .../ark/examples/flux_gen_bf16_sweep.py | 167 ++++++++++++++++++ .../ark/tools/bench_sparse_bf16_fp16_sweep.sh | 110 ++++++++++++ .../ark/tools/sweep_flux_bf16_topk.sh | 105 +++++++++++ 3 files changed, 382 insertions(+) create mode 100644 auto_round_extension/ark/examples/flux_gen_bf16_sweep.py create mode 100755 auto_round_extension/ark/tools/bench_sparse_bf16_fp16_sweep.sh create mode 100755 auto_round_extension/ark/tools/sweep_flux_bf16_topk.sh diff --git a/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py b/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py new file mode 100644 index 0000000000..597890add2 --- /dev/null +++ b/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py @@ -0,0 +1,167 @@ +# Copyright (C) 2026 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import contextlib +import csv +import os +import sys +import time +from pathlib import Path + +import torch +from diffusers import FluxPipeline +from flux_sparse_patch import patch_flux_sparse_attention_from_env + +dtype = torch.bfloat16 + +MODEL_DEFAULT = "/mnt/disk3/models/black-forest-labs/FLUX.1-dev" +PROMPT_DEFAULT = "A cat holding a sign that says hello world" + + +def env_flag(name, default="1"): + return os.getenv(name, default).lower() not in {"0", "false", "no", "off"} + + +def sync_xpu(): + if hasattr(torch, "xpu") and hasattr(torch.xpu, "synchronize"): + torch.xpu.synchronize() + + +def main(): + model_id = os.getenv("FLUX_MODEL", MODEL_DEFAULT) + topks = os.getenv("FLUX_SPARSE_TOPKS", "0.5 0.25 0.125").split() + run_dense = env_flag("FLUX_RUN_DENSE", "1") + prompt = os.getenv("FLUX_PROMPT", PROMPT_DEFAULT) + height = int(os.getenv("FLUX_HEIGHT", "512")) + width = int(os.getenv("FLUX_WIDTH", "512")) + steps = int(os.getenv("FLUX_STEPS", "50")) + seed = int(os.getenv("FLUX_SEED", "0")) + guidance_scale = float(os.getenv("FLUX_GUIDANCE_SCALE", "3.5")) + max_sequence_length = int(os.getenv("FLUX_MAX_SEQUENCE_LENGTH", "512")) + + default_out = Path("benchmarks/results") / f"flux_bf16_{time.strftime('%Y%m%d_%H%M%S')}" + out_dir = Path(os.getenv("FLUX_OUTPUT_DIR", str(default_out))) + out_dir.mkdir(parents=True, exist_ok=True) + + device_id = os.getenv("ZE_AFFINITY_MASK_VALUE", "") + dev_suffix = f"_dev{device_id}" if device_id else "" + + print(f"[flux_sweep] model={model_id}", flush=True) + print(f"[flux_sweep] topks={topks} run_dense={run_dense} size={height}x{width} steps={steps} seed={seed}", flush=True) + print(f"[flux_sweep] out_dir={out_dir}", flush=True) + print(f"[flux_sweep] kernel={os.getenv('FLUX_SPARSE_KERNEL', '?')} " + f"q_tile={os.getenv('FLUX_SPARSE_Q_TILE_OVERRIDE', '0')} " + f"q_block={os.getenv('FLUX_SPARSE_Q_BLOCK_TOKENS', 'default')} " + f"k_block={os.getenv('FLUX_SPARSE_K_BLOCK_TOKENS', 'default')}", flush=True) + + pipe = FluxPipeline.from_pretrained(model_id, torch_dtype=dtype) + # Offload-only: pipe.to(device) would load the whole ~54 GB model onto the + # 24.4 GB device and OOM. + # + # Use sequential (block-level) offload, NOT enable_model_cpu_offload(): + # model-level offload pulls the whole ~46 GB transformer onto the device, + # peaking at ~24 GB (the full 24.4 GB device) during every transformer + # forward. The sparse BF16 preprocess (triton_xpu) then has <0.4 GB of + # headroom, and its kernel launch flakily OOMs / resets the GPU + # (UR_RESULT_ERROR_OUT_OF_DEVICE_MEMORY / OUT_OF_RESOURCES / DEVICE_LOST). + # Sequential offload keeps only a few blocks resident (peak ~0.16 GB), so + # the triton_xpu sparse path always has room. + pipe.enable_sequential_cpu_offload() + + common_kwargs = dict( + height=height, + width=width, + guidance_scale=guidance_scale, + num_inference_steps=steps, + max_sequence_length=max_sequence_length, + generator=torch.Generator("cpu").manual_seed(seed), + ) + + rows = [] + + def do_run(tag, topk, png_name): + if topk is None: + ctx = contextlib.nullcontext(None) + os.environ.pop("FLUX_SPARSE_TOPK", None) + else: + os.environ["FLUX_SPARSE_TOPK"] = str(topk) + ctx = patch_flux_sparse_attention_from_env(pipe.transformer) + + sync_xpu() + t0 = time.perf_counter() + with ctx as stats: + image = pipe(prompt, output_type="pil", **common_kwargs).images[0] + sync_xpu() + wall_s = time.perf_counter() - t0 + + png_path = out_dir / png_name + image.save(png_path) + + row = { + "tag": tag, + "topk": "" if topk is None else topk, + "wall_s": round(wall_s, 3), + "sparsity": "", + "calls": "", + "sparse_calls": "", + "runtime_fallbacks": "", + "unsupported_fallbacks": "", + "png": str(png_path), + } + if topk is not None: + if stats is None or stats.sparse_calls == 0: + raise RuntimeError( + f"topk={topk}: sparse path did not run (sparse_calls=0) — check FLUX_SPARSE_KERNEL / qtile256 config" + ) + if stats.runtime_fallbacks or stats.unsupported_fallbacks: + raise RuntimeError( + f"topk={topk}: silent fallback detected — runtime={stats.runtime_fallbacks}, " + f"unsupported={stats.unsupported_fallbacks}" + ) + row["sparsity"] = round(float(stats.avg_sparsity), 4) + row["calls"] = stats.total_calls + row["sparse_calls"] = stats.sparse_calls + row["runtime_fallbacks"] = stats.runtime_fallbacks + row["unsupported_fallbacks"] = stats.unsupported_fallbacks + print( + f"[flux_sweep] DONE tag={tag} topk={topk} wall={wall_s:.3f}s " + f"sparsity={stats.avg_sparsity:.4f} sparse_calls={stats.sparse_calls} " + f"runtime_fallbacks={stats.runtime_fallbacks}", flush=True + ) + else: + print(f"[flux_sweep] DONE tag={tag} wall={wall_s:.3f}s", flush=True) + rows.append(row) + return row + + if run_dense: + do_run("dense", None, f"flux_dense_512{dev_suffix}.png") + + for topk in topks: + do_run("sparse_bf16_qtile256", topk, f"flux_bf16_qtile256_topk{topk}_512{dev_suffix}.png") + + # CSV + markdown summary (device-suffixed so parallel instances sharing + # FLUX_OUTPUT_DIR do not clobber each other). + csv_path = out_dir / f"sweep_summary{dev_suffix}.csv" + fieldnames = ["tag", "topk", "wall_s", "sparsity", "calls", "sparse_calls", + "runtime_fallbacks", "unsupported_fallbacks", "png"] + with open(csv_path, "w", newline="", encoding="utf-8") as fh: + writer = csv.DictWriter(fh, fieldnames=fieldnames) + writer.writeheader() + writer.writerows(rows) + + md_path = out_dir / f"SWEEP_SUMMARY{dev_suffix}.md" + with open(md_path, "w", encoding="utf-8") as fh: + fh.write("| tag | topk | wall_s | sparsity | calls | sparse_calls | runtime_fallbacks | png |\n") + fh.write("|---|---|---|---|---|---|---|---|\n") + for r in rows: + fh.write( + f"| {r['tag']} | {r['topk']} | {r['wall_s']} | {r['sparsity']} | {r['calls']} " + f"| {r['sparse_calls']} | {r['runtime_fallbacks']} | `{r['png']}` |\n" + ) + + print(f"[flux_sweep] summary: {csv_path}", flush=True) + print(f"[flux_sweep] summary: {md_path}", flush=True) + + +if __name__ == "__main__": + main() diff --git a/auto_round_extension/ark/tools/bench_sparse_bf16_fp16_sweep.sh b/auto_round_extension/ark/tools/bench_sparse_bf16_fp16_sweep.sh new file mode 100755 index 0000000000..29159a2eac --- /dev/null +++ b/auto_round_extension/ark/tools/bench_sparse_bf16_fp16_sweep.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +# Copyright (C) 2026 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 +# +# bench_sparse_bf16_fp16_sweep.sh +# =============================== +# Run the sparse BF16 and FP16 kernel benchmark sweep (both HND and NHD layouts) +# against the rebuilt ARK XPU extension, and save CSVs under benchmarks/results/. +# +# USAGE +# ./tools/bench_sparse_bf16_fp16_sweep.sh +# +# ENV OVERRIDES (all optional) +# DTYPES dtypes to sweep, space-separated (default: "bf16 fp16") +# SEQ_LENS seq lengths, space-separated (default: "75000") +# TOPKS topk values, space-separated (default: "0.5 0.25 0.125") +# LAYOUTS tensor layouts, space-separated (default: "HND NHD") +# HEADS num heads q (kv = q) (default: 40) +# HEAD_DIM head dim (default: 128) +# Q_TILE q_tile_override (default: 256) +# WARMUP warmup iters (default: 2) +# ITERS measured iters (default: 3) +# ZE_AFFINITY_MASK_VALUE GPU device index (default: 6) +# XPU_SO explicit path to the built .so (default: newest under ark-xbuild) +# OUTPUT_DIR where CSVs are written (default: benchmarks/results) +# SPARGE_PREPROCESS_BACKEND sparse preprocess backend (default: triton_xpu); torch | triton_xpu | auto +# +# PREREQUISITES +# - oneAPI 2026.1 runtime (sourced from /opt/intel/oneapi/setvars.sh) +# - venv at .venv/bin/python with torch.xpu +# - rebuilt extension under auto_round_kernel/ark-xbuild/ +# - a free GPU (pick via ZE_AFFINITY_MASK_VALUE; check `xpu-smi ps` first) + +set -uo pipefail + +SCRIPT_PATH="$(readlink -f "$0")" +REPO_ROOT="$(cd "$(dirname "${SCRIPT_PATH}")/.." && pwd)" +PYTHON_BIN="${REPO_ROOT}/.venv/bin/python" +BENCH="${REPO_ROOT}/benchmarks/bench_sparse_topk.py" + +DTYPES="${DTYPES:-bf16 fp16}" +SEQ_LENS="${SEQ_LENS:-75000}" +TOPKS="${TOPKS:-0.5 0.25 0.125}" +LAYOUTS="${LAYOUTS:-HND NHD}" +HEADS="${HEADS:-40}" +HEAD_DIM="${HEAD_DIM:-128}" +Q_TILE="${Q_TILE:-256}" +WARMUP="${WARMUP:-2}" +ITERS="${ITERS:-3}" +ZE_AFFINITY_MASK_VALUE="${ZE_AFFINITY_MASK_VALUE:-6}" +XPU_SO="${XPU_SO:-}" +OUTPUT_DIR="${OUTPUT_DIR:-${REPO_ROOT}/benchmarks/results}" + +cd "${REPO_ROOT}" + +# Re-exec under the render/video groups if this shell does not already have them. +if [[ "${1:-}" == "--inner" ]]; then + shift +elif command -v sg >/dev/null 2>&1; then + current_groups="$(id -nG || true)" + if [[ ! " ${current_groups} " =~ [[:space:]]render[[:space:]] ]] || [[ ! " ${current_groups} " =~ [[:space:]]video[[:space:]] ]]; then + exec sg render -c "sg video -c '${SCRIPT_PATH} --inner'" + fi +fi + +set +u +source /opt/intel/oneapi/setvars.sh --force >/dev/null 2>&1 +set -u + +export MKLROOT=/opt/intel/oneapi/mkl/2026.1 +export ZE_AFFINITY_MASK="${ZE_AFFINITY_MASK_VALUE}" +export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND="${SPARGE_PREPROCESS_BACKEND:-triton_xpu}" # auto | torch | triton_xpu + +if [[ -z "${XPU_SO}" ]]; then + XPU_SO="$(find "${REPO_ROOT}/auto_round_kernel/ark-xbuild" -maxdepth 1 -name 'auto_round_kernel_xpu*.so' | sort | tail -n 1)" +fi +if [[ -z "${XPU_SO}" ]]; then + echo "error: no auto_round_kernel_xpu*.so found under auto_round_kernel/ark-xbuild" >&2 + exit 1 +fi + +mkdir -p "${OUTPUT_DIR}" +stamp="$(date +%Y%m%d_%H%M%S)" + +echo "XPU process snapshot:" +xpu-smi ps || true +echo "Using XPU extension: ${XPU_SO}" +echo "dtypes=${DTYPES} seq=${SEQ_LENS} topk=${TOPKS} layouts=${LAYOUTS} heads=${HEADS} head_dim=${HEAD_DIM} q_tile=${Q_TILE}" +echo + +for dtype in ${DTYPES}; do + out_csv="${OUTPUT_DIR}/bench_sparse_${dtype}_${stamp}.csv" + echo "========== dtype=${dtype} -> ${out_csv} ==========" + "${PYTHON_BIN}" "${BENCH}" \ + --dtype "${dtype}" \ + --seq-len ${SEQ_LENS} \ + --topk ${TOPKS} \ + --tensor-layout ${LAYOUTS} \ + --head-dim "${HEAD_DIM}" \ + --num-heads-q "${HEADS}" --num-heads-kv "${HEADS}" \ + --q-tile-override "${Q_TILE}" \ + --sparse-q-block-tokens "${Q_TILE}" \ + --sparse-k-block-tokens 64 \ + --warmup "${WARMUP}" --iters "${ITERS}" \ + --xpu-so "${XPU_SO}" \ + --output-csv "${out_csv}" + echo +done + +echo "SWEEP_DONE: CSVs written under ${OUTPUT_DIR}" diff --git a/auto_round_extension/ark/tools/sweep_flux_bf16_topk.sh b/auto_round_extension/ark/tools/sweep_flux_bf16_topk.sh new file mode 100755 index 0000000000..babc5083a4 --- /dev/null +++ b/auto_round_extension/ark/tools/sweep_flux_bf16_topk.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash +# Copyright (C) 2026 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 +# +# sweep_flux_bf16_topk.sh +# ======================= +# One-GPU FLUX.1-dev BF16-sparse topk sweep. Runs examples/flux_gen_bf16_sweep.py +# with the perf-tuned qtile256 config (q_tile=256, q_block=256, k_block=64) and +# saves PNGs + a summary under a shared FLUX_OUTPUT_DIR. +# +# To use both XPU devices, launch two instances concurrently with disjoint +# topk subsets pointing at the SAME FLUX_OUTPUT_DIR, e.g.: +# STAMP=$(date +%Y%m%d_%H%M%S) +# OUT=benchmarks/results/flux_bf16_${STAMP} +# ZE_AFFINITY_MASK_VALUE=5 FLUX_RUN_DENSE=1 FLUX_SPARSE_TOPKS="0.5 0.25" \ +# FLUX_OUTPUT_DIR=$OUT ./tools/sweep_flux_bf16_topk.sh & +# ZE_AFFINITY_MASK_VALUE=6 FLUX_RUN_DENSE=0 FLUX_SPARSE_TOPKS="0.125" \ +# FLUX_OUTPUT_DIR=$OUT ./tools/sweep_flux_bf16_topk.sh & +# wait +# +# ENV OVERRIDES (all optional) +# ZE_AFFINITY_MASK_VALUE XPU device index (default: 6) +# FLUX_MODEL model dir (diffusers format) (default: /mnt/disk3/models/black-forest-labs/FLUX.1-dev) +# FLUX_SPARSE_TOPKS space-separated topk list (default: "0.5 0.25 0.125") +# FLUX_RUN_DENSE 1/0 include a dense baseline generation (default: 1) +# FLUX_OUTPUT_DIR results dir (default: benchmarks/results/flux_bf16_) +# FLUX_HEIGHT / FLUX_WIDTH generation size (keep 512) (default: 512) +# FLUX_STEPS / FLUX_SEED / FLUX_PROMPT (defaults: 50 / 0 / "A cat ...") +# SPARGE_PREPROCESS_BACKEND torch | triton_xpu | auto (default: triton_xpu) +# XPU_SO explicit path to the built auto_round_kernel_xpu*.so +# (default: newest under auto_round_kernel/ark-xbuild) +# +# PREREQUISITES +# - oneAPI 2026.1 runtime (sourced from /opt/intel/oneapi/setvars.sh) +# - venv at .venv/bin/python with torch.xpu + diffusers +# - rebuilt extension with BF16 sparse symbols under auto_round_kernel/ark-xbuild/ +# - a free GPU (pick via ZE_AFFINITY_MASK_VALUE; check `xpu-smi ps` first) + +set -euo pipefail + +SCRIPT_PATH="$(readlink -f "$0")" +REPO_ROOT="$(cd "$(dirname "${SCRIPT_PATH}")/.." && pwd)" +PYTHON_BIN="${REPO_ROOT}/.venv/bin/python" + +ZE_AFFINITY_MASK_VALUE="${ZE_AFFINITY_MASK_VALUE:-6}" +FLUX_MODEL="${FLUX_MODEL:-/mnt/disk3/models/black-forest-labs/FLUX.1-dev}" +FLUX_SPARSE_TOPKS="${FLUX_SPARSE_TOPKS:-0.5 0.25 0.125}" +FLUX_RUN_DENSE="${FLUX_RUN_DENSE:-1}" +FLUX_HEIGHT="${FLUX_HEIGHT:-512}" +FLUX_WIDTH="${FLUX_WIDTH:-512}" +FLUX_STEPS="${FLUX_STEPS:-50}" +FLUX_SEED="${FLUX_SEED:-0}" +SPARGE_PREPROCESS_BACKEND="${SPARGE_PREPROCESS_BACKEND:-triton_xpu}" +XPU_SO="${XPU_SO:-}" + +cd "${REPO_ROOT}" + +# Re-exec under the render/video groups if this shell does not already have them. +if [[ "${1:-}" == "--inner" ]]; then + shift +elif command -v sg >/dev/null 2>&1; then + current_groups="$(id -nG || true)" + if [[ ! " ${current_groups} " =~ [[:space:]]render[[:space:]] ]] || [[ ! " ${current_groups} " =~ [[:space:]]video[[:space:]] ]]; then + exec sg render -c "sg video -c '${SCRIPT_PATH} --inner'" + fi +fi + +# oneAPI's setvars.sh is not compatible with `set -u` in this environment. +set +u +source /opt/intel/oneapi/setvars.sh --force >/dev/null 2>&1 +set -u + +export MKLROOT=/opt/intel/oneapi/mkl/2026.1 +export ZE_AFFINITY_MASK="${ZE_AFFINITY_MASK_VALUE}" +export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND="${SPARGE_PREPROCESS_BACKEND}" + +# qtile256 perf config is fixed for this sweep; kernel is env-overridable (bf16 default, int8 for SAGE). +export FLUX_SPARSE_KERNEL="${FLUX_SPARSE_KERNEL:-bf16}" +export FLUX_SPARSE_Q_TILE_OVERRIDE=256 +export FLUX_SPARSE_Q_BLOCK_TOKENS=256 +export FLUX_SPARSE_K_BLOCK_TOKENS=64 + +if [[ -z "${XPU_SO}" ]]; then + XPU_SO="$(find "${REPO_ROOT}/auto_round_kernel/ark-xbuild" -maxdepth 1 -name 'auto_round_kernel_xpu*.so' | sort | tail -n 1)" +fi +if [[ -z "${XPU_SO}" ]]; then + echo "error: no auto_round_kernel_xpu*.so found under auto_round_kernel/ark-xbuild" >&2 + exit 1 +fi + +if [[ -z "${FLUX_OUTPUT_DIR:-}" ]]; then + FLUX_OUTPUT_DIR="${REPO_ROOT}/benchmarks/results/flux_bf16_$(date +%Y%m%d_%H%M%S)" +fi +export FLUX_OUTPUT_DIR="${FLUX_OUTPUT_DIR}" +mkdir -p "${FLUX_OUTPUT_DIR}" + +echo "XPU process snapshot:" +xpu-smi ps || true +echo "Using XPU extension: ${XPU_SO}" +echo "device=${ZE_AFFINITY_MASK_VALUE} topks='${FLUX_SPARSE_TOPKS}' run_dense=${FLUX_RUN_DENSE}" +echo "qtile256 config: FLUX_SPARSE_Q_TILE_OVERRIDE=256 FLUX_SPARSE_Q_BLOCK_TOKENS=256 FLUX_SPARSE_K_BLOCK_TOKENS=64" +echo "output dir: ${FLUX_OUTPUT_DIR}" +echo + +"${PYTHON_BIN}" examples/flux_gen_bf16_sweep.py From 9b1a95123ed53f7b4b3a0bceba7f29c089425a54 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Fri, 14 Aug 2026 16:54:16 +0800 Subject: [PATCH 29/42] docs: record sparse bf16 profiling results --- .../results/SPARSE_BF16_HANDOFF_20260814.md | 171 ++++++++++ .../SPARSE_BF16_HANDOFF_20260814_CN.md | 156 ++++++++++ .../results/SPARSE_BF16_K32_AB_20260814.md | 258 +++++++++++++++ .../results/SPARSE_BF16_K32_AB_20260814_CN.md | 193 ++++++++++++ .../results/UNITRACE_USAGE_GUIDE_20260814.md | 294 ++++++++++++++++++ .../ab_bf16_sdpa_k32_20260814_092404.csv | 16 + .../results/ab_k32_bf16_20260814_091351.csv | 16 + .../results/ab_k64_bf16_20260814_090508.csv | 16 + .../SWEEP_SUMMARY_dev5.md | 3 + .../flux_bf16_qtile256_topk0.9_512_dev5.png | Bin 0 -> 305961 bytes .../sweep_summary_dev5.csv | 2 + .../SWEEP_SUMMARY.md | 71 +++++ .../bf16_k32_qtile256_topk_0p5_0p3_0p1.csv | 31 ++ .../fp16_k32_qtile256_topk_0p5_0p3_0p1.csv | 31 ++ .../k32_compute.metrics.2889557 | 7 + .../results/unitrace_k32_stalls_20260814.csv | 8 + .../k32_stalls.metrics.2892853 | 7 + .../results/unitrace_k32_verbose_20260814.csv | 8 + .../k32_verbose.3726840 | 19 ++ .../unitrace_k64_compute_real_20260814.csv | 8 + .../k64_compute_real.2948755 | 32 ++ .../k64_compute_real.metrics.2948755 | 7 + .../unitrace_k64_stalls_real_20260814.csv | 8 + .../k64_stalls_real.metrics.2952213 | 7 + 24 files changed, 1369 insertions(+) create mode 100644 auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814.md create mode 100644 auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814_CN.md create mode 100644 auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md create mode 100644 auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md create mode 100644 auto_round_extension/ark/benchmarks/results/UNITRACE_USAGE_GUIDE_20260814.md create mode 100644 auto_round_extension/ark/benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv create mode 100644 auto_round_extension/ark/benchmarks/results/ab_k32_bf16_20260814_091351.csv create mode 100644 auto_round_extension/ark/benchmarks/results/ab_k64_bf16_20260814_090508.csv create mode 100644 auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/SWEEP_SUMMARY_dev5.md create mode 100644 auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png create mode 100644 auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/sweep_summary_dev5.csv create mode 100644 auto_round_extension/ark/benchmarks/results/k32_qtile256_sweep_20260814_163445/SWEEP_SUMMARY.md create mode 100644 auto_round_extension/ark/benchmarks/results/k32_qtile256_sweep_20260814_163445/bf16_k32_qtile256_topk_0p5_0p3_0p1.csv create mode 100644 auto_round_extension/ark/benchmarks/results/k32_qtile256_sweep_20260814_163445/fp16_k32_qtile256_topk_0p5_0p3_0p1.csv create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_compute_20260814/k32_compute.metrics.2889557 create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814.csv create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853 create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814.csv create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840 create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814.csv create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755 create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755 create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814.csv create mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213 diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814.md new file mode 100644 index 0000000000..5b4dc56dac --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814.md @@ -0,0 +1,171 @@ +# Handoff: BF16 native sparse SDPA (sparge) — 2026-08-14 + +Status snapshot for a developer picking up this work. Everything here was verified on +**Intel Battlemage XPU (24.4 GB, `intel_gpu_bmg_g21`)**, oneAPI 2026.1, PyTorch 2.13.0+xpu. + +## 1. Where the code lives + +- **Branch `feat/sparse-bf16-prefill-v2`** — all sparse work (INT8 SAGE **and** native BF16/FP16 + sparse SDPA). **`main` only has the INT8 SAGE path** (empty `ark.cpp`/`sparse_attention.py` were + false alarms; check paths against the repo root — `main` has a working int8 `sparge_sage2_attn_meansim_topk_xpu` + in `auto_round_extension/ark/auto_round_kernel/sparse_attention.py`, 1440 lines). +- Switching branches requires a **rebuild** every time (the `.so` in `auto_round_kernel/ark-xbuild/` + only matches the branch it was built on). + +### Key changes in this handoff +- BF16 sparse SDPA now has a separate native BF16/FP16 path (`SparseSDPAConfig`) instead of reusing + the INT8 SAGE DPAS path. +- `benchmarks/bench_sparse_topk.py` now includes dense `ark.sdpa` as a baseline and reports + `speedup_vs_ark`. +- The BF16 sparse selected-block microtile was A/B tested at K64 vs K32. K32 is the current + experimental direction and the locally rebuilt `.so` is back on K32. +- `xe_sparse_sdpa_fwd_mainloop.hpp` supports expanding one 64-token sparse route block into multiple + physical K microtiles, which is required for K32 while keeping the existing 64-token LUT format. +- Unitrace profiles show K64 regresses because of compiler-reported spill plus SEND/SBID and + memory-write pressure. +- A FLUX.1-dev sparse BF16 topk 0.9 K32 image was generated successfully with zero fallbacks. + +### Two separate paths (do not mix) + +| path | wrapper | config | DPAS | +|---|---|---|---| +| INT8 sparse | `sparge_sage2_attn_meansim_topk_xpu` / `sage_sparse` | `SparseSageConfig` | `XE_DPAS_TT<8, int, int8, int8, int>` (+ `static_assert(ElementQ==int8_t)`) | +| BF16/FP16 sparse | `sparge_sage2_attn_meansim_topk_xpu_sdpa` / `sage_sparse_sdpa` | `SparseSDPAConfig` | `XE_DPAS_TT<8, float, bf16, bf16, float>` | + +**Using the int8 DPAS on bf16 fragments hangs the device** (fixed by the split; see +`SPARSE_BF16_DPAS_HANG.md`). + +### Key files +- `auto_round_kernel/sdpa_sparse_sdpa.cpp` — BF16 launcher. `sdpa_sparse.cpp` — INT8 launcher. +- `auto_round_kernel/sparse_attention.py` — Python wrappers + `sparge_preprocess_topk`. +- `auto_round_kernel/sparge_preprocess_triton.py` — triton_xpu preprocess (+ torch fallback). +- `wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`, `sycl_tla_sdpa_sparse.hpp` — kernels. +- `auto_round_kernel/sdpa.cpp` — **dense** SYCL-TLA SDPA → Python `ark.sdpa(...)` + (`xe_sdpa_fwd_mainloop.hpp`). + +## 2. Correctness — verified + +- **Repo e2e tests pass** (`test_sage_sparse_prefill_e2e.py`, `test_sparge_preprocess_topk_e2e.py`). +- **topk=1 (all blocks selected) == dense SDPA**: max diff **0.0039** (bf16 rounding) vs an exact + CPU fp32 reference. This is the "dense gate" test. +- **INT8 == BF16 kernels**: on identical Q/K/V they select the *same* blocks (bit-identical LUT) + and produce outputs within 0.008; verified across separate processes (bit-identical). +- **Preprocess + kernel are deterministic** (same QKV → identical results, in-process and + cross-process). + +## 3. Performance (bench `benchmarks/bench_sparse_topk.py`, seq 75000, 40h×128) + +New mode `dense_ark_sdpa` (dense SYCL-TLA SDPA via `ark.sdpa`) added as a third baseline; every +row gets a `speedup_vs_ark` column. Full tables in `BENCH_SPARSE_ARK_SDPA_20260813.md`. + +| mode | topk | vs torch | vs sagev1 | vs ark_sdpa | +|---|---|---|---|---| +| dense_ark_sdpa | — | 1.5–1.6× | 0.82–0.87× | 1.0 | +| INT8 sparse qtile256 (kernel) | 0.5 / 0.25 / 0.125 | 3.5 / 6.9 / 13.2× | — | 2.2 / 4.3 / 8.2× | +| BF16 sparse (kernel) | 0.5 / 0.25 / 0.125 | 1.5 / 2.9 / 5.6× | — | 0.92 / 1.8 / 3.5× | + +Notes: `dense_ark_sdpa` is faster than torch SDPA but slower than `dense_sagev1`; the BF16 sparse +kernel only beats the dense ark kernel at topk ≤ 0.25. The 1.5×-not-2× ceiling at topk 0.5 is the +**SBID scoreboard stall** (memory-SEND concurrency bound; INT8 avoids it because its K is half the +size) — earlier profiling details in `SPARSE_BF16_KERNEL_OPTIMIZATION_JOURNEY.md` / +`SPARSE_SDPA_KERNEL_OPTIMIZATION_OPTIONS.md`. + +**2026-08-14 A/B update:** changing the BF16 sparse qtile256 selected-block microtile from K64 to +K32 improved kernel-only latency by **1.69–1.77×**. At topk 0.5, BF16 sparse improved from +1511 ms / **0.91× vs ark** to 863 ms / **1.59× vs ark**. Correctness e2e still passed. See +`SPARSE_BF16_K32_AB_20260814.md`. + +**2026-08-14 unitrace update:** profiling K32 vs K64 at topk 0.5 confirmed the K64 regression is +compiler-reported spill plus memory/SEND scoreboard pressure, not lower occupancy. Kernel properties +from `unitrace --device-timing --verbose` showed `Spill Memory Per Thread = 0 B` for K32 and +`3840 B` for K64, with the same `Private Memory Per Thread = 2432 B` and register file size 256. +Aggregated `SPARSESDPAFwdMainloop` GPU time was 1684.6 ms (K32) vs 3072.4 ms (K64), XVE active +64.7% vs 39.9%, XVE stall 35.1% vs 59.9%, and SBID stall 31.4% vs 55.7%. SEND instructions rose +4.4× and GPU memory writes rose ~5.0× with K64. SLM read/write was 0/0 in both profiles because the +spill is private/scratch traffic, not SLM-backed storage. Raw profiles are in +`unitrace_k32_compute_20260814/`, `unitrace_k32_stalls_20260814/`, +`unitrace_k32_verbose_20260814/`, `unitrace_k64_compute_real_20260814/`, and +`unitrace_k64_stalls_real_20260814/`. + +## 4. FLUX.1-dev end-to-end — the critical gotcha + +**Use `enable_sequential_cpu_offload()`, NOT `enable_model_cpu_offload()`.** + +- `enable_model_cpu_offload()` streams at the *component* level: the whole ~46 GB transformer gets + pulled onto the 24.4 GB device (peak ~24 GB, ~350 MB headroom). The sparse launch then flakily + OOMs (`OUT_OF_DEVICE_MEMORY` / `OUT_OF_RESOURCES`), and can **reset the GPU** + (`dmesg: exec queue reset` on `0000:ba:00.0` = dev5; the `DEVICE_LOST` error). +- Sequential offload keeps the peak at **~0.16 GB** → triton_xpu sparse runs reliably (0 fallbacks). + Cost: ~4 s/step vs ~1 s/step (50-step generation ≈ 4–5 min). + +### FLUX image-quality findings +- bf16 sparse and int8 sparse produce **identical images** at the same config (verified, 0.0 diff). +- `topk=0.9` drops **12.5–16.7%** of blocks (route-block rounding + sim threshold), not 10% → + images sit ~15–18 from dense. Attention-mass coverage: topk 0.9 keeps **91.5%** of the mass, + topk 0.5 keeps **64.6%** — the renormalized output shifting is inherent to topk-sparse on + FLUX's spread-out attention. +- **Latest K32 BF16 sparse topk 0.9 run:** saved PNG at + `benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png`. + Config: BF16 sparse qtile256, selected-block K32, `topk=0.9`, 512×512, 50 steps, seed 0, + `ZE_AFFINITY_MASK=5`. Result: wall **238.884 s**, sparsity **0.125**, calls **2850**, + sparse_calls **2850**, runtime_fallbacks **0**. +- **Open question: run-to-run non-determinism.** Same config (bf16 qtile256 topk0.5, seed 0) gave + images differing by **48.5** across two runs (means 97.6 vs 101.3), while topk 0.9 was + deterministic (0.0). QKV, preprocess and kernel are all verified deterministic → suspected + diffusion-trajectory amplification of a tiny perturbation elsewhere, not a sparse-kernel bug. + Worth re-checking before trusting single-run image comparisons. + +### Dev tooling (untracked) +- `examples/flux_gen_bf16_sweep.py` — offload-only runner (loop over topk, saves PNGs + summary). +- `tools/sweep_flux_bf16_topk.sh` — one-GPU wrapper (qtile256 env). **Note: `FLUX_SPARSE_KERNEL` + is now env-overridable (default bf16)**; earlier it hardcoded bf16 and silently made an "int8" + run bf16. `main`'s `flux_sparse_patch.py` is int8-only and ignores the block-token envs. +- `tools/bench_sparse_bf16_fp16_sweep.sh` — the bench sweep driver. + +## 5. Current repo state (uncommitted) + +- **Branch**: `feat/sparse-bf16-prefill-v2`. +- **Modified (tracked)**: `benchmarks/bench_sparse_topk.py` (added `dense_ark_sdpa` mode + + `speedup_vs_ark` column), sparse SDPA headers for K32 route-block expansion — not yet committed. +- **Untracked**: `examples/flux_gen_bf16_sweep.py`, `tools/sweep_flux_bf16_topk.sh`, + `tools/bench_sparse_bf16_fp16_sweep.sh`. +- `.so`: `auto_round_kernel/ark-xbuild/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so` + (feature-branch build). A stale **main** `.so` copy sits in `auto_round_kernel/xbuild/` (harmless; + feature's loader uses `ark-xbuild`). +- `benchmarks/results/` is gitignored → all result CSVs, PNGs, and docs below are local-only. + +## 6. How to run + +```bash +# rebuild (after oneAPI: source /opt/intel/oneapi/setvars.sh --force) +cd auto_round_extension/ark/auto_round_kernel/ark-xbuild && cmake --build . -j 16 + +# correctness tests +export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch +.venv/bin/python auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +.venv/bin/python auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py + +# FLUX sweep (bf16 qtile256; set FLUX_SPARSE_KERNEL=int8 for SAGE) +export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu +export FLUX_SPARSE_KERNEL=bf16 FLUX_SPARSE_TOPKS="0.9 0.5" FLUX_RUN_DENSE=0 +export FLUX_OUTPUT_DIR=benchmarks/results/flux_ +.venv/bin/python examples/flux_gen_bf16_sweep.py + +# bench (needs feature branch — main lacks bf16 symbols) +export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu +.venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ + --topk 0.5 0.25 0.125 --tensor-layout HND NHD --q-tile-override 256 \ + --sparse-q-block-tokens 256 --sparse-k-block-tokens 64 --warmup 2 --iters 3 \ + --output-csv benchmarks/results/bench_.csv +``` + +## 7. Open items / suggestions + +1. **Resolve the topk-0.5 cross-run non-determinism** before trusting single-run image diffs + (capture QKV per run; all sparse ops verified deterministic). +2. **Clean up the K32 BF16 sparse SDPA experiment** (`SPARSE_BF16_K32_AB_20260814.md`) into a final + implementation. The unitrace A/B says to keep the selected-block microtile at K32 unless a later + compiler/assembly pass removes the K64 write/SBID pressure. +3. Consider making the FLUX runner's `_512` filename suffix derive from the actual size (cosmetic; + the 1024×1024 run is mislabeled `_512`). +4. Decide whether to commit the bench `dense_ark_sdpa` change + dev tooling (currently uncommitted). diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814_CN.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814_CN.md new file mode 100644 index 0000000000..26a9abd9e4 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814_CN.md @@ -0,0 +1,156 @@ +# 交接文档:BF16 原生稀疏 SDPA(sparge)— 2026-08-14 + +供后续开发接手的状态快照。以下内容均在 **Intel Battlemage XPU(24.4 GB, `intel_gpu_bmg_g21`)**、 +oneAPI 2026.1、PyTorch 2.13.0+xpu 上验证。 + +## 1. 代码位置 + +- **分支 `feat/sparse-bf16-prefill-v2`** — 全部稀疏工作(INT8 SAGE **与** 原生 BF16/FP16 稀疏 SDPA)。 + **`main` 只有 INT8 SAGE 路径**(此前认为 `ark.cpp`/`sparse_attention.py` 为空是路径写错导致的误判; + 以仓库根为相对路径检查:`main` 有可用的 int8 `sparge_sage2_attn_meansim_topk_xpu`, + 位于 `auto_round_extension/ark/auto_round_kernel/sparse_attention.py`,1440 行)。 +- 切换分支后 **每次都要重新编译**(`auto_round_kernel/ark-xbuild/` 里的 `.so` 只匹配编译它的分支)。 + +### 本交接中的关键改动 +- BF16 稀疏 SDPA 已拆成独立的原生 BF16/FP16 路径(`SparseSDPAConfig`),不再复用 INT8 SAGE + DPAS 路径。 +- `benchmarks/bench_sparse_topk.py` 已加入稠密 `ark.sdpa` 基线,并输出 `speedup_vs_ark`。 +- BF16 稀疏已选中 block microtile 做了 K64 vs K32 A/B。K32 是当前实验方向,本地重新编译后的 + `.so` 已恢复为 K32。 +- `xe_sparse_sdpa_fwd_mainloop.hpp` 支持把一个 64-token 稀疏路由 block 展开为多个物理 K microtile; + 这让 K32 能继续沿用现有 64-token LUT 格式。 +- Unitrace profile 显示 K64 回退来自 SEND/SBID 与 memory-write 压力。 +- 已成功生成一张 FLUX.1-dev sparse BF16 topk 0.9 K32 图片,且无 fallback。 + +### 两条独立路径(勿混用) + +| 路径 | 封装函数 | 配置 | DPAS | +|---|---|---|---| +| INT8 稀疏 | `sparge_sage2_attn_meansim_topk_xpu` / `sage_sparse` | `SparseSageConfig` | `XE_DPAS_TT<8, int, int8, int8, int>`(含 `static_assert(ElementQ==int8_t)`) | +| BF16/FP16 稀疏 | `sparge_sage2_attn_meansim_topk_xpu_sdpa` / `sage_sparse_sdpa` | `SparseSDPAConfig` | `XE_DPAS_TT<8, float, bf16, bf16, float>` | + +**在 bf16 片段上复用 int8 DPAS 会导致设备挂起**(已通过拆分修复;见 `SPARSE_BF16_DPAS_HANG.md`)。 + +### 关键文件 +- `auto_round_kernel/sdpa_sparse_sdpa.cpp` — BF16 启动器;`sdpa_sparse.cpp` — INT8 启动器。 +- `auto_round_kernel/sparse_attention.py` — Python 封装 + `sparge_preprocess_topk`。 +- `auto_round_kernel/sparge_preprocess_triton.py` — triton_xpu 预处理(含 torch 回退)。 +- `wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`、`sycl_tla_sdpa_sparse.hpp` — 内核。 +- `auto_round_kernel/sdpa.cpp` — **稠密** SYCL-TLA SDPA → Python `ark.sdpa(...)` + (`xe_sdpa_fwd_mainloop.hpp`)。 + +## 2. 正确性 — 已验证 + +- **仓库 e2e 测试通过**(`test_sage_sparse_prefill_e2e.py`、`test_sparge_preprocess_topk_e2e.py`)。 +- **topk=1(全 block 选中)== 稠密 SDPA**:与精确 CPU fp32 参考的最大误差 **0.0039**(bf16 舍入)。 + 即"稠密门"测试。 +- **INT8 == BF16 内核**:相同 Q/K/V 下选中的 block 完全一致(LUT 逐位相同),输出误差 <0.008; + 跨进程验证逐位一致。 +- **预处理与内核均确定**(相同 QKV → 结果一致,进程内与跨进程均一致)。 + +## 3. 性能(bench `benchmarks/bench_sparse_topk.py`,seq 75000,40 头 × 128) + +新增 `dense_ark_sdpa`(经 `ark.sdpa` 调用的稠密 SYCL-TLA SDPA)作为第三个稠密基线;每行新增 +`speedup_vs_ark` 列。完整表格见 `BENCH_SPARSE_ARK_SDPA_20260813.md`。 + +| 模式 | topk | vs torch | vs sagev1 | vs ark_sdpa | +|---|---|---|---|---| +| dense_ark_sdpa | — | 1.5–1.6× | 0.82–0.87× | 1.0 | +| INT8 稀疏 qtile256(内核) | 0.5 / 0.25 / 0.125 | 3.5 / 6.9 / 13.2× | — | 2.2 / 4.3 / 8.2× | +| BF16 稀疏(内核) | 0.5 / 0.25 / 0.125 | 1.5 / 2.9 / 5.6× | — | 0.92 / 1.8 / 3.5× | + +说明:`dense_ark_sdpa` 快于 torch SDPA 但慢于 `dense_sagev1`;BF16 稀疏内核仅在 topk ≤ 0.25 时 +快于稠密 ark 内核。topk 0.5 处"1.5× 而非 2×"的上限源于 **SBID 分数板停顿**(内存 SEND 并发瓶颈; +INT8 因 K 尺寸减半而无此问题)——早期剖析见 `SPARSE_BF16_KERNEL_OPTIMIZATION_JOURNEY.md` / +`SPARSE_SDPA_KERNEL_OPTIMIZATION_OPTIONS.md`。 + +**2026-08-14 A/B 更新:** 将 BF16 稀疏 qtile256 已选中 block 的 microtile 从 K64 改为 K32 后, +kernel-only 延迟提升 **1.69–1.77×**。topk 0.5 从 1511 ms / **0.91× vs ark** 提升到 +863 ms / **1.59× vs ark**。正确性 e2e 仍通过。见 `SPARSE_BF16_K32_AB_20260814.md`。 + +**2026-08-14 unitrace 更新:** 在 topk 0.5 下 profile K32 与 K64,确认 K64 回退主要是 +memory/SEND scoreboard 压力,而不是 occupancy 下降。聚合 `SPARSESDPAFwdMainloop` GPU time 为 +1684.6 ms(K32)对 3072.4 ms(K64),XVE active 64.7% 对 39.9%,XVE stall 35.1% 对 59.9%, +SBID stall 31.4% 对 55.7%。K64 的 SEND 指令增加 4.4×,GPU memory write 增加约 5.0×。 +两边 SLM read/write 都是 0/0,因此 unitrace 没显示 SLM-backed spill;巨大的 LSC write 差异是当前 +spill/pressure proxy。原始 profile 在 `unitrace_k32_compute_20260814/`、 +`unitrace_k32_stalls_20260814/`、`unitrace_k64_compute_real_20260814/`、 +`unitrace_k64_stalls_real_20260814/`。 + +## 4. FLUX.1-dev 端到端 — 关键坑 + +**必须用 `enable_sequential_cpu_offload()`,不要用 `enable_model_cpu_offload()`。** + +- `enable_model_cpu_offload()` 按*组件*粒度搬运:整个约 46 GB 的 transformer 会被拉到 24.4 GB + 设备上(峰值约 24 GB,仅剩约 350 MB 余量)。稀疏启动会偶发 OOM + (`OUT_OF_DEVICE_MEMORY` / `OUT_OF_RESOURCES`),甚至**重置 GPU** + (`dmesg: exec queue reset` on `0000:ba:00.0` = dev5;即 `DEVICE_LOST` 错误)。 +- Sequential offload 使峰值降到 **约 0.16 GB** → triton_xpu 稀疏稳定运行(0 回退)。 + 代价:每步约 4 s 对 1 s(50 步生成约 4–5 分钟)。 + +### FLUX 图像质量结论 +- 相同配置下,bf16 稀疏与 int8 稀疏**产出完全相同图像**(已验证,0.0 差异)。 +- `topk=0.9` 实际丢弃 **12.5–16.7%** 的 block(路由块取整 + sim 阈值),而非 10% → 图像与稠密 + 相差约 15–18。注意力质量覆盖率:topk 0.9 保留 **91.5%**、topk 0.5 保留 **64.6%** —— + 归一化后输出的偏移是 FLUX 注意力分散下的 topk 稀疏固有现象。 +- **最新 K32 BF16 稀疏 topk 0.9 运行:** PNG 已保存到 + `benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png`。 + 配置:BF16 sparse qtile256、已选中 block K32、`topk=0.9`、512×512、50 steps、seed 0、 + `ZE_AFFINITY_MASK=5`。结果:wall **238.884 s**、sparsity **0.125**、calls **2850**、 + sparse_calls **2850**、runtime_fallbacks **0**。 +- **待解决:运行间非确定性。** 相同配置(bf16 qtile256 topk0.5,seed 0)两次运行图像相差 + **48.5**(均值 97.6 对 101.3),而 topk 0.9 完全确定(0.0)。QKV、预处理、内核均已验证确定 → + 疑似扩散轨迹对其它微小扰动的放大,而非稀疏内核缺陷。做单次图像对比前建议复查。 + +### 开发工具(未跟踪) +- `examples/flux_gen_bf16_sweep.py` — offload-only 运行器(遍历 topk,保存 PNG + 汇总)。 +- `tools/sweep_flux_bf16_topk.sh` — 单 GPU 封装(qtile256 环境变量)。**注意:`FLUX_SPARSE_KERNEL` + 现已可通过环境变量覆盖(默认 bf16)**;此前写死 bf16,导致"int8"运行实际是 bf16。 + `main` 的 `flux_sparse_patch.py` 仅 int8,且忽略 block-token 环境变量。 +- `tools/bench_sparse_bf16_fp16_sweep.sh` — bench 扫描驱动。 + +## 5. 当前仓库状态(未提交) + +- **分支**:`feat/sparse-bf16-prefill-v2`。 +- **已修改(跟踪)**:`benchmarks/bench_sparse_topk.py`(新增 `dense_ark_sdpa` 模式 + + `speedup_vs_ark` 列)、稀疏 SDPA 头文件中的 K32 route-block expansion —— 尚未提交。 +- **未跟踪**:`examples/flux_gen_bf16_sweep.py`、`tools/sweep_flux_bf16_topk.sh`、 + `tools/bench_sparse_bf16_fp16_sweep.sh`。 +- `.so`:`auto_round_kernel/ark-xbuild/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so` + (特性分支构建)。`auto_round_kernel/xbuild/` 里有一份**过期的 main** `.so`(无碍; + 特性分支的 loader 用 `ark-xbuild`)。 +- `benchmarks/results/` 已 gitignore → 下面的结果 CSV、PNG、文档均为本地。 + +## 6. 如何运行 + +```bash +# 重新编译(先 source /opt/intel/oneapi/setvars.sh --force) +cd auto_round_extension/ark/auto_round_kernel/ark-xbuild && cmake --build . -j 16 + +# 正确性测试 +export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch +.venv/bin/python auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +.venv/bin/python auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py + +# FLUX 扫描(bf16 qtile256;SAGE 时设 FLUX_SPARSE_KERNEL=int8) +export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu +export FLUX_SPARSE_KERNEL=bf16 FLUX_SPARSE_TOPKS="0.9 0.5" FLUX_RUN_DENSE=0 +export FLUX_OUTPUT_DIR=benchmarks/results/flux_ +.venv/bin/python examples/flux_gen_bf16_sweep.py + +# bench(需要特性分支 —— main 缺少 bf16 符号) +export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu +.venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ + --topk 0.5 0.25 0.125 --tensor-layout HND NHD --q-tile-override 256 \ + --sparse-q-block-tokens 256 --sparse-k-block-tokens 64 --warmup 2 --iters 3 \ + --output-csv benchmarks/results/bench_.csv +``` + +## 7. 待办 / 建议 + +1. **定位 topk-0.5 的跨运行非确定性**,再做单次图像对比(逐次抓取 QKV;稀疏算子已全部验证确定)。 +2. **将 K32 BF16 稀疏 SDPA 实验整理成最终实现**(`SPARSE_BF16_K32_AB_20260814.md`)。unitrace + A/B 说明应保持已选中 block microtile 为 K32,除非后续 compiler/assembly 优化能消除 K64 的 + write/SBID 压力。 +3. 考虑让 FLUX 运行器文件名里的 `_512` 后缀跟随实际尺寸(1024×1024 运行被误标为 `_512`,纯外观问题)。 +4. 决定是否提交 bench 的 `dense_ark_sdpa` 改动及开发工具(当前均未提交)。 diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md new file mode 100644 index 0000000000..164da22c26 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md @@ -0,0 +1,258 @@ +# BF16 sparse SDPA K64 vs K32 A/B — 2026-08-14 + +## Summary + +The BF16 sparse SDPA qtile256 path was tested with the selected-block K tile changed from 64 tokens +to 32 tokens, matching the dense `ark.sdpa` head_dim=128 K tile size. This is an experimental patch, +not yet a cleaned-up final implementation. + +Result: **K32 is substantially faster**. At topk 0.5, BF16 sparse changes from slower than dense +`ark.sdpa` to clearly faster. + +## Test setup + +- Branch: `feat/sparse-bf16-prefill-v2` +- Device: Intel Battlemage XPU, `ZE_AFFINITY_MASK=5` +- Benchmark: `benchmarks/bench_sparse_topk.py` +- Shape: `seq_len=75000`, HND, 40 heads, head_dim 128 +- Sparse config: `q_tile_override=256`, `sparse_q_block_tokens=256`, `sparse_k_block_tokens=64` +- Benchmark options: `--warmup 1 --iters 2` +- Baseline CSV: `benchmarks/results/ab_k64_bf16_20260814_090508.csv` +- K32 CSV: `benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv` + +## Result table + +Only `sparse_sdpa_bf16_kernel_only` is compared below. + +| topk | K64 latency | K32 latency | K32 speedup | K64 vs ark | K32 vs ark | effective TFLOPS K64 -> K32 | +|---|---:|---:|---:|---:|---:|---:| +| 1.0 | 2986.014 ms | 1691.257 ms | 1.766x | 0.460x | 0.812x | 38.6 -> 68.1 | +| 0.5 | 1511.047 ms | 862.649 ms | 1.752x | 0.910x | 1.593x | 38.3 -> 67.1 | +| 0.25 | 766.744 ms | 455.005 ms | 1.685x | 1.792x | 3.020x | 38.1 -> 64.2 | + +Dense `ark.sdpa` in the same run was ~1374 ms. With K64, BF16 sparse at topk 0.5 was slower than +dense ark (`0.91x`). With K32, BF16 sparse at topk 0.5 became faster (`1.59x`). + +## Patch shape + +The A/B changed `launch_sparse_sdpa_prefill_kernel_128` in +`auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp`: + +```cpp +// K64 original +using ShapeQK = Shape<_256, _64, _32>; +using ShapePV = Shape<_256, _32, _64>; + +// K32 experiment +using ShapeQK = Shape<_256, _32, _32>; +using ShapePV = Shape<_256, _32, _32>; +``` + +Because the routing LUT still uses 64-token sparse K blocks, the experiment also changed +`auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp` so each sparse route block +can expand into multiple physical K microtiles. For the K32 experiment, one 64-token routed block +runs as two 32-token mainloop iterations. + +## Tile meaning + +For QK: + +```cpp +using ShapeQK = Shape<_256, _32, _32>; +``` + +This means: + +```text +M = 256 query tokens per workgroup tile +N = 32 key tokens per physical K microtile +K = 32 head-dim reduction chunk +``` + +The QK output score tile is therefore `256 x 32`. Since head_dim is 128, each physical tile still +does four reduction chunks over the feature dimension: + +```text +head_dim 128 / reduction chunk 32 = 4 QK reduction chunks +``` + +For PV: + +```cpp +using ShapePV = Shape<_256, _32, _32>; +``` + +This means: + +```text +M = 256 query rows / probability rows +N = 32 value/output head-dim columns per tile +K = 32 selected key/value tokens reduced per PV tile +``` + +So one PV microtile consumes `P[256, 32] x V[32, 32] -> O[256, 32]`. The output head_dim 128 is +covered as four 32-column output chunks. + +Pseudocode for one selected 64-token sparse route block: + +```cpp +// K64 original: +// ShapeQK = Shape<_256, _64, _32> +// ShapePV = Shape<_256, _32, _64> +for each selected_route_block_64_tokens { + scores[256][64] = 0; + for d = 0; d < 128; d += 32 { + scores[256][64] += Q[256][d:d+32] * transpose(K[64][d:d+32]); + } + softmax_update(scores[256][64]); + O[256][0:32] += P[256][64] * V[64][0:32]; // repeated for output-dim chunks +} + +// K32 experiment: +// ShapeQK = Shape<_256, _32, _32> +// ShapePV = Shape<_256, _32, _32> +for each selected_route_block_64_tokens { + for micro_tile = 0; micro_tile < 2; ++micro_tile { + key_start = selected_route_block_64_tokens * 64 + micro_tile * 32; + + scores[256][32] = 0; + for d = 0; d < 128; d += 32 { + scores[256][32] += Q[256][d:d+32] * transpose(K[key_start:key_start+32][d:d+32]); + } + softmax_update(scores[256][32]); + O[256][0:32] += P[256][32] * V[key_start:key_start+32][0:32]; // repeated for output-dim chunks + } +} +``` + +The head-dim reduction loop count is the same in both cases (`128 / 32 = 4`). The difference is the +physical selected-key span: + +```text +K64: one route block -> one 256x64 score tile +K32: one route block -> two 256x32 score tiles +``` + +K32 adds one extra microtile iteration per 64-token route block, but each physical tile is smaller. +The unitrace result below shows that smaller tile wins because it greatly reduces SEND/SBID and +memory-write pressure. + +## Correctness + +After rebuilding, `auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py` passed. +Relevant BF16 SDPA all-selected result: + +```text +[sage_sparse_sdpa][torch.bfloat16_all_selected] D=128 max_diff=0.001953 mean_diff=0.000111 +``` + +## Unitrace profile + +The profile below uses `topk=0.5`, `seq_len=75000`, HND, head_dim 128, `q_tile_override=256`, +`sparse_q_block_tokens=256`, and the same 64-token sparse routing blocks. The profiler adds large +wall-time overhead, so the table uses the included `SPARSESDPAFwdMainloop` kernel GPU metrics rather +than benchmark wall time. + +Files: + +- K32 ComputeBasic: `benchmarks/results/unitrace_k32_compute_20260814/k32_compute.metrics.2889557` +- K32 VectorEngineStalls: `benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853` +- K64 ComputeBasic: `benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755` +- K64 VectorEngineStalls: `benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213` +- K32 kernel properties: `benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840` +- K64 kernel properties: `benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755` + +Commands: + +```bash +# K32 kernel properties. Run after building the K32 variant. +source /opt/intel/oneapi/setvars.sh --force +export ZE_AFFINITY_MASK=5 +export ZE_FLAT_DEVICE_HIERARCHY=FLAT +export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu +unitrace \ + --device-timing --verbose \ + --include-kernels SPARSESDPAFwdMainloop \ + --output k32_verbose \ + .venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ + --topk 0.5 --tensor-layout HND --q-tile-override 256 \ + --sparse-q-block-tokens 256 --warmup 0 --iters 1 \ + --output-csv benchmarks/results/unitrace_k32_verbose_20260814.csv +``` + +```bash +# K64 ComputeBasic. Run after temporarily changing launch_sparse_sdpa_prefill_kernel_128 +# back to ShapeQK=Shape<_256,_64,_32>, ShapePV=Shape<_256,_32,_64> and rebuilding. +source /opt/intel/oneapi/setvars.sh --force +export ZE_AFFINITY_MASK=5 +export ZE_FLAT_DEVICE_HIERARCHY=FLAT +export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu +unitrace \ + --device-timing --kernel-submission --metric-query --group ComputeBasic \ + --include-kernels SPARSESDPAFwdMainloop \ + --output k64_compute_real \ + .venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ + --topk 0.5 --tensor-layout HND --q-tile-override 256 \ + --sparse-q-block-tokens 256 --warmup 0 --iters 1 \ + --output-csv benchmarks/results/unitrace_k64_compute_real_20260814.csv +``` + +```bash +# K32/K64 stall pass: use the same build-specific setup as above and change only the group/output. +unitrace \ + --device-timing --kernel-submission --metric-query --group VectorEngineStalls \ + --include-kernels SPARSESDPAFwdMainloop \ + --output _stalls \ + .venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ + --topk 0.5 --tensor-layout HND --q-tile-override 256 \ + --sparse-q-block-tokens 256 --warmup 0 --iters 1 \ + --output-csv benchmarks/results/_stalls.csv +``` + +Kernel properties from `unitrace --device-timing --verbose`: + +| variant | SIMD | SLM / WG | private memory / thread | spill memory / thread | register file size / thread | +|---|---:|---:|---:|---:|---:| +| K32 | 16 | 0 | 2432 B | 0 B | 256 | +| K64 | 16 | 0 | 2432 B | 3840 B | 256 | + +ComputeBasic aggregate over the two profiled `SPARSESDPAFwdMainloop` rows: + +| metric | K32 | K64 | K64/K32 | +|---|---:|---:|---:| +| GPU time | 1684.6 ms | 3072.4 ms | 1.824x | +| XVE active | 64.718% | 39.934% | 0.617x | +| XVE stall | 35.149% | 59.939% | 1.705x | +| thread occupancy | 99.828% | 99.843% | 1.000x | +| SEND instructions | 18.593G | 81.568G | 4.387x | +| GPU memory read | 43.462 GB | 73.245 GB | 1.685x | +| GPU memory write | 1.633 GB | 8.135 GB | 4.981x | +| LSC byte read | 9653.807 GB | 13389.615 GB | 1.387x | +| LSC byte write | 72.008 MB | 2333.083 GB | 32400.183x | +| SLM read/write | 0 / 0 | 0 / 0 | n/a | + +VectorEngineStalls aggregate: + +| stall metric | K32 | K64 | delta | +|---|---:|---:|---:| +| SBID | 31.449% | 55.730% | +24.281 pp | +| ALU write | 29.562% | 16.532% | -13.030 pp | +| instruction fetch | 12.329% | 3.638% | -8.691 pp | +| pipe stall | 4.748% | 0.891% | -3.857 pp | +| control | 4.316% | 1.310% | -3.006 pp | +| barrier | 0.240% | 0.531% | +0.291 pp | + +## Interpretation + +This confirms the K64 selected-block microtile is a major performance issue for BF16 sparse SDPA. +The kernel properties pass shows that K64 does cause compiler-reported spill memory: +`Spill Memory Per Thread` is **3840 B** for K64 and **0 B** for K32. SLM remains 0 because this is +private/scratch spill traffic, not SLM-backed storage. + +The runtime metrics match that diagnosis. K64 is memory/SEND scoreboard limited: SBID stall rises +from 31.4% to 55.7%, XVE active drops from 64.7% to 39.9%, SEND instructions rise 4.4x, and memory +writes rise ~5.0x. The large LSC write delta is now best interpreted as spill/scratch pressure plus +the extra memory traffic created by the larger K64 live state. + +Recommendation: keep the selected-block BF16 sparse SDPA path on K32 and treat K64 as a regression +case unless compiler/offline assembly data proves the write/SBID pressure can be removed another way. diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md new file mode 100644 index 0000000000..024eefdcbf --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md @@ -0,0 +1,193 @@ +# BF16 稀疏 SDPA K64 vs K32 A/B — 2026-08-14 + +## 摘要 + +本次测试将 BF16 稀疏 SDPA qtile256 路径的已选中 block 的 K tile 从 64 token 改为 32 token, +与稠密 `ark.sdpa` 在 head_dim=128 下的 K tile 大小保持一致。这是实验性补丁,尚未整理成最终实现。 + +结论:**K32 明显更快**。在 topk 0.5 下,BF16 稀疏从慢于稠密 `ark.sdpa` 变为明显快于它。 + +## 测试设置 + +- 分支:`feat/sparse-bf16-prefill-v2` +- 设备:Intel Battlemage XPU,`ZE_AFFINITY_MASK=5` +- Benchmark:`benchmarks/bench_sparse_topk.py` +- 形状:`seq_len=75000`,HND,40 头,head_dim 128 +- 稀疏配置:`q_tile_override=256`、`sparse_q_block_tokens=256`、`sparse_k_block_tokens=64` +- Benchmark 参数:`--warmup 1 --iters 2` +- 基线 CSV:`benchmarks/results/ab_k64_bf16_20260814_090508.csv` +- K32 CSV:`benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv` + +## 结果表 + +下表仅比较 `sparse_sdpa_bf16_kernel_only`。 + +| topk | K64 延迟 | K32 延迟 | K32 加速 | K64 vs ark | K32 vs ark | effective TFLOPS K64 -> K32 | +|---|---:|---:|---:|---:|---:|---:| +| 1.0 | 2986.014 ms | 1691.257 ms | 1.766x | 0.460x | 0.812x | 38.6 -> 68.1 | +| 0.5 | 1511.047 ms | 862.649 ms | 1.752x | 0.910x | 1.593x | 38.3 -> 67.1 | +| 0.25 | 766.744 ms | 455.005 ms | 1.685x | 1.792x | 3.020x | 38.1 -> 64.2 | + +同次运行中稠密 `ark.sdpa` 约为 1374 ms。K64 时,BF16 稀疏 topk 0.5 慢于稠密 ark +(`0.91x`);K32 时,BF16 稀疏 topk 0.5 变为更快(`1.59x`)。 + +## 补丁形态 + +A/B 修改了 `auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp` 中的 +`launch_sparse_sdpa_prefill_kernel_128`: + +```cpp +// K64 原始配置 +using ShapeQK = Shape<_256, _64, _32>; +using ShapePV = Shape<_256, _32, _64>; + +// K32 实验配置 +using ShapeQK = Shape<_256, _32, _32>; +using ShapePV = Shape<_256, _32, _32>; +``` + +由于路由 LUT 仍以 64-token 稀疏 K block 为单位,实验还修改了 +`auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`,使每个稀疏路由 block +可以展开为多个物理 K microtile。在 K32 实验中,一个 64-token 路由 block 会执行两次 32-token +mainloop。 + +## Tile 含义 + +对于 QK: + +```cpp +using ShapeQK = Shape<_256, _32, _32>; +``` + +含义是: + +```text +M = 256 每个 workgroup tile 的 query token 数 +N = 32 每个物理 K microtile 的 key token 数 +K = 32 head-dim reduction chunk +``` + +因此 QK 输出的 score tile 是 `256 x 32`。由于 head_dim 是 128,每个物理 tile 仍然需要在特征维上做 +4 个 reduction chunk: + +```text +head_dim 128 / reduction chunk 32 = 4 个 QK reduction chunk +``` + +对于 PV: + +```cpp +using ShapePV = Shape<_256, _32, _32>; +``` + +含义是: + +```text +M = 256 query 行 / probability 行 +N = 32 每个 tile 的 value/output head-dim 列数 +K = 32 每个 PV tile reduction 的 selected key/value token 数 +``` + +所以一个 PV microtile 计算 `P[256, 32] x V[32, 32] -> O[256, 32]`。output head_dim 128 会拆成 +4 个 32-column output chunk。 + +一个被选中的 64-token 稀疏路由 block 的伪代码: + +```cpp +// K64 原始配置: +// ShapeQK = Shape<_256, _64, _32> +// ShapePV = Shape<_256, _32, _64> +for each selected_route_block_64_tokens { + scores[256][64] = 0; + for d = 0; d < 128; d += 32 { + scores[256][64] += Q[256][d:d+32] * transpose(K[64][d:d+32]); + } + softmax_update(scores[256][64]); + O[256][0:32] += P[256][64] * V[64][0:32]; // 对 output-dim chunk 重复 +} + +// K32 实验配置: +// ShapeQK = Shape<_256, _32, _32> +// ShapePV = Shape<_256, _32, _32> +for each selected_route_block_64_tokens { + for micro_tile = 0; micro_tile < 2; ++micro_tile { + key_start = selected_route_block_64_tokens * 64 + micro_tile * 32; + + scores[256][32] = 0; + for d = 0; d < 128; d += 32 { + scores[256][32] += Q[256][d:d+32] * transpose(K[key_start:key_start+32][d:d+32]); + } + softmax_update(scores[256][32]); + O[256][0:32] += P[256][32] * V[key_start:key_start+32][0:32]; // 对 output-dim chunk 重复 + } +} +``` + +两种配置的 head-dim reduction loop 次数相同(`128 / 32 = 4`)。差别在物理 selected-key 跨度: + +```text +K64: 一个 route block -> 一个 256x64 score tile +K32: 一个 route block -> 两个 256x32 score tile +``` + +K32 对每个 64-token route block 多了一次 microtile iteration,但每个物理 tile 更小。下面的 unitrace +结果显示,更小的 tile 胜出,因为它显著降低了 SEND/SBID 与 memory-write 压力。 + +## 正确性 + +重新编译后,`auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py` 通过。 +相关 BF16 SDPA 全选结果: + +```text +[sage_sparse_sdpa][torch.bfloat16_all_selected] D=128 max_diff=0.001953 mean_diff=0.000111 +``` + +## Unitrace profile + +下面 profile 使用 `topk=0.5`、`seq_len=75000`、HND、head_dim 128、`q_tile_override=256`、 +`sparse_q_block_tokens=256`,稀疏路由 block 仍为 64 token。Profiler 会显著拉长墙钟时间,因此下表 +使用被 `--include-kernels SPARSESDPAFwdMainloop` 捕获的 kernel GPU metrics,而不是 benchmark 墙钟时间。 + +文件: + +- K32 ComputeBasic:`benchmarks/results/unitrace_k32_compute_20260814/k32_compute.metrics.2889557` +- K32 VectorEngineStalls:`benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853` +- K64 ComputeBasic:`benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755` +- K64 VectorEngineStalls:`benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213` + +ComputeBasic,对两个 `SPARSESDPAFwdMainloop` 行聚合: + +| metric | K32 | K64 | K64/K32 | +|---|---:|---:|---:| +| GPU time | 1684.6 ms | 3072.4 ms | 1.824x | +| XVE active | 64.718% | 39.934% | 0.617x | +| XVE stall | 35.149% | 59.939% | 1.705x | +| thread occupancy | 99.828% | 99.843% | 1.000x | +| SEND instructions | 18.593G | 81.568G | 4.387x | +| GPU memory read | 43.462 GB | 73.245 GB | 1.685x | +| GPU memory write | 1.633 GB | 8.135 GB | 4.981x | +| LSC byte read | 9653.807 GB | 13389.615 GB | 1.387x | +| LSC byte write | 72.008 MB | 2333.083 GB | 32400.183x | +| SLM read/write | 0 / 0 | 0 / 0 | n/a | + +VectorEngineStalls 聚合: + +| stall metric | K32 | K64 | delta | +|---|---:|---:|---:| +| SBID | 31.449% | 55.730% | +24.281 pp | +| ALU write | 29.562% | 16.532% | -13.030 pp | +| instruction fetch | 12.329% | 3.638% | -8.691 pp | +| pipe stall | 4.748% | 0.891% | -3.857 pp | +| control | 4.316% | 1.310% | -3.006 pp | +| barrier | 0.240% | 0.531% | +0.291 pp | + +## 解读 + +该 A/B 确认 K64 的已选中 block microtile 是 BF16 稀疏 SDPA 的主要性能问题。这个结果并不能单独证明 +存在 register spill;unitrace 也没有直接给出 GRF spill 计数器。但它明确显示 K64 被 memory/SEND +scoreboard 限制:SBID stall 从 31.4% 升到 55.7%,XVE active 从 64.7% 降到 39.9%,SEND 指令增加 +4.4x,memory write 增加约 5.0x。SLM 流量仍为 0,因此这些指标没有显示 SLM-backed spill。巨大的 LSC +write 差异是这里能采到的最佳 spill/pressure proxy,符合 K64 带来更高 scratch/memory 压力的判断。 + +建议:BF16 稀疏 SDPA 的已选中 block 路径保持 K32;除非后续 compiler/offline assembly 数据证明可以 +用其它方式消除 write/SBID 压力,否则 K64 应视为性能回退。 diff --git a/auto_round_extension/ark/benchmarks/results/UNITRACE_USAGE_GUIDE_20260814.md b/auto_round_extension/ark/benchmarks/results/UNITRACE_USAGE_GUIDE_20260814.md new file mode 100644 index 0000000000..b813717b0c --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/UNITRACE_USAGE_GUIDE_20260814.md @@ -0,0 +1,294 @@ +# Unitrace Usage Guide for Intel GPU Kernels — 2026-08-14 + +This is a general unitrace workflow for profiling SYCL/Level Zero kernels on Intel GPUs. It applies +to sparse SDPA and most other GPU kernels. + +## 1. Environment + +Use the project venv and source oneAPI before profiling: + +```bash +source /opt/intel/oneapi/setvars.sh --force +export ZE_AFFINITY_MASK=5 +export ZE_FLAT_DEVICE_HIERARCHY=FLAT +``` + +`ZE_AFFINITY_MASK` chooses the GPU. `ZE_FLAT_DEVICE_HIERARCHY=FLAT` is recommended for hardware +metric profiling. + +Useful checks: + +```bash +unitrace --device-list +unitrace --metric-list +``` + +## 2. Find Hot Kernels + +Start with device timing. This has lower overhead than full metric collection and identifies which +kernels matter. + +```bash +unitrace \ + --device-timing --verbose \ + --output timing \ + +``` + +Use `--include-kernels` once you know a stable kernel-name substring: + +```bash +unitrace \ + --device-timing --verbose \ + --include-kernels "" \ + --output timing_filtered \ + +``` + +Important: the command examples do not use `--` before the application command. + +## 3. Kernel Properties: Spill, Private Memory, SLM, Registers + +The key mode for spill information is: + +```bash +unitrace \ + --device-timing --verbose \ + --include-kernels "" \ + --output kernel_props \ + +``` + +Look for the `=== Kernel Properties ===` table: + +```text +Kernel, Compiled, SIMD, Number of Arguments, SLM Per Work Group, +Private Memory Per Thread, Spill Memory Per Thread, Register File Size Per Thread +``` + +Key fields: + +| field | meaning | +|---|---| +| `SLM Per Work Group` | Shared local memory allocated per workgroup. | +| `Private Memory Per Thread` | Per-thread private memory allocation. | +| `Spill Memory Per Thread` | Compiler-reported spill/scratch memory per thread. This is the direct spill signal. | +| `Register File Size Per Thread` | Register file allocation reported by runtime/compiler metadata. | + +Example interpretation: + +```text +Spill Memory Per Thread = 0 -> no compiler-reported spill +Spill Memory Per Thread = 3840 -> compiler-reported private/scratch spill +``` + +SLM counters being zero does not rule out spill. Spill can be private/scratch memory and appear as +LSC/GPU memory traffic, not SLM traffic. + +## 4. Compute Overview: ComputeBasic + +Use `ComputeBasic` for the first hardware-counter pass. + +```bash +unitrace \ + --device-timing --kernel-submission --metric-query --group ComputeBasic \ + --include-kernels "" \ + --output compute_basic \ + +``` + +Key metrics: + +| metric | what it tells you | +|---|---| +| `GpuTime[ns]` | GPU time under the profiling pass. Use ratios more than absolute time. | +| `XVE_ACTIVE[%]` | Whether execution units are actively doing work. | +| `XVE_STALL[%]` | Time with threads loaded but no execution pipe active. | +| `XVE_THREADS_OCCUPANCY_ALL[%]` | Thread-slot occupancy. Low occupancy can indicate resource pressure. | +| `XVE_INST_EXECUTED_SEND_ALL` | SEND instruction pressure, usually memory/message traffic. | +| `GPU_MEMORY_BYTE_READ/WRITE` | Device-memory bytes. | +| `LOAD_STORE_CACHE_BYTE_READ/WRITE` | LSC traffic, useful as scratch/spill pressure proxy when spill is reported. | +| `L3_READ/WRITE/MISS/HIT` | L3 behavior and locality. | +| `SLM_BYTE_READ/WRITE` | SLM traffic only, not private/scratch spill traffic. | + +Use this pass to classify the broad bottleneck: compute active, memory/SEND pressure, occupancy, or +cache behavior. + +## 5. Stall Breakdown: VectorEngineStalls + +Use this when `XVE_STALL[%]` is high. + +```bash +unitrace \ + --device-timing --kernel-submission --metric-query --group VectorEngineStalls \ + --include-kernels "" \ + --output vector_stalls \ + +``` + +Common stall meanings: + +| metric | likely meaning | +|---|---| +| `XVE_STALL_SBID[%]` | Scoreboard waits, often memory latency or dependent SEND results. | +| `XVE_STALL_ALUWR[%]` | ALU writeback/dependency pressure. | +| `XVE_STALL_INSTFETCH[%]` | Instruction fetch/code-size pressure. | +| `XVE_STALL_PIPESTALL[%]` | Structural hazards, often register pressure, accumulator hazards, or SEND holds. | +| `XVE_STALL_BARRIER[%]` | Synchronization/load imbalance. | +| `XVE_STALL_CONTROL[%]` | Control-flow overhead. | + +High SBID plus high SEND/LSC/memory traffic usually points to memory-message latency or scratch/spill +pressure. Confirm spill with the kernel properties pass. + +## 6. Memory Deep Dive: MemoryProfile + +Use this when ComputeBasic suggests memory/SEND pressure. + +```bash +unitrace \ + --device-timing --kernel-submission --metric-query --group MemoryProfile \ + --include-kernels "" \ + --output memory_profile \ + +``` + +Useful metrics: + +| metric | what it tells you | +|---|---| +| `GPU_MEMORY_BYTE_READ/WRITE` | DRAM/device-memory traffic. | +| `LOAD_STORE_CACHE_BYTE_READ/WRITE` | LSC traffic. | +| `XVE_LOAD_STORE_CACHE_READ_MESSAGE_COUNT` | LSC read message count. | +| `XVE_LOAD_STORE_CACHE_WRITE_MESSAGE_COUNT` | LSC write message count. | +| `XVE_LOAD_STORE_CACHE_REGISTER_REQUEST_COUNT` | Payload/register transactions sent to LSC. | +| `XVE_LOAD_STORE_CACHE_REGISTER_RESPONSE_COUNT` | Payload/register responses from LSC. | +| `GPU_MEMORY_REQUEST_QUEUE_FULL[%]` | Memory request queue pressure. | +| `L3_BUSY[%]`, `L3_STALL[%]`, `L3_HIT`, `L3_MISS` | L3 saturation and locality. | + +MemoryProfile still does not label individual messages as spill/fill. Combine it with +`Spill Memory Per Thread` from the kernel properties pass. + +## 7. Timeline and Submission + +Use kernel submission timing to separate launch/queue overhead from device execution: + +```bash +unitrace \ + --device-timing --kernel-submission \ + --include-kernels "" \ + --output submission \ + +``` + +Use Chrome trace when host/device sequencing matters: + +```bash +unitrace \ + --chrome-kernel-logging --chrome-sycl-logging --chrome-device-logging \ + --output trace \ + +``` + +Open the generated JSON in Perfetto. + +## 8. Instruction-Level Stall Sampling + +For instruction-level stall analysis, unitrace supports `--stall-sampling`, but it is only useful +when shader/debug dumps are available. + +Typical flow: + +```bash +# Build or run with shader dumps/debug info enabled where supported. +export IGC_ShaderDumpEnable=1 +export IGC_DumpToCustomDir=./shader_dump + +unitrace \ + --stall-sampling \ + --include-kernels "" \ + --output stall_sampling \ + +``` + +This is the path to correlate stalls to instruction regions. For spill proof, kernel properties are +usually simpler; assembly dumps are useful when you need to inspect actual scratch send +instructions. + +## 9. Output Files + +`--output-dir-path` may not always place every output where expected with some unitrace builds. +If files appear in the current directory, move them after the run: + +```bash +mkdir -p +find . -maxdepth 1 -type f -name '*' -exec mv -t {} + +``` + +Common output patterns: + +```text +. timing/log output +.metrics. metric-query CSV-style output +.json Chrome trace, when enabled +``` + +## 10. Practical Analysis Pattern + +Use this order for most kernels: + +1. `--device-timing --verbose`: identify hot kernels and check spill/private/SLM/register properties. +2. `--metric-query --group ComputeBasic`: broad compute, occupancy, SEND, memory and L3 counters. +3. `--metric-query --group VectorEngineStalls`: dominant stall reason. +4. `--metric-query --group MemoryProfile`: deeper memory/LSC/L3 analysis if SEND or memory pressure is high. +5. Chrome trace or stall sampling only if timeline or instruction-level evidence is needed. + +Minimal command set: + +```bash +# Properties and spill +unitrace --device-timing --verbose --include-kernels "" --output props + +# Broad counters +unitrace --device-timing --kernel-submission --metric-query --group ComputeBasic \ + --include-kernels "" --output basic + +# Stall reason +unitrace --device-timing --kernel-submission --metric-query --group VectorEngineStalls \ + --include-kernels "" --output stalls + +# Memory detail +unitrace --device-timing --kernel-submission --metric-query --group MemoryProfile \ + --include-kernels "" --output memory +``` + +## 11. Reading Results Safely + +- Metric profiling adds overhead. Use ratios, percentages, and relative A/B comparisons more than + profiled wall time. +- Run the same benchmark shape for A/B comparisons. +- Use `--include-kernels` to reduce unrelated noise. +- The benchmark may call the target kernel multiple times even with `--iters 1`; aggregate rows by + kernel name or compare matching rows consistently. +- `Spill Memory Per Thread` is the direct unitrace spill field. `LSC` and `GPU_MEMORY` counters are + runtime symptoms, not direct proof by themselves. +- `SLM_BYTE_READ/WRITE = 0` only means no SLM traffic. It does not rule out private/scratch spill. + +## 12. Sparse SDPA Example + +For the BF16 sparse SDPA K32/K64 A/B, the important result came from combining: + +```text +unitrace --device-timing --verbose +unitrace --metric-query --group ComputeBasic +unitrace --metric-query --group VectorEngineStalls +``` + +Observed: + +| variant | spill/thread | XVE active | XVE stall | SBID stall | SEND instructions | GPU memory write | +|---|---:|---:|---:|---:|---:|---:| +| K32 | 0 B | 64.7% | 35.1% | 31.4% | 18.6G | 1.63 GB | +| K64 | 3840 B | 39.9% | 59.9% | 55.7% | 81.6G | 8.14 GB | + +Conclusion: K64 has compiler-reported private/scratch spill and much higher SEND/SBID and memory +pressure. K32 avoids the spill and is the better selected-block microtile for this kernel. diff --git a/auto_round_extension/ark/benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv b/auto_round_extension/ark/benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv new file mode 100644 index 0000000000..feaa6ee7fe --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv @@ -0,0 +1,16 @@ +mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops +dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,2198.8499785074964,ok,,1.0,0.5424874441849272,0.6248773510755263,52.39102309207733,52.39102309207733 +dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1192.848504986614,ok,,1.843360635751622,1.0,1.1518743111453715,96.57554963468958,96.57554963468958 +dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1374.0115499822423,ok,,1.6003140428738858,0.8681502750119025,1.0,83.84208997478139,83.84208997478139 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1232.5617364840582,ok,,1.7839674179565415,0.9677799250764281,1.11476083453773,93.46387818967474,93.46387818967474 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1403.636468516197,ok,,1.5665380800713522,0.8498272392762708,0.9788941658339273,82.07253272763671,82.07253272763671 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1691.256666497793,ok,,1.3001279001967296,0.7053030616912401,0.8124204783343186,68.11503084186089,68.11503084186089 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1855.3182344767265,ok,,1.1851605496281126,0.6429347175165584,0.7405799848508298,62.09177372338551,62.09177372338551 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,620.9528554463759,ok,,3.5410900509135095,1.9209968913487439,2.2127469709347345,185.521330628535,93.23500901160774 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,791.7039599851705,ok,,2.7773638754423855,1.5066850303602843,1.7355117814592957,145.5089349334034,73.12650687563928 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,862.6485769636929,ok,,2.548952188905125,1.3827745583087172,1.5927824918211992,133.54221298952947,67.11254921105966 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1023.5971785150468,ok,,2.1481594758764504,1.1653495437698485,1.3423362029734673,112.54427270610786,56.559891223337694 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,318.0901705054566,ok,,6.9126624535849235,3.7500325869583935,4.319566202875395,362.1614582335037,91.77535584421337 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,487.6641205046326,ok,,4.508943524965783,2.4460452488328643,2.8175366860297646,236.2281643373549,59.86259263543146 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,455.0045364885591,ok,,4.832589133015788,2.6216189275655886,3.01977549627528,253.18428886235216,64.15944512109019 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,615.2271990431473,ok,,3.5740454614609556,1.9388747877886927,2.233340060581229,187.24789830353512,47.45050061845107 diff --git a/auto_round_extension/ark/benchmarks/results/ab_k32_bf16_20260814_091351.csv b/auto_round_extension/ark/benchmarks/results/ab_k32_bf16_20260814_091351.csv new file mode 100644 index 0000000000..87c04adc39 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/ab_k32_bf16_20260814_091351.csv @@ -0,0 +1,16 @@ +mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops +dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,2198.8636924652383,ok,,1.0,0.5408843479418712,0.6250810260167103,52.390696337727256,52.390696337727256 +dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1189.3309545121156,ok,,1.8488240671136411,1.0,1.1556648447957822,96.86118028203266,96.86118028203266 +dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1374.4679729570635,ok,,1.599792600284858,0.8653027774473059,1.0,83.81424832486708,83.81424832486708 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1226.4589419937693,ok,,1.7928555267334902,0.9697274925312238,1.1206799721502998,93.92894947851035,93.92894947851035 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1401.4715235098265,ok,,1.5689677996156737,0.848630125236916,0.9807320019709457,82.19931555333687,82.19931555333687 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,3097.4557574954815,ok,,0.7098934947316825,0.38397028000612227,0.4437409540494683,37.191814514615565,37.191814514615565 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,3262.153450981714,ok,,0.6740528076027543,0.3645846133186033,0.42133762056577395,35.3140959587084,35.3140959587084 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,620.1253090403043,ok,,3.5458376886248417,1.9178881061195592,2.216435860494337,185.76890560761282,93.35942950453526 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,791.9392834883183,ok,,2.7765559030986915,1.501795629171689,1.7355724127016838,145.46569718396762,73.10477745000057 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1558.91097598942,ok,,1.410512676049156,0.7629242290485915,0.8816847107543823,73.89774129140639,37.13781348969048 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1718.133609450888,ok,,1.2797978459707746,0.6922226234153137,0.7999773506533876,67.04950032193229,33.69618332059135 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,318.0500839953311,ok,,6.913576833067327,3.7394454972996476,4.321545700259084,362.20710446877644,91.78692305930448 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,487.35681897960603,ok,,4.51181476657917,2.4403699880556804,2.8202498034906527,236.37711736792312,59.90033883142689 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,786.9992540217936,ok,,2.793984468509226,1.5112224674093282,1.7464666782505003,146.37879186199316,37.09385801765496 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,947.5691915140487,ok,,2.3205310094050664,1.2551389019009516,1.4505199042625117,121.57423545602056,30.808133960159434 diff --git a/auto_round_extension/ark/benchmarks/results/ab_k64_bf16_20260814_090508.csv b/auto_round_extension/ark/benchmarks/results/ab_k64_bf16_20260814_090508.csv new file mode 100644 index 0000000000..cf2790e3a0 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/ab_k64_bf16_20260814_090508.csv @@ -0,0 +1,16 @@ +mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops +dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,2198.8340279785916,ok,,1.0,0.5418930146026886,0.6250399004918449,52.39140314101125,52.39140314101125 +dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1191.5328000322916,ok,,1.8453827103366365,1.0,1.1534378256381823,96.6821895266987,96.6821895266987 +dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1374.3590020458214,ok,,1.5998978612614945,0.8669734750953854,1.0,83.82089383379264,83.82089383379264 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1231.199766509235,ok,,1.7859279117740954,0.967781859974349,1.116276204260889,93.567269206541,93.567269206541 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1401.3589860405773,ok,,1.5690726286996692,0.8502694968966288,0.9807329997069187,82.20591664773063,82.20591664773063 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,2986.013912013732,ok,,0.7363776903824686,0.3990379265275212,0.46026543832107275,38.57986044087467,38.57986044087467 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,3109.592208522372,ok,,0.7071133063532604,0.3831797612454428,0.4419740306395013,37.04665829952705,37.04665829952705 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,621.7157779610716,ok,,3.536719037740539,1.9165233411639406,2.21059051541696,185.29367290275394,93.12059807005808 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,790.3886099811643,ok,,2.781965732060577,1.5075277970676815,1.7388395843388653,145.75108819286416,73.2482026464249 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1511.0474135144614,ok,,1.4551720934185948,0.7885475924683075,0.9095406204688681,76.23850778584287,38.31418164349503 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1669.5242109708488,ok,,1.317042312731687,0.7136960292054708,0.8232039960933629,69.00169476009563,34.67727193944677 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,318.1397750158794,ok,,6.911534490991705,3.7453122608539537,4.319984830495409,362.1049898405504,91.76104618552544 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,487.69996053306386,ok,,4.508579466718084,2.4431677187956446,2.8180420612370463,236.21080443411262,59.85819346135797 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,766.7436815099791,ok,,2.867756306316525,1.554017109975733,1.7924621163349415,150.2457767544064,38.073790880407586 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,926.4499850105494,ok,,2.373397445684619,1.286127496692359,1.4834681032783132,124.34562239070922,31.51043128178405 diff --git a/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/SWEEP_SUMMARY_dev5.md b/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/SWEEP_SUMMARY_dev5.md new file mode 100644 index 0000000000..35f42546a9 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/SWEEP_SUMMARY_dev5.md @@ -0,0 +1,3 @@ +| tag | topk | wall_s | sparsity | calls | sparse_calls | runtime_fallbacks | png | +|---|---|---|---|---|---|---|---| +| sparse_bf16_qtile256 | 0.9 | 238.884 | 0.125 | 2850 | 2850 | 0 | `benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png` | diff --git a/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png b/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png new file mode 100644 index 0000000000000000000000000000000000000000..8f1305a610da778da604e82a6b867d5ec03a7979 GIT binary patch literal 305961 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⪼F~tCv#zDWVCCK!T|wyIA+H>0KKJl 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�P^hiDHt% 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

&hfkxworgQT~=pO6kq=QX&h!YB*|y(m&bh9ZMl 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

ZBix{ij(|bUv?{}u}ep`*e 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

#(0GY}D9xMt2!2@H>qK0#=qO^|Gz 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

&hfkxworgQT~=pO6kq=QX&h!YB*|y(m&bh9ZMl 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

ZBix{ij(|bUv?{}u}ep`*e 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

#(0GY}D9xMt2!2@H>qK0#=qO^|Gz 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 iu9Y_dkQ!hBmHuDOm;Fn=i1N_@0000, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",13,0,842606440,2025281475,2403,0,99.999992,0,0,11720,0,39767077175,10940,64.705299,62135142400,84126985600,9296625280,152226166576,0.384969,35.176994,99.842812,113099407360,15.795247,750080,0,0,0,4826988181696,36003840,103929039779,101765613576,0,1814872248,343078599,2139381298,24764234,0.001012,2992412,2992412,22036784640,815173120,26.153116,0.967442,87156825,3276645,0.000000,48126,187520,0.005092,100.000008,1,0.000000,1,0.000000,0,3.391425,5.848985,19.174847,25.961508,69.804741,654237,21,3,17,602325112931510,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",19,0,842014472,2023946209,2403,0,100.000008,0,0,11720,0,39770894776,10940,64.731178,62135142400,84126985600,9296625280,152226167064,0.372979,35.120743,99.812370,113099407360,15.818870,750080,0,0,0,4826818373952,36003840,103926386533,101781278068,0,1798988877,340708340,2121071765,24764324,0.001402,3058609,3001843,21425017856,817649152,25.444952,0.971063,84775206,3340930,0.000000,48180,187520,0.005096,100.000008,1,0.446112,1,0.000000,0,3.396352,5.853045,19.187498,25.978636,69.850800,650048,36,4,18,602326139770625,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814.csv b/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814.csv deleted file mode 100644 index 0f65211098..0000000000 --- a/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814.csv +++ /dev/null @@ -1,8 +0,0 @@ -mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops -dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,3050.2180999610573,ok,,1.0,3.1489193746993007,0.8734807393059724,37.767791097125404,37.767791097125404 -dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,9604.890872025862,ok,,0.31756926139002617,1.0,0.27739063321981167,11.993889523046922,11.993889523046922 -dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,2664.3067609984428,ok,,1.1448449347544332,3.6050243960745916,1.0,43.2382643344076,43.2382643344076 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,28501.629570964724,ok,,0.1070190773606989,0.3369944461635481,0.09347910281286634,4.04187415716598,2.031271402541311 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,803.9296750212088,ok,,3.794135475693926,11.947426709646551,3.3141042603361477,143.29611604020073,72.01443966078138 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,25396.277436986566,ok,,0.12010492906014597,0.37820073811437876,0.10490934222974768,4.5360978704786605,2.2796468977382536 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,1023.8845960702747,ok,,2.979064351263767,9.38083345417048,2.6021553319819426,112.51268008342339,56.544014135507915 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853 b/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853 deleted file mode 100644 index e4feee2459..0000000000 --- a/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853 +++ /dev/null @@ -1,7 +0,0 @@ - -=== Device #0 Metrics === - -Kernel,GlobalInstanceId,SubDeviceId,GpuTime[ns],GpuCoreClocks[cycles],AvgGpuCoreFrequencyMHz[MHz],ResultUncertainty[%],GPU_BUSY[%],IA_VERTEX[events],GPGPU_THREADGROUP_COUNT[events],ASYNC_GPGPU_THREADGROUP_COUNT[events],RASTERIZER_SAMPLE_OUTPUT[events],XVE_STALL_ALUWR[%],XVE_STALL_BARRIER[%],XVE_STALL_CONTROL[%],XVE_STALL_INSTFETCH[%],XVE_STALL_OTHER[%],XVE_STALL_PIPESTALL[%],XVE_STALL_PS_DEPENDENCY[%],XVE_STALL_SBID[%],XVE_STALL_SENDWR[%],THREAD_DISPATCH_QUEUE0_ACTIVE[%],THREAD_DISPATCH_QUEUE0_STALL[%],THREAD_DISPATCH_QUEUE1_ACTIVE[%],THREAD_DISPATCH_QUEUE1_STALL[%],THREADGROUP_DISPATCH_QUEUE0_RESOURCE_STALL[%],THREADGROUP_DISPATCH_QUEUE1_RESOURCE_STALL[%],XVE_ACTIVE[%],XVE_SHARED_FUNCTION_ACCESS_HOLD[%],XVE_STALL[%],XVE_THREADS_OCCUPANCY_ALL[%],XVE_MULTIPLE_PIPE_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU1_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU2_ACTIVE[%],THREADGROUP_DISPATCH_QUEUE0_INPUT_AVAILABLE[%],THREADGROUP_DISPATCH_QUEUE1_INPUT_AVAILABLE[%],QueryBeginTime[ns],CoreFrequencyMHz[MHz],CoreFrequencyChanged,QuerySplitOccurred,ReportId,ReportsCount,OverrunOccured,MidQueryTimer,MidQueryProgramming,MidQueryMarker,MidQueryCtxSwitch,MidQueryC6,MidQueryFreqChange,MidQueryMmioTrigger,ReportError,ReportLost,ReportInconsistent,ReportCtxSwitchLost,ReportWithoutWorkload,ReportContextMismatch,ReportQueryModeMismatch -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",13,0,841596288,2022810523,2403,0,100.000000,0,0,11720,0,29.554045,0.240841,4.315089,12.326859,0.000001,4.746475,0.000000,31.465960,0.000076,0.000000,0.000000,0.005099,0.000000,0.000000,0.000005,64.755737,0.370239,35.093006,99.824524,15.837934,3.402867,5.854964,0.000000,0.000063,602413782604062,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",19,0,840939216,2021361718,2403,0,99.999992,0,0,11720,0,29.570486,0.239372,4.317172,12.330883,0.000001,4.749287,0.000000,31.431385,0.000075,0.000000,0.000000,0.005102,0.000000,0.000000,0.000005,64.799057,0.367478,35.085705,99.860268,15.851206,3.403399,5.862384,0.000000,0.000064,602414807449687,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814.csv b/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814.csv deleted file mode 100644 index 93451c8eb2..0000000000 --- a/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814.csv +++ /dev/null @@ -1,8 +0,0 @@ -mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops -dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,3051.9098619697616,ok,,1.0,3.1640525778102258,0.875786425847173,37.74685531690234,37.74685531690234 -dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,9656.403266009875,ok,,0.316050373819034,1.0,0.2767926272746347,11.929907733399977,11.929907733399977 -dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,2672.8212300222367,ok,,1.1418308967653519,3.6128129923337737,1.0,43.1005256565706,43.1005256565706 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,28692.606869037263,ok,,0.10636572256747906,0.33654673868027946,0.09315365600002448,4.0149715404324064,2.017751309163948 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,804.5742539688945,ok,,3.7931985107837556,12.001879526191251,3.3220317662881245,143.18131537484388,71.95674580405438 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,25407.54995297175,ok,,0.12011822736228844,0.38006038692764355,0.1051979130207167,4.534085349167082,2.2786354914380436 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,1022.452419041656,ok,,2.9848918200323835,9.444354657658119,2.614127738606624,112.6702796673677,56.62321688044021 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840 b/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840 deleted file mode 100644 index c8b9a16ec4..0000000000 --- a/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840 +++ /dev/null @@ -1,19 +0,0 @@ - -=== Device Timing Summary === - - Total Execution Time (ns): 79051466957 - Total Device Time for L0 backend (ns): 1686731870 - -== L0 Backend == - - Kernel, Calls, Time (ns), Time (%), Average (ns), Min (ns), Max (ns) -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]", 2, 1685721458, 99.940094, 842860729, 842572604, 843148854 - "zeCommandListAppendMemoryCopy(D2D)[54943360]", 6, 991873, 0.058804, 165312, 58541, 278020 - "zeCommandListAppendMemoryCopy(D2M)[1]", 8, 11821, 0.000701, 1477, 1197, 2604 - "zeCommandListAppendMemoryCopy(D2M)[8]", 3, 6718, 0.000398, 2239, 1510, 2656 - - -=== Kernel Properties === - - Kernel, Compiled, SIMD, Number of Arguments, SLM Per Work Group, Private Memory Per Thread, Spill Memory Per Thread, Register File Size Per Thread -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]", JIT, 16, 2, 0, 2432, 0, 256 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814.csv b/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814.csv deleted file mode 100644 index c98ac6ac5a..0000000000 --- a/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814.csv +++ /dev/null @@ -1,8 +0,0 @@ -mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops -dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,3052.225488005206,ok,,1.0,3.129175918210046,0.8672042433799233,37.74295197151027,37.74295197151027 -dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,9550.950494012795,ok,,0.31957295663070967,1.0,0.2771350240596196,12.06162675350641,12.06162675350641 -dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,2646.902894950472,ok,,1.1531308888693925,3.6083494079942477,1.0,43.522563755462436,43.522563755462436 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,28671.261675073765,ok,,0.1064559182150938,0.3331192956296097,0.09231902400903541,4.017960608275311,2.019253485578516 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,804.9391260137782,ok,,3.79187119791337,11.865432037464796,3.2883267931805875,143.11641250499747,71.92412842450827 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,30556.331855943426,ok,,0.09988847818497318,0.31256862044306755,0.08662371214677164,3.7700860346426945,1.8946824293657984 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,1721.1301509523764,ok,,1.7733844743329124,5.54923199081013,1.5378865412855762,66.9327650417691,33.63751721000927 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755 b/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755 deleted file mode 100644 index aca4758a37..0000000000 --- a/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755 +++ /dev/null @@ -1,32 +0,0 @@ - -=== Device Timing Summary === - - Total Execution Time (ns): 84973767741 - Total Device Time for L0 backend (ns): 3078355254 - -== L0 Backend == - - Kernel, Calls, Time (ns), Time (%), Average (ns), Min (ns), Max (ns) -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>", 2, 3077343124, 99.967125, 1538671562, 1537868437, 1539474687 - "zeCommandListAppendMemoryCopy(D2D)", 6, 993123, 0.032261, 165520, 58437, 278125 - "zeCommandListAppendMemoryCopy(D2M)", 11, 19007, 0.000617, 1727, 1197, 2760 - - -=== Kernel Properties === - - Kernel, Compiled, SIMD, Number of Arguments, SLM Per Work Group, Private Memory Per Thread, Spill Memory Per Thread, Register File Size Per Thread -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>", JIT, 16, 2, 0, 2432, 3840, 256 - - - -=== Kernel Submission Summary === - - Total Execution Time (ns): 84973767741 - Total Device Time for L0 backend (ns): 3078355254 - -== L0 Backend == - - Kernel, Calls, Append (ns), Append (%), Submit (ns), Submit (%), Execute (ns), Execute (%) -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>", 2, 0, -nan, 317707, 0.033428, 3077343124, 99.967125 - "zeCommandListAppendMemoryCopy(D2D)", 6, 0, -nan, 611043591, 64.292694, 993123, 0.032261 - "zeCommandListAppendMemoryCopy(D2M)", 11, 0, -nan, 339047807, 35.673882, 19007, 0.000617 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755 b/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755 deleted file mode 100644 index 76557fbf99..0000000000 --- a/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755 +++ /dev/null @@ -1,7 +0,0 @@ - -=== Device #0 Metrics === - -Kernel,GlobalInstanceId,SubDeviceId,GpuTime[ns],GpuCoreClocks[cycles],AvgGpuCoreFrequencyMHz[MHz],ResultUncertainty[%],GPU_BUSY[%],IA_VERTEX[events],GPGPU_THREADGROUP_COUNT[events],ASYNC_GPGPU_THREADGROUP_COUNT[events],RASTERIZER_SAMPLE_OUTPUT[events],ICACHE_HIT[events],ICACHE_MISS[events],XVE_ACTIVE[%],XVE_INST_EXECUTED_ALU0_ALL[events],XVE_INST_EXECUTED_ALU1_ALL[events],XVE_INST_EXECUTED_SEND_ALL[events],XVE_INST_ISSUED_ALL[events],XVE_SHARED_FUNCTION_ACCESS_HOLD[%],XVE_STALL[%],XVE_THREADS_OCCUPANCY_ALL[%],XVE_INST_EXECUTED_ALU2_ALL[events],XVE_MULTIPLE_PIPE_ACTIVE[%],LOAD_STORE_CACHE_PARTIAL_WRITE_COUNT[events],SLM_BANK_CONFLICT_COUNT[events],SLM_BYTE_READ[bytes],SLM_BYTE_WRITE[bytes],LOAD_STORE_CACHE_BYTE_READ[bytes],LOAD_STORE_CACHE_BYTE_WRITE[bytes],LOAD_STORE_CACHE_ACCESS[events],LOAD_STORE_CACHE_HIT[events],L3_ATOMIC_ACCESS[events],L3_HIT[events],L3_MISS[events],L3_READ[events],L3_WRITE[events],L3_STALL[%],COMPRESSOR_INPUT[events],COMPRESSOR_OUTPUT[events],GPU_MEMORY_BYTE_READ[bytes],GPU_MEMORY_BYTE_WRITE[bytes],GPU_MEMORY_BYTE_READ_RATE[GBpS],GPU_MEMORY_BYTE_WRITE_RATE[GBpS],GPU_MEMORY_L3_READ[events],GPU_MEMORY_L3_WRITE[events],GPU_MEMORY_REQUEST_QUEUE_FULL[%],TLB_MISS[events],ASYNC_GPGPU_THREAD_EXIT_COUNT[messages],GPGPU_DISPATCH[%],COMMAND_PARSER_COMPUTE_ENGINE_BUSY[%],COMMAND_PARSER_COMPUTE_ENGINE_DISPATCH_KERNEL_COUNT[events],COMMAND_PARSER_COPY_ENGINE_BUSY[%],COMMAND_PARSER_FLUSH_COUNT[events],COMMAND_PARSER_RENDER_ENGINE_BUSY[%],COMMAND_PARSER_RENDER_ENGINE_DISPATCH_KERNEL_COUNT[events],XVE_PIPE_ALU0_AND_ALU1_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU2_ACTIVE[%],XVE_INST_EXECUTED_ALU0_ALL_UTILIZATION[%],XVE_INST_EXECUTED_ALU1_ALL_UTILIZATION[%],XVE_INST_EXECUTED_ALU2_ALL_UTILIZATION[%],HOST_TO_GPUMEM_TRANSACTION_READ[events],HOST_TO_GPUMEM_TRANSACTION_WRITE[events],SYSMEM_TRANSACTION_READ[events],SYSMEM_TRANSACTION_WRITE[events],QueryBeginTime[ns],CoreFrequencyMHz[MHz],CoreFrequencyChanged,QuerySplitOccurred,ReportId,ReportsCount,OverrunOccured,MidQueryTimer,MidQueryProgramming,MidQueryMarker,MidQueryCtxSwitch,MidQueryC6,MidQueryFreqChange,MidQueryMmioTrigger,ReportError,ReportLost,ReportInconsistent,ReportCtxSwitchLost,ReportWithoutWorkload,ReportContextMismatch,ReportQueryModeMismatch -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",13,0,1535408316,3690568189,2403,0,100.000000,0,0,11720,0,31072289842,14180,39.954498,48230240000,66374007680,40784238720,131183357152,19.292183,59.890968,99.816544,113099407360,4.077200,750080,0,0,0,6694842331072,1166541660160,151338661503,138265715260,0,14187776782,643149139,11119708210,3717068770,0.000555,2993279,2993279,37791607808,4113692672,24.613394,2.679218,150374771,17856300,0.000000,44749,187520,0.002795,100.000000,1,0.000000,1,0.000000,0,1.724919,1.626167,8.167821,11.240480,38.306911,1127998,21,3,17,603328285516718,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",19,0,1537011892,3694509142,2403,0,100.000008,0,0,11720,0,31047649164,14180,39.913635,48230240000,66374007680,40784238720,131183357448,19.328482,59.987267,99.869186,113099407360,4.067187,750080,0,0,0,6694772599744,1166541660160,151337571951,138324432787,0,14157620305,609852603,11089353225,3683883768,0.000838,3057878,3001145,35453591040,4021094400,23.066570,2.616177,141190751,17473185,0.000000,44461,187520,0.002792,100.000000,1,0.371961,1,0.000000,0,1.716085,1.622224,8.159108,11.228489,38.266045,1127154,37,4,27,603330005450781,2400,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814.csv b/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814.csv deleted file mode 100644 index 3c384e960d..0000000000 --- a/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814.csv +++ /dev/null @@ -1,8 +0,0 @@ -mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops -dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,3054.134353995323,ok,,1.0,3.139249184469624,0.8705397637467008,37.7193622308393,37.7193622308393 -dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,9587.68878004048,ok,,0.31854750650160635,1.0,0.27730827105200906,12.015408785464729,12.015408785464729 -dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,2658.7453989777714,ok,,1.1487126052647125,3.6060951092672258,1.0,43.328706857110824,43.328706857110824 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,28159.330382943153,ok,,0.1084590546885054,0.3404799989792369,0.09441791984472199,4.091006371010145,2.055963131438476 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,805.575530976057,ok,,3.7912451862767624,11.901663359143713,3.3004296887671893,143.00335048709903,71.86730833691017 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,30696.65548496414,ok,,0.09949404277906763,0.31233659265377395,0.08661352049509369,3.752851839394274,1.886021267094859 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,1720.7675460958853,ok,,1.7748674775536122,5.571751281451836,1.5450927145912243,66.94686929758075,33.644605399886125 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213 b/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213 deleted file mode 100644 index c48b429095..0000000000 --- a/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213 +++ /dev/null @@ -1,7 +0,0 @@ - -=== Device #0 Metrics === - -Kernel,GlobalInstanceId,SubDeviceId,GpuTime[ns],GpuCoreClocks[cycles],AvgGpuCoreFrequencyMHz[MHz],ResultUncertainty[%],GPU_BUSY[%],IA_VERTEX[events],GPGPU_THREADGROUP_COUNT[events],ASYNC_GPGPU_THREADGROUP_COUNT[events],RASTERIZER_SAMPLE_OUTPUT[events],XVE_STALL_ALUWR[%],XVE_STALL_BARRIER[%],XVE_STALL_CONTROL[%],XVE_STALL_INSTFETCH[%],XVE_STALL_OTHER[%],XVE_STALL_PIPESTALL[%],XVE_STALL_PS_DEPENDENCY[%],XVE_STALL_SBID[%],XVE_STALL_SENDWR[%],THREAD_DISPATCH_QUEUE0_ACTIVE[%],THREAD_DISPATCH_QUEUE0_STALL[%],THREAD_DISPATCH_QUEUE1_ACTIVE[%],THREAD_DISPATCH_QUEUE1_STALL[%],THREADGROUP_DISPATCH_QUEUE0_RESOURCE_STALL[%],THREADGROUP_DISPATCH_QUEUE1_RESOURCE_STALL[%],XVE_ACTIVE[%],XVE_SHARED_FUNCTION_ACCESS_HOLD[%],XVE_STALL[%],XVE_THREADS_OCCUPANCY_ALL[%],XVE_MULTIPLE_PIPE_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU1_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU2_ACTIVE[%],THREADGROUP_DISPATCH_QUEUE0_INPUT_AVAILABLE[%],THREADGROUP_DISPATCH_QUEUE1_INPUT_AVAILABLE[%],QueryBeginTime[ns],CoreFrequencyMHz[MHz],CoreFrequencyChanged,QuerySplitOccurred,ReportId,ReportsCount,OverrunOccured,MidQueryTimer,MidQueryProgramming,MidQueryMarker,MidQueryCtxSwitch,MidQueryC6,MidQueryFreqChange,MidQueryMmioTrigger,ReportError,ReportLost,ReportInconsistent,ReportCtxSwitchLost,ReportWithoutWorkload,ReportContextMismatch,ReportQueryModeMismatch -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",13,0,1534833404,3689186584,2403,0,100.000000,0,0,11720,0,16.455626,0.512216,1.308606,3.631864,0.000000,0.887532,0.000000,55.635029,3.059207,0.000000,0.000000,0.002796,0.000000,0.000000,0.000003,39.953323,19.185026,59.893566,99.811523,4.085039,1.716491,1.629522,0.000000,0.000035,603420934757447,2400,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 - -"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",19,0,1536064296,3692231472,2403,0,100.000000,0,0,11720,0,16.608208,0.549755,1.310681,3.644871,0.000000,0.893470,0.000000,55.824959,3.042835,0.000000,0.000000,0.002793,0.000000,0.000000,0.000003,39.910118,19.170021,59.959267,99.842361,4.083643,1.704670,1.628649,0.000000,0.000035,603422654691614,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 From b47dbe4384c9897b81e69c376ecd182242c62077 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 18 Aug 2026 14:25:42 +0800 Subject: [PATCH 36/42] fix Signed-off-by: yiliu30 --- .azure-pipelines/nightly-test-cpu.yml | 2 +- .../include/stla/xe_sparse_sage_fwd_kernel.hpp | 12 +++--------- .../wrapper/include/sycl_tla_s8_gemm.hpp | 2 +- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/.azure-pipelines/nightly-test-cpu.yml b/.azure-pipelines/nightly-test-cpu.yml index 9485a59959..e20ecc9c08 100644 --- a/.azure-pipelines/nightly-test-cpu.yml +++ b/.azure-pipelines/nightly-test-cpu.yml @@ -89,7 +89,7 @@ stages: artifact: patterns: '*_coverage/.coverage.*' path: $(DOWNLOAD_PATH) - + - task: UsePythonVersion@0 inputs: versionSpec: '3.12' diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp index fe3d4a3702..ff5b5d3d56 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp @@ -245,16 +245,10 @@ class XeSparseSageFwdKernel { auto dcV = const_cast(p.V + offset_v); auto dcK_cache = const_cast(p.K_cache + offset_k_cache); auto dcV_cache = const_cast(p.V_cache + offset_v_cache); - // scale_block_size is 0 on the native-precision sparse-SDPA path (no INT8 dequant); - // guard the pad computation so it does not divide by zero. The pads are only used - // inside the scale_block_size ? ... : nullptr ternaries below. - int seq_q_pad = params.mainloop.scale_block_size > 0 - ? (seq_len_qo + params.mainloop.scale_block_size - 1) / params.mainloop.scale_block_size - : 0; + int seq_q_pad = (seq_len_qo + params.mainloop.scale_block_size - 1) / +params.mainloop.scale_block_size; int seq_kv_total = seq_len_kv + seq_len_kv_cache; - int seq_kv_pad = params.mainloop.scale_block_size > 0 - ? (seq_kv_total + params.mainloop.scale_block_size - 1) / params.mainloop.scale_block_size - : 0; + int seq_kv_pad = (seq_kv_total + params.mainloop.scale_block_size - 1) / params.mainloop.scale_block_size; auto scaleQ = params.mainloop.scale_block_size ? (float*)params.mainloop.qscale + (idx_b * s.num_heads_q * seq_q_pad + head_q * seq_q_pad) : nullptr; diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_s8_gemm.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_s8_gemm.hpp index ade33c96c8..890c328341 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_s8_gemm.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_s8_gemm.hpp @@ -153,7 +153,7 @@ void igemm_kblock_device_impl(TiledMMA const& mma, const int8_t* a, const int8_t tFrC(i) += static_cast(tCrC(i)) * sb; } } - + CUTE_UNROLL for (int i = 0; i < size(tFrC); ++i) { From 5a5a97d0b2498a06038d3dc01c32005aef3b071c Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 18 Aug 2026 14:30:27 +0800 Subject: [PATCH 37/42] revert Signed-off-by: yiliu30 --- .../wrapper/include/sycl_tla_sdpa_sparse.hpp | 8 ++++---- docs/step_by_step.md | 4 ++-- docs/step_by_step_CN.md | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp index 2233151b14..5a0f7aead1 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp @@ -1171,12 +1171,12 @@ template ; - using ShapePV = Shape<_256, _32, _64>; + using ShapeQK = Shape<_256, _32, _32>; + using ShapePV = Shape<_256, _32, _32>; using ShapeOut = Shape<_256, _128>; using SubgroupLayoutQK = Layout>; - using ShapeQK1 = Shape<_256, _64, _32>; - using ShapePV1 = Shape<_256, _32, _64>; + using ShapeQK1 = Shape<_256, _32, _32>; + using ShapePV1 = Shape<_256, _32, _32>; using ShapeOut1 = Shape<_256, _128>; using SubgroupLayoutQK1 = Layout>; return options.is_causal ? FMHAConfig **Auto-enabled by default.** As of v0.13, when you pass `--iters 0 --disable_opt_rtn` together with a supported INT WOQ or MXFP scheme, the CLI automatically takes the model-free path. This is **bit-exactly equivalent** to the regular `--iters 0 --disable_opt_rtn` flow but uses far less memory. Use `--disable_model_free` to opt out and force the original flow. +> **Auto-enabled by default.** As of v0.13, when you pass `--iters 0 --disable_opt_rtn` together with a supported INT WOQ or MXFP scheme, the CLI automatically takes the model-free path. This is **bit-exactly equivalent** to the regular `--iters 0 --disable_opt_rtn` flow but uses far less memory. Use `--disable_model_free` to opt out and force the original flow. > When using `--model_free` explicitly, INT WOQ always uses **plain RTN** (opt_rtn is disabled for INT WOQ to preserve accuracy); MXFP schemes use **optimized RTN (opt_rtn) by default** — pass `--disable_opt_rtn` to use plain RTN for MXFP. **Key features:** @@ -1155,4 +1155,4 @@ Randomness in quantization may affect tuning results for some models, set `enabl Some VLMs require manual support. -Mamba is not supported. +Mamba is not supported. \ No newline at end of file diff --git a/docs/step_by_step_CN.md b/docs/step_by_step_CN.md index 7e78b7257f..5c1575ad80 100755 --- a/docs/step_by_step_CN.md +++ b/docs/step_by_step_CN.md @@ -605,7 +605,7 @@ ar.quantize_and_save(output_dir, format="auto_round") 免模型架构量化模式(Model-Free Mode)可以**无需将完整模型加载到内存中**即可执行无标定数据的 WOQ 量化。它直接下载 safetensors 文件,逐分片地对每个 Linear 权重张量进行量化并保存打包结果。当您需要快速、无标定数据的量化且资源有限时,该模式非常实用。 -> **默认自动启用。** 自 v0.13 起,当您同时传入 `--iters 0 --disable_opt_rtn` 与一个受支持的 INT WOQ 或 MXFP scheme 时,CLI 会自动走免模型路径。该路径与原始 `--iters 0 --disable_opt_rtn` 流程**位级(bit-exact)等价**,但内存占用大幅降低。如需关闭自动路由、强制使用原始流程,可加 `--disable_model_free`。 +> **默认自动启用。** 自 v0.13 起,当您同时传入 `--iters 0 --disable_opt_rtn` 与一个受支持的 INT WOQ 或 MXFP scheme 时,CLI 会自动走免模型路径。该路径与原始 `--iters 0 --disable_opt_rtn` 流程**位级(bit-exact)等价**,但内存占用大幅降低。如需关闭自动路由、强制使用原始流程,可加 `--disable_model_free`。 > 显式传入 `--model_free` 时,INT WOQ 始终使用**原始 RTN**(opt_rtn 对 INT WOQ 已禁用以保持精度);MXFP scheme 默认启用**优化版 RTN(opt_rtn)**,如需原始 RTN,加上 `--disable_opt_rtn` 即可。 **主要特性:** - **无需模型对象** — 仅需 `config.json` 和 safetensors 文件 @@ -1114,4 +1114,4 @@ CUDA_VISIBLE_DEVICES=0,1 auto-round "your_model_path" --eval --tasks lambada_ope 部分视觉语言模型(VLM)需要手动适配。 -暂不支持 Mamba 架构的模型。 +暂不支持 Mamba 架构的模型。 \ No newline at end of file From 4e2970133329225c5b2cece46f1b895610f1d85d Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 18 Aug 2026 14:35:02 +0800 Subject: [PATCH 38/42] fix: consolidate xpu triton workaround --- .../auto_round_kernel/_xpu_triton_compat.py | 49 ------------------- .../sparge_preprocess_triton.py | 10 ++-- .../ark/tools/run_sparse_sagev1_bench.sh | 4 +- 3 files changed, 7 insertions(+), 56 deletions(-) delete mode 100644 auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py diff --git a/auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py b/auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py deleted file mode 100644 index f86e7f5763..0000000000 --- a/auto_round_extension/ark/auto_round_kernel/_xpu_triton_compat.py +++ /dev/null @@ -1,49 +0,0 @@ -# # Copyright (C) 2026 Intel Corporation -# # SPDX-License-Identifier: Apache-2.0 - -"""Workarounds for the Intel XPU triton backend on this platform. - -Triton 3.7.x enables ``has_predicated_io`` for non-LTS Intel GPU drivers and then -emits the ``SPV_INTEL_predicated_io`` SPIR-V extension in its JIT kernels. Some -level-zero loaders (e.g. 1.13.35563) reject that extension at kernel-load time:: - - InvalidModule: Invalid SPIR-V module: input SPIR-V module uses unknown - extension 'SPV_INTEL_predicated_io' - -which aborts any triton kernel launch and kills the process (it is not a -catchable Python exception, so the torch preprocess fallback never runs). - -The workaround forces ``has_predicated_io`` off so triton emits standard -(non-extension) predicated loads/stores. This disables a minor codegen -optimization on every XPU driver, but the ark triton preprocess kernels are small -and the trade-off is only safe correctness on the affected drivers. -""" - -import logging - -logger = logging.getLogger(__name__) - -_APPLIED = False - - -def apply_xpu_triton_workarounds() -> None: - """Patch triton's Intel compiler so JIT kernels avoid the rejected SPIR-V extension.""" - global _APPLIED - if _APPLIED: - return - try: - import triton.backends.intel.compiler as _intel_compiler - except ImportError: - # No intel triton backend (e.g. stock triton); nothing to patch. - return - - _orig_parse_target = _intel_compiler.XPUBackend.parse_target - - def _patched_parse_target(self, tgt_prop): - dev_prop = _orig_parse_target(self, tgt_prop) - dev_prop["has_predicated_io"] = False - return dev_prop - - _intel_compiler.XPUBackend.parse_target = _patched_parse_target - _APPLIED = True - logger.info("Applied XPU triton workaround: has_predicated_io forced off (SPV_INTEL_predicated_io)") diff --git a/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py b/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py index f2de9dc4c7..2fe1091f80 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py +++ b/auto_round_extension/ark/auto_round_kernel/sparge_preprocess_triton.py @@ -10,17 +10,17 @@ import triton import triton.language as tl -from ._xpu_triton_compat import apply_xpu_triton_workarounds - -apply_xpu_triton_workarounds() - logger = logging.getLogger(__name__) _APPLIED_TRITON_PREDICATED_CHECK = False def _apply_xpu_triton_workarounds() -> None: - """Patch triton's Intel compiler so JIT kernels avoid the rejected SPIR-V extension.""" + """Patch triton's Intel compiler so JIT kernels avoid the rejected SPIR-V extension. + + Triton 3.7.x can emit SPV_INTEL_predicated_io for non-LTS Intel GPU drivers, + but some level-zero loaders reject that extension at kernel-load time. + """ global _APPLIED_TRITON_PREDICATED_CHECK if _APPLIED_TRITON_PREDICATED_CHECK: return diff --git a/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh b/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh index bf92761f0a..1f3e7c0cd0 100755 --- a/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh +++ b/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh @@ -38,8 +38,8 @@ # The default preprocess backend is triton-xpu (via "auto"), which is faster # than torch. On some level-zero drivers triton's JIT emitted SPIR-V that the # runtime rejected ("InvalidModule: ... unknown extension -# 'SPV_INTEL_predicated_io'); that is fixed by auto_round_kernel/_xpu_triton_compat.py -# (forces has_predicated_io off), applied when the triton preprocess loads. +# 'SPV_INTEL_predicated_io'); that is fixed by _apply_xpu_triton_workarounds() +# in auto_round_kernel/sparge_preprocess_triton.py when the triton preprocess loads. # If you still hit the SPIR-V error, force the torch backend: # export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch # From b131143b8f9e98c3b16cd46df0d95dd0fdea83ba Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 18 Aug 2026 14:40:38 +0800 Subject: [PATCH 39/42] clean Signed-off-by: yiliu30 --- .../wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp | 3 +-- .../wrapper/include/sycl_tla_sdpa_sparse.hpp | 7 ++----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp index ff5b5d3d56..90e0e32b9a 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sage_fwd_kernel.hpp @@ -245,8 +245,7 @@ class XeSparseSageFwdKernel { auto dcV = const_cast(p.V + offset_v); auto dcK_cache = const_cast(p.K_cache + offset_k_cache); auto dcV_cache = const_cast(p.V_cache + offset_v_cache); - int seq_q_pad = (seq_len_qo + params.mainloop.scale_block_size - 1) / -params.mainloop.scale_block_size; + int seq_q_pad = (seq_len_qo + params.mainloop.scale_block_size - 1) / params.mainloop.scale_block_size; int seq_kv_total = seq_len_kv + seq_len_kv_cache; int seq_kv_pad = (seq_kv_total + params.mainloop.scale_block_size - 1) / params.mainloop.scale_block_size; auto scaleQ = params.mainloop.scale_block_size diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp index 5a0f7aead1..b7683fbc2c 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp @@ -940,11 +940,8 @@ struct SparseSageConfig { static constexpr int SGTileQ = get<0>(shape_div(TileShapeQK{}, shape(SubgroupLayoutQK{})))(); static_assert(cute::is_same_v, "SparseSageConfig is INT8-only; use SparseSDPAConfig for native-precision BF16/FP16"); - // INT8-only sparse SAGE path: Q/K are int8 and dequantized via qscale/kscale, - // so the Q*K MMA is always an int32/int8 DPAS. Native-precision BF16/FP16 sparse - // uses the separate SparseSDPAConfig (float/ DPAS). - using MMAOperation = cute::conditional_t, - XE_DPAS_TT, MMAOperation_>; + using MMAOperation = + cute::conditional_t, XE_DPAS_TT, MMAOperation_>; using MMAOperationPV = cute::conditional_t, XE_DPAS_TT, MMAOperation_>; using SubgroupLayoutPV = From 308ba36f79885bddf5b30e7dab49bb9004366f52 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 18 Aug 2026 14:41:33 +0800 Subject: [PATCH 40/42] update Signed-off-by: yiliu30 --- docs/step_by_step.md | 2 +- docs/step_by_step_CN.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/step_by_step.md b/docs/step_by_step.md index 4c5f11add9..5dc2f37198 100755 --- a/docs/step_by_step.md +++ b/docs/step_by_step.md @@ -1155,4 +1155,4 @@ Randomness in quantization may affect tuning results for some models, set `enabl Some VLMs require manual support. -Mamba is not supported. \ No newline at end of file +Mamba is not supported. diff --git a/docs/step_by_step_CN.md b/docs/step_by_step_CN.md index 5c1575ad80..3c4421ae03 100755 --- a/docs/step_by_step_CN.md +++ b/docs/step_by_step_CN.md @@ -1114,4 +1114,4 @@ CUDA_VISIBLE_DEVICES=0,1 auto-round "your_model_path" --eval --tasks lambada_ope 部分视觉语言模型(VLM)需要手动适配。 -暂不支持 Mamba 架构的模型。 \ No newline at end of file +暂不支持 Mamba 架构的模型。 From 7d400d403f03dd2166a1c10664c507f070ae9c65 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 18 Aug 2026 15:34:36 +0800 Subject: [PATCH 41/42] refactor: rename sparse sdpa api --- .../ark/auto_round_kernel/__init__.py | 2 +- .../ark/auto_round_kernel/ark.cpp | 34 +++++++++---------- .../ark/auto_round_kernel/sparse_attention.py | 16 ++++----- .../test/test_sage_sparse_prefill_e2e.py | 16 ++++----- .../ark/benchmarks/bench_sparse_topk.py | 6 ++-- .../ark/examples/flux_sparse_patch.py | 2 +- 6 files changed, 38 insertions(+), 38 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/__init__.py b/auto_round_extension/ark/auto_round_kernel/__init__.py index 72f3d3436a..579212d19b 100644 --- a/auto_round_extension/ark/auto_round_kernel/__init__.py +++ b/auto_round_extension/ark/auto_round_kernel/__init__.py @@ -2146,8 +2146,8 @@ def sageattn( _sequence_mean_native_layout, _slice_sequence_native_layout, _to_hnd, + block_sparse_sdpa, sage_sparse, - sage_sparse_sdpa, sparge_block_map_to_mask, sparge_preprocess_topk, sparge_sage2_attn_meansim_topk_xpu, diff --git a/auto_round_extension/ark/auto_round_kernel/ark.cpp b/auto_round_extension/ark/auto_round_kernel/ark.cpp index 2ccde451e7..feca265346 100755 --- a/auto_round_extension/ark/auto_round_kernel/ark.cpp +++ b/auto_round_extension/ark/auto_round_kernel/ark.cpp @@ -507,34 +507,34 @@ static void sage_sparse(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_ptr V, throw std::invalid_argument("ark::sage_sparse: unsupported head_dim; supported values are 64 and 128"); } -static void sage_sparse_sdpa(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_ptr V, torch_ptr O, torch_ptr mask, - torch_ptr lut, torch_ptr valid_block_num, int num_q_blocks, int num_k_blocks, - int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, int q_stride_b, - int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, - int v_stride_s, int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, - int o_stride_h, int o_stride_b, int q_dtype, int batch, int num_heads_q, - int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, - bool is_causal) { +static void block_sparse_sdpa(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_ptr V, torch_ptr O, torch_ptr mask, + torch_ptr lut, torch_ptr valid_block_num, int num_q_blocks, int num_k_blocks, + int q_tile_override, int q_stride_s, int q_stride_d, int q_stride_h, int q_stride_b, + int k_stride_s, int k_stride_d, int k_stride_h, int k_stride_b, int v_stride_d, + int v_stride_s, int v_stride_h, int v_stride_b, int o_stride_s, int o_stride_d, + int o_stride_h, int o_stride_b, int q_dtype, int batch, int num_heads_q, + int num_heads_kv, int seq_len_q, int seq_len_kv, int head_dim, float softmax_scale, + bool is_causal) { if (q_dtype != (int)FlashAttnDtype::FP16 && q_dtype != (int)FlashAttnDtype::BF16) { - throw std::invalid_argument("ark::sage_sparse_sdpa: q_dtype must be FP16 or BF16"); + throw std::invalid_argument("ark::block_sparse_sdpa: q_dtype must be FP16 or BF16"); } if (mask && is_causal) { - throw std::invalid_argument("ark::sage_sparse_sdpa: mask and is_causal cannot both be set"); + throw std::invalid_argument("ark::block_sparse_sdpa: mask and is_causal cannot both be set"); } if (!lut || !valid_block_num) { - throw std::invalid_argument("ark::sage_sparse_sdpa: lut and valid_block_num must be provided"); + throw std::invalid_argument("ark::block_sparse_sdpa: lut and valid_block_num must be provided"); } auto matches_block_size = [](int seq_len, int num_blocks, int block_size) { return block_size > 0 && num_blocks == ((seq_len + block_size - 1) / block_size); }; const bool key_block_is_64 = matches_block_size(seq_len_kv, num_k_blocks, 64); if (!key_block_is_64) { - throw std::invalid_argument("ark::sage_sparse_sdpa: only key block size 64 is supported"); + throw std::invalid_argument("ark::block_sparse_sdpa: only key block size 64 is supported"); } const bool is_bf16 = (q_dtype == (int)FlashAttnDtype::BF16); if (head_dim == 64) { if (!matches_block_size(seq_len_q, num_q_blocks, 64)) { - throw std::invalid_argument("ark::sage_sparse_sdpa: head_dim=64 requires query block size 64"); + throw std::invalid_argument("ark::block_sparse_sdpa: head_dim=64 requires query block size 64"); } if (is_bf16) { ark::sdpa_impl_bf16_sparse_sdpa_d64( @@ -557,7 +557,7 @@ static void sage_sparse_sdpa(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_p if (matches_block_size(seq_len_q, num_q_blocks, 256)) { if (q_tile_override != 256) { throw std::invalid_argument( - "ark::sage_sparse_sdpa: head_dim=128 query block size 256 requires q_tile_override=256"); + "ark::block_sparse_sdpa: head_dim=128 query block size 256 requires q_tile_override=256"); } if (is_bf16) { ark::sdpa_impl_bf16_sparse_sdpa_qtile256_row64k( @@ -594,9 +594,9 @@ static void sage_sparse_sdpa(torch_ptr stream, torch_ptr Q, torch_ptr K, torch_p } return; } - throw std::invalid_argument("ark::sage_sparse_sdpa: head_dim=128 supports query block sizes 64 and 256 only"); + throw std::invalid_argument("ark::block_sparse_sdpa: head_dim=128 supports query block sizes 64 and 256 only"); } - throw std::invalid_argument("ark::sage_sparse_sdpa: unsupported head_dim; supported values are 64 and 128"); + throw std::invalid_argument("ark::block_sparse_sdpa: unsupported head_dim; supported values are 64 and 128"); } static void moe_gemm_wrapper(torch_ptr stream, torch_ptr activations, torch_ptr weights, torch_ptr scales, @@ -1471,7 +1471,7 @@ PYBIND11_MODULE(PY_NAME, m) { pybind11::arg("head_dim"), pybind11::arg("softmax_scale"), pybind11::arg("is_causal"), pybind11::arg("tensor_layout"), pybind11::arg("lse") = 0); m.def("sage_sparse", &ark::sage_sparse); - m.def("sage_sparse_sdpa", &ark::sage_sparse_sdpa); + m.def("block_sparse_sdpa", &ark::block_sparse_sdpa); // Low-level SAGE PVi8 API: input Q/K/V are pre-quantized int8 with qscale/kscale/vscale. m.def("sage_pvi8", &ark::sage_pvi8, pybind11::arg("stream"), pybind11::arg("Q"), pybind11::arg("K"), pybind11::arg("V"), pybind11::arg("O"), pybind11::arg("mask"), diff --git a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py index 6ff52a3245..e45febf887 100644 --- a/auto_round_extension/ark/auto_round_kernel/sparse_attention.py +++ b/auto_round_extension/ark/auto_round_kernel/sparse_attention.py @@ -199,7 +199,7 @@ def sage_sparse( return O -def sage_sparse_sdpa( +def block_sparse_sdpa( query: torch.Tensor, key: torch.Tensor, value: torch.Tensor, @@ -223,7 +223,7 @@ def sage_sparse_sdpa( """ del dropout_p, enable_gqa if query.device.type != "xpu": - raise NotImplementedError("sage_sparse_sdpa is only supported on XPU") + raise NotImplementedError("block_sparse_sdpa is only supported on XPU") if query.dtype not in (torch.bfloat16, torch.float16): raise ValueError(f"Q/K/V must be bfloat16 or float16, got {query.dtype}") if key.dtype != query.dtype or value.dtype != query.dtype: @@ -243,7 +243,7 @@ def sage_sparse_sdpa( raise ValueError("K/V shape mismatch") if Dk != D: raise ValueError("Head dim mismatch between Q and K/V") - _validate_gqa_head_config(Hq, Hkv, op_name="sage_sparse_sdpa") + _validate_gqa_head_config(Hq, Hkv, op_name="block_sparse_sdpa") if D not in (64, 128): raise ValueError(f"Unsupported head_dim={D}; supported: 64, 128") effective_sparse_q_block_tokens = 64 if sparse_q_block_tokens is None else int(sparse_q_block_tokens) @@ -269,12 +269,12 @@ def sage_sparse_sdpa( if D == 64 and q_tile_override not in (0, 64, 128): raise ValueError( - f"q_tile_override must be one of {{0, 64, 128}} for sage_sparse_sdpa with head_dim=64, got {q_tile_override}" + f"q_tile_override must be one of {{0, 64, 128}} for block_sparse_sdpa with head_dim=64, got {q_tile_override}" ) lib = get_lib(query) - if not hasattr(lib, "sage_sparse_sdpa"): - raise RuntimeError("Loaded XPU extension does not expose sage_sparse_sdpa") + if not hasattr(lib, "block_sparse_sdpa"): + raise RuntimeError("Loaded XPU extension does not expose block_sparse_sdpa") effective_q_tile_override = _resolve_sparse_prefill_q_tile_override( head_dim=D, quant_block_size=64, @@ -286,7 +286,7 @@ def sage_sparse_sdpa( stream = get_stream(query) O = _empty_attention_output(B, Hq, Sq, D, dtype=value.dtype, device=query.device, tensor_layout=tensor_layout) q_dtype = 1 if query.dtype == torch.bfloat16 else 0 # FlashAttnDtype: 0=FP16, 1=BF16 - lib.sage_sparse_sdpa( + lib.block_sparse_sdpa( stream, query.data_ptr(), key.data_ptr(), @@ -1688,7 +1688,7 @@ def sparge_sage2_attn_meansim_topk_xpu_sdpa( sparse_k_block_tokens=sparse_k_block_tokens, ) _get_xpu_sparse_kernel_backend() - out = sage_sparse_sdpa( + out = block_sparse_sdpa( query, key, value, diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py index b37c9445b3..f258a5a053 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py @@ -255,7 +255,7 @@ def run_case_sdpa( ) -> None: """Validate the independent native-precision sparse-SDPA path (bf16/fp16) against a dense reference built from the same block selection.""" - ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_sdpa")) + ensure_sparse_binding(required_symbols=("sage_sparse", "block_sparse_sdpa")) device = torch.device("xpu") batch = 1 num_heads_kv = num_heads_q if num_heads_kv is None else num_heads_kv @@ -303,7 +303,7 @@ def run_case_sdpa( scale=scale, enable_gqa=num_heads_q != num_heads_kv, ) - sparse_out = ark.sage_sparse_sdpa( + sparse_out = ark.block_sparse_sdpa( query, key, value, @@ -322,12 +322,12 @@ def run_case_sdpa( max_diff = float(diff.max().cpu()) mean_diff = float(diff.mean().cpu()) print( - f"[sage_sparse_sdpa][{case_name}] D={head_dim} Hq={num_heads_q} Hkv={num_heads_kv} " + f"[block_sparse_sdpa][{case_name}] D={head_dim} Hq={num_heads_q} Hkv={num_heads_kv} " f"Sq={seq_len_q} Skv={seq_len_kv} max_diff={max_diff:.6f} mean_diff={mean_diff:.6f}" ) if max_diff > 2e-2 or mean_diff > 2e-3: raise RuntimeError( - f"sage_sparse_sdpa mismatch for dtype={dtype}, D={head_dim}, Hq={num_heads_q}, Hkv={num_heads_kv}, " + f"block_sparse_sdpa mismatch for dtype={dtype}, D={head_dim}, Hq={num_heads_q}, Hkv={num_heads_kv}, " f"Sq={seq_len_q}, Skv={seq_len_kv}, causal={is_causal}" ) @@ -344,7 +344,7 @@ def run_case_sdpa_full( sparse_k_block_tokens: int | None = None, ) -> None: """Dense gate: selecting every KV block must make sparse-SDPA match the dense reference.""" - ensure_sparse_binding(required_symbols=("sage_sparse", "sage_sparse_sdpa")) + ensure_sparse_binding(required_symbols=("sage_sparse", "block_sparse_sdpa")) device = torch.device("xpu") batch = 1 scale = 1.0 / math.sqrt(head_dim) @@ -374,7 +374,7 @@ def run_case_sdpa_full( ) dense_out = bf16_sparse_reference(query, key, value, dense_mask, scale=scale, enable_gqa=False) - sparse_out = ark.sage_sparse_sdpa( + sparse_out = ark.block_sparse_sdpa( query, key, value, @@ -392,9 +392,9 @@ def run_case_sdpa_full( diff = (dense_out.float() - sparse_out.float()).abs() max_diff = float(diff.max().cpu()) mean_diff = float(diff.mean().cpu()) - print(f"[sage_sparse_sdpa][{dtype}_all_selected] D={head_dim} max_diff={max_diff:.6f} mean_diff={mean_diff:.6f}") + print(f"[block_sparse_sdpa][{dtype}_all_selected] D={head_dim} max_diff={max_diff:.6f} mean_diff={mean_diff:.6f}") if max_diff > 2e-2 or mean_diff > 2e-3: - raise RuntimeError(f"sage_sparse_sdpa all-selected mismatch for dtype={dtype}, D={head_dim}") + raise RuntimeError(f"block_sparse_sdpa all-selected mismatch for dtype={dtype}, D={head_dim}") def run_multi_row_tile_case() -> None: diff --git a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py index bbd4a95468..9efe91e070 100644 --- a/auto_round_extension/ark/benchmarks/bench_sparse_topk.py +++ b/auto_round_extension/ark/benchmarks/bench_sparse_topk.py @@ -62,7 +62,7 @@ def _resolve_sparse_binding(args: argparse.Namespace, *, required_symbols: tuple def ensure_sparse_binding(args: argparse.Namespace) -> None: - required_symbols = ("sage_sparse", "sage_sparse_sdpa") + required_symbols = ("sage_sparse", "block_sparse_sdpa") ext_path = _resolve_sparse_binding(args, required_symbols=required_symbols) if ext_path is not None: _load_sparse_binding(ext_path, required_symbols=required_symbols) @@ -947,7 +947,7 @@ def run_single_benchmark(args: argparse.Namespace, *, seq_len: int, tensor_layou "sparse_sdpa_fp16_kernel_only" if dtype == torch.float16 else "sparse_sdpa_bf16_kernel_only", lambda preprocess=preprocess: ( hnd_to_nhd( - ark.sage_sparse_sdpa( + ark.block_sparse_sdpa( nhd_to_hnd(q_nhd_src), nhd_to_hnd(k_nhd_src), nhd_to_hnd(v_nhd_src), @@ -962,7 +962,7 @@ def run_single_benchmark(args: argparse.Namespace, *, seq_len: int, tensor_layou ) ) if tensor_layout == "HND" - else ark.sage_sparse_sdpa( + else ark.block_sparse_sdpa( q, k, v, diff --git a/auto_round_extension/ark/examples/flux_sparse_patch.py b/auto_round_extension/ark/examples/flux_sparse_patch.py index 2e90ec387b..ab512c9aae 100644 --- a/auto_round_extension/ark/examples/flux_sparse_patch.py +++ b/auto_round_extension/ark/examples/flux_sparse_patch.py @@ -307,7 +307,7 @@ def patch_flux_sparse_attention( ): ensure_ark_sparse_binding( required_symbols=( - ("sage_sparse_sdpa", "sage_dynamic_quant_layout") + ("block_sparse_sdpa", "sage_dynamic_quant_layout") if sparse_kernel == "bf16" else ("sage_sparse", "sage_dynamic_quant_layout") ) From ace6cdf026f34509cf17b14ed0dba5ca7e5a92fb Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 18 Aug 2026 23:29:06 +0800 Subject: [PATCH 42/42] update Signed-off-by: yiliu30 --- .../auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp index b7683fbc2c..32f49abbfd 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp @@ -938,8 +938,6 @@ template struct SparseSageConfig { static constexpr int SGTileQ = get<0>(shape_div(TileShapeQK{}, shape(SubgroupLayoutQK{})))(); - static_assert(cute::is_same_v, - "SparseSageConfig is INT8-only; use SparseSDPAConfig for native-precision BF16/FP16"); using MMAOperation = cute::conditional_t, XE_DPAS_TT, MMAOperation_>; using MMAOperationPV = cute::conditional_t,

z%sppgVw(aJVJ$A5KZ07rWWmy2iwkb=cu3b6Qx_a{X1W-*TqoXTVyS6zxzS?Zs zqAXu{@s-VTyV|Tb+qUgYp$kOPg(`{yH5O`rR8-BnIXOMuZq{`@W7`!)Rh9Z;yB}5m z@(i$hW#Fliryu>0a&1G>eew)V+Os0*$C&0NNmYKEF|%{tH0o`|>8-&w7#y7lAhCu^ zz~AIrNJ4fBFX#=r0)SC!=np~^4+s$72ED4#e*!S)%;l-Y??1VpAR4T*lNS?lfuOj$ z)P#P-UK%B@2ovG?#nLj6Z-GOAED!@oq3O!;1V7v$3j6dhLSR7%zH}fIU?gOM&N(Cn zfXw0a81Sx0U_e2I2<)S+C@LuA{j9(!OyGzFgbBDH2d+i4RWcWL0G7y91yP93ku)~| z2&mSZ)>;S9i^71Q04Advqj4tVp~3*IVTVdUd=g+)7JIW=J!qJ{&LzUm8>F1T`C@Bf z-U*Zh2*}I?z>Wb6KxLREL>@7r3hrBG1fI`I1grc>Jf8VV#t@?CBUq_-K%@uxB;^1= z)X@4}>_I;8MG=2wF-p<^I2wPPI4}EKYpgM*YudJH?P}9quG&q*n+~^zwjDN38PTZg z>0~^i>XSS7E|<&B@pL*iPL|8{-rh{1GS*FJ)A4ww3u@YKu~@I0EjwFR^?WvIT6_BV z4hzp`^BXsAyzm=F>@Mj1^I3RTE9;({&3G(d z=Hl|QD2t*fT*odI6%k%LFWSj%yy|KAGg*SOm`q3n_ zPt+1TiYKr$B7?4?FM>urQI_Gy4VFd6fo_pD>kHv}O z@l|s%z)2X5ck`ymFiI1ZyxEaC4skvxO&K8pCiqW8l0?1GV1E^2e|H%}avO#^M~RTQ zE(-+!J{me>p@e#|=okt@MFND%yEz1e2udYK^IA#gz!8y;EJ@bEuCw7F8SvR!EX*tp zQ3Ihwn;3~fXcSvQ=dr6mM05mDD6K#WB?TaISCmK!NzwkKJenT9aeY)kQz%9h0-lUi zp?nNbSQGJ~Y^0iQYaCOQa(r?!5>IBeQauIwCH6w|)>y%Q%9Voa*AL)(cN9W6KtK=? zNC-rIeCMI1=U9*hNnAW^6G70htk+urVu27@8~o9%&|Ev7D(C>52m^YD5=Pxl0x=JS z%ivyu9Ht^MNAV-NfW)sfcuCWHR#nnH=FflvuU54+;&#I_12sFM{@)mkETUIZP#2b&hOv5x4K-Nom_0zD`DGh zw~l46DoISO)V!|GHyhiTj@#9Ci$n(phpN=4rzh4~06|5`P?6(I5=e32u9g0lw9nFp z&4O|J$J3I`~ZngH4KrX5}m_gWkO5`LvLC3DBD}1@=o_&k+ibuhFo`)j8vkQm1of< zTI_YJzB%+ESb{yjcTgZR zG_B!CWx_ljl|+mzf+#HLO&wxtYQFHs!Sh%3d@SWymvvDP7KBw%Op5Witm;bFMNul$ z1?jRVwJx=cOPFd)W}y)PH8?jNO{+pn%RmSOgy>?Vz_vA=5e7wx&1~V^KveCxD;?t8cw`f79t&se&v3XaHs=R*uoIdh(FKApKW(>-uyfYwsvMNjGtmRl87SsMqEOiHmWM|I}q`7Pjp8~7C)&3I|atI=C4tGPe z?F~acPuOWm?_g|{jx*zk*D{ibEeW&3wWkazdDvOsV~G~9JSZi?uJm~o0f>r_C76)>E(sPm5fRxo4F|ni zlGq3ljl*O{WJg2^#j}QEN}5qDyG?1uAigw?C&rczd=rol3?Ri3WpkXb4&)0y)Sxh~ z(NmwuKMGyw5Xy*&?me_@+s+9C0W(9WSq46Ng4oT*H6jxdGYW>%h2A;Sbk;{m5h-Cl zm`@6lP9$g;AR?^DpsfDNPyeNNUeps@l-eqicp8n6aTp2@wf-=AZ^Pi=7Rcc*ay>_J@ zRfX0?q1o|+M-MKR3qo98u1`)+PA^YDfwQu1)|IaI4-Q^^^|gb8!(volF4yAl>Xlmp zmJ0RCi!U^7^Z4<_bUdm?quFGlNLg^@XjD(8P1{_YpMU-fU;OC950=y_f=s^OP`62`82oYpG>k)(< zw^pu(Fo2XrQH0|75EO%;1c)(godXJD5i=8!&v_-`gZV@Q*pz6HSQt{%bOOXkR)B@C zUpXkmAUh!TNdtf^AcFF(?|k#^>u)MtNz*bIU$7k%0J9<@1Oz4^03oH>0f_=6U`7%F z@|pc5kplJ$8g?wA_u5;Qu5%(9d>sxJP=dl$p_RlPE@8=p8HrY#wsYQABg{jE~ zn=c*x{)hdRH0RRxN zlJyUM-y5?^v}N+9dGA^m*%2CZfxs8+i7YH9ro^&?g(!&seMukjYsZdRfSow+o@VEq zSj*NqW308#hyFC3-E7^afy)J-o-IE4bh$O?n2-?Iu>(Y`s`B{gu&nBBvpqRE-ELOb zZ(h58{o3LFep#1)A76>jg>A@(`+^;r2YMa*=(juY+ZYPaXy<&LEvI>c65AL z*VW~6vAn!IK02DsMg&sS<)@$CdFlCA9z8i}o9_7NxGbx8zy0nTufB0|^5pX3V!2p< z{PFFZH*St)`ta=j#l_{x$;qR;_rcntqH9;LRi!>U+IP+>!n#zN;CO#;`{Ya^woT&{ zsZwdJ$K$c-RA)Lu@(~@qwD2bbcKkEo5JHThgk7HT^!`gwo~`0Q=ZjpZU+W?0@3tLp z^5u+^gmW$MVa;OfwiKMi9mvnWAhCumeF!;vF!Wytx3FfJsP==I(s-F+eD( zCXm+`diuR-)c#H>iV_%&vFp`l|8Rd)*UQz?T1&d{3W4nmuuR6|?Pdc2!azjMaiO)a zA+0uT0#fDYji0Ev7pjntp985S()R()&_4i|Yq zC2?|-ny^ElGPo%Si;!ZY`dF;A%vzJu2wfD<1LF_`=o}lzpfD&tk>7j#*_(|uF?x+P z$p682xoKJlSa=W>IoKP|rh2t-?90^zk2V38-~7%;Klfu_0ID=f;q$l9N7@9;^oR5M zisR({rOBYiKuVDyX+@O}MnV>Uu9>h15;)*Z(;)2&696$=)F=Q&Q78o{p6~S`H>hZ} zZraAtxDY`=BIHuH|IUwp;obLt&GE=VEkYnDNDhGX{{Q?tAHVv_^FQ^&FV4s+VF73y zJY4dB_dk5q>X}6n6c!;OVW-gTRrbe!@Uz-&6fubN<@fxoJli1JgAOLLi6&&vOC`n# zh1#{=%`4IJ0|4yAvIv87KHb+@>zKtd`@o;hxVE!RXPee-8s0Q;cHVw+ce`xC3Sd#7 zkTSNYs4UClql5Y0d^+13%_iHnU2oR)xSGvoMBuD(fFiJ2Z(3(p&9dpX+{t3KoQ%h- z?W#T>z4_*A*REY#UanWmH2~baeqB>xtwn|_$5+SWkpNid?%sQNEn~>Y*LM@ zx*8Gc@u&vi{r$+E7Zos756T`m@m1QA($;aUtq9clB1t)9tifFS)c^eTATc?k3^xZ1gp>)Kzg31u&kSOnyr`R538MI&nu(VDG}K;R zmw+kI%PvtA6!6yd{^6(-#h3a(+NeonzeYlj2KqdnR0f>G&v^1D3rwdI)7fpay|}!n zs%li$8@F~Mg)SHzTW5>`fbn>|Uab`oA~_#~E&_n-O=lT_6r!WvT|fxFY*Y-IO1v?; zeItkm^SK0}J@k|Xg0Db=R*>dK0(w5}`|oGssY_3h!jNeCIpE*k(XKK4{Z*nxIcNtysm2-}LpC4{(X?7DF<)#3mEh-@wAKls@zzxmn2 zuYP0Q2ntmJ5)eBipuNBIkAC%gAHMLDKl09vgBb(7fBWRW`~UvN!&PZj>3|qmX~otQ z)%h&2cE)bZAz^hi6p?kK(DRwDs$DZtBY$r#JAZDF~6I{F=;PZa7uphRL zt!3-jI%}=7#&(@+TiY7jw065S+Xk9epPV(T4Rj0+5G{1p7KOTTl%1Ti0g$^M?-~9v&Z!rlU_jy8X3xzy5E1-w)P> zdvO1;Fc(#EdU9&pX0u$i&8Atc@7}pzmw5B)4R+1J;Qw-*z<-7U--o&d&E|bD3RSo?B-Z>*aiJZ+W={0slfU-;*BDdv2ZhUUa?e&P}8z5lIE@C>bz=i6&?+A;AhkktXh$bKb)pX7}03rg>$Rlare&y=dzH^G`5DWH2c8bypG&1{V zzxX?EzxG!M+j&ta0Y#t{v1I}AS$RGcmPKhb?yRXxBoYRr6**=Ar<4>LB_3<$C6Zt% zceLCXp-R}B!-&Bmn@U#-qh=Fk!!M3>46DYHE|C?0RooHCq2|B(7k}V;xBtb-hFZ&v zrHBFmMQB8^9R14gJo?HXJeW=jQgperjj1}Q4JyBW%ubUjdG*S5{c}I{{bN~FWWhP{ zVZl)$9GGIgfims;SZp?s0%vE31-=*2Uogb`gGApi`$&K1*l{rXc*~Emt}~`Ht~Ivl z%x2SWTDxs%u{5hKbPlY~au?a3&7Zq@{lyobtH*U&X+cy9oD*lw$=UhE@^U;L6-8YZ zg)X$xsveDuWu;Vi&up4@wl^P-rmwvG8WMi^!H1LaL}`BU7mk*4b8t$olA3lC`cIgyu zOj{Jn8;YZBnL}a%;h0YC{z-vh+R)AWG_ayMw*mhmA;r4e2*N z2xhq?`6xnUfJ8@8G!qALG)4_Xk_$cWUy^mF7xi}pR!NVDtV$Ms>oaeX!m6qYT@VqVEG{nJc>Oi4pisWj z04PL4v{std3TPA}BnmZzL1Gm!@M-^X9uSd`qHRP%tsMZLcuIYAj2HTci-H0e3Pto{ zXdJrqLya@m6G6TZK`Ou`;%D#ZLw_-JAgxN$#R^SjsiK)MJcS^LU@aI6p*(8hJrHEf zLMcrUPS%CEP$G!fc3oU7Cb1QEpMU+uF&Pp@@m_ioK?b$8^+yl7|Ia`8d|>AI%vHrsaF+NO1lk=4d-J8=R| zKxuV!c<`CG-+b-0S7y^`S!h5c#CF@ZUANtCFE1A-PfokmS>wDfVY_V?t5s{d)AMuE zG@gvBs=9LJSctdHwybK)JU`rHecOL`}pzW zLXW=j&2L_uU;f5#eMRZXYO((HU;mBACuf(7)n?Ot^2sNy;hdT&0fiehhXuc|8%an3P|uZ7{~?`aVB z)0{!z@MlRIJ?&_}#<}Sgb3E*kF8qP1rT!BcJ0yJWw`0#1qG0Zwz<E| zY%}-)vLEwtrr{*ijyHMy%8;`6hd;}#pM@BKBsx#lh^Ge=%`X5TNaVx#5y3gzbs)^^ z^=8)0s&Yh1E!T_jXnO7H^(Rjr9UL62*DIsi;+ z#cLzn5VuGShz4k5%e$X0{@`ox|C>K}@6Np^H(&ko54<%ld7~Av>kx?$G{B@PfE!F9 zyMhQpB1*ut4FRZ-{pc5lORaP;6Cp@A&j*E+h!)Fjt3-v^8W9Ai1*Wk6kuO|Z{M--! z-GB01fTdw_LQYU25s-x0ArTZ%015>On1BnhBWjLD+rRZ6{`mL3eNf3caU0f{g#bfo z;%r-FY$=L+05NE-_bqui@b!GaJJun10)p)C{14UVruF!-M^@P|S{nLC`rzS_^{>IO%)GKD0NZVAoh{08 zz1bS;kQ6bE$CJb3!|`~$S#2&aE)K680KmoB#om1H;NZAv+e#Owr>A%B-BSw3_2}aK zahp_x=a-8Db=x!#A3j=bE{+e5){FDS`MI>MX}7>`RLvBT(!^qQ zp_twI#aZhnjkS|{KHVDuaG~koVD@CWs;iO}cE|;3U6j^!ZQD6(A;|f00R~{)Bc=?5 z)}33T-ZtF#Id(_nA49Uz1h?2oS5K#9N0Q%I48q$uM^88LTXNG%-T2hbvNqsJkG0(&fbk zk*=$1Z?boGe*Obr{%ZS@w_kkcojad=(lnb&!ROw3`|IEM!&VyxXk16EwbGpt ze=v$?w@BoiIAN_dh7^A$kWfZSyr|h5`+KMlnqBbDW$tuID;5DePvr=UK!|A`qa{EF zlhSLBJrRaqsCU8u#EJ6sgA{bX_!gyTe{TkN&cgcoL|_mkbPR3l{COpk5FS8;5nQ35 zE))m@#b4QH5>wYX=Y$n$1Qb?e<|F%)Kl+8+|Lp56R}7j+3n7aT6&;dg^^K2K|EK@- zAAI(;qtCv2{a{*);kGjmPA)$9_|fhAi?-8qJK6lX%$?X<<{MI@HU5 z_lI6M*#BSt{eS*D_a3h;jjfcxgn)!7NQgeG+v|yzxJB2Dq5bTO)4%c8e&)^R%aOaR zs1tFdP#k)%1AEhG3P_G?DpBJ~^Df{IaEW-~-Mj)IvCaN>+LhTUr2oSt87n|9lDqv`nC_3Pu&`0{-5Nl z93I^H)Qr87 zI503}%q9M=115U`Ip+h>+@74cki9&&*!7IX{>QdYmLaxj_b+cY~E~EKl9Un`L}-a zUmeb7@BH|W|N5{0&-2OT%Fz|JZ@v5Ow+@ewA3t;&wQgF+nz2A#I>SWhSR5-*rJy23 zu4^qjjT!+7;t3?ol(PGR$R^$p&q*F5ijc*J;CKZ@02slrG{z!T;vhLcd@?Nw6olitN@U3* z7z#2_+c{%|lp+xlOTqy1qhEgQ_rHDb_rAMaSTs_hl-_9xr~s+sNoT9Ce!KadZ+(v( z`||FB1gMd&`dFnx^B;WY!Q&;?;|ie#5kk=j8hJF*;LmvUHJJeg$$~{yEVf(A?9Tuu zUwQ!r2tX492rxp(WEK!1=|r~9bX;m*#t8t}X+q|1Do`r^iMK{?{>?x8YhV4|FMajH z$14R?Gie~@fIyLt8E~#8+fHEf+>!ptANj&h{^%R~^`?}ChK^VOf!SvO8A0a0n-hnW z1&O4ceewu{UKI$U9tiqldy{p`OC+3*^L1=pNcwfm)`?>d^&X7vjBPvHb*AlX>;E*) zTDFd?lg_baFboxd5IC`hJ2ps)tZ|mX-?MJIPj27Y8nG|noIv$V47Z+!(ZEoFq;r)+3d~*6|G#;C-Tdy~d zPfv{D_dontmG%1{eY`(E{G&g5ciXI6vqI*H<>vA#~ zPp9MYXuP*St?Gibc7SC)sz;-)wa8FtnojG{xSUPL7u(HpwFW{^smhZe0!KxA$Kl(f z(zEazda*w4@g&m^o{9o**u9A#L^nf%!K4ok=wX)^VGj-<0D9MKo(tU)AIE3>im~7Q zU(tOLK|gP&A16HP6RqEaUo$H1xx-Ld=-)A59jQ;4g3iNX4(OwIoorSsT@?F!dt#X# zyVg}jwKtuA{+%y8ethrd)hmDLr~blszx~b6z5N-@wy5aZ(c#`~e0g&6>Z`AQQWc{L z+q1f^_fd@ucZ>+a);Z^3RL_vex~?-$5S3C42+W8g;^OJDet8{$uZ}MQE_O6ceeVp0 z$ozU1nT%mLj0jA@Jb`8UUolKrpSCAabLy3}xZ1(?CIHD}=%q%bq0mbDW2!?svyX^t zIs;IHN6oNULa0zsk*=#!q?5$@X(Zkmk|AqOaS7hk@%KeEK9 zCAS(gvobTF^p$sIK<8nf$K4u|0KjX!0N~R$qT|m0859DMth}>#|2h`u*m=jVb;fXK zY-a-ccj14|I<^ds!H1AK@JFh(%k^fwUIU6EB1G$~WpF~9w!2uaKDqO$WkDiRx-*s# zQKZ>6_wL;{j?1d}!skCf9Z%WvCm(%0olJ|eeE9g$J8!?`n9HKNIKP<9_7|s%55D)o z&6_vw-o1UWe{lEC?QPROy!V~6v-8`xKmFi?4}|67@*I(!fy4dT^S7?OaQ)iNYe%oX z^3vh{d{Whuaisu7oMUTD+cn+g;^IK>O-J>ptaVXoU5HS#+G;#qsi=G5sQlml2Y>#*_y@o8!IKRMc1$dqh{Op-ZVrN}E-eyKv>XCDLZ`rfbo-+p ze&_S91BEE47(kE@j%Ot`1RDoRNC_w+R>HM%&E^sq*dKI53Q(a)t!&L_M`cy$YCO`@ zNja*EQB{v?I+)B}KZe4s3reTHsn9W{gjp#&LPyk%3VQDQM}Of5KHnN>TG_N##1%ds=NJdiOd(OYtTz&fK9YMHp>-zO;*Ndt|P2c(Mcb#*(EYFq~FFya$ z#l=NYRR@X$#MtichqqaHwOn{3~4z>v8Ql9XWH09+wkrTZBuAzMDRSqV<7rN{xJ4z zVz&peACd&WaEQ_X6g(OSkWFwO+Nb`Wz>!i&e$FU*<~5LDlmB7olU>jBiKqU8-YS*N z9`>dpOgtd+9|+MJJwE^drBqcEbyb?SQBJ^`=dNA7b>rr!t_5ILm6L;c)2tNQu1yTBzbQH&E92oHhj`B}+hcs!Y< z`Azmd5J5r&5&!}OLSf4wL{wEeya*J4h&Vz5aRShG9Y^0I1UtXKml0(&)`%QJdBsNy z2_Ux4ZkkR&0RjsX3MpdSjtJg(uKL@5>nH#5FaGYo{`#E;=bfvWOK&$1B~%f8Toner z!zi@EMuC|^`{oPt>oY=U5R?c33ZYZ5dHL4(aMaXO5wxm=LZdEmR8$kvFYb3>TU}~k z0w6*vNDfBb-~O9_UevTIt4Xa&jY^>cO=wHqj#Q`II&fxE%)X|DFtdR8#K01`)aYQ# zqM#(KN?$-iX#rl6tfA{tc3j|{l(e_td>(M{XgQUD@|Y{kVXFmaZx9B2l7xg3Z^0YP zF#*^o{rZbeybr(`>#X$wpw<}ES)T>W*0B@tZWCcC3tf;U04H#9u_E=gz zW&5Si{;9>~rR$t+-09=<$!PT6`|m&Z+|3U^e1E-MUS2HNnj1H-K6>(?u50T|f#ubs z!*^bPV^pgB$>`7i$PbEaP=JVaN%PrMSd=Df&BKQe2*6sa33XX|Ys;vvfpF7o0QF=# ze(BX0@BQA_P1hB=*qhBa&9-eD>#TPNK-gB#wrxbl5Em$*)s9>a2>#p`7=k`PFSBQ< z1`*%;|6`148{G3$M-nJRUZS&$;o6Qx#qSzT!{b$r77;p-2g@u7& zJMem@+ajCE{Ls7Y3P#;Hsu_eRfJlIdN@)UYyVg0j==4}W_rgncQMk6*T%L9F=~Sz_ zuF*D?9#dJdGX%1}yqrzP2#x@Sc~X^%u&Rragm_Pvx;4<^+`9I>X{YsUWec-4g&sAn zOvYC`U07#EWre`4Yf&5Ij=&YjB8IpH-Xe4e9mH5|A3GlexrpqXEIwHt1o`s@A^>n0 zd9v{*t0IU5#`4q}NaPBMw@cE|Vl*;@NdyoPT_{8$A9;gBA@hKcXx%gdA!R{?3Hr{k zl6o>C+0mseE*w&<_oXBcx^hZOvx7n#+%)=IOUe_+$jFj z|Kne*CiAkOLa_!>3Q%;RRISWNZ4`8b0*Jtl#7zM{_gul;3UovqQp6a2-D%|*z%dAs zax8%8#F3XsqRCE?veDO!Knko1$wLl7e7t}l6Oo7@k&hVlLJJNIKACJK$+3^gG5|rw z7YJty33E^eLRIY)^W)*3Q(^P?-6wx}6OcdY*E(aIan2ZLZOHdWo`HdSb0>+peg}&YJaRqmVAU<$ARi zan8zkG**SS)-G3zYuB$oeDv^aadPwM=HkRyKD~E-aaz~aY%*D| zF0UT%|NB4tm*=y+k3aZcJ<;F!+8@34&KvuCv&WAfcI|S1Z|ZDiO(&)+N>z_WWm!G< z{PW9;i)PzZRb7w9q)HaF&JwA5JYH?gaD|YF(urWhPs&3IMAo|vrS}u3 zvEvSUL*~%kQ8xy9QBYHR>3-+d?0Y_|7&qJSMn$Bwa?Y`1C+sY1MTqFEZJj$kY0YZ& zPRkP$UYmGh#br9xv8y zYsZDHx7!8)iV_MvLp|%5sZdT8%(j&cf+a9Y44^1&fg83+?2D$c7xqyo74q_flW^2u zlmvPn7v~)jVn$dZmFP{%)v4$}%&+(ALTE9m3J`S>79j#aQN**Fv~(;T1F$$m1Y|@< zV!O=-gb@V+e6}hx6B42;$&7JRb(g-(FcEnMpb&Jk!FEx~p+W{`LS)AT3V?xSN?4C! z{`TSLUjIwqy}kV1uYd5~hxgAGi){-|SP)AMb*&C(_4C*EUb*$+=ij>Z@{NO0X|!Ey zTx!b-1PQ#;6PXe0zOtWxu0~k{FcBlOP#-Hx;1EFA0Rn|>+?9x&fS1Jwa{`Jl`R~)X z<1xMf0k(ZLY2x5AA;(OFAP!g*0syiwiU2eE($FG)(xT!l*lWi5)=Bb#UowW6W6weG zk4L)zaLoG;5Z{}Cz*pPo4MC0_i?i$;TkDK-J_N`(HqIF<&aq{&PFyS-GCw&xRipq=6>2t{PsWp`>mHq*v~8m`p}_vZfpu=P z-ac7BY1+nG*R#`b6=lk_&Vwo=% z3&6V21v4AhPA213*EEe;uQwcugGC@pFc*OzJ1(jZ6`Q1v$pqUopAG@;AHxql%IG-o+9LkFugOfzc0Iji2-H2 zFwXVB8{zqpw+m>kN29tb%c`mY(C4%iWl>d?Y1-{-38uX`Ke>Li_vY&_-MxML{+*9+ z-MXoTXVa?GlLEPA1Fo~31p#qJX~nK%1zpn-P}gA((TZeEO<(=s7EgRdKExSFB-!SUc`4iU24PvK`vx z`r-)!__EK!f+&g*fJ5=YPy5c}SG01Ye^85|)=KPwQ8h#>$ckQpKPq!OQCfr0KsLS&SW3+{J^ghTEV z4+oYY@&^TuqWdXLZ`$<7mfw(RXw+#gWmOhMV>$t1 zkjZpPNEge+{l|~2bKWh-45O+BfTAcaE-p^b&OqeyVlki36{zpN_uZ!1TE}ed^_w@Z z93QjmOw-K|X2-{e?WTGEd*2(^^_y?LJ{^yn^`frIx88j9>kPDI*-f;(_6JAcP5o5}qdp5~4AlJNl71$N&NuSyT>erIQXW|3G62=d7D z-M;mrXfKO+!$F4Z0x>{61`W!PO$_^$FvaD4*8*7D_IwRdnZ0p&n<>z0%PLdU?O5q+=^ zG=jEmxLc8QmDUB8WmqgB1PG9_XJ6VU;|LXr3x}PEfQTkg zVBUUy_WBFoFN%;EkrWaGgE)dtL94)^grp@R5&`iX5tzj(WUX+70S+uPJ zVYDR_j-9aApLvw-&5S=G z99%=6_Y)kYp`D>mBfhKWAi1EA(GHZv%N)nOFx8K)7t98l0K_eX7)95CKGZuSpf`kL z_L5LTC%VM|K$KFW(TGTy&NS`TS*Kg2h}IVumjs8i@n$)_JUczw-xIXgjt@`I&+gy- zwA4@#j3*9HFqd zSY*z-u&o9mFyI&ne2oQaEHy5CIr`!d8NHj-*S7seNAyB2;Axbm$Q}R7E22=l%5SkYaCpn?S!m078OX z3f)cN6ul&$-Hd5BNWN+Ndr*@9F(?xda2*h0&5978EjvdDwVCReed#T?a zP3)KjoD&Xe0Xv@^;Mj4fCnpJZguU=yXdI6+z_b&*wL;U3=w~S4*wen+=OqrF!AkYXs!jkrK8B zNuNG`aQE(~&1$hfpI%&?cdO-mTHm;KZPVbr#}97YxV~-H4^JLmIXY^#TWj@rN?qHO zqiHoBk*+$6TWb}mvK)=arLlZ=zJP-2@q{*QSr?YwYPCUy))~J>NFeMbj2zPc7-2eY zxE-{I`0u$ETq1v+>`_<8maFZ>`JjAL(E$_v2R2q9-h>;ZBEz1sF#&XKvt6&p zRrT_7x2_)VZ7$*dj&TX%Z6ijb3xtZ%N6m;7&cN{@Ll};e zmjL*J0zydaoM0%2j36SSKtzNDfZ~?wzSNHX!edme|q2wnG*Y z*cS$041(D)qjlaHES@Wb08kFqf&7sG>;nIA92@ki28aNV0%9frjmU(PkwPS;%yMg; ziRqmT0^qCzMANx&j$Ta8QKZVE1cJ70in1t+QY$qYjjB;qRaI41(`h}KPDgdEN__ss z7Y_FiZ{PX!t+zhYG~K;>cQ;K}6!7T5!}W4`_1g8W*&Iw?Ei3ijyWhC>#%o&PsIG6{ zzU>U3oSq*Y99&+Ul&ajDj{&4>n)$(gXKd57#YpS2c7oQjwH;|G%j)>}s+=w8Z0$e* z==!zmpw#8!f&dxVIoH!#Cc|eqH3aFw_RI9fe%B@X8A3V0;D;Q@hs-4CowECIh6kA! zc*hAWlIoi7U`OA5>BWwmW`~}D#HDulU*Dp{i2kR>2hpUK;(m4_iPD>UZW`Xh5)ah% z%c77JmAZ7+ou8dOY#K#aCly$MNTG-|UE6Kf+x7C?ZkFiU0?epzlacJts>A(qTx(ru78^?^ zAb@81J|`fkQ$fF@OY1FmE$5AuxkKy#+lCggh)STX@;p*M7E^U*`Ff=VfH27e7t{< z0@BzKVnqvJLeL6;ffQg#VwJTFD2)gScFcmn5DqaTLgn3B8Vjw?3`K?>e zpFX-@j;c4_e*4#c<(KPG&BDi5uPf4z9z8lfK0Z4?-=FVks_)*v2XJFlm$Uux@^W!- z^{O$>bS*1gRg+rPrZbj#vu&KT<+!?e>&9Z+Jv=#m@Zi1`(7Ncl4iyp+Gh>X_O4`iO z91Z<7O!91G@EI+nZ`tF|W*$3q5#&9gc0Z&Kx85K z_Luadi(CeyY(5M$5r{A!q_+5La-zr2AkiY&L~>C#`z=X+@maRq8E2$L0EIZxRoiYC z%T-y>@&4Zaq<(Ps&c)+Lx2|8Cj>m^b2dl;M^z5XliphAqTrHQEld8}P!FC;$1qgLb zyIHNLs6i z-ur+0Ho^@VC}a-@*So|lzbt?xHX3ZSnEe!^eS%(?bN?u$i^Sj`kr4Xn&-e|#Uy&H~ z-}{F-_=h=g1n!f?LJLtaNYe=rq7(>3A+rbxX@t5UCIQCQ2_kjQp@7yJ5S(>|)`c!~ zsX%~*%c3aD^2(Lt`QDt6M&r7!YC;;1$D?r#hzEy=-#8p zU1y5200e8TcjNbLAY1PN$qYF`gvPXSpFzKIgQuvSr;$A=9la?f(golSGsvhXnr8%H zr~zOQ9TOZUxjyQtgW)6yiX)31#Yh%|DS+V+h8r&3If!z}SZbJG2^QYI0fC%NMVf@f z#Cm7|0CepQd|-Mc@ZO|D(N{`mCq zY;Rl_C5ruR;J34#HM& zf|+M}?{+#8VlY$8|jtW~CIy(5>xy zb@KQTJO0v_{?u$d`S{b@d;5C_d&kC^Pw(8lxV(J)@X?*SAOGb4;wM&{&HwZ-f2kag z0P*Afe;SpYgdK3Z+pXJ@C@S*27s_-P|LDCs3`lA3)4{?*rmVz*8YXj zY?Hltfd0>-XKxSH0kKp2LqO?WTZ6IX0JBpas4r3xwu|(FSW?7?Zy9t=ARZ2k{hc8U zbcd;Ca#Y|M$+qgLpB?$xVdhfa898Hsopa{Sojdo{{g+>S z>9tqiJb7~OlTSW;<)v4e^;V708Pg$>Qmggm(c{PGXP4&}3$4nRUVQc9@?x=AvdCt$ zU9UF)V68bmI+{+VS}W7Fq{%r)NL|~F$D_Kg#JR=g;^F>zy^xs9&WKe@> zyYT#mybT$Fn3)LU_0(oqjowQsoZbe>KZGf(TL6*seG%PW*b@o(Gok}E1uZn^VM7vn z7Jm1p8HqBOTB@r+OEH!Me-g_9kAtL!A_5B6` zpV=E#w9t|OKswtJj zA`1$GkAbz$Z5ro;skD#_^vMcQ6-sLw*Q42Vii)awq=*2K#T8{;RmEnt-fT8a(~d{= zY%&25t(ECaS(ewXUK@?-lhY^j`HYlaH|u+M?zWBj==~2*&rWXLymfhU`Afg@ON;Z< z=dN8jzH(fT#>TN_V21H{rb(^0TU6!#;nCUI>14h~O?`H;7|r)fp{}#z`5v@}PywpW zIMa1iIcnQ>y;>h09DZ`|{>8-wY0ZwSsz%eXPvDTGO%9hNo2r~1BiineRgz?-f8;3# zL8N%;|BU-iB%b^*r2SnkGYl%wxh+0O+^Gs^HVleZ;LL%QVLGIJ&nUxW=i7;Z1u z!?QkKxkbo?{rHB6D*d*}#}^{6iM$|5$lPulwzlh9>pIgk;w%tOM)hPg)=H16QK8Y= z&a~Zj+rInlZ+-OP`=9&F=cI&t_wLWe!8uA}NUy!#J`i$?<~` z1OZ|oaex3x5I{+QJO+6(kcT`O0UW_W62L-Y*sv|D38PSyXqsxMB8#l5Tem;=^nd^F zey?`UG4e3iT6^vP98%s@_x!tA&0KSiImS2oy}dm|41&M}CJv*rDuFd>WtpwzA}bcl z`SWK_vn(C$?JHE5*YoSEtMy`y0EQ?~ZV=*J+0{s;*=p}-bhu}aZqg14ElW4FJ&8i}S8r1i`uneZxp< znb74Oo*-CS+;^&VRoxCMHd-4u9pwo)0bCuTN=ylconr#*hCU})T3M`Y#b5zl z1y-B@fT{^pAw(ufqEIUokuuGEV*sU;t?Xr0IP1of$=y45ggG!e3<3}d!$3f?B7c2x z+DrOMaJiUYTwV|2-t77YQ9l0YqcYF`;cx%;YPB#3!(m@5RaGtuBT&kOk=BvcCh6J5 zI!k(!>znx|v;DznovyE^i@p6I?)QqK3c{!?Emt;)de+)B&C04Ot8%?r-M@QpzDZx6 zy^edmAPBtLR93!*Z+JMqD&mq}Uy+KUFbo5& zvawK@1o1`^Xs|)U-nMevS2wCxlp3PL zI&KH32JwE&`md#_Bg-#{dy=00=@NC_*B7I$sqI8~`ag*q@9> zqss9*&*qC&Q5C~M-zcn#+!kdRhsJ~^43t)udA-?GRrTKc@AmtHsw}nAN^27sU@7tf z5U1Ct?|$&ESh<{DTuyI}_K(wSvsy0(y}@R)`SQyz7RwbOL~-)q(W9h4vce9*vE-#o zdcD;uJvcgEtT*@X+?^a8S)uX4(fV~RNSiDVlYS6rwl>f~Ugp!;w3qaQAjtA6&$8)k z_UiI#GT9fUp1ycCnv9}2nlBen)g3jqec^ZD?$)362ITL&y4d!uGNMB%J6!M$me~^1 zoA>BC6KX_)paGonCyUr%qWtw3b8TwGjSESF0bEQ@lwSg%((JE;n{HyTD^WVGHtICjM{iQRDj zM2Ew)0x|?aO%>}qElPccE-N6)HNW0Y~yJ)yWU$=#<2rcirNxMt6{!>7(cI^)a65AZ>jB z{wHplz0_I&`x4Qfp+f`sp>Y*J4gDLWS}-EBK0G`& zfvzfRtFkv3lx5i;4xHoj%d^>Zez1SISk5o6FAon7FHX;1ynZ#G&w-FoKYIM`V7O;O zldji;!Fau118N3hL2Y8^Ft={9cbr!l=`c!0${+yE7mG2CNoyiWdi@~a`Fx%iIZ>4K zdI$SQ%dC3x@`VnAlRGEheDh71gbE1(e1#8ugT>441i`LkXes8lV0hz*4&#)aBX-Gk z`)Swtw_}^C7jt_V-Tk?4GYuVnvVB_v$z7h%Y7JXPT(jmzQ`{!;cBR%WtL^QF=t#O9 z;nP)3eClKOt6G})Dm22J6=k+rub0d9a#5r?A|Nm+G&)j5j$Kg|Zdn;clkr%Xopo7W zTx>2tWYFum%DuK{5FXv$tud_{><%{{kS!Y7iAN8xOG*ObJ zImcL5Yhx$~LbfbqjWL=ij-!6Re|>d*c5yYEWqbQ~?>`*gfAEkiLFRP5&Q_}&#YDra z<@JB_hoArGkIM&lC-;tfhx^g}yZggl#5My$LKNXT2*;OJ-YqlIoln2Zn@~|{7~(Gc z-UcqCH2A$;18m&S0ClAY>}UsV7GQ0(Xb7RT#n&vX?G^?#_HPP;);DKp$~DxZ5@=jV zt?Rf;LM;@9_7Yu}l{7n{b}DzKWt%5}@MlosZL<7t_3AKw>`-w_%#GIC@>u}%nq0HJ zw;aMtsv7G{M*>L`>?_+lO2hlNwnRU# z*nq5-`#1V_ZRsKr%rd*&un5MH`QXF%2E#!R8Y0r9(jv{WO&kWj{vb4gB2-!l3p-bp zWm#2uo>pa&kosNREDE9aEuV>fy?>!{pO`a!%!F+i$ zKHOg|m&@gPI2v220316Q_J`U8Po6wat-G17w9-e1hfiKS7lcO-A70OH%Az2p(5q9o z2w;b0-^R4JKD>F_ts}MsTsvM{khAM0c>5Kl(agKFRr6LK1@yK((9rF6FfG9A%7-^l zV(aO`mVtB+yS0}ZfdK%mKd${vc9endN0svU5@w;bNmT zA=t`=Q8XTnCgUL?inDo|6B0A$S%yM@;sD~L7l-ln)oiht3vkpM+=-LXWG~B#Acz7J zC4*j7+0k%(d2_W{ud^aA(yE#+hQqg3(?k~Ob-aAncX{CVq)$`}G>BZ}p&t?~|v&F^q@^tq3&Gk+C;H1BpWk2`b z`~4(zl8OitGB+%knq(*699SB`*a-#O_31Q>5^IHNcZvaO({A_B)|k}dYiQ$V+JC95 zux$gk5N;Vm0RY5{lCDJZ1muD5tvv7!g*5~#txbAsVnR<-b&8xnqpr4tji6|RNk>|2 z=~}jLcJxd5Z}Dnrc{|Uo6BRv?Zr7uRX|?ga8EO41cR91~sXz#ACl~)M)V$w&Zrk#2 zA^_Mb0ggq0n3)+xkOf%$8)k&Y$^(s`Segi;)-K!neGt$uaH}phsa#$iVceu;L zJ-&Z%FbP6~L?YlSHcAcpy}*V#Fv6S_6%{BVCJdFKG~H}A>B0Vfzt_{oAkcEL1c1?K z9EPEQeEId4d;9x$@7+t&ji40P+N!#L_kNb;msb}=l%@G-I5;{wym#;3XfzJOShx)0 zJ_XTYolZs*%R;2HyhPG~X1QAK?eCpkT)z9xdoP~781-{fL0(u{E=Hprh@k-{&}^z*0_t$O+xbviY_=l` zI?kUi&0-s1)}`iVPm8C#)*G~Qa}fY<0`k_^4wW~asBK)mbU(ahH?+*7-D@=k@AxGe zrm!osZnLFZoT&Y_@hL-n;o1}dHHrjaW*?S-0-8t^S%9i2Tvd7S;}H6z;iLQa4);eS zZn;?Id4|A)ejga}vKS8gQ4sa}gUNW02&U7SAn71nE|=5U0!jChL@5;oI!vPJVlkOa zhQ-FN{`8%i2pT2tfO2Wu`6zymF8yIYL>g}Y{ibYSj&Z5{92k+f|_c#1Sl;fY=_+3 zx<$vW`KP%bY;kjkW^U=b()nt4Z()1Pc988Dq@AtimmOI1X9$7zn=ZK7-lse89Vob! zq0m&vsTpuHjfl1Pq`o(UkFgP`gLA-l2=hGO8+97|4lEAZAkH>r%!_LVL}GU09m2IS zNt!>GdLQG&5@xgp4{2Gh4lQb-G+F z*|Ab&l-Am4XR|aDkfWo6D30@@*eo__mWE-pH`$A#NSk1}m?uf^?!9{gF3mOqq73aF z>?_jWJbhw}S&8fQ;=R4`!~6H|-@m`fHzHD$)p$6m9G8}p;fMv+%gw>TsT6tbnQC>u)wG1I(8TZS-(BC>YLerpqk5d*{y8 z_4#x<(^?0Cu~p@qYng19`?tX8ExfbYp?^NKXe9u?Nr4R-Zpo~3`6f||x4g7<0@Oj3 zC;+0{qZ=gHSzz=BHL{?!QEuIBU5Mw;Xrv9cIRzcBK^qS$4ZGQ5toBZgWb4>&yLPFL zOp=}1^!0iXftjtV$|7HHHmg;-T3K76fYNF_8t?6m(lmXxo&(!K5|0Oi;b@dZ;d;Fu zjz(JPq9_-u)6412y*qaX<58AoNw1&u2b=X;;D&V2?+2GxH&rPNGMz58RwfMg_YUXt zS`lD>&?~BPa(HfL`OjsC6n>qWOTScK7RG|&L92$@19<64#vHkoAv#NW04Y|ok3}=KdoC>T8`r< zq-CjpCXj6?sTK6tByH}B;ub7)X|91JTOcAkSBCBSH(%CCO?Ad`J@_5^ZBJoo9lxD> z?Ofh}i9WChZa*V7{_i)R9XoI2_WN4`72lk{?!If@)KibGjFZM_-%M?XXc0Y|-qJa2 zR}KYy!H+ur%lEe5ikIF6ab%N}bPD2awgGp*1%(N<{sD zP5iZgGT(0v5fQmv!IpHaW$S3tFkJK91){1RHU>qQ4|0m zDrLfunHTf90EJ<)zdzaE+ef0JDCf(iF~R-&_w%es-G&)_chA9K^3~U0u2#!_Z;++g z-rnBhci#E%;}6RsmzfQdCt{R?MAN-W>vJEu>ra z{}%MsCM5zu*W*+y35OtKH)57`JdeHgpKkH)ddt+dV*uEKzU@7m69INiM7L%WQ5b}MYu-BT%Xc*e5kd-#Hi40Y%*fVviDLyooY6mKu@ZIZ0v z?T&r1=9!4tBr(;j8>NXwXfhZZQPdE^Hrt@P^d1`{G#nPG@rpNgP7&!Qi`67|djcA= zd&_qXRS|4=sWe!->tm_qx2;5SyM~5+k57+A$E3)=ES+n++*lD%-Mjbb(c?0!zJBt} zy$25vRaw}wa_1LUESMDq0TgAmUZu=%d3kxTe{gkulf=Eq^jGWkc(NBqJ?4zaOs8`M zP^8b#FG!m-%?Sw!v(3f<5Wsx47!CWA@n|-mS5+n3{D>W>)JziWY=O>!JAmR1jNdic zcdvfy_jV(FVA#FF zmQ!`Lh#mQ|O$6KduN{61J-WO=5DAp3F&49ktEw{3bLSi(Dx#_=3t=J*O)%(>gD}dg z@_IU3&*!t{!f1s8j~~AikP*V`n=5CXt?Xbh3{13MZ}RHq-pT!bGP#*uUtZrtQ5Y2c zem@CJ5QcU-pMUkulhJ5z|LEY=>(lo>`tWGJyuP_U3(mEn{k{Dt3au5Tbr1w70K#8< z{RQdd&Vxr$(9=OcTInDFWGj|5S$3qbEX(yeJ3P8Oh``EKRu+P6oh52YR5qqZ&y)$8 zI=!7&jWR^uAiB;Wt&nIqY-@?}1l))S+{%^P_= zhw5ss*z5J;C?Rc}b7@+bao8IS;y3}sEL}N3arXS|JP1P(zP`S`b9`qs7;iS~^>Ur` z632FvrR&v3fbWg&UR<4h$8`U_80Fyx!kC$kKc|oinr2v|eq-qY09>r9GG&KKbg&I$cLm%mTf^;QD$R$MN~~ zw9?e;_r}%e;^HFi#go19YPHJCqCqoT$hr$p8!GI8@MeLxG_`v|ZP%5CIJ+0#RXG}# zeoIbBXPfL?eP`Qhzre7)K}S_V?A}V+;WlR7w*>@sZ&kC3HtBI^(9juf^SiYC2e&Lj zpd%9MyEePD>4k@l3z=Eim)&t}%YwOXG~t{BXn7@G-Aoyw-|Mf|>#}esM<-!u#BouT z^YwBvnZ&(*KM7~^*=#viTJP;0%+OB;4~C;SNk0GL zYgAgB@P|MAql5j!;c#4*)y2hCU_t~C%UQaKlivFue(;{6m#@xWoj(8cv!DFMzqnTx zDQN&?ttl`D*_8xZiE|~06LC+TJe~BjdnXAgAZkKK5T&znHSfn=&{1z(U%BC5XK~zF zN@>ZZLq@yJe|FA#)5y|df#%JYNPMm3H>tC|*%mb+K;4=PJBKv%-6`W!AL0MB47)`; zoqOGqTrJgiCBzoUw9v)RN8=V@BJwsj@ELaKvnN=*J4$Kr{TP9O1yn1Le8TW8-(SQ1 z8?o7X#=T|63OP|CVyzWcNW_c+Bmx8u*a9-tah*O3Se$@E?HDa+7O?D?x$=OX1YGWW z8rEE%pi5n2eI^EahC>LwLTh=B%;u(-LQ58fBwVxFxw=$wc^U_udEEY?n( zF=nES2rQSYp)JU3Spekvb5vW$e<~Q`?7qJ9=ye*vbItOeZ#E z3LxDbUSFM^0~U|mZE35r66ercFzP5FD67hrb~ql6hvV0;&y>Qw@t|@pUlv+vL>y1{ zOc)fEeevqGF(xqj>C@*~VIRNq==}O>|M(;c`mavUf*=WkXtheqQqoP?8}#FN@U4%( zb$)ry0$G;5Iz6-Y#l1VnVHoClF&>R60IhYFXX2bDb@%A_gAaz&%d_*>FKk&3$CJTu z5cI-wT_^$#uwE`Vn?+@_vdSwiHu);3o-6IR73N%YOy`mIX_c=7X5x9L}n*|;sgLS0{GS( zj39L`!v;jxbWh}npmT#U!^;J<+0-%&uMmc9U)6@j! z=#sZ1*lg`aq;)q5 zwpV_0__gS(;fu8J++U#%c5XlJY`A)Bb~%cN8tp!Xng!q%;tAAMfm`jI6ahE{Awu8f zLJ4<5cVyS_fYbI1CjXk4vV0BD_zhm&uAw`YPtK%HNl zy*zzgR#gXpov-8O03(j zX0z=MxHINv8}BFq&;~Gg?*&$1Do`R+8ztjKgzy6Vu62$qbVip#)DflN(o`3zS znr~#YsmjuAvTTzVn|1cx_YNNXTR)GI`lsw>v9?RH^&Zua?z3zF5r}+Ak|z3q#0e`! zk-<2?GL>(>c~)Bf;G_47%;tq%t<%%j7t`s28JWPCV4Y=lRrTU{FdSNI%hFowthIp& z#-lM?msaaIPVU{k3j)ucJrASs<;$1%@88qPeErqeSC`kb*(}SmM~@$$+_^Wsnc9lA z_7!;XW;$IhH&KvWTwPA5i$fF6m+PV^04U9h%j@g${@&Ha>B-TZ^Q+6_!{eLT4Zx|ee=d4TaeU6dwPc(cY$~NWn*n< zM!sXvX|4aAEp{tPsQGR?9&GJ4&`6FQ)6>qAHD}ZytEo2JofQE9an6B=*gDq1RhFG2 z1W+J#0~J6-rIZLP*K0)}%(k*z+Frju**hpIXRC6(NngBtb$om@Tg=y+d^jAIPCozg z>tFvXe~Htj&rdTWu&%4<0>IWRfI${`}c| zv3&B)^L3h=FwmrqPEID(9^tFSVo{d%`r_>3^~Gwr{P=@!v*p!tK_bqUWwx>9W^r?s zrmHlY6J`$|?jIeFQPxy@{9Lm>jg`D+N`AsxQmt2#p)Ks%o#5>xW6Q(eWallbZ{q;D z(e`dF^xI!uR??vpsMSkPxNW*X8zJURCA8&ExA06eOl+^ys)`-f`dm9%C4XhwYfJ{zY1m!d>{_?NIiZTPf4jeF$Lxn;3PyXfa z{rDM_>HyJ*AW;OO(BiTT3MNGg*m;$PJM04hwwtVl{6xTxwuYegn0Db@5U5_F^QtOy zdHMR)bUuIZ@WF62o-J3FMG&npGfGvBMx&nT=UG;!8)q#G=pg71hJ${;D2l480uxO3 zCPi6hn>5R^<$Cqq?|d5oPESw2dG;*Jvdw1WbA!M9@=FAXZRJz{XgF z(0a7m1F(U0J2*(1Xhz(fs_k$PK&Z@FnZPLMTyj-s*lgW?&?&cDdNR`sRz*-+Ubfu|h1fA_z2s2p9QgwOZZ?uMDjIyMN_33|XZC>#!5- zV({$*?Z!;Dlhw-P+BnpO0i6l$W^Z+YIU+#a%Mog7X-EOLOVqIQ9onuFyS86;oUz!7 z@tt9871ABepo>!*HL!7icOScPh|88+?Yb12+hCW&*P@}8OMc`#53^M#$bVvC(4fY@ z`!9a_pa0I!Hl?wk*$F#`z*?LX>;L`#`rrPI?+ryV1h_3_r2Yy-eCh1&!+Gw{fP%^~ zg6^q!lIQ(OB1QsH0*nO0g;grA^eEJb6@a%tDd$Ka9!?(c>rI7Y0cAy$0(3bMrWPCm z3nK#8{_4g@+3x+V>lb|7mLIw=|Jo{OwZKMD3Irqy)TnPtTNRaC&R3tWzfeI)fdOS0 zu%;WL^?Fs76(R;k34_vRFzBPeYPG5=JLvaDqmkBhb9HrnHH~}8$?@@ey~)z-_1W3< zdRp2Ni2@UT{rOjA<%Yxla3sTZdUZ7&3s9dMpY-B*I$bD&i|ZT2sw~UZizR_NJ~-On-vg5Qd^MXdjt&pcF0ap?J?ro7Rkk`h zJUF|$1cgeGLaM6DFPW_>Me1!__ie2BjZM3=7vD7Xyam&@-!+vTw+aWyb_ut8qN7c~ zHap2M-^-IDP&8d+)t`{`BRmXJKUa4i3Kf@{5nZ^{u=2@28t= zu~;lttNZuvpNvjUj_!Q=>F2Lc&lot2dqd{Ma#`iodbtS$6GwqDTG;Llha_}-u!kfU zrx)|-ye!KyFF`TPiD{H3gR!z$KhlbBe zt0(wPOum#=XOR$Uba$KiqDWI_O%R&U;qB7Ylu_Sr3&njLDqA}g-6gYzYnLZJwvhbzrSlP1qj+6S$tK>VIWA9Y#_B;(yYPN30c0RXKa zB0DD_im3MKiU0yB1&mP`32#7=V*nuMM2TV`2MoXnjnlZ!cW4;b~iXx0gWR!TsW)|#{lgCfhTvNA>+t$RsN z2WEOb&C;wt><>mm5m>J`&z?S;FBW-GGD;YQ*16ei&LW%5db!@5pPy%0@y(Mb%T4;T zPd`PVs;XGv>uHqtV!4 zz-*&9?#D@(M9by!@aQ-Pe)`SxXwXmd?C9utI-en;wH1<2$Pgmhp~E*{eify0x8K?} zoj*I=_bpIvyKCx@0eSmDw>WSMz1wZ#-|CJzWxHp#AZa_OTCm7ghi$Gc%{V+$xfOKX z&{C_{Z@+5L8seK1*V*vxxLcv{2EYWL*60{noUN)NFN*>JNGVN9M5@Yxb-wwLwboi6 zC?`J4e!5t$HXC+zpCtwX;%d2ZEdT0{|Jdjt&5G%CF3g|ipB^6`UY?)jS@F@w-;RRl z>651)ef)78g&?p_H(!47)#2gM!T$ckM~{}vcbvUMW$M2B`N?XJJn9*4VP~h=hgP&+G0h(3T!}VwDOFX0GS=t z?Jy-P%Cce?GBOhpDY7iUP63YwF-l{PZkQAjITk-~Koo{LK%$MbMI=N}tZ78-C(R2kLf`Gz&$Ln+00bdUBHtVa2(B+L z!zhY+Nf1WP^3B!7bT(Zq7S^!<5MjQ_QF+rJTIb4}84`eybrwml*9Fw-22O9L)0^pf zZ*MdlDur2=i?d;%o;`g&8YKNV`RePh-hKT3-FtVx`22HMmXrOx<#Mi6NTnL>AI?^* ztjGtWe#uf+Rlb}Dfw7Feep0z=wOla^5%Ja+^#%jPx4*vy(K=N6#=*P%u|v?EA7tm} z?IpX`ByU#jcz1NOvs?JMv(wvszTFdTw0|wmTGgRBM*x~|jh4D=yF+t8iwpob^7P>gE<^YHYS}7z!r_-`3@|>$mtR(_qUl9eMNvrA3r+?qH>jD7KgyI|v zgTi&X0n8NQbUq#R2VXyVa&d9-&cnyoSF<$#llR|yH_J9>=co7Y+{-p;x=C+tW>?qK zz5TtxV7Pa1@ZNjxvB>LJXL*??J-%5l;z6>`3uMkVt3kh?-DIcdrx!?}(M6u8MNw6S z0&tZ>;J}pM`_`Sm@@wDeg;f+d0t*V5o$t@kaR2RsH<{l6b&<}N9J@jAZNPv405@hN z-(sHYmg~*BG*i^LZ8|~*1psUD(9zi5^6H`*Z(M3`-w=JM=DecL}2NJWVc~cO=1L*XvLvH0O2M|K|lzI z02w6DGw{Wg38hX8Xo5k7*6b+=?6_VRu!_q_VSoy}u@i}qYf~P`rmPCbLP{9f z%PR%|r_lBygW&1~NAUpyBH|po21ep`GV0mu06>AdUM~Xo@Hdqsm%ks46WYXe8$ZQL54r_&SMHPbeV*D@EygS!SDFoM;pk=psu~rJsKN zO_e6P0?F~%hth6632YCnL*ZceF3ntEu^>wEE`BH^V{itIxmKEY?vJuhRAP^|fPnc7B$`$#^nBRER#55tqyL zW|>}J-o#-r?Dc?c6a;Y)+Ok-$)_%^dvkFB6_QK%(hbO=M3y;42&fsW*kztTZzyS&o zF$lE1&uhk9&qX`I9VyuogpbXF+FsWRjz-A)iS%rbsPVjG%VKNei8O?WJDNdfl{+g5 z?MgOZbj^`1lJ3S9)FKFXF2s${LfBd`J9liNFWQ~ex%o~wT8FIK4J*x~v|Utc&s1wp z-Q8|YRvr4T32|r$YR7;85K_ZmDNS=0U||Icd_NygtJtAUL}qCRR`>ht2pUbYQ5n^KG zy2>t+j|&Ar@TmX@Ak^eVfDj=9vN&MTN_q*YATePvU)s!qWpDykgaIr&=Q3ZYy2uMe zFxmh}QB_HjFf)NyQ!pzFMa1ktBniU9!vk>=ghnZCLSwD7RfR;ha%EW-d0AQOn6o_d z6B-yD#gQT6$|=IpF!4qL6jZ0<3@ql`kL&1PM(>-Po~+cZnH*3P-As(h2`+YEV!MQ?XdgMOv+AH0pz!<#Qpv+`#h ze(Sq7+My8{jg4mK`no%m?G~(0*|E3R>nyzGGFwzvUmrUFbIZ5e1ejY430v+C_0(YP zQ@S+=yG#X}xo9>$gU3*gxhe`2m?)lV(ZwkGU)H8Gzo}^2n#7?jB(CYl~suS zL64mc!XOI6@pxiPuu9X5i>tgSs=zOYRuXs*$M@*4lv4G0Na znBO_Aks8~R-Xf@L2J9msJFB`iI<*AWV2dskl9mh`eE+7k5O@B)y$`Wr_pML3#wP7K zyYUH4Xej4K5<|GaX98r6x8ZNYQfv`^5;`*^_t3NbK z4TAs)AdnO9H-IqEfkp(zj>U>a1kpMuD?c^9Opth)0Zr@F<9m1zBn! zv84(GLKGwfhlt>VsR+NR07O`UiEPz2&F5%f1$_=7IsdElyfWy&axshfj&Ce9}S059E&ib3d10bLg%>5 ziZBYwvWmj!;^L~PN)za^s)RX;LqmiBS`n8eDIJ-Bh_yEB*-{IP#)B6xp8ovg=Rf%1 zz4NoPC<^0Ve>@roL9kpc`@`{cy%t1mbe`qeYS|wRl76pp*4hf7F@v>~woCYLrPR0m z^2Seio6Famti#fqFK%6>YZq!GKRtWDEj&cL38>`~eyetIS9^!XD6q53oAkEMUVam) zZ=bAVh3Nd<@+d!AY4I7paRq>m!>{|`2qJY3umG6AR9U46dvPqzN!`j?h!hctFd!%* zYb`rIJ~_B^=cE@WM7UZl5hc&d*-RIbr#YlEl=1GrusY6IXiaXaNPxKZI+ zao>7?!OH<~h(L(0;q+cPK;^XL?2?Qd@z$ge}Nl*!fnlw>pOcLt6uza85PFiXf)JX zG0ULePx`&pa$Od=19y0MI2`n{<$BOdgx#>;tBP_o9s#@AY=IB3%*!}Q_73+qo6XVD z!9#6k)0_EX34r6#c(zW9GLMtwX1yx%%1^>(lOp+0C}d_*#9X`cv7OP|Oz^FEUbgfm zTNUBYeAUc*OO0D^Yy)2qpw%k7vZ965*wAKI1K4US9*DGVU~epF_v`LMZFj-;8`=JC zLj7BtZ6_=2Hb#S5#qNUqE&O}ikvr2O0O&g$DXoIg6s`ggYi)o?2qp?a*ja0%Zj}LcL$U-7MhOWhdSC;-n`+?3PRUy3%kHcnoBn* zV@u+)ZD&~%u(^Wx5(nHf<;>>vq= z1O-J<0EtLM2nYn76AL13oK_8B{AF7a>PKYUaOfuDwUN5HjO0| zB7y{(2K_!)WxBHCy}jO`Z;U=VIvNZHfidS7=V_Kr#^XUh+1uM242GL^W|W@IZ%k+g zz2q0Z_w6FhZCMO^{UA_r6c2j+*>q79c@)JWqK%HCxT?w^4(~sD5MADo(nu6W(d=f5 z0V~v5mRn*V<*JICp32Y-$nIkJ4#?g@q|Pr`Bl0cfc0H=QSLjmr4i;(6lP$rwe6-8< zJ6FOcaAGk@*_NzabO=lv~@Ar`ixOOZmMS`4fj;*zu)oQ(1m3dm_#bA*1lHPd#U_9EJ&SrVG zSLv-O< zo2SyASDR;=dtL>?P zo6t{b-7mGJpF6?-gvj0*K*(Hs0fg$b0BIccOg_Sj!0S8Q=og9*rH(X01qj0E6d)V2 z7Al37v9ge(WTj)J*F~lQ7@-z6AiZ83Xa(Q~!+w(V#(R5FlJxrhB#Ha|9wPZF4$Qm` zHd&sJCzFGd0~3Ukqlq{cTWr$wy?5WSd0Az-4wSG(g%2M-0FkmPlcX1f0Rz~wT+A0y z6shCD+DZjMs7zWEBCG;4-kV%ZuK>`otDER_%%@wDejCwu$gxAN9r|v`@y|zZ|2n;Q zdyQHm?W7dQ8z&$%J^<|eBG~Smn#S7AxMjpFLgX_ncL&mbZrM%y@U24u;r47amldct zUSsu@?pQnb--$UyL}sy-E%Gd1Z+zD~=eUw83Y9TLgn>~iG>VX&0|7*~E{{T;gnMxm z3CIhx(eK+*;e)uU2d|7^Qo8Y;M>Xe70f6 zo~k;g#!kYRG@Kl2;9ifU3$(BehuEnsEnMqF+}MQ(unF1}5cah<{GCMvny}c$jV^H% zCaJY{8$_H z^vR2NA3s(?Mk@lDUd`9R`sDb|!Ttd=0AUmcy5EbUXti9&No+X)3O37hwN49QQ7VdK zW?)}Vy9N=0O~f4j83Zq#ebIhw)(Eypq(h)Po1xhYe-`hrseWtK**(--eLHvGRY(MU zPv9Ng-3Gli9HgVBY!5@|-s_F$=nlLSRpt$m+t7+`PwrL-Vi&l!``5Gbmur-uV>Tg!QsJRFxYIe z`C?;?QAAm8t#!R#qLoGjLZ!4aMkDnQNF$vb>=VjtI-SjCK^Pt!$4J^So!q^zqwvAQ zcVEB$=qG>j$1lJ9G*tapXVVWJl)(W8p(1G1>w01V8YA0|rVq``;tp+eVqv7_s@p@m z%-u&FG#Ifp`XTO+hQ|aQvXU)@)O5IgwWPA6Cv2m4wh%&~bGlS5Y&O2Ai{NK z5K2{6%&j!T+LeMREQACC!VE-$ra)~ePAfB;RaZBgRl2UM^poJ^U@#g4L?%vpgv4HA zAlC6WNP^%Td$AAA^#K5ZH9@}@gOs+~lkeG;s zNC@k+z_v$_)Fr=!e9b~Z-^B)e!yg0|QPgB-Fav{wCa6>-&+|cl^ub3Tm9|8bAc^xL z%d;%Y*0cF4;y8-zWN&{s8~_L*Rz<0Z)|*ujM#Nkh8}%YUeR+Lt*-b{{Z-4yp#o4(r zbm#t^tE-!%!@ZlE>o^Q2`x9%+`C?kRYB(BcGG$ffxg*40ub-t^Wu>S}%Uo4e?(8Zr zDiNiWu=UL`nCpHDHOFdD(XJr4ZKd3jeB%)o-MI?AE2Yy<3xS+|7@X7UZ@w zg*5`(OsKHp??%Mv*8A0%P(t@ArBKhxtAh#}2Hm*$ zu(KMsSoN+aw^k<`%g5HnBYqcbFAlq>_#sjIbHlN5Yx~Boke4^q2I|ToY{7w#b0_bA z!|f3L^GE~Ax1}cp0mZv5y%(W*1{MI{Q>cSKrb@MiuPSksun>sPp!2Q|XltDOS**KbrhwhI+pvfZ zDtQ~ye>?K;{NClgTbS1Zyygtdv%Ym@CH|hJhl; zvW+p6V8r6agFzC<>(x>l6+|JC*{st%%Y`8f%<=Kz%U938^POM((;xpxVEVnE`?+tP ze*N`VUxnlG(a}+_m!w%vK;a<1xH>0LfeC>K5ws3Yj*hc5&x<_i^@=n^)ZAWQQM zjo7H|xTt)NnFz8dKxAYhVQ>fnq#S6*&|+vQuoyZkM#@MQf#hB+5rWakzG*K?Jz`)W z%nNHBiVz?Jf|o8L4g~>G$XJOA82ru;U;UlG`_Io;XmP-DP=OWz2VB}}Gb>*G?&p8- zC#R#s`vM^V_%Jp^5)d!@t+mojY@Jnsi0D9E92xW_g#f$*yk6#ZWd)!P_^BN^UK{WW z>}L*vkbF{r5DF10LPqcQuF-&(0R+fR(mB;&+3$O41w(Ca0wED%L?@)t6`~aBFc^)8 z{Xx$JIx+^NM~LgiQW1^EBc-S)vZ5@fvuSDF;r;;%oSvU4tyatB<>k%(!9fxaM<=5w ziid;#X0!Tl{>4B0t-toy7S~fm6~+lFJ=xn|E*EKDjQU~Hj{{?f5EX?w7VFmQl(Y$x zUcmVL$K z8WGnG73~hM2F@J=Z<7et5gN4_0ooXkZQOrtq1x^ye_=llJF=n~MyEGwgXwV_NZJmg zgZf*Is-dg5PHblm(1TwQtu+CzvpmlWWS5pjzS$&k5Cu9(LZj4rz0n#2t(~=DV8-J; zcCt>_%k?se;%t-M;B0y`EsOl#gL|M+ki$^Fc=^qTAAkI(KlzCez4y-hY~9t(^{cbf zci(;Y=yrZGD#2s96N6d7GZCf0H7x9 zV%Hfgt&IerF}!0<={MB96Fh)E zP`yPkEd;5NG1lz3p=VFijs*ySo%q5Az$`$-769v1EOww205S>_lGG7~$P8GU&PhD% zM*u_%iou|e5)GozM2rTtt@4G!48gIOl9SYpPG|B*pFaEY`NeF0^TEB||NP(iRpOEe zK?H?OP}egMVImZEUdO2_S2+=^RVD%wVIptQG8vnN8~vUC?DzlPKYN-5hfINGEufr- zn1T*KKq-~Hp7QhQ1?UL2MY(G)tN@hOvUq7qUcs)#Epi+xO=7oUT?mK_=)`*?nl))E z{IpgeXtIB)X7ose{)5j0AXVc9ZvJ>{l85}Y&E?g5@4ho0^wafvvUlKI<-7`_l_qUV=PhbF2-j(zmQIIJ z(i<&ay*~f!i{m?Y?%x}qU0uu<^E}Pi+1h;3*gv-XXp55@((gd1*3P)g0Gp4ulmlo_ z**UfggaPUV`5mlYYuVt9B<*R~e(p#b-9YZ0fp(RG?j8M|8dly6u03Vf7a+~0J7VuG z?`v>}*i2W4Z*2$B6)j!ah5$f50TCcg)1oYW8a)a4p!*;Ss;ZnXH-jVz!la)>8nNF? z$}(TB7R;Q)J+1U+odX0H7neb(vn=b6`m5D)vsxq3dcFAIgZKXEhd)|xHV+>@Sg+Sw z>F3X0%ooczNjB+a7@9{9AMH=}dxODpxhRWjy;++e9Q67IiPsHAYHIximX+YMdv6h8IcsAA~H%0h$hic zXt5egLI>c;vnBAciUI%(m@`dNHD5|ua+Q@?=H{E5`MOYM`8R*_yM0puyOQ;^=>PrS z{qpbr&L>L?PP9mQGb{gxzlC8>DJ39+Bt}u4kq87$wmbk@2c@m$R&Dw~bWT94QZO^a z|L{Ngr~l+%oLX~iC1D^yLLh}Abu(cSq|&hQ{w@yp&bwi$=2c9u|os+*#4##5D^Kp|Gf1B*BXF#VT*T?NUe^#z~a8A#XORkk&?nNPo}+=ILVY*xo<6 z=bT-yQ*a!Ik*%sK%Ze;r&Tzfij0U5F{V@Ox2BW~3>zip3_mcjQt<_3pX_}@vX`=|V zZt5Zt~zjSWo|Eb?<*-46QM%hFOfcQOF1GDBC+Pmy> z^4h#q(^MP#-$(*%c#G`n1mOPy%eJU*Z6k$dXuCqF82~mK0}F4~8${4Xxk^aRYY*Cb(bnPk|Mj;`sR-5r~e0_a$eX|-4!u4j|A0#&ymt|EY zNt|uwVch@L#~=OplTQ=^A};3h{%AOzPH{HfKR6Cl@ch{`t%ALS{WuIoNE?%-sk3%8 z91g}q5Uk3w*Y9)8MQO9FNYlJ13IIGlIuhZ{dZjcCCu3n*u9o|7;zUYoNs$h80JJXB z&2rK2#evZR77)3UP1I~}0AI{!Yn1HBb3|^$amSd`AQJ{`5{adr)H?h_WUFO1A(R4s z8v`_%t_ZItYXU4uG0y3TT0a0169{2a5tAEQAQmAOwJ9(d2A4 zFg(4+pMH7s)i>7{*ULp(*~%%vC^Vy9aOY(7!K0&(9*vJiG7hri_N3_^hd_rtRc4;;sgfj8Yl zjfjOsP)Gn62?&H8A&Jko^2R>|5MailaO|!0Tj)suLP$ZNl>&6!M4-3?PtZ(=$Sw7T_n?Lj(d5U;^(nZOm~s4;V)NNIU+XCD^@oKkZf>Sm*H@1oKC+d&zPa|K+~#lXx{7gjppPI#Ba{8Xgxmvlh3*ruyZQMjsd zzw*n!^v6H?(=;pMUW9~P3L1L(`sK;t@xlIKo)>wV3j;gbAC9!rBCc{SFN#5L6oye% zRgP`a?;Z6HZRLtQFI{nVe!g7Jt2`&d#m(x`qxXd?TjrIGfJxXTTBpnD*~>4d)29y} z943h&VrD_0+uCAHKG12UP>WL^K-0>E=A1SruvrUk&`P~ZjftTF@&Z6@Z$lA5EL=sB?EJQ#EN&s0<2nB!v7>LFAs2I;82svO&o@q#L2~HKmOU(ybLVIq7C4Z3aP(Jx?So(ZU^3Bb<1$nZeW^PT zU@fAx8Ar+EWwFj_=&?1DD6xU!O&;d`_+r8T{(tcQ`sNHO99Q6dFAfpXGF@zPI4}$r z#2H0KkuRX+i)Ucn#2Bl}6{Tx6ZeQJjRG4!3a?bzhKln-Jjw*=+jd1NsQwSgq*bxdL zqwl*8;JlAoK+#tH^D10kRDuXdbu^VgYpdynDo_m0fj9sKKmbaFSiqm+^+T+aA==H| zh78mpK}ba4D@2iyDCMhZ2_QQrbZrJOFarx{0A>(xd_zDV!OAt2DMA(m0YxARLcktV zmPxV6zWMrV0C@QD0cyoKsH%Ao6XCzD$-&+ z9%>yVVf4vQe|qQe1VpN`TrF04n%=#8Qe^pq`}YypT1!eNalgz99R#EUcDA%^ZKlJ} zF>E&3H_u;OO{dxf%k_FR9#vvbU!R7t`TWZ-?%lZ?hv6o(jiJ)h`Wv|{w;AFN-`}#! zE~tiG*4Idvo!{P24X|_GTjDZyEGjM5!bWuv-Qfe?u0>5;Ks|^SzqdoWeUBZ1B|ASN zHvcq3Xr;Ty64o*h`cmLaJ=F+N?tp?CPI)n)YJ`Lm0Q(>yJ%uBJyPchanQ@5A?X941Lzy7KzP(|_^1e?Q-xAAfL{ zR2_eYUfbSA`qoumYxKSKH~A@Rqd#_urn7FHzHc=auZ=QoW{Br$A_U&oK#0P=I{`MF zT6}6GIUk`Y5+MS+Ixf(2d>}?$P-rPGZBSTat)y8|TCNN2_n-Zz|LBvnN-8<9pqP}159F@_D4=#2m(H!0_SL_d{r*q>;NSS=2mkKh`2O9# zjwl5#$=78d0SA#b`~6t#T$E!GL?8q!P*r$+T}Hw1-~SK(&ex}^f`R2gKmme6M5Mg3 z%d{XhM9u{T#cA@br=?b$yj2XLv^K3QW8mGtR)j%W)>aMw@gMx@bvh_Hbf^&kzyT=) z5h(+#h*M2YBPf#6RuzcDUdge=Km-{&-W$QHtehYafnNtgpD#ury-0^zsBE+^App;| zYY2rkEN{?%gZF)K2O+Sp`+y)w$~)$24+J;{bU?_Ckex82fG~-#WPy$2!EsGP=)FvW z=){|nybRF@F{)utFE_R*%dfure6?9Udi;34TrHMM#{h`hXrCT7945lmCS9YZtE(Gv zoaOoc!M;-D9G6A0Uae<~`FJv3tQL8ZS5+CBAPK_j>GenNe>j^?^RkTM2(;3gR1j2! zB_|-r0@kuJK^VnOWIkUmvW=Zj_YV)oli|&DW{f#MKNAqdx_)c3$z%t)cNmu^gBmJ# z@oW1Nz*}M5F2`%}d5i2DyX%fZ(C+5#saTiz?FgL?oUb(itnDy@?ITI&VsEhEnr{4^ zJ3zCUiB{3ujZ10Ydw+5*hFX;nx_8>S=WTrev5`#VHAzHf&hx@nRz#e20xr@90F4O` z_70OcdHMQvuNOyQSXMb|QYOsvjT2{#iIX^t!phnEcTX0JWl>~76ox?zL;%J)xxBo3 zeRjd9kB*K}QI-~2QI=(;l^TqOQJAD@*6-*2{^0fb%e}pQW5VTfo%Ew5?uA;5<>_p? z+AQ}b<1mav3=venHxT00dcD8DPb^6sJo);Y<$V6fKm0@eYZ`#Zx~DDfR4B# zZ+~K8K_umb92g4Y(o)6b7_BfM1{#zUic<|1n3058NJA;=#Z>329fo%0yKFmb@hdS&Q2r_nfOxLv5i3AW)e#&(E^Y zpPzsEsub8`FsKapV0HmOu_9?+HOaT44QV2&F|M@!azrdGr$xnJe9$|Q0#ugGJX62> z`(NZdbf6JYfJq^PLve{I#&P=B|MGXg{r=G~jv}Mk+Sgahzxz8s`sp_tCgnt9)1twz zU{%@1cHrxi0(hiNFzCg-$WZ1G7(j^#AUY8TEOkR^0dIEVn&%S=*A}1J9{@xQtOSM7 z$LI<$C_)4#Bxc3n`9Avyc?RaXI<*HD4gt|CioQD#H0C29WKAFj^n|g4~}Qov!i==mdmBBEFwI9^r$K;=j_GhSue?erL2lD3Pofw zU!*B>3C<+1s^OW3_jVg(>k$h+-VE6x0`O4v)$s}-g18HyB1FDp4~mJ zgXy{vM$%k!_j=7(q=^D*MOpU>wFwwOI?XH^Gg6a5-VO+Nk7xmY6ZDU7${;_c=F&T= zMLUv?eW(p?sdE4Ty|EO;7gwyEg^EZ=p(Zp4aU73^eG$04zUud)BubXc1%ey(2YHrf zc@YMoQV>OP#WsxN;bd>NTsy!h?wc@GCKOgmMWgY-H_y+mZe}Ko;$ANZV;v+2$~v*m z_4-NW_-cMlMkT}Edb8T!KMcYsFY~HcgeK_qdZWQel-p!!Rull>oH%ErAhK2U^5u)0 ztIO4DQDj+Q)cM(~XV0GW^XOfW%$Fi%9j#sXY8C&V|Mvgy^A}|aqkTxrA^`y>WT8ou z0%CE3;fD1OpKShb|K%V4ul~osLc$SP0*hdgoK|j-7)18WU1~FzE+zWelljZnr;f)= zf#;jbTSDqi1(cRfL=!4zA%#I;q~596cs5XgoIqAMLB-y>Psj|6(T_iWHC-cPD5U&t zS%g6%Whedh-}?7{>$~@KBntz%M$m{4N5;_iUj9G+Wm&MRbuqtP2oNi4S-AG9Z2c*S z0R1?OG-wdZPCzMAEFjK-n8h{aARGXQPcIOkGX~(B$#^Y8Xc!~q^R+9T6j=eK)yfDuXW2P79F4SA z*YnxI!Qu7wwPjGsoE)EofdYZmdiCPv%e!~)_6CEzC;(tI9)mztxgsx6)8WzG%bS}= z4;~JN<19_9auda2o)u9TS>iG+bfC#GVIV+XJ^Okz+21>uh=RPz7mI~43Kh6g#5>5_ zT?UQFz5Qw-ZAT!y@dr9ETe_cjKzQ>@n?KMs?sPb)0BnsXZ<>g^cb8TJ*p9aO2e-#S z1Lf;qT3x5)iRpRS>KW504HG4~3zuY@StYv$&TeNq;t{JJzW6`>t^dJa`mj%~a?T>6IAn^>X6`@vhd<3^Vk!32p%jI@ zPV~zkeDA|Zg@CrQ4oHcRmGJyJ*U@1nvBkh64WdvS-+Op`u-6Az2suHOOSs^{-~NyP z(PuAhCPRw`NVAASi@+gP26ID|66Zh_DlR0kq7b#zd{R}Y0O|LCeE##_J^yRppBOBa zw^Mu4?!USCUVTkKF~|N(}sPm90A8jC@exwnArjQ;2v?Fu^>R5ph)5X$Pj|T zQ9o3wT5hVm1nZmy76E4IC4Fbz>(kStgQMAe;Y53a3~XP<30>&<%O z9J6I+HyjSNF+muxb48v{#(T5*&3dyjVU%V0a4;^)T&sW`n;<|^d0v*zUQDmUI3c2E z&!3&#yVL9SPmWGD>1sZo>p+o0fw}^yA`|c80iFqdP(1@1teRJ(44hnIqG2jnr$@R4Q%;Ltvc+C9l@LSWvjH} z&IGj=?-;L|>vYwE?$07^j7lvLm7>bpqA1gB!?qj`23pZ_wHoxI{-9?}u*oy$L~Csw zr$wHZRj)U20;IH%azYR9J+$n?ICdi1L}X%=vUK1`1yOSU{^KW4zD5*gSZ_9@%)Pt! zB9yAKWnM1ki^HRXe$rbmmcY_WdRJG|UN0W>`wFS3%H?up*(GtfDyw0Cko0>*u)jB1 zEa$IIUn-@uvMBRXk*>;oJ-b@GercfU8%J^W;7;%HgS|KcmJ+1$g=LzV@X5el@Hb(b z4SR$3PYWBG0N&1mig?q0x0{%bM2}uvooC{#H~<1LpbW4zq<`|&`LBHNp>_yD&I3IO z&Tke)HLz+>vB5ei3zWFa>t$X@ppwo^)P0C5( zy(8cN07+RP=)A3@;0QJ_>< z7$`!{H7OBe8C*UMp;V3u1i)&sd!q!LLk&KHvCT*ppuDI60EF2wpcXP|rM~#)+DgER zP!T&8Arv97lLUV8{W}B9HCu5G6$*kCM_OS(Dlk|8+D6A0K>{Qw%CZJ#O$tWqdJN*w zgdt!qA^;8%fW%o_u>&2rs!%9I;xi^{35N~v7jFV0Kmqb$U(z~#5RpXCA=geJArWR# z1T4ZL#NdA-680tLeAm?`%&^w*od+!pLgrEw8u1d2H~@?IXKaX-9dRht{PaZX1@c$#d8aZ-*JTu823#cmwmd zaY3>xSn6c3+rqNp__r^J+j-f}Q{!Z-ujpe(*|D=un0ra0Fv(WSTx2pHCcVA@Zn7-T zH&I~nq8ttf%gt&uo&aeEK^+v&!wwo?kqE?=j^i2<3Tpb2B|UIvP*LtJTUe?~V6wX4hGs_TpZwl91hEFJ zeH*GTJGP(NKiHY%Hf&rvbWwY!sICNn9#r~}%Xi;>*Z#|^0s^OE5CHL7f<=Uvr|XI- ztk(RC|T-H?L=Z^y%f__`#4l_x){zISxZjXzP;nzH5!Jh!a6Y;!2H$ zu{S^WsQ)*A<1ZZT4M8x6BFnD-(s%EXTM(2CLc)8KQO7RdED53jm6fZdil1Q$E~eS} zykIp3M8{4ktj!3nn)KE2IMi+lP}TinkdV-_3rq-gP>rw5ib^4X1H`hdT%EcLb!NVJ zC$NjC8tN*>44eqFbqs`JvvNJvaLm-yuto#|1a!bP-}fS^DFj|0CS2cJ*k|DTdwE+w z2(Sn<`)oZS^p!IS#X1xaArKUC0szhls=Cjl2s#!ZA#_BdhzKb(VH`@3+xez)3{{?) zP{m;{2vk*Badxv>E@pE@>gxO|FY>q-BVm!{{az11g3!o{dr6WcNgPL;b!x2*f>02I zFiMj3ay1+dY-vT%F*pV$#YjSwrs<|Ehr=;$R(Y|hDpxG?z5U7Y@$uEwrJrb)+P^{c zCim}h%-z=;e1G?(*5>HFZ6k@qu|tF;iCtB#7mKR0gMMNHBY>rKwk-3q z3PPg;lNV*bKT=8oP*qlm3X8n#^+$PG6_p$G`$!7`5}~rRy}{`G{K@{o5f|0L(UFeA zo159qbo%(w<07*!pTC;y?e+V;@np1Gt+P!IjB%XImJ6j!6!nTC%kmk4>LqcgLu;#S zlO?@A0p48AimD94z!h#jo4q=HdFNo?X4z_X)erE&-O=N_y$5%CC;Rbe6orA1Sf6Pl zorP)*gsqLPJG)y>f1BF;Vq;y2xHZZF0DwXyu^+v6uiux|vU0#agp?SO$uYe?pDweq zA8BFdlfFc$v+KD9vQS5lAOHX{)6Fuym}SQ!BcPZa0;1BJth||R9Q4>no%t*(sfLMq z_rU?ej1d`wih4i(?B&^wwGatv1W`l;3@nDqzwsL%{=)l%NM<2sNJ!cN+kfZ3_wkQE z{o?7gOl?qiOaVsJ>^P_J5B~V;-}t3p3z!Tsf-rLw1csm#V4=GD83=hkWvc)SZRfxG z-Gl$#zxQt*1cjCgLC^%++|zDD)ds);5dcSlY1zL(+r0o$pe&t;Vo`+bY=u$q>SB>O za)LrY3IRl%QwkJRdxI!8tkL>}HSuLN1qe}Vjii9EF52n&umBPjRbd??5{s=Pb_9?> zAxDsZ>)p{eudbts8ut5fFAQVTGsQ=b`$qB_7ASNM2*uZ72A|=@-sVGf=}~3^1R|_^ zypxaP@B~PW@u#UA-FW_3gu&G*1->41lfNiPbv30rc8YzA1rSsM0$M4fNSnYI%uCCH zsK}7mbZs4@@M5)g49>E1mC@7-gVNf9T^t1@5C_3v&_{$Y48tf!qBJkY<4A!9B27jI zp)lwmDk^JGG0=22J-ax+nNEW+US!#PvFP>sli~3C>ZUA<>+7ptuYYoKa&~^s-sVFj z{>8Ug*Os0B*+Ss9gy`6LZhzlw_BYu2+pYYv<^NqJKw2c&{Iuf(kmiy*QTfstKo_iU z4M&0ur!f_l~=M3sFiHoWX6%|G9n3=?a8zjkWu>?{T3z?u|woX=?Oq(zaqxCvf zT1^i23TGb=hh^JR0vG?Ayu~ zo9yQL$|#k@kq}L9uEQv(iV{G*ID3HrfinC3(fsmaHMNs%$ zUuV~dZVMp}zg2*4aDW9sTX=mQc&7*UX! zfCEW?_1okB?f>+*j(eNHEj0r8%ayDN5gma50wITi(gdX!&&?75AOn^auqZ%koS^z@ zwyuO26%u(oOhm|5IT=QQK@qMHS*T7mWhBcIh9)owY!Lzm@G)RMv$v|)xw_T^LX)!# zh$sm8U;O@i-~IN7Nzzw{+8}d|Qerk&T#2uP1n9$UYuJZA1z3QTkF^F80AKsrmmNd| zMiyT_K}5LGFg=F{73b*VAdBqbx74Z>E>mH_J_WbaWJi=GCiLn>;q!3`hOx&CPs1%kzAHZ*MxAT4#w= zo$kJ~nHurjY_l$h`*U6b9ox#AO!F<)mhI;49NnA>UK9>v9q3Sn>oiTX%mhK@TtFk=+51f`(dv)3Qc9Jy~18xT~u66 zhLbRkv{v)!bUK?=;)ob$5*VGX^K6sZBD=mi4>S#9d~h%rC2}xSqnP&wX4nU9%NNi1!EFKp+p(FJQi05s-VjW&k$FMsF$zxw2>3VbC4WC2Br z*{pN<=5+qy{d?M34FE`+G{3l-0`>uwFEhZ1fZ#|KqCb23`mg`x`;L|GV#}hgXN$BD zi^^BL7ZwswF8ko&g8;2Y0RW<4xq+{qO@R^sA|i3Z$QnUh`RLwc(uYtL1P;X49~Q(i zR{0OU^Wg9P_PS%@$S zvMpGw(!do-v%QHJfSB3GgAxi*6UMKgG1P$gYU94mJc@vLx#4>ukT(ILurH^|K7O?3 z4$7O6yxUoMJznaj!(L>Hul9(k)^S-`cD!DvFHXPi^#>-1;<$Hlb-hei zckkWV8}HrBuZto-Jlx;k-@CZDOw)B)6=4`c3C=p$MmKhunY91a5mdWhzX|`h;^J+u z=Jf7m8i;?3-!^u8|6ScOqB&P&cZdMH0zm35(5=tewF^m`bkszO)}XPyW6QEz`%#C9 zOA{e|+daMWl$~#H+cG*j71q_O1ZpQ}RaUkvm7-n}R|S=Mo@M!JxeUWVkuHl$DJ={D z#Eh%;(pt`o(nN8dmjblTvdt#Dd*}XQv2YIZycC8qFA*?J)A4xn*%zPRzxUwe z4~9dnC#%Kg_37(-5ANT;cYm>7{OprYPS4Ii{OF_5m^g`&B)Wh1?)l~U>}Gy2p7fKx zHYQ)qD|U*}x!31qcjH(4Kh6 zxoxp2-eC7Ot!qb4Y(4Ky_)z2OXk?ewiOg8(aZ@)h!5Fp$IG({EmHO46*57{poDFJ9kRFbt~JT@XdY zVD-VHBjT!lKn!1=udf#3&_JEcTzkj}?EWN<0wU(Rl8~&Zv&OrHL60hkCt zQ%lG(V(#GVYH2?n>L!@oXcdJDQ$Hmx+5VgRjul&<&bkPj0QZi`9yeq-nhOP~@4gAfM@ zTqpU7kI-iTM8{Y;pLqwh2Ob0f2nEFv`N{Da+o%+YQ_fa|N>tsG-7yPz1JAZ995hxf zMo>iDXqVuB2LbRlD({f46;fm&^j;kVpEnLH0z^<}5(o-_g1S~`WnQ5VrREWK5)>tJ=+GX3qbZ`y6PT<~o_$(s@bYU@YWQG4rV_{LdX_~*C% zn@(V8CE8Y2dGJzyf!(n-dBxKGz8#2cQU7)rok95Q0QA9!TSN4AKy@{x+8ESiE;hl8 z-eFgV9}9Dw#NedJv#PRLmX&#?6(w;pUoHt@G8!Z4vZ&_sWtOJ^7(_v@-_Nov(81O9 zh0?m0^v*8MlqMnq5EGa*&qdr~F*`muJUx5$?z`{jWljo}QYR;OtaCs6*!~1vd z$-{?FUp#;DyDuNye{gtkcznE10(--~`E+)Dd71Y!V~lljesQirhVig}7|f?P0alaA zFfbgr&CmpQ4wDCW21f_Mc&wBv9J7akR5K>;`1SH&2Ul>rs*R1U{q2?%^@3Px{@(=^ z0KS!z&)1adWN-g_9~}SwCv!*2u{RL2kg%99UtX;$6)NMnVv3)gT~-wdkg7MX5(3K( z35bHTo13Sn^Y7m4Xo zhzguICM3rW0Fml02-s{)A{GGhj$Rh1D_(=I<5b7@k%-j&iCR%C44{;6nCr6~gnZJr zhynrB$OytD=!6AG#DTW}fdC4Npy@Fc1vm-ekQgD$A9%B5-nY z62!eI=?#YCFbKmq(MlCXJ{*nGG)0(qAOxW(ioSXFY`NO(A00k@_S}NY zsz!7KpYct}L3P?G{-cD5?5?^^+Y0CaJ6X_VfdOyal) zh|}4e5ZMYKkf<^%*Q-qwy6N?F|KNDFT9!o_nouL9n^Y@p%PNVIo15$Xy@RWp3tLsA z;pk>M-P?->qyC9IDXQwplPB}p?D4~QKYag#SEsLEzJ4*ixtUJ)kbx_XqsVA_`QnAr zdN3I74<}E*{%SQ}98ZSddi>aMQ7mUkjPE@@IogYl4#H6%`#m64k^=9TZ1k@hk~NV( zUVU$hF!)K?DdE4H3eZp`*3;Q!F3K&a;PnCq;egY>@C%QA_{l}VF)I*62SUPHg|E)1 zuP@WdNkC9o)UVFxB?A&N2#5nDW+#L|%84$V`s9mO-@gA{>o!_r>EQf&185MGfDjS_ zi>>b89qtbdK}N(Z$e=H$E2e-&iFZOay#o*-4g;mJX~I>#K0W~j zKoR+@0;Q21D22*s2SFhw?C*ui#6*R4Vy$xwCwK1(DHDW);Sebb!bk)V$!G&eX_gO1 zBeqRy=xFr z1YBiZWla#USU^Nld65&TAPmAdDynKe-vmalSF5C#XhWoFlcrT^o!uZQQnXGtAn2G& zTjhD4=T(+xhzbA}%jIw|e)a0ry$6p>u(m9ubPz}5$sRm={>7JHzdF5m_ua?i@u+7rKY7Wfn)rPQUPg;?PjQf4Ib`V8Uls9Lmdr5FS8k`)D-g|I#eAth}DheyoC80$n zZHd&DD>p*1L4O@}44^gMH9Ba+2z*h^Zpc7w#%Ntc+q3*-Bp~2w^NSzdpCo^{O1Tmc z5gY$-s30m&c< z$=i6g;pT`)3~IH`9TN}eXnIeALa<+p?fPR>oTP^8T%L+7Nbck z)uGpBEfBJztQ>=?J8AnSEr71sIP9y)iHM+{uJa93q%}xEe!=S|XaO)G`ugpDI9$tj zB>wQ{d{d$%f`@i>pATkR2q-POe1|K6S0z#m`0w@3^a0naufzh&+ngQ+1&{nDF-n`Xv8hOwtJ-2n5 z&f`i)_pwza?3C74$}G*9rLtCO?JCO*7nfJeZjkgA^Z9r@a@G+k1eIvy_&!K?mM%yMOBtsnRK((I$Wn4RD?)bo>$iW^e3Mh zMTf^naTv{J({!@|0V1@{DW!T*n3w>aOM)Ou=y2FO8VyFF=^4CpGTIxD;{c3yL`YcI zIBHGFUOcx>c=0Bnj^5WURmV33*jN>y(GIZ9!D+~$F}^j^+AK6PkW`05{hbevU;TIq z5KEmZK*CaS@Ut&Y|Lwp0ZD5@2ozzQQQxrA1QUyAF0VP-#oB3;N*wCXq<_xEZ5EAJgLb z5J-z*RF*r(1f&GWC(B00h}f2_ylnN`%{c&6wNt%Ta|H>TbnANJSVSQPy3@!KYNH7N zWqIWsGW(Wb01Afvgv5b3U&g8yR04wf>}I{lp&yebMQmF)o<(M=;WeTFI6(5vngr1~ z%!;a(IbJOgPz0I7S*riT|K~sa>_U}lk5LIK6v?grFMjuvz~FEG@-cC)kP!(P2#G}q zo19_N+oe>~*M+&nXe-M73^YFD9XOQ1}+aBrJl&!akOg!S{UN zI_QkN&}IhZ%SND9S`iVV7BZTmFp4M$dtt&Xx+nqA1c4xsG7Rior8FUc(K=1jxR;2C zt*o`ySuUiq%$KiDuckLe;qKmj@L&JI@An3SKm3<}`2An{{)ZoY@Fzd{(ca!T3d5|( z{HiLWNK}?(0BDT<|1;Ae+l{NgA3(f@%S91g$OR>%`IgzTV60fGREBtSILV0WXtZ+GA6%;y{Tu!gEk zKU8H^t-Zh7@Q!=Gvxl{6Rb^%Va;&Pj?zxb`BFCA*?iajDOE~-OUv%9;ZXgM33jI&r zgsE=GeJn1Lv>kL5evSWx;!8CW^+~#(w|t019VO}(qZWZ{;A<~hRn(}2pD_CYDL#ey zetkwkjTi#K6g`bytn0>&qjS#IRo``5R%X_ljWyO9d~FavTfVlo2#m+FRpH!m(QL)t!#C9bv2*O zKKb0xa_e4RYz5{3ViC{}AKW{( zyWRC>>!AfE0eiLWfBfn52j4h$;$K~EZUzx!#R-|9?cB1(_usl}(TgylAORurFo5^b z1`64tP_835bSy58jYWcy&ddTvz#>>R*27`x1R=SBW*A2S3YI7c5K%j806Ne(V>sF{ zcwK$(!)c0`#R5WVSK=-Pk$TopWs)yTB8*4?A_TjB9Gq}NAOvVw5I?a0UR-crlKfjl(zV9&F`hBm)8hgds%a(QJFq!Q95+2?2XX zJO9J)fBKVG(BshvEyTKh^o&@a{-b~TuYcuhfA!&vg2GVt37Rb=d67}#!4DLiCcTD} zOAZ3j)|ZeR(S^ty4Gqa$i-3rpg~FcZEQVq%iCHA9Ef54S3L?Nh%0Jo47y=+KPR*0;Zr3!8FniCtt{=ytAKlgF`t|vno6YvU z_da;?_FKS{^xwmIbr&$*pW^km+!zgOIrw2J_P0Gg)|ci0P(*i|to~?Ar{%vAWA91JXk19` zFr6XE4g{#ZI*l0ZttU$Z2oa>xVbT;q?#LnG)H>70#t()}KMoejSR*2X8>^;v!|2?I zh%CJ8{e0H0x7)UDmW$QXXU|Sg?(DkV;KtdUUcG+RHZ1^-j@Rq%=6Z8+wSN5AoS$FW zs`~u%XOEsd`s9<(s;c_z^Us&FWjE~Jym{rEeDu*zkC5Yrcbbcv?e)$xhH5+}9^ZR#bkfpKU;GdaF&oFGm-dI!rLnDj`;2FBXaquA!ML5(#NFsVj;R*tPA*!uOR&gv> zVm3g1??(?_!d9b#;2z#NURKbJqelx!gye-0#0&0Z@!$OJ4}SS;e^=z`qC(d}%#KtN)sb|ZTs0|;S377;THY=8L4#Riw7X?##@Bmjt1jnb}1 z`_ad*9(?^&WD^jd^U6wuc#H!v$6#V8`zJ<;2LoskX*~EP zv6u+=!oqP!_hiNi#PZo310X;$1`!Ps0T2s~&~#WgZEM>3DCE7b>&A~x7+1>`uh+xK z#+VRb9EP4uy}n*AAFo)zIp;jTc=_sPyE(tSy1cx)yuR+;czm+j_1n9rXXodyfBx~$ z+F4s!6HaYHLh& zce{QZUcP>_?fTLCr_Wvh!mBrLM)4wWdU|sH=KKe*e)zSoeD&4KSL@Bj+Hj~Gq42zI zXKnlT<45nj^VZ4nN#755&Q2HY;XPpzVCe#I5i}%l( z58u7>U;XYMvn(0d13IXG@YAPPy=kF-b-D3qgb+lSeT70ie)#s2WrLLwk#H0{BKYG~ zjnWgf5-NEJ!=6QqbiM5yqmT&(xroI5sR2CuzVAcjWenhOBoz`8l0kz)L0u5|x{ix$ zgH2l)L9iP}matkG6c?i@1_;1mKV@K%%7Cpf#^nQjSx^ws^qn6@WFdhNA{p;2?K=;b z7aw&VS^-8B1VKVZv*q?ro^Jp1-}yKH{{Qq_0I$LCm@6lz|Lo76{~!Ldf4ZinV?ZGB z&XB=yxFZmw+4f$*mhLqG^rL_NdgHMbG+|vY0>pI+f<*1}mzVU-$KZA%9+USI&VvLH z3KpUCKkvd zgu#Q=$^iKdGY#!y{y-tHnaNavuEd*m)qTTy#{?U%m!^>6(0e0g?scG7L#lMjFCkAC;R`r*%h{++MRD+4GT&%+HB zDZ)?$^p)UR3>fEwl9w2#I#VpMoE8pCNk`E6R;4RQ2n1*ejPHNroA3X@cb|3M3rW}{ zj6FCupFBO^jpq5w3-%xu0gynd3g-=e<4ccD7xJ>-ArKi7wx7MYcyZo6K5JjTxuhWA{t4#aYxb+}#-4I}lw{V)INcmK_w{qVPc>uZni z-QQgG|J@(_f4}#W^8t@~CI%s3A`>Jo6r+=&?XKsz`;bt;Nd|V#u_I%{vF=dBdWZ}O z8nQu)kc7R2V(5m#0s}xHplISlIExbFft|tR4@n#pt%?epN)ZAA#ihmJY)ajsC@28E zRarAuD+K7*k}in#9WfmS2!II23xZU3GUKZ8;+u)Ks$05n~k0ub?g)LjkAUM4eF&8-l9 z_1=5-^Z87eM>mQHkzw}2%mRXJ(VDs%M+b-(H#b#f8F9PY)z(sFyP@xfVZGUsG2VIS z{YO9jdEfVaxAQD8j@BAC^n_^8_;H*yv$La6gFy%a7i9dv$hV>v^+0njhCEcOU)ed*6Hc!ykBF zh6An;0l={MIL*nmD+rtTD(|5Y46#U~17jfh0qUD6uSCTjevBz-W)e@n`^E84#FddRfA9p{4y-d4fIWdV=-++ozA*=7@QggKO&5GP8OAAasm(>0<@K(us~J0GX~lS`eBUK zFOX=IOeqYJ76Cxu%3@O!AsYmVwV@bXX?8sH0~%rp*E9I-Z~f|5|I7c+cY8N@An_13 z^`vNsyKUdUx;ST|x^9MH@FFt=05F!$U!R9PR?aWp z%olClHvMK0W;D^2I2yZi7*3%=(iGO&*YsVYR=_J zHtzRy3G988iLi@Eu^n`g2$X~!dYc~9h#E9VG36u>ljo_eG@V||It(WY>^46j4>dX{ zw*`-4XEgI50M=R**=*OlU0+r8z&$gEx?Qry*sAY`aU4hI0HGTlc_u?%1fAb(F59LB zf^i%WX&i^Zegab0rfwTz0^sF*Hf!h0EL+N@H$ZVs@^8ct{Fg$*)Vg)%nxvM$nl>_TC~8frat@lD_rz$DjVQ zH-rm8VrC#gqL;64t~UJga)(rf#X$sMK~7e)+7G|_mAC)p51wt&B3ci)>HUv?_UxB` z>1!`8b`YXEVTT9g)0KJrV2N@8FfaoG7z5zDcOIQBjN5tVpHG?)cPo zBWs)|$XSTR2k;J=0064MNklj6yKSU!ERb|EywAv{F z-a;Bj1X$1m8cP7;**hj zWMKvG-v^L=Yf=*?d+JRdscIeB4y^lSdD)E-z2dPK+U8UL7qB z(dp^QaG{R=C}>51&=C4X+pL-j#_hMh`u?K& zgJE<|3?qQ4K6!rr(PtOu*TQ6j8-n0P#kC`16;KzkS-u$m|RN0DDi)Rd2lgH$S}uJP{EjiiR39qOZt*>HUYu9e@KF z$(oAB<=hg5*gc{E=kf=$-HqNM)JDLEI<-{#2LOZ=7GeTGxH&t55!ifAzio<(7a(Zv=?IH`q0B`9J#` zzj@Mn%MOLnAO&zshZke7Pi6c7btfHD*gNmvFK!bZp<#!!qD1=NqB z?ujHL#A^DG1HiYrW zx&*c)aYe*>@|r?vfmnqeKwYI9e~2N;1m$IQUfGNs#M?{X^!Arpe`?5UFwlZ>t3m-J ztPWov6!GLxLmJirw!`5Uq0?9x^Jy3p+6AQ=K`txT{ic)Kqjv~%@=V)yZpdzLuAOt% z8umVHwk0frA`-T~4T(b#7Gnq@EEo|YG=}P`0>rO=`NO{Jyz|G$%li-Rw@qt+X0v9# zm~YqH`J$aQ^ZBCfy8iQLpR?y#J8#=|xjMRcdjIPBV!PeV+J$F-c6R2*ao6p<=aIb_ z5`du}+T~(&Zq_!=!TR#*qaXb1lbN;RQZaE1{7I+*ii`C2JjV%v^w(SnfT{yZO>k>n z78cVR3hTWHFdDYd|I&v~?yPWoGkCUS4Kp|gUaB8{^t|^LLBInTWR}IEZEM5B`n?Co zA3Qwz?q|J+7SS-a7uWp#AH5u;5wr*>%mQM_zx(*C1{Y7FB|srJc%iYi!*BlThu{0? z`&(HG7&H}nW(E=RwD>2#|NY{AW`_Dgpac$T{NDJdLAQg@e zmiUeLABuZL;1CgofrsU?G2tM9Xwh>xZ3~I|-gzdGcotR;u!f7{5;bH-V`$bkq4X!5 z3B%qSGNE937)Bx@Kw@u^7{{9M(Vg}m{Jr1$Pye&uV=;^dQFkB#$6kQq(U)KVV5qo5 zxcDpIdFLPg?cey{egBWH*)mupAJ#xx^vI*IGr)vE0thG!jghm3`w#!_U->`%qu=@Y z^Ou$z5MyCHp1HsOxBkMnzI>;ao63YEy&@9@2qMCaKLQwn`zmwk+Q2C>2c@n+pm?Z~ zkITCtL4T3En;4#PxqsBWNLqo2h@g9pVpu#7LqI#SWLa1QDr@`Ep|Qs&XJ~7*)zRsh z7j9=Q2sF)X+YQ&78$)JvZoA#oZToU?o3%vP_bznRd%nKDwzl%# zP2g@%WF$e*E#RbvnIu@pXk|?d@zO5aqZPw1T13S<%j0L02-LNtcL#yE)B z&Su;7I#e7B2oXV8rifq-F~@cDmJBdghJ<0cT+U|gV!4>jW~;@#Hgt4+baHaMTrHcb zu1w{e+iW+pMN`++tJklqo9cMEB&7Qf9K( zp>5lhwRXMUE>Dk#VW6tsth@E)=8t~=_g_B$=&RpY0QZ2*1mSo>Nt0JZ(DqrQ@VpL< z1x(jur!n!~M3IIsg1-SsA;1j?1pahY|H{{%JpGr?j9K}(?^p#e`_acQ*BzpI0K7M+`(0Yl>P6>s;ed*oD#`gxpJ~kBAz7iq& z?Qi|sm;SH+#do)EV5!)l09ir-=wxsT>g#U{?fnmSHE4mr|+D~)2A0=M+&t)9%|cH-MZ!> zoZzhR004evhcDfs|K)%5SO4te=WpKZ2&fLP9iOE{Ab2wiaPqRc5>G2RDwJdfskccg?&7z-KR?Efz~a+;zKV)>L(~ z*=~d5VhnAz+oq|)=BJSs1&(H9$|ZPND)+%mL^n=4&=vcF40}o4(m%*r6x6OsH{GU$ zihm9o)6Z62k2D2^moo8I5?p8eEia0CT{kLDa8#s8N+%=TQ9QFm`~+y)URIaISW{pP z6Zc41k&abW`MUAWld;TsQmo0HWE3y$bZee)oI-{XhOkt-pMH_e+FV!9QVP z3TIRme$?dOTdajZoxGx3Cl7?>HuZs%8E2fy=&Kkv9jv=9#S zvi8~Qb``1pySGmGZ~m2Es{OTzu~1@04}P&&T5G|@Z7>CdSqu^b z?M63x&*BMLgo6`F3=WTv_^9%sgg#(1B8WHwUe#FF_Te`lAT%I`xdYw;4;Ec4<`0QqW(w8Df-&VO zLH$Q7Rsbl(fTJ>u@i++}7&A~Qzo%Q=K~@F(rb~eNpsxt?L4>Nmk{%0dD}u`LLWXFy zoFl^MMzChH+cDEPa?`d#m9e&}YqX~8dm__~Lp^J3UA?(HKWS?q`1sRL>bmyKmzS4y z)AnP3b#-%ev}|Tgx9gb0IRz3#I111t!FphU#h+r%5HK&)jG@I0pOE#yZC0=PQ@3df z(csUa1ql11U9>HG-(m55n*caA91|_NluI9XU}9qWBYSY8{z>X{&Y1i{`la3??bR@) z+<7ES;Z9^HQglO=P{!ayyk|scn#PR-84Ahf%2b5J-V*{DGoQ`txDY)S{9GE5%)h`4hj z7!q*^g22MMEj6MzM`24(0AaDUWpF5t5Ez({P#DnxI1i42!;*Oujz2>n7?&t^=KtYe z|N5_g<;g$(Z~x?bKYp?G7O);!tg)5ws=;r6gG|IxSK zM-t=#SmK7#et>aDq2wtFiYFvy2LKI;8wY_+ILke#G+;+WfXHFRZ#rQHHM}37EX3+k zU_mfM0@PZ?(lVCBjCyoTFboswAxzXjB(?^Cq90HINUY+DfhH6HE5;)oEtXpXYm68p z0L`p5m2KJ?kTKQ*Qq|bOdj@{-{MCFpH&taS`}yZj=d&3wZ?<=NR8jpwH(FHgN-bsN_fH^#f#&K)9Cyt z0`vLYRd(2Q!VI1Pv92p)$T?3SRo%?mmc8e3TrL-usBW9b4Z5hdV8~2EH17t zW=*qMZ$ACxlhZpVVC==^)r(gb?|<;6=PzGgzPbGVcmKp~u4s30w&?F3`MDhkop7kQ zM-V*%IE^~j2xq@=I;WaF39~2wA`uHq=PUnP(oidIm9=8E0kDPf&K$qu)SFT1P}nWFg&=o0_j9LL)}r!U-|If(?7a!;lOkdK?Y$24=4lxzJL4SX{UT^zhwpcuW z`LY{2wAHxTlCfmSvkRH0?RGPtFRV3gWZg0)0%?w;rq{$F$kc)Z{QX5i{jv$YEc*%J z-|6kyOVC^On}U=@XsE#AbkSrV0lSwCjEcG_{nrO)Ycr}wEhSGLo_>tZg!&EY{e(9- zeOw-L%!xzBeau%y!=t1RK++TlY2#853`bj-%94Qh4v@$g0IaM*MCZIUWR0!sdK?F9 z%zU-*qnjNcEf>r4^VfYh%x1IWqocNInElb}2oQE%XKm%32P3=fZnNDyfA(zFwoG!D z?)uT)xqH`;Jv}+u?zZ0f)00y~9>#$U?YiA^F(2!CyV*J5#d5KnA75Ww-95Ye`st@Q zY;InCw!rIO`;`w`JAe!TJ{-#;1OON|YQZRg2&$^1dYI&31SOVYsHdr)M72d?vs-kq z>U#-$z6eC8oDjjFGr0Nox8D1&|KO*cj6@`aEQo}Hz@CxNfV7o=ayBRKMI4g1*#F8m z-u}Hmd|H{+z@9KH^N$ObNw}fm%kSN*&{+Ur2OuN?Rf)(jGa)al-EV*AollfyzxB<(`)_}J#^*J46t-6b-BTafVBg|y z$Cbz00677JDBhEIzJGIh{(>HyfW(#&gvAk>P!B_dES^v**nIe?`Vap4mzT@4sv>zP+VSp6z}=Xzs733zPyhj$odud3uCQO+w_ka*B3glj)7P2(wM8LekP$o+ zk%&hm1HeIvfKU}y9Yb7|lYPM`K2Z`W99oY6{6GW0abwSr=9RR@4Z`u393AT@Y)sm! zT6j_zpBUA+f=2>CH4y`+5^4q^9^IvBMCIgU>Y-W_6b|~)0%a4+lw&0+ps8m~Bh_qH zi=8i4N49ROdM=0n`zTz6HNh=ap?GS zCq!?Mu<9QX5xw)CnGD&g24aj`T48Ogs;;`OYwHRCyIpsDd}I*cym|!)N5{uq*Huu5 zM9^Drz5VR@b7r_%-_%uARn_Y^uP?8zmdk~ReEjjpqjRgp>cz`f4DR60wM&47C|PeCLkg z0lz#LxrnBY6mTd0WlHHV?{p1)Glzvu7&Zq z+WaT~!TA`fU^uGm2Y2aa1Th|KZ>zeprmbhIMSXX1_T+Ry zoR;+_Rm&hALRDxWw_pFpFF*O#FMYrs(F+<3OSeHh0b3ZYcOkODK~w_j#WIA!Ad*Op z1cI&~F{F}(f;UIH9ceg1CrlFoN;sG$N?6>PQw;(|FA)f(Rq-N;r@sfykjm`@!VY&K zkrw=P0U;!HtPA5oP)&sr3N+>zF)iD3YPyLUfx#fm7NM$ySPB`JQIsZN=zL7mTf(Yc zELUbe)D5;r%cEnUicG^SWGR%uzBzvbM2qF}X1zu-rzgjM^xZ%H&aeK;qM2Q7ubQTr zEoR+r7q$=>hfzTKZr8RmW2|%TKrCVr)WlGq{63MPD7uHjwf8B9XyKL?_FjsUYX3sv zU`#xLIJ=U{chWsYVf&XY9@)sjMCf#!Hp}>c@1|)RdpJpSdY9 zXc(JjQv_hrA4we$3`pKSLX;c48#5V_t)#|&1SpVY`boIdVJ^pgZoug{j-1m2d`hfIawW@p5A$I z_x`w9pFjWD_?ublzVyMPwi*aW&yK=5gW({6tmKQM8j@O7GaoZ=1lneMATbI-LAI1K z$a}q%jzpSAWor~7Pu$;Km|y!&WBL0M`%a@Ec(iA$nQve(2J4M67!`=_Jl{`vGxFBqQcft zCn1Bd9%cg&N@P?;$NgU8*@_GtPJatb@1r3MgkeXcuqaJsgC?*Ol!O#Bj}Ujl3%wCZ zYXmVfN@50y8*3NoN(R-Jx)HGC7!K&-K}cSI_@v8rAr*{-(30YQqD%4%)ZF1i1)%06 zgyVt%0Kkx~ns&CVj@@iV?Qy$UF_Lr0K;AhoK&AntAN}~x9zJ~3E@p4uygE8r9Um{h z|7Sl~%onCN#?ri*d3N2dqnNJ|02#+&V(AvIeNa|wDjD2Gs`GXLFIXT5-M*@jTOM23 zxY@%3ojlB6>C{Qt)nqeAovm!486FEolM|5EuBwS3sJv+K( z#~vJ6ynE;F*{K(h&35a(d-3Y!ZoPT;t#`Z4?&kVx*lpf?_Azlkuf~(see>%dy!ZBL zT@3)C{2(MF6ZlT(EP2QUK|%cknY!zlzL?oSZ7`KqRHRP}_fifaJWxzHe3r%X@LRw3 z)qnPgHJ_qB)h2mjGu{&)Y*U;e}IKmC&*eDdkb>zi%A>jAts z!j+-L%6{<9oo|2r$+zBraPP=8=B5E>a71BY0fP|MZ3zT}lEgJA)_O!k683%;5dhCD z3}NG)C^n=dDkv6@78W8Qk+8WbNX)uS;^mm)EzuayNg4na=4j1_JvfAtwS>T2hFr7L zEXfp13Oh+d`iatVBT+_35kgUGJ;4${T;2-+fLfW8jD0=zPgyf(=^$_*rH5;ysImNH z@<-&4wtpO1g0r9@O8!=Ig=UD5oHbP0<>Gi4>SlE&WV_Lm#ctO*fp*sRLkEECoAsZ* z`rdo*zgM?)KlVpQM=zg0yScs|#@-mT#+)3Vd~*FsT~(G$KqNQ1(A8vSWdJV!YX1|| zmXV%=ODC^D`)qAZta5FnP$7!pvVToUq4M+e-oz7<{wWlXRsoew>9$Q-7bIH1p7E_A zof43y(4VoWL3bY1v}?AQeD_v@}6&7eQtYN1KblcDvhdcferC zh!+NKnx?ijvnPVOZh+Z)H*03rR_yuo?9Oi2FHRPNA5iG&)8{8=XP0RT3J$eOBc2!iJ%h!7}v^{ z>o4NOrP79iTTlJ=tqDNNCem*A&5cO(D3%d zBSRgs3w5_h;-vrb2M>SukN!lwVQQEWz=*gCdh9PgeDb)(fzXQ&+KE5}(NnaD3BtDf zWEeakR?ri>w~p+?-@NzNf8*gz=Ps`MZUAs>MV7Pn=y*1-eT_ZArm4W7kEanv6E!Z} z4L}4Ui~_(GJpdyT1F(ekMhtNaw7lLt5INem8YPKS;|1boqhY%nNVW(KAy38A%Aja$E!n8}fuDRhsx~sfdc7IO zp|bV7X?NWYY)ytjX@e@%gIAnKHQhBLABZLe{h^qT@~iS=lG*)-?8W`_y(zf9uOSYv zzxAtd_vBs#TLN@?RN1(s6mE$(}*sBO{rz4xOv#t`*gU$+ffy4l{m_s;vyyZ1hL@8;&Ft!6hj z+oqXqHk+!h3F-B#SKV%Rb#c8|EWKlEjc1T>j*|1Uqh>yDs>&K`nx>u47O&4=j?T69 z3-v7s;jy&C-dfP_V!=?_B+OHh@9G) zKnTEPaG3yvIUEh<5x_E3WCgZNW;usP%Z7!*c5vVw;uXngNeG3RiI9aU9#)LuR5j9Y z2*zbhBH&Q~kis<}5SPGd>O~~Xg-1k=W&WrH4l9l+DQC{BqX1H9KH8MJp$q_`f;cGJ zhVK9ojh?|Mg<&4(4FGY+HT|iSMJNM>2*jb1T^T505|+VLjP=t={&Hif!XjDdFhM%f zpi*SKAgC0gTpGT_q(35e5~}VCf8ue^5(_|8O-?yHtcye>l5jqNG2z&Q(K$r3-R^d~ zT|e|U>zj5qTP;_!dAl37+ivsmCpUNQ-dnC#NaP&Xb=B>hbH1`NpD%X1U9z7jwHuQ#R!N@Rm%LPXHlQD##^`4*Kb)SORZZP4=Ej#=TD!#eEFIxGH9MWc?y3zCUtLv*_fJm8?d8L>(|7OB-hFhkw9wR6&@emk1eO%)1HCz5Rs@V3qS=#t zQ4=+VQ*$ytD)l&9Sf~RKO)noLqZmNqB1llXOnhS;xHo_EFMZ{cr~lo2wYYn7baK30 z&D)B2xtu?_v-sNEZH;Tf5g?q>#Wi&ApEduR|HW^Q0)%8OSrbfgs0hgKtXx}g(c6g! zjH6&!&W*a_A@HjZ83Od|i4eqDMC6^;KMN2LhQnzCRlJBH3J1!o?HU6pVVlZerAWXZ z5l?6$u?QiaK`cNBXhZ}}YC^k^^yo#XVn{M-(ieeGa~V$# zR4If;V;^!FAmkLod33RD#KKpI+$ada1_})#2C5JN872dUzz~w{y1{{|+xlXCb$NYB zM3+~Wa&-=m9@lNn%plPB{i|0mopa08^7*r8%lW)%XT#9<{WzPM*=**$2hqbcCit`W zI)vRlT;BWb!0<1P+2R?fQxxsnY|~Ed@zhw*phfaP{}d6EgD$JVk=u-i!sC87mCG{N zN(QBj;8SaUlB0%fk4%Vx#rx@)QeYEx-%vQDU;3`7fsaSXAjYhifQXOBO|!L?RK7B1 z?0WIuITp`NQ_bdc=f=%;Gn*~O(H);0A0MCf&aJBE{QRO>%n7Nko7K@#Rlj-i@Gf$4{O-xqEijZ~Bj)J-xZP z+HH3hXt&*7zIkO0v<4sCIl6ym_U_wf5AL+qZ)dG#Y#ir(9K*JZaV&_5FJMaVf+i_z zpBCOFU7HiWdE!7DR6i6Ny3c__KiDn@MrT5(!lH-S~98B&UyXn+hvARGW0h|XanKS=Qu z32+$WN0{1-a2~0Ph+%VzV%~y+j(;`z8jUysi0g9W^d~?;2*pAg$5(EUDYA#W0u*7@ zcz!zzrmR7hwSxCB5k>Jj*?c(+lre>(6QF7UQP0?nZG=4%|h z8f%R6ZoAotPI~n7;&f}FaOMPMghMUx1+QDsD+%J%Psq4C!E}IWAM~wi;QTpRcp2Oi z6Q!mjQ4=gnIuu^nKosqRtB^GYD8~lxSteRP-H7F*B3r3=vif?#wJV0 zLdTQ$8gGuBViXCR*@ws2sxpX`HR2qI^xbY4hRT?^X@}A6w%f|qJe= zA^T>1{_cAp?7Hswe2)~lrvmr_y zVNjAmpui~_f`?$Kho}fE5fLKLKvDmu1`KL&1~70KMhgu^3$sLnt3eb9Bpy+jrzx29 zSg@`d)j_v%Jfc|lwvD@{#aU7mLd-m?T@3_&&kfOja^fx!xwYA&r&KRodihIxE z)#gdD?m#ak$UZLJivIXTKiu-O6q7T-XxY0(vA+0uUp?sGq=om|lJYsp{*&~ZO;I5= zO$uEfj6U6_4ghjSvJjo(S(rXzyfonog0j-y7~}u(>1u4?A;Xm)alfVHT_S;mw5|)Q zNzvN6s>gm9uCBfJrm74XMB46lhzJBtQ=gokiOAK>&7=9_tM&D4KA*L-&2GIqT7C4> zmk%F4>4&ban{gNkXc&gYVsUwOx!G*Ri#52Mw_pG2R}p!)+cvhnbLTD)u;Zqwo2u%o z?*837yWREGIk~>6+1*{)`)Ad1=H0lhY>E&whRh-YvnRxGA_gn>MH4EzJ9#4Vykv@K zW)X7Ys33m6rx11JpR9gSb%7SA0006D6LLeSwy4gB000wV;sS(pU=~0~uO(AfBid40 zj>)LOl6OPrwG2iI>ob+X#CS_aRX}9mY)}^hA|RpKN{d}eKGGO8Nck5-{6S;V1>C3B zC4zZ;kf2s$rNKmrNO}zvi&1lB8bbnrxb!t6Yh0F}{reDjz+@*(BCM!RaT=G#Mx(6g zRS9DX5-1)>mSRXT!=giOz;)%CmWjs>Cb`(YSgJb%ILof`oJgqfk=b;ep-nQ`o^ z$`FwsU1HLV_8CaO7}O`PTdqz^LSNGbE+v#K7dB-Ap=)*gp2ok{n+oKW}o!i6vJR<1^^RY zNFsc3aV`j^sx6`++Vwp!TOuQL@9sVJ{&KUan`XVf5rgl)_x@(Lt((?byW4el?%a9t z;`zO^d#_)*M1Sw8S2c zmdnQ4XU{(8aVKN9tnjF5?;e}8W4mm8jbwpEJd3vhuA<4M^ipbuqX805X1%LZ5Ph~{ zzSJ^?+f;9+p<09hqP(BWL)0!yCp@cwFmMq6JUk2%`3l6kZ6jHI|Wk}OMCte-3$q{&mF-YdWsK`^Y))jmda zkM2~V-=vtwJXyJ8Skgv`EC=tyMVv?}0HGeWaFNyXkDW^D1N2lvRL3$poD!9Pumd7} z3Ym;SLtOxpB25^#bIQ|};5#esxbiDDMifhf!Y`rCM7+$RLEQj4344%A*YCQ19Q~zd zzPh?(kiH*A*CUx>=$ZNQ`ogpG@i^5$B}Vp0#GbpZtEx&zUXV2ErsSvX&HEHur{8Bx zpIkdtqpI}_el81XrmtukDDOt=YENIl-tGFlf|;goL~jb~0K!zO6_O;icv$cw3qvzW zmrCJOpu#tpZI4M`_cEBb4_s@3$`JTu*l7@;p^t2J5fKt1A$sq(-42nKt0VN>?{-7q z8-j|6g^!Pq$I-3V>-log_nozNzFd)^&35YnbOR`mHmMo5LsN33kCoFB#GW)u2 zE-xH$_ zfxr_nVd%C2@t{@tqC|3MmY$*kQ?o096A;&(bpHaJpASCAFA>j>lr`rL;*N0wn8I zzDQnDB~JWjQj(mh6#XZ}FEGO(s*Bi9Osc1dsFqKh8klK4fa;_8nbcJ}RNKW$orDNV z@l>!MzlbrV@*HV(A0S3lBK?ZP03iDD!RJfV&D{uUAOl+V-^v0WEP5Hbkr#I%O7^s3 zrxa=ePejHOk-QnMTC50Y5j_Yn4_$Y8b+eOhH}bCQs4{>uI!6@tf9I}u0K&`|4_E~e zVGd{e05h{^L&TgHbiMJFJ}8H@ZL{z58ZDr5)M#(Sy;0i-A$ zfCwMy_V8k6&z_J@PEHVTySedOA6D!PpCnZ=(=vPnD6@C>S#3%!_Cdw8uRq|i}7Fli?<#>K3Xo1uMJlp>b-ZYovzEPgt|JtR@E(Fcl9inX-cVz$hj@@aEBj7lU5Ql8 z;*?Pm^NBt!&2^mRI1L#0K+qZ_fl&Oa1w}D|s&{9^E=5IEc`{EhV-+OR2DKXfi)0}+ zHu;$Po$UG2JSc8a`)>bR0nmg&qEsq}Ov#K}`+@tdsSyQfQJEqdDDF#$pXuwdJ^))+U8gk+2XW)ML`NcP3c7XjA$ez0|At@Y#B_r0ks zAaAyt_dfWb@4Hz$ccZVX762-;o6Y*s<44=wcGfnF<-!_kt?72%<;6w6*_<7%W_7h} zOhr(!YYp8$o!?oRlLZ|u1pF0YQ`JBS&JP4+iC97cQD9}M#;qJ(4C_#r=R2}~oRF@J08GX^ zC0fx`3i>0aEsPLiaza$MOsNpwQ+f0Y=6^*1Asnq5)B-4=r;8)H=R_hV22}q5Fk?Id z2vW#6Bo!s8f;3`vRw^hyROz#^XxeH{wGdyg*GE-@MBDAo*l?~Thmy`v#~Y?A4mzGp zFRG`+`T(t3SIJxE=yKkW>z(Vrgs;gWUqzz+rgs(aK<0>nu1kq zab=Nn!ZHd!NjoOVi##^LUG;ra_#wi)OqJH;mD5wGJBsAK=j$;W_z_JKR%x`m(A}v! z0AvgTFbf$%L$B+2ZtEyhF*Q>>{-|WOWvWUKG5Eirc8^Swq9ad+j?9PZo{0 z*pqa_FwAFlU75}^i-b*4xZH*%!a1pGSFfjV7upGgO09Gdn=4Z1|dLtHMzF0yxcQjFrK%FQ$}nKF4!N*Wh-zea6Q z`vP3jCpQooM3QQb`~4^o7kYBi7m0wLzbnH%N`pk$6w)bGMvU!XBADKl#+3qN*|4P| ziI65b@Dd;biy(=Jb7RkL0O8$kW11ORBkTl#J%`PdL|0Hm2TmCUlgnG;d7i$BYMipe zpM&IkS5K@VnYNiRK3OpdyCgdbMf_8eh)o(u-+WQu3Z;^;ySUaCm+rv>>Z41OCh7Yq zbP{O^sLZw(0L`ZUgukY?OY!7l*2}&`M$cfV&jtV}PTvvG9c4MZ2}Ku7hJXyw}T{LbAw!!WqPv-5r5FWT9BJ{yN_ zv)#DS9WNLC=$<@&^7D^>zML)K&Y8hs)zJO3*{U(8$Me&Z<(<=o!Jc4On{8vTB1Zsj z=*NCE)>M^6_RKzYeoFr+g{3mi1D(!sLB4`@w5CSUT$QsVb&mx_F?}luZ1PkUXd;=H zriC2bP0DDE^7;^x^(daFOGAEpGF))PyxtKN4GBE6bwu4RMOKxviSlK zvsuC*BZ&v^uCFie+`aSW>SnQAc|Tg)gvB&jy>iLPX?FKnAU$nw$}_!+D}KQX_dnd0 zGAO{i(6|Z1aIastLc9Ee-wr#ZVo+G^(Mqs+n)X|l0y;pQrUVTLkj@E>rbfd5Sn4cU zk!uLG-0@!$g>>8kY8W9-FV0I~)2Ncilxm~_N+*VryZ{lAz%cfRX1-YZp(kUIkbtVH z9^J?y#u)EMTUUKI4E=zB+uiodcfRua{PnDDudc6Gt0OlKtK;Q3cJu9wnd_>a%@&K< z{N9~=!*+8tZ|>haJz3!0m7N)0G-lqq2gm04=!9M6`?VFc;)xh5MDgsHw0ts$T+#>= zpGKySUx%f+EEq!YQreIcl?j^MQwKXwtVTogjAS2ybvNmxFXCB}AgNk7DH72F^MY?A zO?bGNb(McmD@E0!1{M^&K|tb(>X7HXj54M6ix5yo!-zeQ=KYqay#NyKSz}pUseO@* zY02G?;^J_bgcyG|&vfmVM6T9gT8LYeWGa%-u`w;8$wk*GNrI>fSE79bTE&xt!eI=V za#4q*1TSa^W~w(QnlBpc(FsGX1|#iHAbz+d?dczGEY(I-3DHMNGo4uiAgL3YI?s60wEnLnzKU`|VS5uQA83o0_ zFp7H^M|KVax%O?Z5{}ef%vMJJAu0O|;^|gJf0+<4`K@VYQnRW+qRoK1U=70Atw=PR zwZe?->$Y*@KwtrJ7)NUiB6fX$_vmQ5+02%UoAu4Td-uj+yf{C9aR1@u)z#^fqwAqJ zWaf+I(J&6fP*wG6wLCgrb-Ug5*zK+^kLJsFo~%w9zpSLS#N$Bjs)kiPvkt8rcFc@% z%b%FHMJ0Dae=JI{l?*VA;9weggovcoiz!Hm&&AA^95QJwVoy$1rG_AXpE`u0N1D|Y zfV8i1Y%P^~VfJiFkdop7MXDmttcE~Jen{6~Ar(;v?q#DyH~39YjwI8-N~t!20#bHN zdmlhxxg3}*qzJUnrA?wHi+(|gPU$u^@IxOtU7UzSiwN=)vL^)33EpG|D#mAXCEtn}2LffwI8z=!s&|D5 z46eI-=lIcs2hV@w|~It`@|_38WAy+ z2p17>*=ueZ*ePLD`83B<%G(oH2KkFJnS@dSxiAfa-ybkCH7d469)*!$z^oD3O=Jf2zXP(`%--TG{Kc2dKl@)fZ+T+<-q*4TzB;*o_%BmxvN$O6fxlVo?J0%D$y zfRAZ!#{!5Y&qiVm%tEL1k*xJqViO`~!zFGbit%(Qf>hxM8cjtINxQfwW=Kz&&Pxgk zCYvfLx(M16Z#NEN5+W(UHD8n8AQYLQvXQ;3r|PEcYkFwZX_!LB+3Z(SF5aW(ClsC0 zHgmu`wOksX6DW`UmuZKT@3p50`FvVQoIM>2P;?|keS-rkrKEFa1DL!p%}i1rm?#|k z6gs6Gk?GTNGfXIpMa^FmMo?kw-5*`21AiANBKrX#Hy+)Teb5UAcXQ8W6kJCTUBlx zcbna2vtBF~H)P_H zfu@q$_<2JWdG9*mj=)zH8jBqFb4*rH;*$vhivgo#`By@P!=^xzA*Nz_K&p`4RGDXC zfoS)O(^U4ewF44{ zbvcM}bx!mt6yd3e|KyQl+!!(J6Ou>~;R$@(RyWs|bz9HpO9b4kH(l3}K?xQ9VKG2t z?Wu1yq1GP#_AZeE>i1^x;F~z8Vn+5n^AO}z`s{T@TP=9~84ES|)FwBNCbX{^5JWc~`{o~x?N6354APqZ7L>_=qPvRXZB zLycWP=5G;<+tCEW7KlvPP|A>{8W6!d2Z&Wwhtd!cAfmqSyS|&v8$Y^FUVMyX-8dRu z@VZ{F$6<8diSTSTANyf;_w4-5o8#4TyWK8V^X+zB*VY(sNh~1=vS(oDMlc2tm)H8riM&E-p;hi#7NIB#9^9nn}$bm z&z>sbKCb;O09>8xaAok4xa?8+q@?u`AXaKc$1Tsg&H|?SxP4r4P?O|s_&Ki6Ku8)! zgY6LW3ULq^pBGg}F{~*b=rGG=T#-Le8;Ndr?wqCzbiNYGtE-yzK$rvV8vqa>htTsx zorxeYNLyF!tlkVg;e0lm-`rf1p{8!4{U~9fP%elqCpgMMLCSrRDMaKDrzaDj>{LX0 zlzf__D(o!KN{DGw#SE+L-TEwL!s2qtVwOQ7W3C)F7F3Z4f(;^;CRE!`t8mi`K@Dpu z)S6zSszJX-4SXF0ZE{Iecj@mb;}OzT)C_r{J*`ma%xLatNG$&!o=dW*8rngyld;T2Pru|M=o zKGdh@N5_5%=t%(6A!oSF{U<8tVn2(7xjzYcGw5Nu2(y71Z9DZLN@WqRr%47s{G0GW zr9M4%&)W&o8m~tT3k>6|Q}HW9*eVIywy`MPZU>c}&)Us~y6p}aiHv8~z~?kldfQ8G zBV`i7FTC_trK~N8BApJfh|KO8^%Gk#S|vH+Q*fd3!SvBNN;7$()=U(A%JQVkEyYGy z%t~w0t)g#|+ZBx$hyAn)HVUdOiT;Et0fb^@fd;-azb0Tx&O{i4&fk8PPv;_~dL*WO zBIyVPFr0<~A-jMC>;)j~4N}!LVg&#+!0525n%%B*&dpY<&34Dkh%^lSVll6)iV!X@ zFZ;f~zPeg2SIfm>=!Vm?)ARH5x~i@&F9D(JJCVVAPlgO4dL~3davZm954|NMo>(CQ zsP=Cd605cako^5Y>_U=p4v;cms(5w26P+d;A~|mwH$g9E838h{vhq!SRB5&CO~@W{ zLST?${iAkr(i7G5@$7-T^#Yc#e^4E#b_4Ez2LZQIyb~wn2;b=*5!r^2JRAA)xGh2| zP|aeH##_kvgoLFz6S^_=S7K`tq9STvC8kyuz&sXIP)KVnME3atV!1|AA7wdN{wLbS z$%-n=k2IKHUY-AF_lw;;0Vi4_cQhhP`ab6P%CsU(Mu&(oa*mp7+2iw&A_ibVk;a;N z-SoQ~kgE5N$S|{WuCf-qW09~OBtVQzd=X&h-sA}@b!8%LaS1@uUs+>JUJC!E@ZG92 zvTjJB(DISDb$9x`Obn}RfMkx-9>=_G;yw(A!Yd~gmJ-4(Moxx?QkK$VlWe4=s94w? zlK>xNUe83(-e-QxLZxz8P#_kEqK-DVAI$~<7Ljl?SYRweag8{G7;8YJs%u0bYseVa zv#n|(v+KL6vMA8)Iy{4_vVGs3zj?FW?uKCmkXhT_T(2$B<>kfc@zLewI4AbxGkhwU3*-X;`^AQY7=S|Qjz9EptvrIu%L(_?Q=|ms-S^0 ztrH+hJ|3e4dpuO^lU8qe%p|WHxje@=pyZ{rp;O`}Q3Sv3DH#?HMz(k5q|YiWGQAvi z_!FxQLJ^hbJVaGQ(SERN(lc1{(Oo!&xcz=&77$6Hm5G*5pp5ys3C|;)VoEemO_=vo zbD1Nn>Df7{5iKxM0|nwoN-$F1I2Gg=ArgVK5G+7`VJ##U0tp8(@Ac9se5;diE32n@*o)gt=O-z` zFVZ{H-^xI|6my)|<3QVILMDMy^cRS>TiF<3T3!+ZbpT=u?@mo<9pZr-J2ekefdi@v zO4tJh(RCK5rO;{6nOiVXLHi_W?;r$7-e6|SJx!598nJRQ8#pQ(EFt!eNCpA?I1(8$ zmWTwv*7dAz#$ga)1xs@jlo&b@g4>h)i$zChazntMB=%#ozEiuYqmC>#U z|K)i`C7`wklY*8sx#homK4kB9xil&DW)8;8G# zp=qocvjtR|B&N*5z*4w060G=>@&|irAjcAgACo$!R~3lh%=P- zq)Pw*K!$(>#T_jdXKMJg}PzS{1*iYcp^Q6h9^7K-92I8$KqQ7F~|LLp>rS*kObQ!j{owAe>so z%*=Ju3c}!=HD(x{HMVZ*`Fy^-{-LzY>B)-5ksBWD*Fwl?BrpRGmf*qGXBJIZKEh z)PjiQSVa6OXMNK{_dL0RHNHS35}1`Z8kG+uKehaSVm-*Dslw??s3XO+r)3C=J}O%I zD+DQmEs&&B|IgrCLha#*%3&9ETzGg#Rz7=Q0fduyOL$TwEv(C_3}zz$559qf-id<} z!X8-GfJLIOP#&=kBS%wH?PsD-`~m^uA!*87DRGyomIaEWaa{SJ_!Q}$mJOE?2+WD` z%ox#jK?+rB%txz*F$e@6!VW-j1AxRv+H4YoLVq8=l0s68Bi{u{!52*wdgE4c_(e*m z4Ao{%oB~)OzF(k4QkNz5>x*xu4?JTM{>I<6B^2%ZSJN?vB# zg3}9q8pSu$aeCRLy{r$)tHTo_OG`{(Od1y;LNW#gm{|b8ATXgAATlB%;)lW5Dxw3D zvDGjP&z?V9uWt~Mj0M2H>$~-CF`vJA{l*yFbvy4IA@DHJ=yqL?L=q04jcay51XzTU zV%PF$2{9TdMjtT^f@&*SE>T2%J3vU@Qb8ffa|8LJ*YCv+x+Ev`vwU4O~5R$LUdS0;C+bO=~jH+xti``?xG zbT|+J6%m~jRG@@u13F)m3>YFBV~rsE< zseBzrl0XQNv1n=TgGG=cNhC>l6pNvSHJ-IMYDjl$bC@KkG`L0~;)O(Ii=XORdel@h0QqI@QL1(UK#ngbv<76X+*J0JkC zzM*2Ufw>X#p$jErTVim7bh?GPIFaCLp< zotMgb&&I$ojNlnPY_~n7L&>3-GaZxwhzLRS0TRGZF99fqlWYKyOg2m^aFV!DhEGm+ z327J=begmD{lwrYr@LgK9AOmEvuo53(0irinApKwpjxm?p$QI4ezMDuI3R=+_QJC< zo~=kM@#Hj+7+Q(Cw!m|c6itK4Yw8`y^zWWglaLIHaqqXMh!{~a4<_?#KwFK}Y5Wa9 zo$raP2lj~IEb+{p)U8x&73(DepJ5KNWtfTRO_1WN5>*0ViudSpA5k36wnFi1X(dpG zOI390&MtmrwqxyROf+ z02k4G{TBfxM{y!=bJ~Rw07`49ob$wWYKWB7NHjm>k}%Vh!KzfF6CEz)118N!v6qMm zg;L4AJ7kqO-uPZ2K0RB7s<57la7@umR_B3e%0*!`D3Xt(0+Et=vQjL%d;r!-j$*-7 z;n-tw&1AH(OR=S5!@ly#$=J#vrKyZgfJ3VQb2XIGEU++wVw*}_(J9?UB`YV?p=&I+ zH1?rPJQseI>O56IsICAPND|I{j323JH2#x3fhgXXr8l4PRZt$MUCY)1Ks0&?C{iaY zT^1hOX3W9(~&^YcJAk`kIKj#^-j7A4m!A} z5B7$1>my1xW$)H7O#M`x2N1KkikExOQ6WMN`4diJ3XCY(`1R<>ZaU4f)s~S8LnYL-i zakSR5_rmO)Gsbuy(@xI2y0PMD+YRh9CxrRra_He3iN!66!V*uD+f496%~Gj zYR?#0*jM0+Lt%yHy<0+$gs zCKz+bUt*mVNZeLY1X5@aa|q@ayizVY)Ey||>Y%3nff7xjHV4oS?5$Ey%N`L_D;15T zz&pl0J1B{ib|xQbkZz2GN;^VN)@r6shWoWDH0S&Q%iK!3a3Z#GnHUySh$NbFl8!qM zEh#EgitSlzN$B^!MF?BCAb>zFkIOw`5MNnSSqpvaa1;wkICkp`C(JOtuF&Hp&!B)LI@BmfMf2F#P7e4On& zwP3YzeN+tJB(^%jk(30v=z&rMwKNnF<4(~NO%aGeQCm>LW!1O6ZU=GwQTZ-+rbOo3#J2npNv-ns1qvhEEs_VGozAIl zQag8wZ)qSJ7)mL3Wx!kP?pt3r_et-;$%>NcU+rj^*Fq^20+hEBL?{C=ldfZaZqdtJ zvnrC^OdU%ZB|=53+=u|^s+g(y6H7B+5IH{}5*Y&TO=V`Y z`F6V@LSsze5;8<&jN!Vn2v}83(=;7I-;d1MJt=hZevG7uRcL3kAqgOm4@NHnrjWXw zhzk)kRd2=|U|}uk1;w=95~qtlXFD~8p~94enHT+>kK$5fpFR~JrSBjkepCt}yqm_9 z9udZt&YY3GQK*E3S3KP&oWDM<)QB2l{G1?2r^viQ{|xy_cecsQxh#N%o%-{!9WOQFs9N z{8lIcDX-Uwawt*XYg1vHLL#DJ903uH3B_t{GxO{`dm6Yd^J#DR!&vmR-&mlC1}|U*zED;*ryr?ERKH6uGp}j_LS{f^L}xzu*~@;T;Hb z0rzU!hHo+2t$R)5-k9R;dxMnyk%Nj`M8bo1w7G;Tf&7$r+l(7`5&(v80V(a~8G$9T zRdS)q$H(WYV^BVxNF9cFf6N4Ec_=2kRT4w&kvmf$>2+3ry%?Kr1sYPj;bBAQRjWF!kiRb;CJA+sghj$3b1B%QeaspYlV&TaQeLm}SnyLZjudjp-IV|fhmfr&pQD@-hc1qrVT7E5L$O5$|@&mthz6_PK!Vg4xZp#re&hP z@=Ba_PBflQUE+i|d{xS6hO?^A#gY53u*Y`U+li{nzvMt)nsJ=K&4K$Xr3xzOloVcK zS1E_4QQAG!p7LleIXRHS{p-^`g>jU>SHL?QTEgm#nHiQ)*JvuRPUs~Xi$O~AT=X5% z<8U&jglwuwu#CmV#U4ZuRWIn2<|A{I{edv--V6%zxp*L|>XK~}Ejace;A}u`x`l7z z97rPRgkT9N;!FhW=ZH}uE5Zu*%mQT5R0zU^NQQ`znPr+@6a5dO&G!ZN{Ny#^1G!}& z2gCZJdKsN3MW6l4CZAKcBZOy`E9qX|Bn1yZ%ISPTH;Vp5vfDjh5pr{Rb_)sCD<&k# z?W+$k?NlMkdUJLZO5-o1d}Ov;Oozngg-8?$K`plc0KiF{BlIwOlgU!R2sbe+jbR;m zupvQ2*!jVY?42bu%IKXlgr1qmc=jyb#GTGz0Kz~$zZ{*lb>F#R@X%72zocVS=#WJy zYE!k}B(A$m;kDS^sU=csLj^lXVqU136i5q8U<%q7q`(+1N7c5FNhh&jC3G*%!hslQ zga%_E4JbdSgeTB|lK`aE<%C5EYhKT->&Y{#LfAq*CXO;-q#oTKUyP)bDbYX@^+IBJ z-(bv-E{DA*6H4l2v7|JJuGdgKn&&QDm%EVYgV8vMU&O9TwiBjg-`06AloLN0!Uu)%HIvkO9*90Ce40s=At zv3NuTU_xZ}WC6rk3$vOUiz4h92$4ZVOGq+)gQO{)XzG$DCs$82ZgJNyc-?+g$$vSR zvvMNCB6p)aFBqCuJ&%)k~ zqZ>yMX7n+O41xmInqeHpv#Ct5OT1@mEAPg>8)B)Xz)P>?bSc;5bs7MCb$ zaLfik3dScq%A7n=(^<(u@hxQP#feVQo7B|gE|Cm;U)> z?<1dUXGLka_xu8h^MdR!B-N0K(1ntb;=ZCWgp^uRcG3q+nvgwBvS(n1blPM}_t@i* zTM8Wvpc#Yws|Y{{N`!B{fG|;vVlxs50}&vS00>%vWm_8<3?m8&5t4BN#d+nb(hG6P z4^=<6_!H~eOT7C31O0D*VKH%8(h40QQ1)gbzwzc6@YvH(xOdC#dgYeBt1{H#+ibNb z(<4#=Ku>p1L)dFqK`LkQQcDvWgh#4Ti7JEvn)CRIVJi#5;rs+TO3^r^=OY%XV9NOW z60RfF!G+GTFo+1SFf%hd@4R=;344H`5(EH@F>wzs_H9$K=O{6V%+L)Eu-3|Q1RYS8 z?4;#FKUG0ab8ulhPD}x$%$rqZTlkB_FY@E8xh?H0gFuKv12QuLh%g8+dtqjFK?XE!DYmNWrVU#{ z)F|Kj%7;JsAWq6+#X5j!^hXsP_#|s>*x~_j!-CDQVlx@V`$CMm>>&LZhJ|^kxxPih8A#e@rcokIR6^0a&V>(2*9Out z3yb&OJLketkbZRIDBg$gY$d`j7(~3=`MRpWXDsP@2RLKN#0}g1V_L6}iJojhNuM$M zU9oG0->tX-7&gO1NS34WL7q>^_`07rC?;K}4oZ?~m1fr85Mx4<)1XQwjAd3R5K7f^ zFeke$iKj}+mogW>$K=I>cIQB|@AaV&@yTUT@Cvg*$C@8M4XEoiYCZ_wO1tT+oFla! zF-;bTx&V=^kq{6So{ln0Fy!V+Cd~*E=PCQ`vAdYMlZS-3x4}m-kDNRRH515#07PNuh2_ET6Vgh)(9`VxA&Gr*LA%o7kRM&=6#SgwwI+qaO-LEr?it ztG5-6WME9aLzP9;uW-@?mX}MMKUG9iX~gnf{xJbTAyYBtn+cY#i_eJ~$uo$sckI1$ zqjRGh2k+cCj>4XZ2#t4+JrfZTSRx{_h6sQ~oJco#hGbSr+Koy80ENSTh5M!kfFgZ? zQdweR+%}b!#v$)TlJ=r+sSrk~5XmxO>kJVSB@q6|we-%K{d2jpgm-Ybw;Cx;6tT=CgRFos5mea}i?DFj+`@6|cFA zAlYq$sQfUEFL0VpsbK1x6lB^XMeZtU8zs)`W5atC!MM*AAb^l2w*(4ikOB`9y62d= z6CeQsAwfdGcoZHP&mw}3!FhJhI~EWi zQxTG_Y8LU#f?xnmZDBU=v0|=XUv<|n*Ppz2{%=0{{A$yk9xvW{@}!xcjP4RFMbOYl zsOW4=IHGuId`mQlkp)qv*TF6K#qsR{e|nahLTUaAk&=mGpWc^!y@_qN|3YQy(wd4U zhp0D@e$eb50HB2kQCWi(X~WcR!jF`TE;^PyS;>%*x|PRT4j^l!_{g-)%p{Zv3N=aU zR7j(FD=AtTFFjCzl2w$H_>rCyLOuX7_9(*MIUb#N&O6V}v-940_RP$}(PIrjP5@Hb z!FZ^NM37`;?ne)3lTnbBYcfdE{}b-Q4E|-rA==%=_zCZ zbC94~_Sm54arzx^nQYYTT~b%^(p0Zi=3JALT1+4SmWwu`V5pZqnYGAt3CJen30OUi zKE$IGOG{RVCIaD@u;Hv94L*e0%fJvmY8WW2_GOPIWN?g zkleshuoDbvCvwKTs9Z?>EckT~J|^_jGLu4ersv4Cc1HslJ=MNbWh;bOnkVQfwW*D3ZB8#vv zhD2!OF)Sc30vsk1mD9baDL_&@BwncmVo0Svm}xSJc%)}a2DbcE<%I$qG2vK=fS4I2 zzzrg@NVz|B$qM7Shn5nr>21r0D;Y8KAsSqau^XO%!MDH2^@` z>n1Uup4gW9TDCUrfRYAP%f|SX`ni}PHsWSBrNiz+A)crCkLcPJ!_*vCjHR&%2oMO8 zv0*&101^bld0q)pNZka9#m&r27$Z0!%+cN_h)0vgOn`(&&pFegplc@4Mcu zx4WxNbF=gPh>pDgdd~vreCq(j8qWwG5fMBi1F!>=5hvIadkj#rP6^i;!%KL|#SMp( z4ilC;Y!s7fiHxfZoP|@RHL0hplJ+cG4OiX*>yVo(#)d_MdJU%E006;exX<{U(7(7t zlK_(;Vg@Bpa+gt_bsrqF-ijK6*CFZzT~q*&P8FHMEu(t)w7pifEGfO}HCXrf#O4T1l3B z>OkIqZlCshGnvW~lCj2;ZJ-oUFPc)DPDia1uUwH-=R_d{Hj_dyG(saGR8q)_ByyFs zNfW1nJrS+s#-=;8L7nI{fdQAaG#^9){0nf3%w*Jvjj{+Ss39T>Au>AzLqrIK7z!mr zac8I-LjuDXv~utaz=DYeRls`*L3t!HC?FmYO(^RJK^6iufP`d35R3&R7C$Q_GUa?g;O)F z_$kdO9Q;~Z6%u7_+C~6M*}qTH-`I}&#Blg3gQAewEn5Lo;YxZ9phyDe_@ajP^!EKH zPBLbq4uMKsvCnfUs0FoP&w`7V(A2&^cpKZ#h*_BRdV%D7aPLVR%YL_ z6EI<8UCx7P`m`KfqtPWe?jzeI+@$f79PLmd?Q75UQ!*gZEiq3JH>jUDbho}Ji&hks zsa=7IZdsHP-KMWVVohw8GR^VMn33IEdLJ?tpcR!0=UKaeNU?Jk76g%mBvW;rO`yzt zM3}ZK1_YqE=^Mp(nK~{glGbEEu*4A%zz{Hk7-kP?s~sd}U;$$*7LNdq*%~7P0*28d z8qW|aCjmnY6IkM5Ug~rkCnOQ>EifWgKt_O!ttBkDB5Ugw(D;btC}6}`1_Ceu1ZafO z8}FPSco@9vy>rfc=biH`2GJOV#uyMwP+O{r44@$d@PdYkJynJrS&!BuIW(4SJs4-L zXD^7%1i~!hUDyyiin&BD3MpndBukJ2I6#R#Q@B?N!SdJQN40B8oC!aL4zNrmWZG(G zlHz}vS`0~uQ@4vRzfgqs;``c0lIH`3ku(AV>{S7Q#CTVk5YANrdRalxsJ#^bC&b&M zZ~nI+V~QsgGE$;jNsvi1VI+u{jJ=!yEjouq71eLKX?GbxhE3-i>cIL;fB@8 zk>*hcAP5hkYKV;`v+H{xl;}jqoGAypOv3pCnh7joHnCTt14txFeNOsYk~Yu!F=24F zIYj%I13MbpjM|_)f+JZBWpnv{O2$WN6vvBG`(XshKq&1O?W@EXW-KUEd{5cnf)~=z zW1(>|e|usWsR+5sOb+Ap1(V7C*(Q)yrA>USl4YYyac%E~-SRiaW zrDhQZ3nJM5IZ79%hE;$Nbzdw*L?EbYL^}>6P>9AL+KO4?8mJK05pje9n=a~hF2+0hC+jY*E8qru=+p00PHdSq@1+reyU|my7rg9_&KKOPu<9g;XRjGQMg3h z$v-%qic$sZO_JFq0ZY1b+G;`KOdCnmo?I+h3yVZeDWJi)e6Qr6^^UwBZ-PhxfN>m0 zYplg>H+TV~bc@{qDHf+h(v%>M8FVwOrw8p@(HXqTqm(qfT$b-(IpB0*B%&NXD(U&u z@vurcc~xac3bw>p(2baCNRs~AoBhO7sj3~)^v3Ix$_V_Es-H^JWZI93X^?d3lw@)1 zv;3pxn=k~lBZV^COKNP28xr+m94W?w5&*)%pAZXS36LR=OArI|5RybvVK|XOSn?j9 zLSdk+&yV?7B(jaImtdPuKmQmBmPae+gQ_4hGz=plE{~4b`K}+Fmv*+a)eOioA+zuM zVI0TNIq#SN0IBOdi>#Kbrft3V+i|zO-Z?im4OA9wjk875w8q-Xc_51wQ&kxt5+rq9 zC?0?6m*n5aakCkqI-p0QannPPazmIO-A&}-Gg6Yls5TBMh7O~I67Z!IO*hdAj z7x5D*@6PbEKY%Y9nM97uYfV%XLnmTaN)G^{5jequ5K&jFKN~Yrl%H#cQUy!&rxN-1 zu&q=&P~dsSvi<9G!H<$LdU;she+wl*_dPFYs1asK7il>g5(1+K3?ZSgA}lIX$sw=k zUd50r0-$H_*aKicj9$s?q?w>{LJC?1IM6Ud;`ziH8h_8^DX1Qv zRcO?J*$61W5!j02FbR9>>vK?nQ{o{_(FlkjrZMXbuURiBc_%h|bVhQxC*;9E1b{RT z1Q1FZ(*!}#cac*|heS~JM!Sy!NtQ8<9TEd1cO>{vA!43bJY2~ju@)=P0RS0w;Sv!F zb9$U4F^;{!Fg+6X%Rtfyl@Spj0}_Fa$N;5?3NoN$aZY^iH{0E&+X=|yx8GW}cU=pY z*Eg_wRL^HDQn$0VX=oT7JD$%8tnCM6u4ao6v0)bH#;v=0vp(;(BQqPssv?rPXWm{6 z?Tl8-g`G8XyBx*=1RRnZg?FRlu4rr}CkU9hLRu;>3?y&oQ|tJ@PO^P%MU@{+8hWHVmJ(6Lr*n z`?udHU-Wy-+wJw+LW1B3$)!CRtwzONkrF48x1An`1zkY^VG?G|`ed(T#a(&23iO|< z5&bqvSNVB*Nl6vi(`-__({K!GCQtxE;SY-l2eRyU8X?)mL=-kd6lTxRb%SUCDH$Yq zfPkWkG;}QN84=+*Ig_X+z23`EM56N;Vlagu0&2V{+(h{*z-Z`d!XZXi0vsm-g%Xe0 zsxlsiKt+sBNE%d8+E5^V6sIY{5g>7)&YJ4)WJD{0rZZLYMc^w^oG&Lkjg625CgPA6 zwB+KeRMZwNcU0YlDR~pvgQ5Z#fUr!7f(Aqp0I$YTm>>p&*Ga5!=6Yf|woI*``xWN#Lw9>80^qQn9Lw0Tg1KO!#;-h`4+DU!6B2X)N zM6reJrzA5iA&5+RDq8%>QcQe`)GMe13KF70vW5`Ri#QMKZSNUaFdY0Fp;p+0`nm84 zAXq#Rr33&&l?No+6=_&SOwkUibBAeW0)HVQ#%M;?-uZ~H$PXHNl4ANmKrkHGm#T&^ z7C*t>WZ*6BsH#enE=A~nYPh61(pJi#qNrn1PNL|Ylm$dvDQF`CK+)=8<<#h2=z{ZL zOCg33c4A}<`*{$B1Vu=YYJfh*@=*j>7z9}WAnXKAMCe$E2qXrz1qjFjqGuE_EaVtG z(>OZEvfB;)&~=@2&a)7p^$cijUCryJHdS+Rbq>I7dt{6uW2&ldY%`n9TS68PwCfJ% zm0g_N^Bh;*GBZnA6i!i{5zu{Kd0wyWUiGwOA~d zOJj_8qj!!-s><5R+RD}qAsNpsfDSw{d51z=TM!g7#+Zr$$jC5y&kh86zjmGhp%Ks%Kn!bMH1@dpVD*m#HYl~ShkWtKYdZkgZkr1b_1G8$37J3+DF+(H4KZnr`Y`)Y$}gEy%kg6b5>p?Tl+*6$Tj=a~F3H4XRJVkyCM2BNhNAttXMclK`-ViobDRnSU_n4+28o7zXpT6X8ey#$05o983Id^XGK{?4^y|&oxnb9j z{onvBfE}HPkZ1AC!!VMqZB>s0n5rgYy+DOE*9(DJV`kLgw%dYK6;uW-fJJO7Gp{N` zL;@s&+rhQQ*s7{(Ysfg~hrv1UM1ifericI#fzi3qix7e}uv#A5C$_Gd7cZY)UtNq{ z=f-h9pVxKWwv8|YGdo5DRb$B*Ao47N#Ie)|95Z+T62P#wfQZl_fH)Qiu5++LoG|Ge zc>-V{K;cjs3Is%z1pp+pL_lP{SnFvRF^HTO_8tWcQB&1pJ98qQ*$g953|Xc;kvNBrq?9GOv#L(Azjc4odTs()-&}?dyjj~VnL=1<*D|(bn&9` zi1GP(+Da91D>b#VijZL~nD;K6`kM-bBHc7>6B-KX0zxE%2;nV+l>}YK-h=mSAi$*{ z>V{&7YPRIVvBM*%SOXEhBnVr5O+2Z|SP+tNlI`K}kun)|IZ3MYg{Uj0?LZFxDXk|D zPI~p0e2aQ?1${Bk`o2M;$%EKq1ki! zbHa3m@)$q}J8%F9AW5uH6#!%rB*QF##BntMAd(XR3d^hz(3+}dv4GZA?RM8+ueZa^ zu-f-Wd)3(cYaWr3@*t#V$%hkzzF+(s&L-5r9}L z##$2&*sNYLHsDKnNXBtUp(gyx(2HejQ*=JCQ4hlZni<1VB8&CPijx`|P9m6ZioLhFyA$&> z+$or!H63&QCPl?E^raEQf(#Q6)mQDnV^ zsj57i-x|`4ohS_uC?BDgM~3;^@-fBRI6ozum)@C%g%Gr6znGcC2j#S2>~djiL={?y z;#5pPgj4lWrb(Q?$aCSu4-mj`_?7AsR#q1RK;#_%LJp1=AqyZ8GYX=QE(HM*nhK3E zRTZ|ZagIT#>xRv4x9hjtUAOI=W4XTRoF`K?msjhdAFQnzWgNNhhU=^AUDt26ZW!%p zyC9j>FhguvjK|jF%vKGHkTL9xCm6jfsWC00wZ<3$vDT8Qs=7wR%G#!#JLl@?WRmkd zjDsEO3W>-v0~rHo>Z)Q!$6~FmY(4TQ0M=M*EJ)AH&N&bf&j7;ghGBFg)>UN!+^ptvO^L93`^7~)aw|F z6@V~uIJ_4mZmtN3$m|HwfOunaZb|E0jWu;;tE#egBr<>)_T+Ug6s!Uf)pZ>vdl*OH z6wA$6tQ?%UUm{1{W=P52zqeajIsTAr+$d$meTB3aa8x!MESi0Ij|~Sz$QObduyTM` z36r9n?u{g74G~J=)5tqWY!^{Ltg6W5HRwPv|57*y5M%wiI6w{Kh$1Nlf<+C~fl3|Oc(5v`a6WMR@p7#d}X(@g1Yuxb;;W7LM2XG?)U z(iT#&Qa1k&7f+W22^rKxF@ZeyN)Vl2fG{436PIj}seO~@MT(yew5nFHr>WJ6OL`at z0EmDADGbze4AvtVL}W%l^kHjZA`nC}qMHx^5`Y0?fI^B@`q6K<{dTv$*>u}(*lfFQ zH#o=a@MgWezPaf~Mq3fqi{;X@)b*@sWN?k=sv>I)jX3rqBQ}FLC&nR+3^f1%SZfhY zsE#LVt+mWjH8Qwy*livAs%}7_svBV;3dfNe5kN9c+xFMjj-6w%1j5kwqp_p0byZm= z9QqN!G?f+Ru^+=WMnuLr2Q1c91UPoX(Cv`ILSAI&#(wC$vj*$hwANZ{thLfq)~=Sz z`8bT>s6}CM&M~ud-Zpi^T-B|y27oB+KY;{5fGC0j5Z25y3kVpp#bfT&&$?lk~N zC|adhLkfU#-`H?WH=!Xh##EK9>dIPUh(si8%jnsA@5M0+SfaYBSVWw#7v=QA)Ks%K zaeao&0<05T?z;v!HP#C;kyyMTWjj-j-3t~&v40`%UmiHS2wfCk!^Biou$w$*-#XW> zC!k2bN@y%K9Nl}XrlO9%R6rS;q09t`CJ!S-WJMEV90`o0{tCLFfSi+r)${ zNR-Xeq>;*noS3_l?BW0=AsV21sVq@~93lzke{fWpLF1<(2^foGsi+~U23QCRV#VG%1^_Ws+sYcWNFy3+Y=h*`hq`|@maH*?CJ?8#H5vopZB-!} z_Ojh{rzfW(T-k=15y_YefU2r;?3=o-Z6yNi87d2aBIHKzMqf2Rh-BIzW|B3WD8NKr}7udv(q`+~{FmHm6eb$J~?83;Ns-}hg-+r|Ou zV%w8X5v`{r&p@+>T$qjY+jJ^wwm2xx2v0G%kcKVkw{p(nFA?3tUlCC7k30ToA zsTu^v7%|HWgh34xB~-M4N&|;u|EDunm_sGHqpl&=@O)NFA*3#V5?0m=K-w*4VnL+O|16 zJ?plci}N?kzS~Mu*L7VJd-UGBp&xr!*F2lGZELG4u#>T-uB!$q>M=nE05W8(pz-Ry z8bg-C?r-Q>yl3Z!aqw;!MF5d0n!N;qz#uU-tjRD-VexTL@EEE>)dn<%BE2eWtg&RQ zwFt=Gk1lM|?pceGiHMBx&MDs|b2lLYBta-F{$NR_g2QBKO$#3nP5fxlWMC*@>UQT@(a++B!el93j4Iw zst}(FVbu}>#J%so&<4!G-FT#|L|9i)yG5&}exj9Cl1M*fZ7e|*1n!P_ z&jPswR1(x8s0PTO3J~@o5d;zM;plkz^z+Z|&icw$;ys{==N-ksO6+!248Z}8us^AR z5e>bo4oH4WC@u<-BG4p?ww%Toc|xKXP$IR`CF6dKyOrNaQBngC@^}{%_F*OK@fMXCK=lM?-B~#8^OMtE#E$nXPIvRzN&6S)%`6U+>l{$+o2jed97CGILe!eXjJu7}It? zxUmEXHEL)ul0o9dNbtgc;6L!skfpZWvW*b9-Ov^-fxzv)oYQ;ns$HwrT6v3@V+nUziWYa5QUVdgrOa+VPtK%fb*)yI!>g9`%`Pg!lyUlNT~|;PRjVrthsP3e zV>uk=Qur6Y@$+etmzU3PuP^m>UY08(!Yj;}!s>FrAtNtKnM8$EKtigM2tE;n|XU0ftL2TDDPNg+cT`%*BH!en9LWh@*tG=sNP=af-ck?cWqXxc?@r z_66D7*m@XfblY;fdYhxprbPs&nLtEt^)%C;{i{Fy@BaRO^89CiOblP0C1XxnHJ!cD zGIZrWn1^{Bqir-%jBrb$UH~o?1?uX@Mssxs)vmJ#4d~zXy{F_K2tf3LMMESaIGceC z>#WaiM$HrR?xdvrY_-Nfl(}TY5*b}Xu%;KVgP7Eb8cU9>Tt?=&Eq1=#UtXR+y_`RN zdi(J4)2HXp-#@>;T$9GD0U zCg$2W&ERq!mr>R7suJwMqmLkgZ{{4GUlv39F)orc!d%Z7k zn-7x;1F^14^FI{HEM;OLEiB4fv`oxJN+FrR3}y#X0}oIbdI4Q$f-sv~c(iVgbv5h# zG^~OkEG(SjUqx6&R4J_iQ3O079MmU7Sc+;X(=<)@Wy$SoW)=a0dker|7Pr8roA#rD zJ-fYoJ)p}D?FT6Bm$A&Fkl>ES--1`BH$A2JI+Vvgqs69h_7H+`$pr?13Z&(~OZn%>%Th`^n zB3l&#s4(YWRt$TrR{1= z`*{v6Wgfk*0YE)5fVRw&4dZ(~|O1WFm0K^lngZkHwnY>sduk-WlNznH4NSY(}@Go-emgpWn{6+uPgqe7U@RKEJ+QUf-^_Wm#)A3zh?sf@Q6G zSx*t2z}{2}TgJOc5enM2e^;#+6C2 zI+iq{2oxk72&+ENip(nkM-WI@z-j^k;(EQ_Z;Oh6ur9azm5b_fT@XPb6s2ec9p;0tE5#H>v+&Ba+^=R;sPH5#Ox$)4iLhuwzo@cIER(2; zPAroXu@)z2z&&bpt6tZ-tZQ9sSTHdJZl3M4&8^ne>RRjS?kr8w=Z5@gJE^J=b2kIn z11h2_qFkn;%UVR{GS$O;UzdAbKydTaQDD>#Zl>^UPQK{Su|G9?-Efat5AgNy$-U`- z0rc~0MHvlVd+nHUpU7mPrgBnSaOPMID%16Hy<84I zdU}6(TPz#M1kn5QMYk9zqSJJP5C@QTdv~;D`w%t1Xmdq$)_q6k#Dk3P*|6TgxHC50 zP#9`MM8MlF7zQG3R!Zw!OB{_;BnP>JI0H)Yk+ za{Ku4<@xjLhi{+1fBtOl4$9*4%tXP{G=T&(dlU+uWJ*k2qApRZ)3V|)AK*3m;?^J% z0a@BGnV0LH1_!kRm$5+^_vtas6M+p*LL>|#7HP#Vgjj@_MU@FUO(4-SPt(k*L>#d6 zP?l*XK%{6f5+zmjqNTtXK@k)|4iYq95oC$hxvBBgnLAWD3vnxsGu_IG-;V2!dzICD9aO}^$BQHsevd6)xDb6 zS}lT@goMEqQKK3n#X!bXySI=iZc$OHlBFRO1SWBS1?()UTC|ih)jCaOF4H<&wRN7# zZPBIHRH`f)=H6-}cGl>Zh%;Ur@-{2E<4HVxjP@i*V|~ZnA9S@ZzKw?8Z~)GuUf!Uh zxgQ2MvAORyI2o$g!|*##{V>!qrh)8T8te=X8spn!j*gGe7eDG~6pu4AZng==&8;?xKsf--iUI~mUs`!*%uB+s}ZxWeB8a>J~l702!z7}M4maeAYuup zQNhL|V@w1rBI-^K3Sm(3pk=9Vm)rTeeEjtB?RtCpe11EhulMEc?RvQ`*X#9mUzXK^ z=)PEh-C2qrPscO_&Ac!ROJycdHCyXCmm*w*IS`=8P)18GOoUQeNA}$r5rFL}IXPq^ zfa*~|0CPai*g{q@&g7bVf6^YL)M*O$*P$K&Ds z)6>(_)4E7qmb$u3<=ymkT^96>4q_G&RV_tI$wwwq7R|;0#7dGyK*`-}jb*8|)@pUF z%UWv&K&K`zLLN!(rIM8C1i`|DR(+aTgqc}-Iwd0jcV=QH7EzU=dO94|)z(_qX*wK^ ztC@MY#cD=5`mp9p%hT<9-8`-2uCnj=gY87@Pxf}{u*zfm5O##{7dPsf@t4s^18|xs z=zfC^X&uCNu(k=0QAMHK0YeByciN%Jo7gF`k8*GXXKXOBjWA+g3SxuQAD9mhuMsP= zDX4_b*L32!%drO&Wj{Inr~M)N!)}&WpUv1htalV20t_tcWi$)xA_V|N>%h3-CuMX$GQFL$sNtXg>VCd1PhbDcfz$hU_v^Vu`~dDoqP=#` z;3voJn&95gQ$#TDjIeH#rSpfoq-^uz?WsD4l*B>{{sEG>^VaW`$Q>2zl>(`Is%QZe zqM!n2XRaRAX}#O|?f!DUefadv>+2<)Eb#pK^{>A9@a;DrFSm7FVG(BGH6UCq4)gr} z-Mib}4#y{+rPf-hE^A%ZI)ShTQ>bv30fQ(A7JgrCtyT&*1-hA5B+MzEODV);%R;RT zXRG$w+&DxLU{C@|(#6cJ7Lt1eNOY1Q)k(MrD}o~`Npds9#HAccDIkLRG|f^9kyx!3 z!OT*MPSdj7!IU~Pkq~<+)4JF^%|tAs;l!dIk#1fQ&11n?H-VVJN?gs%>Re`Txiubu zn-`tV^#vkId^#SM<$k-~ZgHEBM_cRD@qn;zfA!0s{`9A|l%n!m|ITmz>f2xa@-P4V zt9S2y^rIh}t#w^k1RnS6r3gQrj;GV97P(!i)>Vk+_cI0D15B%jSa3iSokc{IS(&Fu zf}RD+9 zuXA-q9=c{Hjb#zXa=b-~;1f=wQE7sGB0`r zlJ-gFr}hM3??Sl8*pBgR7ELpCqJeBCu|kL(sE$AUqks7y{`N1PUtTYl<=yH1<^0@) zm{2Q*)T~N`JNJy%-Y=w2B@-G}H{rhpO}AYDFprWIOyVFSiP0mB1SCY9I}ZIKfUYuO6%gg!W^QTXrK7arH=a;wh+uQZF+^^T=^ULLOtM}E3!CWqvb#V|u zm`a&~`045CdcIavCUQpQ>1uE;H6#qzyPw}~na8gaRf94@Se01{F;%Pgb-mti2+E2# z?yk}vnwic0zN}@MK*TK7)=1TI)cYok(6=-JqUFSMiilLPwMcV0{1Gw?FyGkE@~xo-eN->iw&) z-XEqi&xfD?_{Ze-`SsIx-`>9d>g(h2$!%p8fNz&eVSfMq-Td_Ka6B#d+x>cDrlLBP ziG)2oh^q(J3KAAgGAxr0GU79_$Q{+ZTDHdyfP^_jnb_UK+|9ylUDvuSwN|g)l1}MH z5xxJC4^F(H7`4V{6olT~*g>Fanrisbqk3HLtIA!Z1`t^UWSq;UuRSKE?~q{oErwoB z!y`G^piUz^++?`fFg`^)Woxq%2KW4>BpQFjuK}yBYHk{ObR-^sHs3&E6Ai@Qdd#99 zfc7nE@KX=0+@7=VMQvcy5M=|WJ%vx(xEgI99i}`Zd;+<@gEHx2U?Pl0+8$w`MZywKR$nc{`7Lb-qs~D;u|2AtZM1za2E>=0TJJ;-`%S_ z3p><|BK-R4B_~0_GV$v5_Hujo?sQw%TK#&xXRDmUr0#LKUf;ia5-r(wJcGM0x7*wK zay*{EoUv)qbr?5e=B2KlRlAu$`n21Rv zz*>Y@%6wR==~Sc?Rs{sr020=srO4#!3Hn?n7D0rTNv0(TtgTuRGY6;?6%n&+`a*~h z)e`RR%A&&wpU2N$uKf9bS>+R~b9#5xo(1@^F*LAJ6miai%hvV^N?`ryHRdt#t z74<+3x9VoT+}8;9U@goDR-|8tz|0j6TWwjEWm&w{&I$mW8)98mfJRH#v zL{mgn-oe0(<(mSr`! zx)=av)*{RV(A(>EU9BjIuI_%nuO3(pL|`pzwXk|G>(l8}-Rf#Yw5;prm&>~P;UE?f zZDNNUAZA&st*gzm=FBi8V67%ohxxGytmhywaSQeZr(>Ljy|>Bj`;7o5X4OJqZW&0E zND(an^IF53!x);&WM7ViHkeZt+u+)gamiW|DxZDiA$59&4@3vK)>l z;Y@#Xce`G10(v@~K79XOt?O}`iRtb2^Wj*&`S$hy`TYE|pZ=t%xZSVo&E1z}etJ3` z<}#NufBm%<&FD)eXqh6AQTgFS!8(r$&BvYN%fq-d3zT7JC~6T915O{&#uwVIh_#a(v}Zjj8(%;`(Wlsc=U zRksmQda$e4YG&@$-P^Hj$%H#W@JJPGD6yjg26?hs03BT)A)`S`|0@r@nSOB3Zp9Pg z0h2I9L)R*ImP(fbeZ$iLsv&5`J;uNKrXDwMp+j5S=}z8k=E*L&1_9`>IvU_nMw_&8 zZuCzVg5BHDzHUs@?n}@h8;FjvZR$67@!sjuzX1r^;`)b3YCQYMN9Z`4>BT*rYG*YJ zl`zI#s0YC}%Y^z>DT_O!X{{DepO0oiZA9Eo+BT!5Rhx*2aAFXcw4jE4KA#ujiH<+| z@o)V8AN-@g`*;7d)7S4`orz25KlwVIouT3EAKk+F-!ta7B8x%-8f zK$M+rAe_2C0Td3;$r52iINbeuTc>&Uz`88=`@OrrFiGR9mStJi=2^U4@9thL+`|H@ z#8X-CcQeyB{~CijRkMR-(8CX|RcI2_??1-Y*^9KAeesEAc&Zsv5;b={KSp{$t2 z+V*~q*i9~V7PbB{eUwJPPX+LGpp{1T%~EX>PWJD= zal>3Rxa$XfgP+~eALaqYNPCZ+mN+#1rq;$L5eB4U)5Q0qjG+}jxEc1uN5ikZ?_h8C z^wIQcJdcua6K(zdJl5)20uimFGJ1UpJbVXjlR`t-W_zju>K$DBS2m1n*xlkX)W-#op zrVO;FXj@2Hc``8JZ~fLUe(P`lwb%0}Jt!9YcmMtW=pX*U|M>g=iyFK z22CKa7B_RiS0|c8RHq|!CYhAA1}%$UuJ_ls>+{R&^V{Y5<^1{O_4(7=^UL||a$C*T z)y-j!)gnBs0s$>8xIzvGWhNqXvuft83`BypqegWiA{HhVmCVgge=1WmYBS>}C`b^2 zbzRTbs{>q7>&-Hf6JQE3!EIeqT??Y1v~GHlJqskWyH;Dw-GZdt?smPe^EBO->+AVe zjb_y#$&NZS>a-F;6fEI%Uu~|QhF4P?DTzBq_<)aytUn2~WH)M`%uNhp;h}|ONpAv+ z6cP2*H(5kA6IT1)ClM79VQ~==N*h2$%#B&5GP#>1vIeTvxoLbYvN;uQCue4dN4Tn( z`|WmnIz4G2VM+QMA=hO!v#;L2e|>%a{^JKb9fc^OPP4v$_jJ2nUS6J0$HS?dh*2h; zkCST2f}Ca2!{PK!%UbJFTeBNw>6yKvTF?kZ$-aze#3TWsAUA6j+gOAZTmY($+x>pK z-)^^CU8}n@QILSWVFMyEBqG4fss#u&20?{Ybt*+gGxZ=M+|6CxoRPIdo5vWt|IOUp z*IL(gxi8so(lbpt3j%qUI{i%U5b*(Jv2{`U@`Ig40d|15$E8gu47I$6uxw<}uopI| zFz{r+$GAU@hiou4#7Tp$v6&Oy24S=TyA(w0P0kNqu^YoqtOR23CLIG-f=3J6Z`^KC;awkWQ9H{`3l(`$?ev zH#K43?1zElO&$}#fc39PN7s&4qE^+QjU~0B*m9deKzc$L%oM`)KmEPm!~NTz{QRdL zY&1!s|NOuFZ=XMXV4zIp@Dsk@?hfKz#7Vi76CQiB!?K@gKUxwpn^Bwn3Xb7^rs8Sp95-7^fba3XL< zx#xEE7XH*yo`Wc>L$?kC99i}i5EWL=AQx6)RaPe97H!4U@^zJ{XNQUiOR;qo(P_e3 z7uDp@*uAFJLez3H^73%&62fLJM5wjimpcnXTFL9IboTc4_U`HM)mQJo|M1<*%gfW# z5fonQ>FGp-aMP)jc{-g=hr?k$oTlS}Sy(khc%G+up1@^YS94(zm6QVD)``UDFUjyRSQJ+^UA(2CCEc-)n#F15>I+=BNKcP28Usw7D3wHLS}wV(^RIZO=BQD z%$?0EoE#3c2%~(VS?9IdTI+pTm*u{$wVHYB#>}|`e9#5W3_<)LIH!97_aWj#AZ&;F z;WfZILA+n*&E-T7u(yM#*Z>h_)_C~&%3-`exx^rEiiJcw9V*imHRu1_y%$KeT zqvIfe2u1XN^{3y^vyrfUDjxXNMBe=)@1AczeN9eu$@3tAnjti}o^E8&5CacC_)^xi z8;)^}@%88J0t_^8e_M}-zjQkOhu$HO8@`|okCcYloicmj8v|Xg(uw+HLBGlRjW}enTe4_5UEFdThlDl&g8@p z5a1MWuRU4@#FU=#n*3{oXbE7c3kdUpiCU_(NYBd)Kx8D(6(%j&`ZdJZEW5M-L>XfX z4`!;hUa!}w=(3<%5Hebc1F-5VQy?HwYj_Z`W)PK|uhk$z83o!3sYXP&NBY#^$od4r zg4PqW?ViLJ;%M!%h*dPgGooeEnZVZDkBDlcrJF*-y@(m59smx}9@h?(seqzr$xK$W zUR^xk>2nY!u+=rUj+q0YDz|01UN7@pmNh6TK~)jH-mXGXMBhCgGN~DWluXpRuK-!moCzYEc?4$W2ryOW zR>dkJtgeCV0b|)N)yziI)K(jPn8z7inj|SRfkb-lZ<#a2npkpkrVI$wtm^8yk$W+g z#{almwRK(BOgpx$FjNzhbHu{|(6M^Q66{ZW-?06?5j(#NARV{)f}a@Pf_>}^(D7>b zEwO{G-J4Boe7I`^(gy2$b$AmWO(38fSr0eebn5Yh8v(x4gtv=^(ySl_I5JXwSG03; zk?)9gbdA1K1-n@s`ugw-Y^c3M@Yt^mJ&5QrnLDvDMl%F)$MelL=}O&3o^=CacZW_! zp&K6&DZ$5BVmF#0NSZD@T<87Agb^)-+-$_6$J6`&`oH=6|MBnsj?{X4`}T5^TK)R% z^B@25|M4&W@Q=Uy@Vx=^beN~(@p$<7@zYw(16)qi#1Q~9u>fQlUX|7vh@zEK=uB4Q zW+FVib`M$RTOtDP7`9ydoya515dp3aa%K`CW+P@d&#RcUlrqglnIcf{7C=$8#V(h# z8Rm&56;W;`PoIBxU#%w2F=(DtO92xqEvxnPiMB>*zOix!1z7cb8f4QfVRNk2C99NK zL~si>4`!gc*VVJ?LbCu8dXlhc`5Ucu`)+S#=gvU$Izku>7E)mj$K6&0vUj;#sH!Tf zNM=woiMQ%UA}p;5Xpkk-Eu3nwl6bgiOJdr#3jv69A~0?FfVHj>hf?&uEce@exv$LD z;wjyyX}X@@USHpe^3&;5*ZZ>Gh&hNOoJGqt&(mC{gUD3oqfRq1iIy@QrfJRqPy`j7 zSi;SDE5S_NWuBreGKsna5l5?x6ahn~w}8?lSeCln?`F-Bn>S(vxqyZy9Ek)Od_@En z&eB36+Ovf_cNYkE1Ay=}H{IPWB6`AsjeQP-q* z&lf*<@`hL$v>6>gL&--(4|kZv28+LL;)wZ+xoU1#>Oy1S@)!4^{Xd$S^Dsslcia8h zu8FR5qifzx3=oT-j+T<@;s7{{}H;L&XCeuAWqx=`&aL0vIy#=!M@ z`^SIqKm9NN?4N%A?w5l5|NVdcaxQYdT%MmlU#{!D0z}JYJ>LkQuO1F!_wK;x1$X+w z2U-verH?l2r8kuc9&YIzwRTE!Bx2?On(S2E#dI#t<>wKK&NdfX+-Phd#5;!~OSO}ylS?iNHw2%dvw>&`xR2Ts!GFu`% z32Nl%$OE?8N)%IQblWTUUhmdsW~+_z@#rmiT1FD~JGf(kQ&%E9%%dU-A*1hdGyckgaDzTa-Hmc?`C!{IO=MTgE2@&r)fS; z^CX(d2OcEK>KquDFMXOu!Go;K0S0H{Znnq^cYvr?%idmYQP;JuwbqIzx5GWaN*n-3 zc;Ccn5VlB_u1iI9$~+e+IXRCY_W-gXac1XaMV3_kTgXuVm34-4J5Y-YABC)7p3k*Y z7dxK*f4>HF4IMOwx`^gk-2qYnBlcuOAh+{5p6DX3Z zrbP~=K+0N@*~lhg5lDaOMpm{2ksl=6AKbDs4!DxvYREv z19v2iBq^?$n;0IFq5=B&)%C4b!6O{*0jDfD*;2$J!n*Pm1gMZ?pJ#V?EBUG-jdLCd z2N#lqPR4hDCoKX3m{^NUy|Xd3jo0i>q*tJ2Wh014Mci$<-=;~32^3Zrky56zt{E&O z^E{`4QzmtH)iO=fJkLy$)wzKz<|bt-)1*Nps!g9HFmYD<3q*5;G?JZ}IXF8ki$IAH zIm>Pl$eS_G*I5k^|Xa=kljW_%;A<5z>-oYB4Kt=GSTDWjw+iu*2K-QN1~A$fk23_D|agF zc3a)d!@wAEUlBF!lO)jsp`s0NV?Pr;#w9=qqM-0D4Rh;TWToK9?E7T#a>)7jCXy+m zZ#uGPR^6}~i2#Q%F^6!71Z97}2oR+kK$)glkB2FvE-dq_1kA$9tej^x!jpmT1aUBg z;8_?ZjT{1)Wm#5-du4>RMWO(LL18OcR3H%?P|9|`;g%61?p~W_O-v4Au<(eWNQYqT zoHo0yNCYq#5eyJQGfO(-jJO9bxf6wO2EuydlPnM|PLY6cryvAubtal*T6qeXk`f`3 zDq;dCv2qNin~x#V3Pk6;iGVmF*VHQ^Zr9uK0A&_#;#FBN9hlgxGPAH~DOq5dn44de zsc0|aAOaS1cLc&Rjx__K(q7D$!vowZ=D9l?vu3eR&o(Z|+WxTW)!b^T>fX|@rNy2* zfJ^{`MP!VAW{-qZun^qY2o%I{M>t1FQkHEQ+#}%Cy&5dj^qUY!7f)*v9nm*;YhFFV_`Qq$Z+|3Ux99Ha_MQ~l{>p8E6P5Shvy&&(<{jNF(rONoUtrs72!>|5h1{uTsg1H8WxTH2S|d6vl~HJ zC9dLDfQd6zmYg|tx~@s&KR$w?h%qtOPJfej&Kq3}_tm#&YyTRe+%#xK4th$>aBOx0JR6!8R%=#2I z2>7zxMMzc5TJLoc2^1n$VP=`8lA^}LK~dd~L|RlQm7Y(m``b4Z`+5 zcR<;)o-l%OIxkJR;=4N#BJbb9_z~JRjj*54Hn8Yzx3|lptILCU-z$sx8-EP5{=m#ag&%=&Eq9G12 zj%;g^NWbp>Xx+ee?-6aiOt8(tSQF|HK&e2FxG@Y(Kfp@jT&+Pz7np(0E9Ic`ckWZ$ zZblG-G6|6qWJs;{@wR;FK#2~@qUbfzNcv`rEbueb`CQ26LTw~iI_8waQz$UpohfQM zfk*i~fB=^KquJbHz5i~Gfgqfp$%qVO%^Y(ugBUvLe3;6l(=-_<%$dqO&8O3enb&1? zs}Y#zLs7llF1P!gsHVR&oBeqvD9jQ{b+L85c?O`n1(5aNML5EhNgY#QCYqV45VNCJ z3bBM$kb)G<4(WA1(dtbmnZ(gs(GeI(8>y`YXPW|oWc7Ut&iW+?$wiL{Hy{WeUcFYD zBGN1nBF>nUTnOM9yJ@NQ9BYuU=d-fOq?|*q`TA8kt|H`#xx=|h97F*jaKML14?Tm z+S%Hv71mjw}9VE-VqyOl!Gqxc58bto9H zHl7N|H1;4uD=C9cXf*~PMH(Z}O7b;BBuEc>TJpS;$)+jqNFJoIn^T7-O1hGqO7T`M zqDva|A9dpFAtranv2WA2Df*9&j{cW%(dJqq^krmlY;(JpH|={lyqY!Z}z% zDnv|b%HeA1YvSh8@>XoVg|A>d)#fvAk-TKgPH>VY%$e2U6rdJ(2acwQ69+R*qD3VG z&MC4nR)mH17&z)wSo8-*p7S)kBMs*k)@1IS{<7qW0vY3%;yM6#EVUP%OY|2i8P~$_ zWVJJ1D8GtnKIm6pzyJD2U!9Jp>3AR(b7#@h@oAnWGrwN1bzO+$>G$4=fY~X z)>0{8s}m6`L0}Z_1`W56BAzk()T%>9gaQhmluol8W+9E$JdLHAg;C9fsE7#Xh9}~j zU@k>PIE1NM#s_5)9smT+A{B^Wf&fgAtV+ym?R_qywk{0f%noyhTjOToH2g8)-ddg* zQ?P28v{p*Tu@Gkv7Xt?Os47a7Tt~Dzo%~Kkk}G#JDVZEaVa6<}5wGhCbrJGPX3hjA zR?d8L)}ksZMMQY1>j=~K=4smWqU@vY;l75dkfy4aJ|F^*kn<+~iD2%x>LvrST#v{82RZ7d#%>DmCMz3D z(#sb$snC2AX`fTmM~9NXgR*8Lc$dI~>uAUp;lTlS4x)`)?_9uu&^D+&E0PNy<27{Y iu9Y_dkQ!hBmHuDOm;Fn=i1N_@0000, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",13,0,842606440,2025281475,2403,0,99.999992,0,0,11720,0,39767077175,10940,64.705299,62135142400,84126985600,9296625280,152226166576,0.384969,35.176994,99.842812,113099407360,15.795247,750080,0,0,0,4826988181696,36003840,103929039779,101765613576,0,1814872248,343078599,2139381298,24764234,0.001012,2992412,2992412,22036784640,815173120,26.153116,0.967442,87156825,3276645,0.000000,48126,187520,0.005092,100.000008,1,0.000000,1,0.000000,0,3.391425,5.848985,19.174847,25.961508,69.804741,654237,21,3,17,602325112931510,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",19,0,842014472,2023946209,2403,0,100.000008,0,0,11720,0,39770894776,10940,64.731178,62135142400,84126985600,9296625280,152226167064,0.372979,35.120743,99.812370,113099407360,15.818870,750080,0,0,0,4826818373952,36003840,103926386533,101781278068,0,1798988877,340708340,2121071765,24764324,0.001402,3058609,3001843,21425017856,817649152,25.444952,0.971063,84775206,3340930,0.000000,48180,187520,0.005096,100.000008,1,0.446112,1,0.000000,0,3.396352,5.853045,19.187498,25.978636,69.850800,650048,36,4,18,602326139770625,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814.csv b/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814.csv new file mode 100644 index 0000000000..0f65211098 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814.csv @@ -0,0 +1,8 @@ +mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops +dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,3050.2180999610573,ok,,1.0,3.1489193746993007,0.8734807393059724,37.767791097125404,37.767791097125404 +dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,9604.890872025862,ok,,0.31756926139002617,1.0,0.27739063321981167,11.993889523046922,11.993889523046922 +dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,2664.3067609984428,ok,,1.1448449347544332,3.6050243960745916,1.0,43.2382643344076,43.2382643344076 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,28501.629570964724,ok,,0.1070190773606989,0.3369944461635481,0.09347910281286634,4.04187415716598,2.031271402541311 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,803.9296750212088,ok,,3.794135475693926,11.947426709646551,3.3141042603361477,143.29611604020073,72.01443966078138 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,25396.277436986566,ok,,0.12010492906014597,0.37820073811437876,0.10490934222974768,4.5360978704786605,2.2796468977382536 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,1023.8845960702747,ok,,2.979064351263767,9.38083345417048,2.6021553319819426,112.51268008342339,56.544014135507915 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853 b/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853 new file mode 100644 index 0000000000..e4feee2459 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853 @@ -0,0 +1,7 @@ + +=== Device #0 Metrics === + +Kernel,GlobalInstanceId,SubDeviceId,GpuTime[ns],GpuCoreClocks[cycles],AvgGpuCoreFrequencyMHz[MHz],ResultUncertainty[%],GPU_BUSY[%],IA_VERTEX[events],GPGPU_THREADGROUP_COUNT[events],ASYNC_GPGPU_THREADGROUP_COUNT[events],RASTERIZER_SAMPLE_OUTPUT[events],XVE_STALL_ALUWR[%],XVE_STALL_BARRIER[%],XVE_STALL_CONTROL[%],XVE_STALL_INSTFETCH[%],XVE_STALL_OTHER[%],XVE_STALL_PIPESTALL[%],XVE_STALL_PS_DEPENDENCY[%],XVE_STALL_SBID[%],XVE_STALL_SENDWR[%],THREAD_DISPATCH_QUEUE0_ACTIVE[%],THREAD_DISPATCH_QUEUE0_STALL[%],THREAD_DISPATCH_QUEUE1_ACTIVE[%],THREAD_DISPATCH_QUEUE1_STALL[%],THREADGROUP_DISPATCH_QUEUE0_RESOURCE_STALL[%],THREADGROUP_DISPATCH_QUEUE1_RESOURCE_STALL[%],XVE_ACTIVE[%],XVE_SHARED_FUNCTION_ACCESS_HOLD[%],XVE_STALL[%],XVE_THREADS_OCCUPANCY_ALL[%],XVE_MULTIPLE_PIPE_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU1_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU2_ACTIVE[%],THREADGROUP_DISPATCH_QUEUE0_INPUT_AVAILABLE[%],THREADGROUP_DISPATCH_QUEUE1_INPUT_AVAILABLE[%],QueryBeginTime[ns],CoreFrequencyMHz[MHz],CoreFrequencyChanged,QuerySplitOccurred,ReportId,ReportsCount,OverrunOccured,MidQueryTimer,MidQueryProgramming,MidQueryMarker,MidQueryCtxSwitch,MidQueryC6,MidQueryFreqChange,MidQueryMmioTrigger,ReportError,ReportLost,ReportInconsistent,ReportCtxSwitchLost,ReportWithoutWorkload,ReportContextMismatch,ReportQueryModeMismatch +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",13,0,841596288,2022810523,2403,0,100.000000,0,0,11720,0,29.554045,0.240841,4.315089,12.326859,0.000001,4.746475,0.000000,31.465960,0.000076,0.000000,0.000000,0.005099,0.000000,0.000000,0.000005,64.755737,0.370239,35.093006,99.824524,15.837934,3.402867,5.854964,0.000000,0.000063,602413782604062,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",19,0,840939216,2021361718,2403,0,99.999992,0,0,11720,0,29.570486,0.239372,4.317172,12.330883,0.000001,4.749287,0.000000,31.431385,0.000075,0.000000,0.000000,0.005102,0.000000,0.000000,0.000005,64.799057,0.367478,35.085705,99.860268,15.851206,3.403399,5.862384,0.000000,0.000064,602414807449687,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814.csv b/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814.csv new file mode 100644 index 0000000000..93451c8eb2 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814.csv @@ -0,0 +1,8 @@ +mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops +dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,3051.9098619697616,ok,,1.0,3.1640525778102258,0.875786425847173,37.74685531690234,37.74685531690234 +dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,9656.403266009875,ok,,0.316050373819034,1.0,0.2767926272746347,11.929907733399977,11.929907733399977 +dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,2672.8212300222367,ok,,1.1418308967653519,3.6128129923337737,1.0,43.1005256565706,43.1005256565706 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,28692.606869037263,ok,,0.10636572256747906,0.33654673868027946,0.09315365600002448,4.0149715404324064,2.017751309163948 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,804.5742539688945,ok,,3.7931985107837556,12.001879526191251,3.3220317662881245,143.18131537484388,71.95674580405438 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,25407.54995297175,ok,,0.12011822736228844,0.38006038692764355,0.1051979130207167,4.534085349167082,2.2786354914380436 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,1022.452419041656,ok,,2.9848918200323835,9.444354657658119,2.614127738606624,112.6702796673677,56.62321688044021 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840 b/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840 new file mode 100644 index 0000000000..c8b9a16ec4 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840 @@ -0,0 +1,19 @@ + +=== Device Timing Summary === + + Total Execution Time (ns): 79051466957 + Total Device Time for L0 backend (ns): 1686731870 + +== L0 Backend == + + Kernel, Calls, Time (ns), Time (%), Average (ns), Min (ns), Max (ns) +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]", 2, 1685721458, 99.940094, 842860729, 842572604, 843148854 + "zeCommandListAppendMemoryCopy(D2D)[54943360]", 6, 991873, 0.058804, 165312, 58541, 278020 + "zeCommandListAppendMemoryCopy(D2M)[1]", 8, 11821, 0.000701, 1477, 1197, 2604 + "zeCommandListAppendMemoryCopy(D2M)[8]", 3, 6718, 0.000398, 2239, 1510, 2656 + + +=== Kernel Properties === + + Kernel, Compiled, SIMD, Number of Arguments, SLM Per Work Group, Private Memory Per Thread, Spill Memory Per Thread, Register File Size Per Thread +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]", JIT, 16, 2, 0, 2432, 0, 256 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814.csv b/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814.csv new file mode 100644 index 0000000000..c98ac6ac5a --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814.csv @@ -0,0 +1,8 @@ +mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops +dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,3052.225488005206,ok,,1.0,3.129175918210046,0.8672042433799233,37.74295197151027,37.74295197151027 +dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,9550.950494012795,ok,,0.31957295663070967,1.0,0.2771350240596196,12.06162675350641,12.06162675350641 +dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,2646.902894950472,ok,,1.1531308888693925,3.6083494079942477,1.0,43.522563755462436,43.522563755462436 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,28671.261675073765,ok,,0.1064559182150938,0.3331192956296097,0.09231902400903541,4.017960608275311,2.019253485578516 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,804.9391260137782,ok,,3.79187119791337,11.865432037464796,3.2883267931805875,143.11641250499747,71.92412842450827 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,30556.331855943426,ok,,0.09988847818497318,0.31256862044306755,0.08662371214677164,3.7700860346426945,1.8946824293657984 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,1721.1301509523764,ok,,1.7733844743329124,5.54923199081013,1.5378865412855762,66.9327650417691,33.63751721000927 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755 b/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755 new file mode 100644 index 0000000000..aca4758a37 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755 @@ -0,0 +1,32 @@ + +=== Device Timing Summary === + + Total Execution Time (ns): 84973767741 + Total Device Time for L0 backend (ns): 3078355254 + +== L0 Backend == + + Kernel, Calls, Time (ns), Time (%), Average (ns), Min (ns), Max (ns) +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>", 2, 3077343124, 99.967125, 1538671562, 1537868437, 1539474687 + "zeCommandListAppendMemoryCopy(D2D)", 6, 993123, 0.032261, 165520, 58437, 278125 + "zeCommandListAppendMemoryCopy(D2M)", 11, 19007, 0.000617, 1727, 1197, 2760 + + +=== Kernel Properties === + + Kernel, Compiled, SIMD, Number of Arguments, SLM Per Work Group, Private Memory Per Thread, Spill Memory Per Thread, Register File Size Per Thread +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>", JIT, 16, 2, 0, 2432, 3840, 256 + + + +=== Kernel Submission Summary === + + Total Execution Time (ns): 84973767741 + Total Device Time for L0 backend (ns): 3078355254 + +== L0 Backend == + + Kernel, Calls, Append (ns), Append (%), Submit (ns), Submit (%), Execute (ns), Execute (%) +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>", 2, 0, -nan, 317707, 0.033428, 3077343124, 99.967125 + "zeCommandListAppendMemoryCopy(D2D)", 6, 0, -nan, 611043591, 64.292694, 993123, 0.032261 + "zeCommandListAppendMemoryCopy(D2M)", 11, 0, -nan, 339047807, 35.673882, 19007, 0.000617 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755 b/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755 new file mode 100644 index 0000000000..76557fbf99 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755 @@ -0,0 +1,7 @@ + +=== Device #0 Metrics === + +Kernel,GlobalInstanceId,SubDeviceId,GpuTime[ns],GpuCoreClocks[cycles],AvgGpuCoreFrequencyMHz[MHz],ResultUncertainty[%],GPU_BUSY[%],IA_VERTEX[events],GPGPU_THREADGROUP_COUNT[events],ASYNC_GPGPU_THREADGROUP_COUNT[events],RASTERIZER_SAMPLE_OUTPUT[events],ICACHE_HIT[events],ICACHE_MISS[events],XVE_ACTIVE[%],XVE_INST_EXECUTED_ALU0_ALL[events],XVE_INST_EXECUTED_ALU1_ALL[events],XVE_INST_EXECUTED_SEND_ALL[events],XVE_INST_ISSUED_ALL[events],XVE_SHARED_FUNCTION_ACCESS_HOLD[%],XVE_STALL[%],XVE_THREADS_OCCUPANCY_ALL[%],XVE_INST_EXECUTED_ALU2_ALL[events],XVE_MULTIPLE_PIPE_ACTIVE[%],LOAD_STORE_CACHE_PARTIAL_WRITE_COUNT[events],SLM_BANK_CONFLICT_COUNT[events],SLM_BYTE_READ[bytes],SLM_BYTE_WRITE[bytes],LOAD_STORE_CACHE_BYTE_READ[bytes],LOAD_STORE_CACHE_BYTE_WRITE[bytes],LOAD_STORE_CACHE_ACCESS[events],LOAD_STORE_CACHE_HIT[events],L3_ATOMIC_ACCESS[events],L3_HIT[events],L3_MISS[events],L3_READ[events],L3_WRITE[events],L3_STALL[%],COMPRESSOR_INPUT[events],COMPRESSOR_OUTPUT[events],GPU_MEMORY_BYTE_READ[bytes],GPU_MEMORY_BYTE_WRITE[bytes],GPU_MEMORY_BYTE_READ_RATE[GBpS],GPU_MEMORY_BYTE_WRITE_RATE[GBpS],GPU_MEMORY_L3_READ[events],GPU_MEMORY_L3_WRITE[events],GPU_MEMORY_REQUEST_QUEUE_FULL[%],TLB_MISS[events],ASYNC_GPGPU_THREAD_EXIT_COUNT[messages],GPGPU_DISPATCH[%],COMMAND_PARSER_COMPUTE_ENGINE_BUSY[%],COMMAND_PARSER_COMPUTE_ENGINE_DISPATCH_KERNEL_COUNT[events],COMMAND_PARSER_COPY_ENGINE_BUSY[%],COMMAND_PARSER_FLUSH_COUNT[events],COMMAND_PARSER_RENDER_ENGINE_BUSY[%],COMMAND_PARSER_RENDER_ENGINE_DISPATCH_KERNEL_COUNT[events],XVE_PIPE_ALU0_AND_ALU1_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU2_ACTIVE[%],XVE_INST_EXECUTED_ALU0_ALL_UTILIZATION[%],XVE_INST_EXECUTED_ALU1_ALL_UTILIZATION[%],XVE_INST_EXECUTED_ALU2_ALL_UTILIZATION[%],HOST_TO_GPUMEM_TRANSACTION_READ[events],HOST_TO_GPUMEM_TRANSACTION_WRITE[events],SYSMEM_TRANSACTION_READ[events],SYSMEM_TRANSACTION_WRITE[events],QueryBeginTime[ns],CoreFrequencyMHz[MHz],CoreFrequencyChanged,QuerySplitOccurred,ReportId,ReportsCount,OverrunOccured,MidQueryTimer,MidQueryProgramming,MidQueryMarker,MidQueryCtxSwitch,MidQueryC6,MidQueryFreqChange,MidQueryMmioTrigger,ReportError,ReportLost,ReportInconsistent,ReportCtxSwitchLost,ReportWithoutWorkload,ReportContextMismatch,ReportQueryModeMismatch +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",13,0,1535408316,3690568189,2403,0,100.000000,0,0,11720,0,31072289842,14180,39.954498,48230240000,66374007680,40784238720,131183357152,19.292183,59.890968,99.816544,113099407360,4.077200,750080,0,0,0,6694842331072,1166541660160,151338661503,138265715260,0,14187776782,643149139,11119708210,3717068770,0.000555,2993279,2993279,37791607808,4113692672,24.613394,2.679218,150374771,17856300,0.000000,44749,187520,0.002795,100.000000,1,0.000000,1,0.000000,0,1.724919,1.626167,8.167821,11.240480,38.306911,1127998,21,3,17,603328285516718,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",19,0,1537011892,3694509142,2403,0,100.000008,0,0,11720,0,31047649164,14180,39.913635,48230240000,66374007680,40784238720,131183357448,19.328482,59.987267,99.869186,113099407360,4.067187,750080,0,0,0,6694772599744,1166541660160,151337571951,138324432787,0,14157620305,609852603,11089353225,3683883768,0.000838,3057878,3001145,35453591040,4021094400,23.066570,2.616177,141190751,17473185,0.000000,44461,187520,0.002792,100.000000,1,0.371961,1,0.000000,0,1.716085,1.622224,8.159108,11.228489,38.266045,1127154,37,4,27,603330005450781,2400,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814.csv b/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814.csv new file mode 100644 index 0000000000..3c384e960d --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814.csv @@ -0,0 +1,8 @@ +mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops +dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,3054.134353995323,ok,,1.0,3.139249184469624,0.8705397637467008,37.7193622308393,37.7193622308393 +dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,9587.68878004048,ok,,0.31854750650160635,1.0,0.27730827105200906,12.015408785464729,12.015408785464729 +dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,0,1,2658.7453989777714,ok,,1.1487126052647125,3.6060951092672258,1.0,43.328706857110824,43.328706857110824 +sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,28159.330382943153,ok,,0.1084590546885054,0.3404799989792369,0.09441791984472199,4.091006371010145,2.055963131438476 +sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,805.575530976057,ok,,3.7912451862767624,11.901663359143713,3.3004296887671893,143.00335048709903,71.86730833691017 +sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,30696.65548496414,ok,,0.09949404277906763,0.31233659265377395,0.08661352049509369,3.752851839394274,1.886021267094859 +sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,0,1,1720.7675460958853,ok,,1.7748674775536122,5.571751281451836,1.5450927145912243,66.94686929758075,33.644605399886125 diff --git a/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213 b/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213 new file mode 100644 index 0000000000..c48b429095 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213 @@ -0,0 +1,7 @@ + +=== Device #0 Metrics === + +Kernel,GlobalInstanceId,SubDeviceId,GpuTime[ns],GpuCoreClocks[cycles],AvgGpuCoreFrequencyMHz[MHz],ResultUncertainty[%],GPU_BUSY[%],IA_VERTEX[events],GPGPU_THREADGROUP_COUNT[events],ASYNC_GPGPU_THREADGROUP_COUNT[events],RASTERIZER_SAMPLE_OUTPUT[events],XVE_STALL_ALUWR[%],XVE_STALL_BARRIER[%],XVE_STALL_CONTROL[%],XVE_STALL_INSTFETCH[%],XVE_STALL_OTHER[%],XVE_STALL_PIPESTALL[%],XVE_STALL_PS_DEPENDENCY[%],XVE_STALL_SBID[%],XVE_STALL_SENDWR[%],THREAD_DISPATCH_QUEUE0_ACTIVE[%],THREAD_DISPATCH_QUEUE0_STALL[%],THREAD_DISPATCH_QUEUE1_ACTIVE[%],THREAD_DISPATCH_QUEUE1_STALL[%],THREADGROUP_DISPATCH_QUEUE0_RESOURCE_STALL[%],THREADGROUP_DISPATCH_QUEUE1_RESOURCE_STALL[%],XVE_ACTIVE[%],XVE_SHARED_FUNCTION_ACCESS_HOLD[%],XVE_STALL[%],XVE_THREADS_OCCUPANCY_ALL[%],XVE_MULTIPLE_PIPE_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU1_ACTIVE[%],XVE_PIPE_ALU0_AND_ALU2_ACTIVE[%],THREADGROUP_DISPATCH_QUEUE0_INPUT_AVAILABLE[%],THREADGROUP_DISPATCH_QUEUE1_INPUT_AVAILABLE[%],QueryBeginTime[ns],CoreFrequencyMHz[MHz],CoreFrequencyChanged,QuerySplitOccurred,ReportId,ReportsCount,OverrunOccured,MidQueryTimer,MidQueryProgramming,MidQueryMarker,MidQueryCtxSwitch,MidQueryC6,MidQueryFreqChange,MidQueryMmioTrigger,ReportError,ReportLost,ReportInconsistent,ReportCtxSwitchLost,ReportWithoutWorkload,ReportContextMismatch,ReportQueryModeMismatch +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",13,0,1534833404,3689186584,2403,0,100.000000,0,0,11720,0,16.455626,0.512216,1.308606,3.631864,0.000000,0.887532,0.000000,55.635029,3.059207,0.000000,0.000000,0.002796,0.000000,0.000000,0.000003,39.953323,19.185026,59.893566,99.811523,4.085039,1.716491,1.629522,0.000000,0.000035,603420934757447,2400,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 + +"cutlass::fmha::kernel::XeSparseSageFwdKernel, cutlass::fmha::collective::SPARSESDPAFwdMainloop, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cutlass::fmha::collective::SparseFMHAFwdEpilogue, false, false, false, false, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, cute::TiledMMA >, cute::Layout, cute::C<1>, cute::C<1> >, cute::tuple, cute::C<0>, cute::C<0> > >, cute::tuple, cute::C<16>, cute::C<2> >, cute::tuple, cute::C<16>, cute::C<8> > >, cute::Layout, cute::C<1> >, cute::Layout, cute::C<1> > > const>, 4, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, cute::Tensor >, cute::Layout, cute::tuple, int, int, int> > >, void, void, void, void, void>, cute::tuple, cute::C<128> >, cute::Tensor >, cute::Layout, cute::tuple, int, int> > >, void>, cutlass::fmha::kernel::XeFHMAIndividualTileScheduler>[SIMD16 {1; 293; 40} {256; 1; 1}]",19,0,1536064296,3692231472,2403,0,100.000000,0,0,11720,0,16.608208,0.549755,1.310681,3.644871,0.000000,0.893470,0.000000,55.824959,3.042835,0.000000,0.000000,0.002793,0.000000,0.000000,0.000003,39.910118,19.170021,59.959267,99.842361,4.083643,1.704670,1.628649,0.000000,0.000035,603422654691614,2400,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 From 7e82ad5060a0114d9f9b3a321d92799f5f7ddf80 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Fri, 14 Aug 2026 16:25:20 +0000 Subject: [PATCH 30/42] docs: record BF16 Flux sweep and offload fix --- .../results/SPARSE_BF16_K32_AB_20260814.md | 65 +++++++++++++++++++ .../results/SPARSE_BF16_K32_AB_20260814_CN.md | 62 ++++++++++++++++++ auto_round_extension/ark/examples/run_flux.py | 6 +- 3 files changed, 130 insertions(+), 3 deletions(-) diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md index 164da22c26..03871e86c9 100644 --- a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md +++ b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md @@ -256,3 +256,68 @@ the extra memory traffic created by the larger K64 live state. Recommendation: keep the selected-block BF16 sparse SDPA path on K32 and treat K64 as a regression case unless compiler/offline assembly data proves the write/SBID pressure can be removed another way. + +## Latest apple-to-apple ARK SDPA comparison + +After pulling the latest K32 implementation, dense ARK SDPA and BF16 sparse SDPA were rerun on XPU 0 +and XPU 1 with the same 75k-token shape and launch configuration: + +- Commit: `9b1a9512` +- Shape: `seq_len=75000`, HND, 40 Q heads, 40 KV heads, head_dim 128 +- Sparse configuration: `topk=0.5`, `q_tile_override=256`, `sparse_q_block_tokens=256`, + `sparse_k_block_tokens=64` +- Benchmark options: `--warmup 1 --iters 2` +- Timing: mean of XPU 0 and XPU 1; sparse results include both kernel-only and end-to-end paths + +| path | mean latency | speedup vs dense ARK | +|---|---:|---:| +| dense ARK SDPA | 994.6 ms | 1.00x | +| BF16 sparse K32, kernel-only | 598.2 ms | 1.66x | +| BF16 sparse K32, end-to-end | 697.6 ms | 1.43x | + +The latest Unitrace kernel-property pass reported SIMD16, SLM 0, private memory 0 B/thread, +spill 0, and GRF 256 for dense ARK. BF16 sparse reported SIMD16, SLM 0, private memory +2176 B/thread, spill 0, and GRF 256. + +The current ComputeBasic and VectorEngineStalls counter passes could not create a metric query or +streamer because the host has `observation_paranoid=1`. No system policy was changed, so the latest +comparison uses same-shape unprofiled timing plus the kernel-property pass. The raw Unitrace output +and timing CSVs are in: + +`benchmarks/results/apple_to_apple_ark_sdpa_bf16_sparse_75k_xpu0_20260814_135844/` + +Timing CSVs: + +- `benchmarks/results/k32_rerun_bf16_xpu0_20260814_134727.csv` +- `benchmarks/results/k32_rerun_bf16_xpu1_20260814_134959.csv` + +## Flux BF16 sparse topk sweep + +The latest K32 BF16 sparse path was also run through the Flux example at 1024x1024 with the same +prompt, seed, 50 denoising steps, qtile 256, Q block 256, and K routing block 64. Each point ran +in parallel on a separate XPU. All runs completed with 2,850/2,850 sparse attention calls and zero +runtime fallbacks. + +| topk | XPU | observed sparsity | PNG | +|---:|---:|---:|---| +| 1.0 | 0 | 0.00% | `flux_topk1p0.png` | +| 0.9 | 1 | 11.11% | `flux_topk0p9.png` | +| 0.8 | 2 | 20.83% | `flux_topk0p8.png` | +| 0.7 | 3 | 30.56% | `flux_topk0p7.png` | +| 0.6 | 4 | 40.28% | `flux_topk0p6.png` | +| 0.5 | 5 | 50.00% | `flux_topk0p5.png` | +| 0.4 | 6 | 61.11% | `flux_topk0p4.png` | +| 0.3 | 7 | 70.83% | `flux_topk0p3.png` | +| 0.2 | 0 | 80.56% | `flux_topk0p2.png` | +| 0.1 | 1 | 90.28% | `flux_topk0p1.png` | +| 0.01 | 2 | 98.61% | `flux_topk0p01.png` | + +The main sweep artifacts are under: + +`benchmarks/results/flux_bf16_topk_sweep_1024_parallel_20260814_160126/` + +The additional low-topk artifacts are under: + +`benchmarks/results/flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/` + +Each directory contains `summary.csv`, the exact per-run commands, logs, status files, and PNGs. diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md index 024eefdcbf..c93f32b4d1 100644 --- a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md +++ b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md @@ -191,3 +191,65 @@ write 差异是这里能采到的最佳 spill/pressure proxy,符合 K64 带来 建议:BF16 稀疏 SDPA 的已选中 block 路径保持 K32;除非后续 compiler/offline assembly 数据证明可以 用其它方式消除 write/SBID 压力,否则 K64 应视为性能回退。 + +## 最新 ARK SDPA 对比 + +拉取最新 K32 实现后,在 XPU 0 和 XPU 1 上使用相同的 75k-token shape 与 launch 配置,重新运行了 +dense ARK SDPA 和 BF16 sparse SDPA: + +- Commit:`9b1a9512` +- Shape:`seq_len=75000`、HND、40 个 Q heads、40 个 KV heads、head_dim 128 +- Sparse 配置:`topk=0.5`、`q_tile_override=256`、`sparse_q_block_tokens=256`、 + `sparse_k_block_tokens=64` +- Benchmark 选项:`--warmup 1 --iters 2` +- Timing:XPU 0 和 XPU 1 的均值;sparse 同时记录 kernel-only 和 end-to-end + +| 路径 | 平均延迟 | 相对 dense ARK 加速比 | +|---|---:|---:| +| dense ARK SDPA | 994.6 ms | 1.00x | +| BF16 sparse K32,kernel-only | 598.2 ms | 1.66x | +| BF16 sparse K32,end-to-end | 697.6 ms | 1.43x | + +最新 Unitrace kernel-property pass 报告:dense ARK 为 SIMD16、SLM 0、private memory 0 B/thread、 +spill 0、GRF 256;BF16 sparse 为 SIMD16、SLM 0、private memory 2176 B/thread、spill 0、GRF 256。 + +当前 ComputeBasic 和 VectorEngineStalls counter pass 因主机 `observation_paranoid=1`,无法创建 +metric query 或 streamer。没有修改系统策略,因此最新比较使用相同 shape 的 unprofiled timing 加 +kernel-property pass。原始 Unitrace 输出和 timing CSV 位于: + +`benchmarks/results/apple_to_apple_ark_sdpa_bf16_sparse_75k_xpu0_20260814_135844/` + +Timing CSV: + +- `benchmarks/results/k32_rerun_bf16_xpu0_20260814_134727.csv` +- `benchmarks/results/k32_rerun_bf16_xpu1_20260814_134959.csv` + +## Flux BF16 sparse topk sweep + +最新 K32 BF16 sparse 路径通过 Flux example 运行了 1024x1024 sweep,使用相同 prompt、seed、50 个 +denoising steps、qtile 256、Q block 256 和 K routing block 64。每个 topk 在独立 XPU 上并行运行。 +全部运行均完成了 2,850/2,850 次 sparse attention call,runtime fallback 为 0。 + +| topk | XPU | 实测 sparsity | PNG | +|---:|---:|---:|---| +| 1.0 | 0 | 0.00% | `flux_topk1p0.png` | +| 0.9 | 1 | 11.11% | `flux_topk0p9.png` | +| 0.8 | 2 | 20.83% | `flux_topk0p8.png` | +| 0.7 | 3 | 30.56% | `flux_topk0p7.png` | +| 0.6 | 4 | 40.28% | `flux_topk0p6.png` | +| 0.5 | 5 | 50.00% | `flux_topk0p5.png` | +| 0.4 | 6 | 61.11% | `flux_topk0p4.png` | +| 0.3 | 7 | 70.83% | `flux_topk0p3.png` | +| 0.2 | 0 | 80.56% | `flux_topk0p2.png` | +| 0.1 | 1 | 90.28% | `flux_topk0p1.png` | +| 0.01 | 2 | 98.61% | `flux_topk0p01.png` | + +主 sweep artifacts: + +`benchmarks/results/flux_bf16_topk_sweep_1024_parallel_20260814_160126/` + +新增低 topk artifacts: + +`benchmarks/results/flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/` + +每个目录包含 `summary.csv`、精确 per-run command、log、status 文件和 PNG。 diff --git a/auto_round_extension/ark/examples/run_flux.py b/auto_round_extension/ark/examples/run_flux.py index 0bc89fec53..57fcf902d6 100644 --- a/auto_round_extension/ark/examples/run_flux.py +++ b/auto_round_extension/ark/examples/run_flux.py @@ -54,10 +54,10 @@ def env_sparse_kernel(name="FLUX_SPARSE_KERNEL", default="int8"): model_id = os.getenv("FLUX_MODEL", "~/workspace/models/black-forest-labs/FLUX.1-dev/") pipe = FluxPipeline.from_pretrained(model_id, torch_dtype=dtype) -if benchmark_scope != "block": - pipe.to(device) if cpu_offload_enabled: - pipe.enable_model_cpu_offload() + pipe.enable_model_cpu_offload(device=device) +elif benchmark_scope != "block": + pipe.to(device) height = int(os.getenv("FLUX_HEIGHT", "1024")) width = int(os.getenv("FLUX_WIDTH", "1024")) From 58105f7acb24ca5079d04a842f940e787be00782 Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Mon, 17 Aug 2026 02:50:40 +0000 Subject: [PATCH 31/42] fix: support causal qtile256 sparse attention --- .../stla/xe_sparse_sdpa_fwd_mainloop.hpp | 31 ++++++----- .../test/test_sage_sparse_prefill_e2e.py | 13 +++++ ...PARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md | 53 +++++++++++++++++++ ...SE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md | 53 +++++++++++++++++++ 4 files changed, 138 insertions(+), 12 deletions(-) create mode 100644 auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md create mode 100644 auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp index a89d36aabe..c1b2d1fae2 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp @@ -264,7 +264,13 @@ struct SPARSESDPAFwdMainloop, CausalMask_, Full subgroup_q_row_in_tile = cute::min(subgroup_q_row_in_tile, q_blocks_per_wg_tile - 1); int sparse_route_blocks = params.num_k_blocks > 0 ? params.num_k_blocks : total_blk; - int k_tiles_per_sparse_route_block = cute::max(1, ceil_div(total_blk, sparse_route_blocks)); + // The causal scheduler shortens total_blk for each Q subgroup. Deriving + // this ratio from total_blk would then collapse a 64-token route block to + // one K32 tile near the beginning of the sequence and drop half its keys. + // Keep the route-to-physical-tile mapping tied to the full K shape instead. + int k_route_block_tokens = cute::ceil_div(int(size<0>(K_2D)), sparse_route_blocks); + int k_tiles_per_sparse_route_block = + cute::max(1, ceil_div(k_route_block_tokens, get<1>(TileShapeQK{}))); auto route_block_to_k_tile = [&](int route_block, int micro_tile) { return route_block * k_tiles_per_sparse_route_block + micro_tile; }; @@ -325,17 +331,18 @@ struct SPARSESDPAFwdMainloop, CausalMask_, Full if (subgroup_selected) { if constexpr (!is_cache && CausalMask) { - if (K == total_blk - 1) { - Tensor cPgP = make_identity_tensor(make_shape(seq_len, seq_len)); - Tensor gP = local_tile(cPgP, take<0, 2>(TileShapeQK{}), make_coord(get<0>(blk_qv), K)); - auto cS_thread = thr_mma_qk.partition_C(gP); - CUTLASS_PRAGMA_UNROLL - for (int i = 0; i < tSrS.size(); ++i) { - int row_idx = get<0>(cS_thread(i)); - int col_idx = get<1>(cS_thread(i)); - if (col_idx - seq_len_kv_cache - full_tile_offset > row_idx - discard_seq_coord) { - tSrS(i) = ElementS(-INFINITY); - } + // K32 splits each logical 64-token sparse route block into two + // physical K tiles. The diagonal can therefore occur in any + // physical tile, rather than only in the final K tile. + Tensor cPgP = make_identity_tensor(make_shape(seq_len, seq_len)); + Tensor gP = local_tile(cPgP, take<0, 2>(TileShapeQK{}), make_coord(get<0>(blk_qv), K)); + auto cS_thread = thr_mma_qk.partition_C(gP); + CUTLASS_PRAGMA_UNROLL + for (int i = 0; i < tSrS.size(); ++i) { + int row_idx = get<0>(cS_thread(i)); + int col_idx = get<1>(cS_thread(i)); + if (col_idx - seq_len_kv_cache - full_tile_offset > row_idx - discard_seq_coord) { + tSrS(i) = ElementS(-INFINITY); } } } else if constexpr (FullMask_) { diff --git a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py index a08bccc10b..b37c9445b3 100644 --- a/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py +++ b/auto_round_extension/ark/auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py @@ -553,6 +553,19 @@ def main() -> None: sparse_k_block_tokens=64, ) run_case_sdpa(dtype, 128, is_causal=True, q_tile_override=64) + # Regression coverage for causal masking across K32 qtile256 microtiles. + run_case_sdpa( + dtype, + 128, + seq_len_q=512, + seq_len_kv=512, + num_heads_q=8, + num_heads_kv=8, + is_causal=True, + q_tile_override=256, + sparse_q_block_tokens=256, + sparse_k_block_tokens=64, + ) run_case_sdpa_full(dtype, 64) run_case_sdpa_full(dtype, 128, q_tile_override=64) diff --git a/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md b/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md new file mode 100644 index 0000000000..8e13eb450c --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md @@ -0,0 +1,53 @@ +# Flux Sparse Attention: BF16 vs INT8 Apples-to-Apples Comparison + +Date: 2026-08-16 + +## Scope + +This report compares the existing Flux BF16 sparse sweep with the INT8 sparse sweep generated on 2026-08-16. + +Both runs use the same effective configuration: + +- FLUX.1-dev, 1024×1024 output, 50 denoising steps, guidance scale 3.5, seed 0 +- Prompt: `A cat holding a sign that says hello world` +- qtile256, sparse Q block 256, sparse K block 64 +- BF16 pipeline tensors; BF16 sparse uses `sparge_sage2_attn_meansim_topk_xpu_sdpa`, while INT8 sparse uses `sparge_sage2_attn_meansim_topk_xpu` with INT8 Q/K quantization +- CPU model offload enabled; one process per XPU + +The BF16 runs were collected on 2026-08-14 and the INT8 runs on 2026-08-16. The table is therefore configuration-matched, but not a same-minute controlled performance experiment. The top-k-to-XPU assignment is the same for the common top-k values. + +## Common top-k results + +`INT8/BF16` is the wall-clock ratio; a value above 1 means INT8 took longer in these runs. `Mean RGB diff` is the mean absolute per-channel difference between the corresponding 1024×1024 PNGs, using the same prompt and seed. It is an image-difference diagnostic, not an image-quality score. + +| top-k | attention sparsity | BF16 time (s) | INT8 time (s) | INT8/BF16 | mean RGB diff | BF16 image | INT8 image | +|---:|---:|---:|---:|---:|---:|---|---| +| 1.0 | 0.00% | 119 | 173 | 1.45x | 1.357 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk1p0.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk1p0.png) | +| 0.9 | 11.11% | 116 | 173 | 1.49x | 1.150 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p9.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p9.png) | +| 0.8 | 20.83% | 117 | 168 | 1.44x | 6.168 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p8.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p8.png) | +| 0.7 | 30.56% | 116 | 168 | 1.45x | 7.833 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p7.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p7.png) | +| 0.6 | 40.28% | 113 | 169 | 1.50x | 3.121 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p6.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p6.png) | +| 0.5 | 50.00% | 118 | 167 | 1.42x | 1.252 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p5.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p5.png) | +| 0.4 | 61.11% | 114 | 167 | 1.46x | 9.763 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p4.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p4.png) | +| 0.3 | 70.83% | 112 | 165 | 1.47x | 3.150 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p3.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p3.png) | +| 0.2 | 80.56% | 111 | 116 | 1.05x | 10.759 | [PNG](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p2.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p2.png) | +| 0.1 | 90.28% | 111 | 116 | 1.05x | 17.252 | [PNG](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p1.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p1.png) | + +The BF16 links for top-k 0.2 and 0.1 are from the extra BF16 sweep directory; the directory name is `flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550`. + +## Run integrity + +- Every common BF16 and INT8 run completed with exit code 0. +- Every run performed 2,850 sparse attention calls: 1,900 single-stream and 950 joint-stream calls. +- Both kernels reported zero unsupported fallbacks and zero runtime fallbacks. +- All generated files are valid 1024×1024 RGB PNGs. + +## BF16-only additional result + +BF16 also has a top-k 0.01 run: 111 seconds, 98.61% attention sparsity, with output at [flux_topk0p01.png](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p01.png). There is no matching INT8 top-k 0.01 run in the current sweep. + +## Raw records + +- [BF16 main summary](flux_bf16_topk_sweep_1024_parallel_20260814_160126/summary.csv) +- [BF16 extra summary](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/summary.csv) +- [INT8 summary](flux_int8_topk_sweep_20260816/summary.csv) diff --git a/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md b/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md new file mode 100644 index 0000000000..f6da12d9c8 --- /dev/null +++ b/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md @@ -0,0 +1,53 @@ +# Flux 稀疏注意力:BF16 与 INT8 的一对一对比 + +日期:2026-08-16 + +## 范围 + +本文对比已有的 Flux BF16 稀疏扫描和 2026-08-16 生成的 INT8 稀疏扫描。 + +两次运行使用相同的有效配置: + +- FLUX.1-dev,输出 1024×1024,50 个去噪步,guidance scale 3.5,seed 0 +- Prompt:`A cat holding a sign that says hello world` +- qtile256,稀疏 Q block 256,稀疏 K block 64 +- Flux pipeline 张量为 BF16;BF16 稀疏使用 `sparge_sage2_attn_meansim_topk_xpu_sdpa`,INT8 稀疏使用带 INT8 Q/K 量化的 `sparge_sage2_attn_meansim_topk_xpu` +- 启用 CPU model offload;每张 XPU 一个进程 + +BF16 运行于 2026-08-14 收集,INT8 运行于 2026-08-16 收集。因此下表是配置对齐的比较,但不是同一分钟内的严格性能实验。共同 top-k 的 XPU 分配相同。 + +## 共同 top-k 结果 + +`INT8/BF16` 是墙钟时间比值;大于 1 表示本次运行中 INT8 用时更长。`Mean RGB diff` 是相同 prompt 和 seed 下,对应 1024×1024 PNG 的逐通道绝对差均值。它是图像差异诊断值,不是图像质量评分。 + +| top-k | 注意力稀疏率 | BF16 用时(秒) | INT8 用时(秒) | INT8/BF16 | RGB 均值差 | BF16 图像 | INT8 图像 | +|---:|---:|---:|---:|---:|---:|---|---| +| 1.0 | 0.00% | 119 | 173 | 1.45x | 1.357 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk1p0.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk1p0.png) | +| 0.9 | 11.11% | 116 | 173 | 1.49x | 1.150 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p9.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p9.png) | +| 0.8 | 20.83% | 117 | 168 | 1.44x | 6.168 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p8.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p8.png) | +| 0.7 | 30.56% | 116 | 168 | 1.45x | 7.833 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p7.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p7.png) | +| 0.6 | 40.28% | 113 | 169 | 1.50x | 3.121 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p6.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p6.png) | +| 0.5 | 50.00% | 118 | 167 | 1.42x | 1.252 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p5.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p5.png) | +| 0.4 | 61.11% | 114 | 167 | 1.46x | 9.763 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p4.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p4.png) | +| 0.3 | 70.83% | 112 | 165 | 1.47x | 3.150 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p3.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p3.png) | +| 0.2 | 80.56% | 111 | 116 | 1.05x | 10.759 | [PNG](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p2.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p2.png) | +| 0.1 | 90.28% | 111 | 116 | 1.05x | 17.252 | [PNG](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p1.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p1.png) | + +BF16 的 top-k 0.2 和 0.1 链接来自额外 BF16 扫描目录:`flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550`。 + +## 运行完整性 + +- 所有共同 BF16 和 INT8 运行均以 exit code 0 完成。 +- 每次运行均执行 2,850 次稀疏注意力:1,900 次 single-stream,950 次 joint-stream。 +- 两种 kernel 均报告 unsupported fallback 为 0、runtime fallback 为 0。 +- 所有输出文件均为有效的 1024×1024 RGB PNG。 + +## 仅 BF16 的额外结果 + +BF16 还运行了 top-k 0.01:111 秒,注意力稀疏率 98.61%,输出为 [flux_topk0p01.png](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p01.png)。当前扫描没有对应的 INT8 top-k 0.01 结果。 + +## 原始记录 + +- [BF16 主扫描汇总](flux_bf16_topk_sweep_1024_parallel_20260814_160126/summary.csv) +- [BF16 额外扫描汇总](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/summary.csv) +- [INT8 扫描汇总](flux_int8_topk_sweep_20260816/summary.csv) From 1d0040e88730a1699269d1ce6b6de9d0f94f3f1c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 06:07:38 +0000 Subject: [PATCH 32/42] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../ark/examples/flux_gen_bf16_sweep.py | 38 ++++++++++++------- .../ark/tools/run_sparse_sagev1_bench.sh | 3 ++ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py b/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py index 597890add2..c3be4e398b 100644 --- a/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py +++ b/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py @@ -47,12 +47,17 @@ def main(): dev_suffix = f"_dev{device_id}" if device_id else "" print(f"[flux_sweep] model={model_id}", flush=True) - print(f"[flux_sweep] topks={topks} run_dense={run_dense} size={height}x{width} steps={steps} seed={seed}", flush=True) + print( + f"[flux_sweep] topks={topks} run_dense={run_dense} size={height}x{width} steps={steps} seed={seed}", flush=True + ) print(f"[flux_sweep] out_dir={out_dir}", flush=True) - print(f"[flux_sweep] kernel={os.getenv('FLUX_SPARSE_KERNEL', '?')} " - f"q_tile={os.getenv('FLUX_SPARSE_Q_TILE_OVERRIDE', '0')} " - f"q_block={os.getenv('FLUX_SPARSE_Q_BLOCK_TOKENS', 'default')} " - f"k_block={os.getenv('FLUX_SPARSE_K_BLOCK_TOKENS', 'default')}", flush=True) + print( + f"[flux_sweep] kernel={os.getenv('FLUX_SPARSE_KERNEL', '?')} " + f"q_tile={os.getenv('FLUX_SPARSE_Q_TILE_OVERRIDE', '0')} " + f"q_block={os.getenv('FLUX_SPARSE_Q_BLOCK_TOKENS', 'default')} " + f"k_block={os.getenv('FLUX_SPARSE_K_BLOCK_TOKENS', 'default')}", + flush=True, + ) pipe = FluxPipeline.from_pretrained(model_id, torch_dtype=dtype) # Offload-only: pipe.to(device) would load the whole ~54 GB model onto the @@ -126,7 +131,8 @@ def do_run(tag, topk, png_name): print( f"[flux_sweep] DONE tag={tag} topk={topk} wall={wall_s:.3f}s " f"sparsity={stats.avg_sparsity:.4f} sparse_calls={stats.sparse_calls} " - f"runtime_fallbacks={stats.runtime_fallbacks}", flush=True + f"runtime_fallbacks={stats.runtime_fallbacks}", + flush=True, ) else: print(f"[flux_sweep] DONE tag={tag} wall={wall_s:.3f}s", flush=True) @@ -142,8 +148,17 @@ def do_run(tag, topk, png_name): # CSV + markdown summary (device-suffixed so parallel instances sharing # FLUX_OUTPUT_DIR do not clobber each other). csv_path = out_dir / f"sweep_summary{dev_suffix}.csv" - fieldnames = ["tag", "topk", "wall_s", "sparsity", "calls", "sparse_calls", - "runtime_fallbacks", "unsupported_fallbacks", "png"] + fieldnames = [ + "tag", + "topk", + "wall_s", + "sparsity", + "calls", + "sparse_calls", + "runtime_fallbacks", + "unsupported_fallbacks", + "png", + ] with open(csv_path, "w", newline="", encoding="utf-8") as fh: writer = csv.DictWriter(fh, fieldnames=fieldnames) writer.writeheader() @@ -153,11 +168,8 @@ def do_run(tag, topk, png_name): with open(md_path, "w", encoding="utf-8") as fh: fh.write("| tag | topk | wall_s | sparsity | calls | sparse_calls | runtime_fallbacks | png |\n") fh.write("|---|---|---|---|---|---|---|---|\n") - for r in rows: - fh.write( - f"| {r['tag']} | {r['topk']} | {r['wall_s']} | {r['sparsity']} | {r['calls']} " - f"| {r['sparse_calls']} | {r['runtime_fallbacks']} | `{r['png']}` |\n" - ) + fh.writelines(f"| {r['tag']} | {r['topk']} | {r['wall_s']} | {r['sparsity']} | {r['calls']} " + f"| {r['sparse_calls']} | {r['runtime_fallbacks']} | `{r['png']}` |\n" for r in rows) print(f"[flux_sweep] summary: {csv_path}", flush=True) print(f"[flux_sweep] summary: {md_path}", flush=True) diff --git a/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh b/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh index 41c6701b43..bf92761f0a 100755 --- a/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh +++ b/auto_round_extension/ark/tools/run_sparse_sagev1_bench.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# # Copyright (C) 2026 Intel Corporation +# # SPDX-License-Identifier: Apache-2.0 + # # run_sparse_sagev1_bench.sh # ========================== From fbf26b5716f69610ea6e172d4fb7ecbb62dd6deb Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 18 Aug 2026 14:09:39 +0800 Subject: [PATCH 33/42] add shape analysis Signed-off-by: yiliu30 --- ...F16_SPARSE_TILE_SHAPE_ANALYSIS_20260818.md | 217 ++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 auto_round_extension/ark/benchmarks/BF16_SPARSE_TILE_SHAPE_ANALYSIS_20260818.md diff --git a/auto_round_extension/ark/benchmarks/BF16_SPARSE_TILE_SHAPE_ANALYSIS_20260818.md b/auto_round_extension/ark/benchmarks/BF16_SPARSE_TILE_SHAPE_ANALYSIS_20260818.md new file mode 100644 index 0000000000..56086fcf3f --- /dev/null +++ b/auto_round_extension/ark/benchmarks/BF16_SPARSE_TILE_SHAPE_ANALYSIS_20260818.md @@ -0,0 +1,217 @@ +# BF16 Sparse SDPA Tile Shape Analysis + +Date: 2026-08-18 + +## Scope + +This note summarizes the tile-shape discussion for the native BF16 sparse SDPA kernel. The question is whether reducing the workgroup Q tile from 256 to 64 while increasing the GEMM head-dimension tile from 32 to 128 can reach current performance. + +The analysis is based on: + +- Current ARK sparse BF16 SDPA implementation: + - `auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp` + - `auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp` + - `auto_round_kernel/sdpa_sparse_sdpa.cpp` +- SYCL-TLA tuning guide: + - `/home/yiliu4/workspace/sycl-tla/media/docs/cpp/cute/12_intel_performance_guide.md` + +## Current BF16 Sparse Tile + +For head_dim=128 with `q_tile_override=256`, the current native BF16 sparse SDPA path uses: + +```cpp +using ShapeQK = Shape<_256, _32, _32>; +using ShapePV = Shape<_256, _32, _32>; +using ShapeOut = Shape<_256, _128>; +using SubgroupLayoutQK = Layout>; +``` + +Interpretation: + +| Item | Value | +|---|---:| +| Q rows per workgroup | 256 | +| K-token columns per QK tile | 32 | +| Head-dim chunk per QK loop | 32 | +| Head-dim loops for head_dim=128 | 4 | +| QK score tile per workgroup | 256 x 32 | +| Output tile per workgroup | 256 x 128 | +| Subgroups per workgroup | 16 | +| Work-items per workgroup | 256 | +| Q rows per subgroup | 16 | + +The sparse API variant `sdpa_impl_bf16_sparse_sdpa_qtile256_row64k` passes `sparse_q_block_size=256`, so one sparse LUT row covers the full 256-token Q workgroup tile. The logical sparse K route block is 64 tokens, but the physical QK K-token tile is 32, so each selected K64 route block maps to two K32 micro-tiles. + +## Proposed Shape + +The proposed direction is to reduce M and increase the head-dimension K chunk: + +```cpp +using ShapeQK = Shape<_64, _32, _128>; +``` + +Here, `K=128` means the GEMM inner dimension, i.e. the head-dimension chunk, not the token-axis K tile. + +To keep the per-subgroup Q work comparable to the current kernel, the matching subgroup layout would likely be: + +```cpp +using SubgroupLayoutQK = Layout>; +``` + +This keeps: + +```text +Q rows per subgroup = 64 / 4 = 16 +``` + +which matches the current: + +```text +Q rows per subgroup = 256 / 16 = 16 +``` + +Keeping 16 subgroups for `M=64` would give only 4 Q rows per subgroup and would also change the DPAS M shape, so it is not an apples-to-apples comparison. + +## Apple-To-Apple Comparison + +| Config | ShapeQK | Q rows/WG | K-token tile | Head-dim chunk | Head-dim loops | Subgroups/WG | Q rows/SG | Main benefit | Main risk | +|---|---|---:|---:|---:|---:|---:|---:|---|---| +| Current | `Shape<_256, _32, _32>` | 256 | 32 | 32 | 4 | 16 | 16 | Large Q tile, stable fragments | More head-dim loop iterations | +| Proposed | `Shape<_64, _32, _128>` | 64 | 32 | 128 | 1 | 4 | 16 | Fewer head-dim loops | Larger Q/K fragments and 4x more workgroups | + +Current pseudocode: + +```cpp +for q_tile in Q step 256: + for selected k_token_tile in sparse_route: // physical token tile = 32 + S[256, 32] = 0 + + for d in head_dim step 32: // 4 loops + q_frag = load Q[256, 32] + k_frag = load K[32, 32] + S += q_frag @ k_frag.T + + P = softmax(S) + O[256, 128] += P @ V[32, 128] +``` + +Proposed pseudocode: + +```cpp +for q_tile in Q step 64: + for selected k_token_tile in sparse_route: // physical token tile = 32 + S[64, 32] = 0 + + for d in head_dim step 128: // 1 loop + q_frag = load Q[64, 128] + k_frag = load K[32, 128] + S += q_frag @ k_frag.T + + P = softmax(S) + O[64, 128] += P @ V[32, 128] +``` + +For the same 256-query region, the proposed shape launches four workgroups instead of one. The QK math is similar, but the execution shape is different: fewer head-dim loops per workgroup, more workgroups, less per-workgroup Q reuse, and larger Q/K fragments. + +## Coexisting Fragment Estimate + +The table below estimates logical fragment elements per subgroup. It is not an exact GRF count, but it shows the direction of register pressure. Prefetch fragments are excluded because `XE_PREFETCH_2D` has no destination register fragment. + +Assumptions: + +- Current: `ShapeQK = Shape<_256, _32, _32>`, `ShapePV = Shape<_256, _32, _32>`, `ShapeOut = Shape<_256, _128>`, 16 subgroups/WG. +- Proposed: `ShapeQK = Shape<_64, _32, _128>`, `ShapePV = Shape<_64, _32, _32>`, `ShapeOut = Shape<_64, _128>`, 4 subgroups/WG. +- Both keep 16 Q rows per subgroup. +- Copy fragments and MMA fragments are counted separately because both can be live around `reorder(copy_frag, mma_frag)` and `cute::gemm(...)`. + +### QK Phase + +| Fragment | Role | Current per SG | Proposed per SG | Change | +|---|---:|---:|---:|---:| +| `tQrQ` | Q copy fragment | `16 x 32 = 512` | `16 x 128 = 2048` | 4.0x | +| `tSrQ` | Q MMA fragment | `16 x 32 = 512` | `16 x 128 = 2048` | 4.0x | +| `tKrK` | K copy fragment | `32 x 32 = 1024` | `32 x 128 = 4096` | 4.0x | +| `tSrK` | K MMA fragment | `32 x 32 = 1024` | `32 x 128 = 4096` | 4.0x | +| `tSrS` | QK score accumulator | `16 x 32 = 512` | `16 x 32 = 512` | 1.0x | +| `tArA` | PV/O accumulator | `16 x 128 = 2048` | `16 x 128 = 2048` | 1.0x | +| `tA_max + tA_sum` | Softmax row state | `16 + 16 = 32` | `16 + 16 = 32` | 1.0x | +| **Approximate live sum** | | **5664** | **14880** | **2.63x** | + +### PV Phase + +| Fragment | Role | Current per SG | Proposed per SG | Change | +|---|---:|---:|---:|---:| +| `tSrS / tArP` | Score/probability fragment | `512 + 512` | `512 + 512` | 1.0x | +| `tVrV` | V copy fragment, one V tile | `32 x 32 = 1024` | `32 x 32 = 1024` | 1.0x | +| `tArV` | V MMA fragment, one V tile | `32 x 32 = 1024` | `32 x 32 = 1024` | 1.0x | +| `tArA` | Full output accumulator | `16 x 128 = 2048` | `16 x 128 = 2048` | 1.0x | +| `tA_max + tA_sum` | Softmax row state | `32` | `32` | 1.0x | +| **Approximate live sum** | | **5152** | **5152** | **1.0x** | + +The pressure increase is concentrated in the QK phase. Reducing M from 256 to 64 does not reduce per-subgroup Q rows if the subgroup layout is adjusted from 16 subgroups to 4 subgroups. Increasing the head-dim chunk from 32 to 128 makes the Q/K copy and MMA fragments 4x wider. + +## Why Subgroups Per Workgroup Change + +The subgroup count changes only if we intentionally preserve the same per-subgroup Q work. + +Current: + +```cpp +ShapeQK = Shape<_256, _32, _32>; +SubgroupLayoutQK = Layout>; +``` + +```text +16 subgroups/WG * 16 lanes/subgroup = 256 work-items/WG +Q rows/subgroup = 256 / 16 = 16 +``` + +Proposed apples-to-apples layout: + +```cpp +ShapeQK = Shape<_64, _32, _128>; +SubgroupLayoutQK = Layout>; +``` + +```text +4 subgroups/WG * 16 lanes/subgroup = 64 work-items/WG +Q rows/subgroup = 64 / 4 = 16 +``` + +If we kept 16 subgroups with `M=64`, each subgroup would cover only 4 Q rows. That would make the proposed kernel a different experiment: smaller per-subgroup work, different DPAS M behavior, and more overhead relative to useful compute. + +## Expected Performance Direction + +The SYCL-TLA performance guide gives the key tradeoff: + +- Increasing K can reduce K-loop and 2D block load issue overhead. +- Increasing K can also increase GRF pressure because larger copy/MMA fragments are live. +- Too much GRF pressure can cause compiler spill and erase the benefit. + +For this sparse BF16 SDPA kernel, `M64, headK128` is not expected to be a guaranteed win because: + +1. It reduces head-dim loops from 4 to 1. +2. It launches 4x more workgroups for the same Q region. +3. It makes Q/K copy and MMA fragments 4x wider per subgroup. +4. Attention already keeps score, softmax, probability, V, and output accumulator fragments live. +5. The estimated QK-phase live fragment footprint increases by about 2.6x per subgroup. + +## Recommendation + +Do not assume `Shape<_64, _32, _128>` will reach current performance. It is worth testing only as an A/B if profiling shows the current kernel is dominated by head-dim loop or 2D load issue overhead and unitrace/compiler reporting shows no spill. + +A safer first experiment is: + +```cpp +ShapeQK = Shape<_128, _32, _64>; +``` + +This reduces the head-dim loop count from 4 to 2 while taking a smaller GRF-risk step than `headK=128`. + +Validation should include: + +1. Correctness against dense SDPA. +2. Kernel timing on the same topk, layout, dtype, and sequence length. +3. `unitrace -d -v` to check GRF count and spill/private memory per thread. +4. ComputeBasic and stall metrics if timing changes materially. + From cbda4c48a87b393c3c32a2bccbd339171c1e8b33 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 06:14:02 +0000 Subject: [PATCH 34/42] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- auto_round_extension/ark/examples/flux_gen_bf16_sweep.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py b/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py index c3be4e398b..904c8e7e76 100644 --- a/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py +++ b/auto_round_extension/ark/examples/flux_gen_bf16_sweep.py @@ -168,8 +168,11 @@ def do_run(tag, topk, png_name): with open(md_path, "w", encoding="utf-8") as fh: fh.write("| tag | topk | wall_s | sparsity | calls | sparse_calls | runtime_fallbacks | png |\n") fh.write("|---|---|---|---|---|---|---|---|\n") - fh.writelines(f"| {r['tag']} | {r['topk']} | {r['wall_s']} | {r['sparsity']} | {r['calls']} " - f"| {r['sparse_calls']} | {r['runtime_fallbacks']} | `{r['png']}` |\n" for r in rows) + fh.writelines( + f"| {r['tag']} | {r['topk']} | {r['wall_s']} | {r['sparsity']} | {r['calls']} " + f"| {r['sparse_calls']} | {r['runtime_fallbacks']} | `{r['png']}` |\n" + for r in rows + ) print(f"[flux_sweep] summary: {csv_path}", flush=True) print(f"[flux_sweep] summary: {md_path}", flush=True) From c7620344ebe7c18914c6ec68c7bed18eb090e05b Mon Sep 17 00:00:00 2001 From: yiliu30 Date: Tue, 18 Aug 2026 14:20:02 +0800 Subject: [PATCH 35/42] chore: stop tracking ark benchmark results --- ...PARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md | 53 --- ...SE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md | 53 --- .../results/SPARSE_BF16_HANDOFF_20260814.md | 171 ---------- .../SPARSE_BF16_HANDOFF_20260814_CN.md | 156 --------- .../results/SPARSE_BF16_K32_AB_20260814.md | 323 ------------------ .../results/SPARSE_BF16_K32_AB_20260814_CN.md | 255 -------------- .../results/UNITRACE_USAGE_GUIDE_20260814.md | 294 ---------------- .../ab_bf16_sdpa_k32_20260814_092404.csv | 16 - .../results/ab_k32_bf16_20260814_091351.csv | 16 - .../results/ab_k64_bf16_20260814_090508.csv | 16 - .../SWEEP_SUMMARY_dev5.md | 3 - .../flux_bf16_qtile256_topk0.9_512_dev5.png | Bin 305961 -> 0 bytes .../sweep_summary_dev5.csv | 2 - .../SWEEP_SUMMARY.md | 71 ---- .../bf16_k32_qtile256_topk_0p5_0p3_0p1.csv | 31 -- .../fp16_k32_qtile256_topk_0p5_0p3_0p1.csv | 31 -- .../k32_compute.metrics.2889557 | 7 - .../results/unitrace_k32_stalls_20260814.csv | 8 - .../k32_stalls.metrics.2892853 | 7 - .../results/unitrace_k32_verbose_20260814.csv | 8 - .../k32_verbose.3726840 | 19 -- .../unitrace_k64_compute_real_20260814.csv | 8 - .../k64_compute_real.2948755 | 32 -- .../k64_compute_real.metrics.2948755 | 7 - .../unitrace_k64_stalls_real_20260814.csv | 8 - .../k64_stalls_real.metrics.2952213 | 7 - 26 files changed, 1602 deletions(-) delete mode 100644 auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md delete mode 100644 auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md delete mode 100644 auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814.md delete mode 100644 auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814_CN.md delete mode 100644 auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md delete mode 100644 auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md delete mode 100644 auto_round_extension/ark/benchmarks/results/UNITRACE_USAGE_GUIDE_20260814.md delete mode 100644 auto_round_extension/ark/benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/ab_k32_bf16_20260814_091351.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/ab_k64_bf16_20260814_090508.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/SWEEP_SUMMARY_dev5.md delete mode 100644 auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png delete mode 100644 auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/sweep_summary_dev5.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/k32_qtile256_sweep_20260814_163445/SWEEP_SUMMARY.md delete mode 100644 auto_round_extension/ark/benchmarks/results/k32_qtile256_sweep_20260814_163445/bf16_k32_qtile256_topk_0p5_0p3_0p1.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/k32_qtile256_sweep_20260814_163445/fp16_k32_qtile256_topk_0p5_0p3_0p1.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_compute_20260814/k32_compute.metrics.2889557 delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853 delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840 delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755 delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755 delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814.csv delete mode 100644 auto_round_extension/ark/benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213 diff --git a/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md b/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md deleted file mode 100644 index 8e13eb450c..0000000000 --- a/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816.md +++ /dev/null @@ -1,53 +0,0 @@ -# Flux Sparse Attention: BF16 vs INT8 Apples-to-Apples Comparison - -Date: 2026-08-16 - -## Scope - -This report compares the existing Flux BF16 sparse sweep with the INT8 sparse sweep generated on 2026-08-16. - -Both runs use the same effective configuration: - -- FLUX.1-dev, 1024×1024 output, 50 denoising steps, guidance scale 3.5, seed 0 -- Prompt: `A cat holding a sign that says hello world` -- qtile256, sparse Q block 256, sparse K block 64 -- BF16 pipeline tensors; BF16 sparse uses `sparge_sage2_attn_meansim_topk_xpu_sdpa`, while INT8 sparse uses `sparge_sage2_attn_meansim_topk_xpu` with INT8 Q/K quantization -- CPU model offload enabled; one process per XPU - -The BF16 runs were collected on 2026-08-14 and the INT8 runs on 2026-08-16. The table is therefore configuration-matched, but not a same-minute controlled performance experiment. The top-k-to-XPU assignment is the same for the common top-k values. - -## Common top-k results - -`INT8/BF16` is the wall-clock ratio; a value above 1 means INT8 took longer in these runs. `Mean RGB diff` is the mean absolute per-channel difference between the corresponding 1024×1024 PNGs, using the same prompt and seed. It is an image-difference diagnostic, not an image-quality score. - -| top-k | attention sparsity | BF16 time (s) | INT8 time (s) | INT8/BF16 | mean RGB diff | BF16 image | INT8 image | -|---:|---:|---:|---:|---:|---:|---|---| -| 1.0 | 0.00% | 119 | 173 | 1.45x | 1.357 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk1p0.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk1p0.png) | -| 0.9 | 11.11% | 116 | 173 | 1.49x | 1.150 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p9.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p9.png) | -| 0.8 | 20.83% | 117 | 168 | 1.44x | 6.168 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p8.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p8.png) | -| 0.7 | 30.56% | 116 | 168 | 1.45x | 7.833 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p7.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p7.png) | -| 0.6 | 40.28% | 113 | 169 | 1.50x | 3.121 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p6.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p6.png) | -| 0.5 | 50.00% | 118 | 167 | 1.42x | 1.252 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p5.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p5.png) | -| 0.4 | 61.11% | 114 | 167 | 1.46x | 9.763 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p4.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p4.png) | -| 0.3 | 70.83% | 112 | 165 | 1.47x | 3.150 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p3.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p3.png) | -| 0.2 | 80.56% | 111 | 116 | 1.05x | 10.759 | [PNG](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p2.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p2.png) | -| 0.1 | 90.28% | 111 | 116 | 1.05x | 17.252 | [PNG](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p1.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p1.png) | - -The BF16 links for top-k 0.2 and 0.1 are from the extra BF16 sweep directory; the directory name is `flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550`. - -## Run integrity - -- Every common BF16 and INT8 run completed with exit code 0. -- Every run performed 2,850 sparse attention calls: 1,900 single-stream and 950 joint-stream calls. -- Both kernels reported zero unsupported fallbacks and zero runtime fallbacks. -- All generated files are valid 1024×1024 RGB PNGs. - -## BF16-only additional result - -BF16 also has a top-k 0.01 run: 111 seconds, 98.61% attention sparsity, with output at [flux_topk0p01.png](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p01.png). There is no matching INT8 top-k 0.01 run in the current sweep. - -## Raw records - -- [BF16 main summary](flux_bf16_topk_sweep_1024_parallel_20260814_160126/summary.csv) -- [BF16 extra summary](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/summary.csv) -- [INT8 summary](flux_int8_topk_sweep_20260816/summary.csv) diff --git a/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md b/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md deleted file mode 100644 index f6da12d9c8..0000000000 --- a/auto_round_extension/ark/benchmarks/results/FLUX_SPARSE_BF16_INT8_APPLE_TO_APPLE_20260816_CN.md +++ /dev/null @@ -1,53 +0,0 @@ -# Flux 稀疏注意力:BF16 与 INT8 的一对一对比 - -日期:2026-08-16 - -## 范围 - -本文对比已有的 Flux BF16 稀疏扫描和 2026-08-16 生成的 INT8 稀疏扫描。 - -两次运行使用相同的有效配置: - -- FLUX.1-dev,输出 1024×1024,50 个去噪步,guidance scale 3.5,seed 0 -- Prompt:`A cat holding a sign that says hello world` -- qtile256,稀疏 Q block 256,稀疏 K block 64 -- Flux pipeline 张量为 BF16;BF16 稀疏使用 `sparge_sage2_attn_meansim_topk_xpu_sdpa`,INT8 稀疏使用带 INT8 Q/K 量化的 `sparge_sage2_attn_meansim_topk_xpu` -- 启用 CPU model offload;每张 XPU 一个进程 - -BF16 运行于 2026-08-14 收集,INT8 运行于 2026-08-16 收集。因此下表是配置对齐的比较,但不是同一分钟内的严格性能实验。共同 top-k 的 XPU 分配相同。 - -## 共同 top-k 结果 - -`INT8/BF16` 是墙钟时间比值;大于 1 表示本次运行中 INT8 用时更长。`Mean RGB diff` 是相同 prompt 和 seed 下,对应 1024×1024 PNG 的逐通道绝对差均值。它是图像差异诊断值,不是图像质量评分。 - -| top-k | 注意力稀疏率 | BF16 用时(秒) | INT8 用时(秒) | INT8/BF16 | RGB 均值差 | BF16 图像 | INT8 图像 | -|---:|---:|---:|---:|---:|---:|---|---| -| 1.0 | 0.00% | 119 | 173 | 1.45x | 1.357 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk1p0.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk1p0.png) | -| 0.9 | 11.11% | 116 | 173 | 1.49x | 1.150 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p9.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p9.png) | -| 0.8 | 20.83% | 117 | 168 | 1.44x | 6.168 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p8.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p8.png) | -| 0.7 | 30.56% | 116 | 168 | 1.45x | 7.833 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p7.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p7.png) | -| 0.6 | 40.28% | 113 | 169 | 1.50x | 3.121 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p6.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p6.png) | -| 0.5 | 50.00% | 118 | 167 | 1.42x | 1.252 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p5.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p5.png) | -| 0.4 | 61.11% | 114 | 167 | 1.46x | 9.763 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p4.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p4.png) | -| 0.3 | 70.83% | 112 | 165 | 1.47x | 3.150 | [PNG](flux_bf16_topk_sweep_1024_parallel_20260814_160126/flux_topk0p3.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p3.png) | -| 0.2 | 80.56% | 111 | 116 | 1.05x | 10.759 | [PNG](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p2.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p2.png) | -| 0.1 | 90.28% | 111 | 116 | 1.05x | 17.252 | [PNG](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p1.png) | [PNG](flux_int8_topk_sweep_20260816/flux_topk0p1.png) | - -BF16 的 top-k 0.2 和 0.1 链接来自额外 BF16 扫描目录:`flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550`。 - -## 运行完整性 - -- 所有共同 BF16 和 INT8 运行均以 exit code 0 完成。 -- 每次运行均执行 2,850 次稀疏注意力:1,900 次 single-stream,950 次 joint-stream。 -- 两种 kernel 均报告 unsupported fallback 为 0、runtime fallback 为 0。 -- 所有输出文件均为有效的 1024×1024 RGB PNG。 - -## 仅 BF16 的额外结果 - -BF16 还运行了 top-k 0.01:111 秒,注意力稀疏率 98.61%,输出为 [flux_topk0p01.png](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/flux_topk0p01.png)。当前扫描没有对应的 INT8 top-k 0.01 结果。 - -## 原始记录 - -- [BF16 主扫描汇总](flux_bf16_topk_sweep_1024_parallel_20260814_160126/summary.csv) -- [BF16 额外扫描汇总](flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/summary.csv) -- [INT8 扫描汇总](flux_int8_topk_sweep_20260816/summary.csv) diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814.md deleted file mode 100644 index 5b4dc56dac..0000000000 --- a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814.md +++ /dev/null @@ -1,171 +0,0 @@ -# Handoff: BF16 native sparse SDPA (sparge) — 2026-08-14 - -Status snapshot for a developer picking up this work. Everything here was verified on -**Intel Battlemage XPU (24.4 GB, `intel_gpu_bmg_g21`)**, oneAPI 2026.1, PyTorch 2.13.0+xpu. - -## 1. Where the code lives - -- **Branch `feat/sparse-bf16-prefill-v2`** — all sparse work (INT8 SAGE **and** native BF16/FP16 - sparse SDPA). **`main` only has the INT8 SAGE path** (empty `ark.cpp`/`sparse_attention.py` were - false alarms; check paths against the repo root — `main` has a working int8 `sparge_sage2_attn_meansim_topk_xpu` - in `auto_round_extension/ark/auto_round_kernel/sparse_attention.py`, 1440 lines). -- Switching branches requires a **rebuild** every time (the `.so` in `auto_round_kernel/ark-xbuild/` - only matches the branch it was built on). - -### Key changes in this handoff -- BF16 sparse SDPA now has a separate native BF16/FP16 path (`SparseSDPAConfig`) instead of reusing - the INT8 SAGE DPAS path. -- `benchmarks/bench_sparse_topk.py` now includes dense `ark.sdpa` as a baseline and reports - `speedup_vs_ark`. -- The BF16 sparse selected-block microtile was A/B tested at K64 vs K32. K32 is the current - experimental direction and the locally rebuilt `.so` is back on K32. -- `xe_sparse_sdpa_fwd_mainloop.hpp` supports expanding one 64-token sparse route block into multiple - physical K microtiles, which is required for K32 while keeping the existing 64-token LUT format. -- Unitrace profiles show K64 regresses because of compiler-reported spill plus SEND/SBID and - memory-write pressure. -- A FLUX.1-dev sparse BF16 topk 0.9 K32 image was generated successfully with zero fallbacks. - -### Two separate paths (do not mix) - -| path | wrapper | config | DPAS | -|---|---|---|---| -| INT8 sparse | `sparge_sage2_attn_meansim_topk_xpu` / `sage_sparse` | `SparseSageConfig` | `XE_DPAS_TT<8, int, int8, int8, int>` (+ `static_assert(ElementQ==int8_t)`) | -| BF16/FP16 sparse | `sparge_sage2_attn_meansim_topk_xpu_sdpa` / `sage_sparse_sdpa` | `SparseSDPAConfig` | `XE_DPAS_TT<8, float, bf16, bf16, float>` | - -**Using the int8 DPAS on bf16 fragments hangs the device** (fixed by the split; see -`SPARSE_BF16_DPAS_HANG.md`). - -### Key files -- `auto_round_kernel/sdpa_sparse_sdpa.cpp` — BF16 launcher. `sdpa_sparse.cpp` — INT8 launcher. -- `auto_round_kernel/sparse_attention.py` — Python wrappers + `sparge_preprocess_topk`. -- `auto_round_kernel/sparge_preprocess_triton.py` — triton_xpu preprocess (+ torch fallback). -- `wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`, `sycl_tla_sdpa_sparse.hpp` — kernels. -- `auto_round_kernel/sdpa.cpp` — **dense** SYCL-TLA SDPA → Python `ark.sdpa(...)` - (`xe_sdpa_fwd_mainloop.hpp`). - -## 2. Correctness — verified - -- **Repo e2e tests pass** (`test_sage_sparse_prefill_e2e.py`, `test_sparge_preprocess_topk_e2e.py`). -- **topk=1 (all blocks selected) == dense SDPA**: max diff **0.0039** (bf16 rounding) vs an exact - CPU fp32 reference. This is the "dense gate" test. -- **INT8 == BF16 kernels**: on identical Q/K/V they select the *same* blocks (bit-identical LUT) - and produce outputs within 0.008; verified across separate processes (bit-identical). -- **Preprocess + kernel are deterministic** (same QKV → identical results, in-process and - cross-process). - -## 3. Performance (bench `benchmarks/bench_sparse_topk.py`, seq 75000, 40h×128) - -New mode `dense_ark_sdpa` (dense SYCL-TLA SDPA via `ark.sdpa`) added as a third baseline; every -row gets a `speedup_vs_ark` column. Full tables in `BENCH_SPARSE_ARK_SDPA_20260813.md`. - -| mode | topk | vs torch | vs sagev1 | vs ark_sdpa | -|---|---|---|---|---| -| dense_ark_sdpa | — | 1.5–1.6× | 0.82–0.87× | 1.0 | -| INT8 sparse qtile256 (kernel) | 0.5 / 0.25 / 0.125 | 3.5 / 6.9 / 13.2× | — | 2.2 / 4.3 / 8.2× | -| BF16 sparse (kernel) | 0.5 / 0.25 / 0.125 | 1.5 / 2.9 / 5.6× | — | 0.92 / 1.8 / 3.5× | - -Notes: `dense_ark_sdpa` is faster than torch SDPA but slower than `dense_sagev1`; the BF16 sparse -kernel only beats the dense ark kernel at topk ≤ 0.25. The 1.5×-not-2× ceiling at topk 0.5 is the -**SBID scoreboard stall** (memory-SEND concurrency bound; INT8 avoids it because its K is half the -size) — earlier profiling details in `SPARSE_BF16_KERNEL_OPTIMIZATION_JOURNEY.md` / -`SPARSE_SDPA_KERNEL_OPTIMIZATION_OPTIONS.md`. - -**2026-08-14 A/B update:** changing the BF16 sparse qtile256 selected-block microtile from K64 to -K32 improved kernel-only latency by **1.69–1.77×**. At topk 0.5, BF16 sparse improved from -1511 ms / **0.91× vs ark** to 863 ms / **1.59× vs ark**. Correctness e2e still passed. See -`SPARSE_BF16_K32_AB_20260814.md`. - -**2026-08-14 unitrace update:** profiling K32 vs K64 at topk 0.5 confirmed the K64 regression is -compiler-reported spill plus memory/SEND scoreboard pressure, not lower occupancy. Kernel properties -from `unitrace --device-timing --verbose` showed `Spill Memory Per Thread = 0 B` for K32 and -`3840 B` for K64, with the same `Private Memory Per Thread = 2432 B` and register file size 256. -Aggregated `SPARSESDPAFwdMainloop` GPU time was 1684.6 ms (K32) vs 3072.4 ms (K64), XVE active -64.7% vs 39.9%, XVE stall 35.1% vs 59.9%, and SBID stall 31.4% vs 55.7%. SEND instructions rose -4.4× and GPU memory writes rose ~5.0× with K64. SLM read/write was 0/0 in both profiles because the -spill is private/scratch traffic, not SLM-backed storage. Raw profiles are in -`unitrace_k32_compute_20260814/`, `unitrace_k32_stalls_20260814/`, -`unitrace_k32_verbose_20260814/`, `unitrace_k64_compute_real_20260814/`, and -`unitrace_k64_stalls_real_20260814/`. - -## 4. FLUX.1-dev end-to-end — the critical gotcha - -**Use `enable_sequential_cpu_offload()`, NOT `enable_model_cpu_offload()`.** - -- `enable_model_cpu_offload()` streams at the *component* level: the whole ~46 GB transformer gets - pulled onto the 24.4 GB device (peak ~24 GB, ~350 MB headroom). The sparse launch then flakily - OOMs (`OUT_OF_DEVICE_MEMORY` / `OUT_OF_RESOURCES`), and can **reset the GPU** - (`dmesg: exec queue reset` on `0000:ba:00.0` = dev5; the `DEVICE_LOST` error). -- Sequential offload keeps the peak at **~0.16 GB** → triton_xpu sparse runs reliably (0 fallbacks). - Cost: ~4 s/step vs ~1 s/step (50-step generation ≈ 4–5 min). - -### FLUX image-quality findings -- bf16 sparse and int8 sparse produce **identical images** at the same config (verified, 0.0 diff). -- `topk=0.9` drops **12.5–16.7%** of blocks (route-block rounding + sim threshold), not 10% → - images sit ~15–18 from dense. Attention-mass coverage: topk 0.9 keeps **91.5%** of the mass, - topk 0.5 keeps **64.6%** — the renormalized output shifting is inherent to topk-sparse on - FLUX's spread-out attention. -- **Latest K32 BF16 sparse topk 0.9 run:** saved PNG at - `benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png`. - Config: BF16 sparse qtile256, selected-block K32, `topk=0.9`, 512×512, 50 steps, seed 0, - `ZE_AFFINITY_MASK=5`. Result: wall **238.884 s**, sparsity **0.125**, calls **2850**, - sparse_calls **2850**, runtime_fallbacks **0**. -- **Open question: run-to-run non-determinism.** Same config (bf16 qtile256 topk0.5, seed 0) gave - images differing by **48.5** across two runs (means 97.6 vs 101.3), while topk 0.9 was - deterministic (0.0). QKV, preprocess and kernel are all verified deterministic → suspected - diffusion-trajectory amplification of a tiny perturbation elsewhere, not a sparse-kernel bug. - Worth re-checking before trusting single-run image comparisons. - -### Dev tooling (untracked) -- `examples/flux_gen_bf16_sweep.py` — offload-only runner (loop over topk, saves PNGs + summary). -- `tools/sweep_flux_bf16_topk.sh` — one-GPU wrapper (qtile256 env). **Note: `FLUX_SPARSE_KERNEL` - is now env-overridable (default bf16)**; earlier it hardcoded bf16 and silently made an "int8" - run bf16. `main`'s `flux_sparse_patch.py` is int8-only and ignores the block-token envs. -- `tools/bench_sparse_bf16_fp16_sweep.sh` — the bench sweep driver. - -## 5. Current repo state (uncommitted) - -- **Branch**: `feat/sparse-bf16-prefill-v2`. -- **Modified (tracked)**: `benchmarks/bench_sparse_topk.py` (added `dense_ark_sdpa` mode + - `speedup_vs_ark` column), sparse SDPA headers for K32 route-block expansion — not yet committed. -- **Untracked**: `examples/flux_gen_bf16_sweep.py`, `tools/sweep_flux_bf16_topk.sh`, - `tools/bench_sparse_bf16_fp16_sweep.sh`. -- `.so`: `auto_round_kernel/ark-xbuild/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so` - (feature-branch build). A stale **main** `.so` copy sits in `auto_round_kernel/xbuild/` (harmless; - feature's loader uses `ark-xbuild`). -- `benchmarks/results/` is gitignored → all result CSVs, PNGs, and docs below are local-only. - -## 6. How to run - -```bash -# rebuild (after oneAPI: source /opt/intel/oneapi/setvars.sh --force) -cd auto_round_extension/ark/auto_round_kernel/ark-xbuild && cmake --build . -j 16 - -# correctness tests -export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch -.venv/bin/python auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py -.venv/bin/python auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py - -# FLUX sweep (bf16 qtile256; set FLUX_SPARSE_KERNEL=int8 for SAGE) -export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu -export FLUX_SPARSE_KERNEL=bf16 FLUX_SPARSE_TOPKS="0.9 0.5" FLUX_RUN_DENSE=0 -export FLUX_OUTPUT_DIR=benchmarks/results/flux_ -.venv/bin/python examples/flux_gen_bf16_sweep.py - -# bench (needs feature branch — main lacks bf16 symbols) -export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu -.venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ - --topk 0.5 0.25 0.125 --tensor-layout HND NHD --q-tile-override 256 \ - --sparse-q-block-tokens 256 --sparse-k-block-tokens 64 --warmup 2 --iters 3 \ - --output-csv benchmarks/results/bench_.csv -``` - -## 7. Open items / suggestions - -1. **Resolve the topk-0.5 cross-run non-determinism** before trusting single-run image diffs - (capture QKV per run; all sparse ops verified deterministic). -2. **Clean up the K32 BF16 sparse SDPA experiment** (`SPARSE_BF16_K32_AB_20260814.md`) into a final - implementation. The unitrace A/B says to keep the selected-block microtile at K32 unless a later - compiler/assembly pass removes the K64 write/SBID pressure. -3. Consider making the FLUX runner's `_512` filename suffix derive from the actual size (cosmetic; - the 1024×1024 run is mislabeled `_512`). -4. Decide whether to commit the bench `dense_ark_sdpa` change + dev tooling (currently uncommitted). diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814_CN.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814_CN.md deleted file mode 100644 index 26a9abd9e4..0000000000 --- a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_HANDOFF_20260814_CN.md +++ /dev/null @@ -1,156 +0,0 @@ -# 交接文档:BF16 原生稀疏 SDPA(sparge)— 2026-08-14 - -供后续开发接手的状态快照。以下内容均在 **Intel Battlemage XPU(24.4 GB, `intel_gpu_bmg_g21`)**、 -oneAPI 2026.1、PyTorch 2.13.0+xpu 上验证。 - -## 1. 代码位置 - -- **分支 `feat/sparse-bf16-prefill-v2`** — 全部稀疏工作(INT8 SAGE **与** 原生 BF16/FP16 稀疏 SDPA)。 - **`main` 只有 INT8 SAGE 路径**(此前认为 `ark.cpp`/`sparse_attention.py` 为空是路径写错导致的误判; - 以仓库根为相对路径检查:`main` 有可用的 int8 `sparge_sage2_attn_meansim_topk_xpu`, - 位于 `auto_round_extension/ark/auto_round_kernel/sparse_attention.py`,1440 行)。 -- 切换分支后 **每次都要重新编译**(`auto_round_kernel/ark-xbuild/` 里的 `.so` 只匹配编译它的分支)。 - -### 本交接中的关键改动 -- BF16 稀疏 SDPA 已拆成独立的原生 BF16/FP16 路径(`SparseSDPAConfig`),不再复用 INT8 SAGE - DPAS 路径。 -- `benchmarks/bench_sparse_topk.py` 已加入稠密 `ark.sdpa` 基线,并输出 `speedup_vs_ark`。 -- BF16 稀疏已选中 block microtile 做了 K64 vs K32 A/B。K32 是当前实验方向,本地重新编译后的 - `.so` 已恢复为 K32。 -- `xe_sparse_sdpa_fwd_mainloop.hpp` 支持把一个 64-token 稀疏路由 block 展开为多个物理 K microtile; - 这让 K32 能继续沿用现有 64-token LUT 格式。 -- Unitrace profile 显示 K64 回退来自 SEND/SBID 与 memory-write 压力。 -- 已成功生成一张 FLUX.1-dev sparse BF16 topk 0.9 K32 图片,且无 fallback。 - -### 两条独立路径(勿混用) - -| 路径 | 封装函数 | 配置 | DPAS | -|---|---|---|---| -| INT8 稀疏 | `sparge_sage2_attn_meansim_topk_xpu` / `sage_sparse` | `SparseSageConfig` | `XE_DPAS_TT<8, int, int8, int8, int>`(含 `static_assert(ElementQ==int8_t)`) | -| BF16/FP16 稀疏 | `sparge_sage2_attn_meansim_topk_xpu_sdpa` / `sage_sparse_sdpa` | `SparseSDPAConfig` | `XE_DPAS_TT<8, float, bf16, bf16, float>` | - -**在 bf16 片段上复用 int8 DPAS 会导致设备挂起**(已通过拆分修复;见 `SPARSE_BF16_DPAS_HANG.md`)。 - -### 关键文件 -- `auto_round_kernel/sdpa_sparse_sdpa.cpp` — BF16 启动器;`sdpa_sparse.cpp` — INT8 启动器。 -- `auto_round_kernel/sparse_attention.py` — Python 封装 + `sparge_preprocess_topk`。 -- `auto_round_kernel/sparge_preprocess_triton.py` — triton_xpu 预处理(含 torch 回退)。 -- `wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`、`sycl_tla_sdpa_sparse.hpp` — 内核。 -- `auto_round_kernel/sdpa.cpp` — **稠密** SYCL-TLA SDPA → Python `ark.sdpa(...)` - (`xe_sdpa_fwd_mainloop.hpp`)。 - -## 2. 正确性 — 已验证 - -- **仓库 e2e 测试通过**(`test_sage_sparse_prefill_e2e.py`、`test_sparge_preprocess_topk_e2e.py`)。 -- **topk=1(全 block 选中)== 稠密 SDPA**:与精确 CPU fp32 参考的最大误差 **0.0039**(bf16 舍入)。 - 即"稠密门"测试。 -- **INT8 == BF16 内核**:相同 Q/K/V 下选中的 block 完全一致(LUT 逐位相同),输出误差 <0.008; - 跨进程验证逐位一致。 -- **预处理与内核均确定**(相同 QKV → 结果一致,进程内与跨进程均一致)。 - -## 3. 性能(bench `benchmarks/bench_sparse_topk.py`,seq 75000,40 头 × 128) - -新增 `dense_ark_sdpa`(经 `ark.sdpa` 调用的稠密 SYCL-TLA SDPA)作为第三个稠密基线;每行新增 -`speedup_vs_ark` 列。完整表格见 `BENCH_SPARSE_ARK_SDPA_20260813.md`。 - -| 模式 | topk | vs torch | vs sagev1 | vs ark_sdpa | -|---|---|---|---|---| -| dense_ark_sdpa | — | 1.5–1.6× | 0.82–0.87× | 1.0 | -| INT8 稀疏 qtile256(内核) | 0.5 / 0.25 / 0.125 | 3.5 / 6.9 / 13.2× | — | 2.2 / 4.3 / 8.2× | -| BF16 稀疏(内核) | 0.5 / 0.25 / 0.125 | 1.5 / 2.9 / 5.6× | — | 0.92 / 1.8 / 3.5× | - -说明:`dense_ark_sdpa` 快于 torch SDPA 但慢于 `dense_sagev1`;BF16 稀疏内核仅在 topk ≤ 0.25 时 -快于稠密 ark 内核。topk 0.5 处"1.5× 而非 2×"的上限源于 **SBID 分数板停顿**(内存 SEND 并发瓶颈; -INT8 因 K 尺寸减半而无此问题)——早期剖析见 `SPARSE_BF16_KERNEL_OPTIMIZATION_JOURNEY.md` / -`SPARSE_SDPA_KERNEL_OPTIMIZATION_OPTIONS.md`。 - -**2026-08-14 A/B 更新:** 将 BF16 稀疏 qtile256 已选中 block 的 microtile 从 K64 改为 K32 后, -kernel-only 延迟提升 **1.69–1.77×**。topk 0.5 从 1511 ms / **0.91× vs ark** 提升到 -863 ms / **1.59× vs ark**。正确性 e2e 仍通过。见 `SPARSE_BF16_K32_AB_20260814.md`。 - -**2026-08-14 unitrace 更新:** 在 topk 0.5 下 profile K32 与 K64,确认 K64 回退主要是 -memory/SEND scoreboard 压力,而不是 occupancy 下降。聚合 `SPARSESDPAFwdMainloop` GPU time 为 -1684.6 ms(K32)对 3072.4 ms(K64),XVE active 64.7% 对 39.9%,XVE stall 35.1% 对 59.9%, -SBID stall 31.4% 对 55.7%。K64 的 SEND 指令增加 4.4×,GPU memory write 增加约 5.0×。 -两边 SLM read/write 都是 0/0,因此 unitrace 没显示 SLM-backed spill;巨大的 LSC write 差异是当前 -spill/pressure proxy。原始 profile 在 `unitrace_k32_compute_20260814/`、 -`unitrace_k32_stalls_20260814/`、`unitrace_k64_compute_real_20260814/`、 -`unitrace_k64_stalls_real_20260814/`。 - -## 4. FLUX.1-dev 端到端 — 关键坑 - -**必须用 `enable_sequential_cpu_offload()`,不要用 `enable_model_cpu_offload()`。** - -- `enable_model_cpu_offload()` 按*组件*粒度搬运:整个约 46 GB 的 transformer 会被拉到 24.4 GB - 设备上(峰值约 24 GB,仅剩约 350 MB 余量)。稀疏启动会偶发 OOM - (`OUT_OF_DEVICE_MEMORY` / `OUT_OF_RESOURCES`),甚至**重置 GPU** - (`dmesg: exec queue reset` on `0000:ba:00.0` = dev5;即 `DEVICE_LOST` 错误)。 -- Sequential offload 使峰值降到 **约 0.16 GB** → triton_xpu 稀疏稳定运行(0 回退)。 - 代价:每步约 4 s 对 1 s(50 步生成约 4–5 分钟)。 - -### FLUX 图像质量结论 -- 相同配置下,bf16 稀疏与 int8 稀疏**产出完全相同图像**(已验证,0.0 差异)。 -- `topk=0.9` 实际丢弃 **12.5–16.7%** 的 block(路由块取整 + sim 阈值),而非 10% → 图像与稠密 - 相差约 15–18。注意力质量覆盖率:topk 0.9 保留 **91.5%**、topk 0.5 保留 **64.6%** —— - 归一化后输出的偏移是 FLUX 注意力分散下的 topk 稀疏固有现象。 -- **最新 K32 BF16 稀疏 topk 0.9 运行:** PNG 已保存到 - `benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png`。 - 配置:BF16 sparse qtile256、已选中 block K32、`topk=0.9`、512×512、50 steps、seed 0、 - `ZE_AFFINITY_MASK=5`。结果:wall **238.884 s**、sparsity **0.125**、calls **2850**、 - sparse_calls **2850**、runtime_fallbacks **0**。 -- **待解决:运行间非确定性。** 相同配置(bf16 qtile256 topk0.5,seed 0)两次运行图像相差 - **48.5**(均值 97.6 对 101.3),而 topk 0.9 完全确定(0.0)。QKV、预处理、内核均已验证确定 → - 疑似扩散轨迹对其它微小扰动的放大,而非稀疏内核缺陷。做单次图像对比前建议复查。 - -### 开发工具(未跟踪) -- `examples/flux_gen_bf16_sweep.py` — offload-only 运行器(遍历 topk,保存 PNG + 汇总)。 -- `tools/sweep_flux_bf16_topk.sh` — 单 GPU 封装(qtile256 环境变量)。**注意:`FLUX_SPARSE_KERNEL` - 现已可通过环境变量覆盖(默认 bf16)**;此前写死 bf16,导致"int8"运行实际是 bf16。 - `main` 的 `flux_sparse_patch.py` 仅 int8,且忽略 block-token 环境变量。 -- `tools/bench_sparse_bf16_fp16_sweep.sh` — bench 扫描驱动。 - -## 5. 当前仓库状态(未提交) - -- **分支**:`feat/sparse-bf16-prefill-v2`。 -- **已修改(跟踪)**:`benchmarks/bench_sparse_topk.py`(新增 `dense_ark_sdpa` 模式 + - `speedup_vs_ark` 列)、稀疏 SDPA 头文件中的 K32 route-block expansion —— 尚未提交。 -- **未跟踪**:`examples/flux_gen_bf16_sweep.py`、`tools/sweep_flux_bf16_topk.sh`、 - `tools/bench_sparse_bf16_fp16_sweep.sh`。 -- `.so`:`auto_round_kernel/ark-xbuild/auto_round_kernel_xpu.cpython-313-x86_64-linux-gnu.so` - (特性分支构建)。`auto_round_kernel/xbuild/` 里有一份**过期的 main** `.so`(无碍; - 特性分支的 loader 用 `ark-xbuild`)。 -- `benchmarks/results/` 已 gitignore → 下面的结果 CSV、PNG、文档均为本地。 - -## 6. 如何运行 - -```bash -# 重新编译(先 source /opt/intel/oneapi/setvars.sh --force) -cd auto_round_extension/ark/auto_round_kernel/ark-xbuild && cmake --build . -j 16 - -# 正确性测试 -export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=torch -.venv/bin/python auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py -.venv/bin/python auto_round_kernel/wrapper/test/test_sparge_preprocess_topk_e2e.py - -# FLUX 扫描(bf16 qtile256;SAGE 时设 FLUX_SPARSE_KERNEL=int8) -export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu -export FLUX_SPARSE_KERNEL=bf16 FLUX_SPARSE_TOPKS="0.9 0.5" FLUX_RUN_DENSE=0 -export FLUX_OUTPUT_DIR=benchmarks/results/flux_ -.venv/bin/python examples/flux_gen_bf16_sweep.py - -# bench(需要特性分支 —— main 缺少 bf16 符号) -export ZE_AFFINITY_MASK=5 SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu -.venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ - --topk 0.5 0.25 0.125 --tensor-layout HND NHD --q-tile-override 256 \ - --sparse-q-block-tokens 256 --sparse-k-block-tokens 64 --warmup 2 --iters 3 \ - --output-csv benchmarks/results/bench_.csv -``` - -## 7. 待办 / 建议 - -1. **定位 topk-0.5 的跨运行非确定性**,再做单次图像对比(逐次抓取 QKV;稀疏算子已全部验证确定)。 -2. **将 K32 BF16 稀疏 SDPA 实验整理成最终实现**(`SPARSE_BF16_K32_AB_20260814.md`)。unitrace - A/B 说明应保持已选中 block microtile 为 K32,除非后续 compiler/assembly 优化能消除 K64 的 - write/SBID 压力。 -3. 考虑让 FLUX 运行器文件名里的 `_512` 后缀跟随实际尺寸(1024×1024 运行被误标为 `_512`,纯外观问题)。 -4. 决定是否提交 bench 的 `dense_ark_sdpa` 改动及开发工具(当前均未提交)。 diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md deleted file mode 100644 index 03871e86c9..0000000000 --- a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814.md +++ /dev/null @@ -1,323 +0,0 @@ -# BF16 sparse SDPA K64 vs K32 A/B — 2026-08-14 - -## Summary - -The BF16 sparse SDPA qtile256 path was tested with the selected-block K tile changed from 64 tokens -to 32 tokens, matching the dense `ark.sdpa` head_dim=128 K tile size. This is an experimental patch, -not yet a cleaned-up final implementation. - -Result: **K32 is substantially faster**. At topk 0.5, BF16 sparse changes from slower than dense -`ark.sdpa` to clearly faster. - -## Test setup - -- Branch: `feat/sparse-bf16-prefill-v2` -- Device: Intel Battlemage XPU, `ZE_AFFINITY_MASK=5` -- Benchmark: `benchmarks/bench_sparse_topk.py` -- Shape: `seq_len=75000`, HND, 40 heads, head_dim 128 -- Sparse config: `q_tile_override=256`, `sparse_q_block_tokens=256`, `sparse_k_block_tokens=64` -- Benchmark options: `--warmup 1 --iters 2` -- Baseline CSV: `benchmarks/results/ab_k64_bf16_20260814_090508.csv` -- K32 CSV: `benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv` - -## Result table - -Only `sparse_sdpa_bf16_kernel_only` is compared below. - -| topk | K64 latency | K32 latency | K32 speedup | K64 vs ark | K32 vs ark | effective TFLOPS K64 -> K32 | -|---|---:|---:|---:|---:|---:|---:| -| 1.0 | 2986.014 ms | 1691.257 ms | 1.766x | 0.460x | 0.812x | 38.6 -> 68.1 | -| 0.5 | 1511.047 ms | 862.649 ms | 1.752x | 0.910x | 1.593x | 38.3 -> 67.1 | -| 0.25 | 766.744 ms | 455.005 ms | 1.685x | 1.792x | 3.020x | 38.1 -> 64.2 | - -Dense `ark.sdpa` in the same run was ~1374 ms. With K64, BF16 sparse at topk 0.5 was slower than -dense ark (`0.91x`). With K32, BF16 sparse at topk 0.5 became faster (`1.59x`). - -## Patch shape - -The A/B changed `launch_sparse_sdpa_prefill_kernel_128` in -`auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp`: - -```cpp -// K64 original -using ShapeQK = Shape<_256, _64, _32>; -using ShapePV = Shape<_256, _32, _64>; - -// K32 experiment -using ShapeQK = Shape<_256, _32, _32>; -using ShapePV = Shape<_256, _32, _32>; -``` - -Because the routing LUT still uses 64-token sparse K blocks, the experiment also changed -`auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp` so each sparse route block -can expand into multiple physical K microtiles. For the K32 experiment, one 64-token routed block -runs as two 32-token mainloop iterations. - -## Tile meaning - -For QK: - -```cpp -using ShapeQK = Shape<_256, _32, _32>; -``` - -This means: - -```text -M = 256 query tokens per workgroup tile -N = 32 key tokens per physical K microtile -K = 32 head-dim reduction chunk -``` - -The QK output score tile is therefore `256 x 32`. Since head_dim is 128, each physical tile still -does four reduction chunks over the feature dimension: - -```text -head_dim 128 / reduction chunk 32 = 4 QK reduction chunks -``` - -For PV: - -```cpp -using ShapePV = Shape<_256, _32, _32>; -``` - -This means: - -```text -M = 256 query rows / probability rows -N = 32 value/output head-dim columns per tile -K = 32 selected key/value tokens reduced per PV tile -``` - -So one PV microtile consumes `P[256, 32] x V[32, 32] -> O[256, 32]`. The output head_dim 128 is -covered as four 32-column output chunks. - -Pseudocode for one selected 64-token sparse route block: - -```cpp -// K64 original: -// ShapeQK = Shape<_256, _64, _32> -// ShapePV = Shape<_256, _32, _64> -for each selected_route_block_64_tokens { - scores[256][64] = 0; - for d = 0; d < 128; d += 32 { - scores[256][64] += Q[256][d:d+32] * transpose(K[64][d:d+32]); - } - softmax_update(scores[256][64]); - O[256][0:32] += P[256][64] * V[64][0:32]; // repeated for output-dim chunks -} - -// K32 experiment: -// ShapeQK = Shape<_256, _32, _32> -// ShapePV = Shape<_256, _32, _32> -for each selected_route_block_64_tokens { - for micro_tile = 0; micro_tile < 2; ++micro_tile { - key_start = selected_route_block_64_tokens * 64 + micro_tile * 32; - - scores[256][32] = 0; - for d = 0; d < 128; d += 32 { - scores[256][32] += Q[256][d:d+32] * transpose(K[key_start:key_start+32][d:d+32]); - } - softmax_update(scores[256][32]); - O[256][0:32] += P[256][32] * V[key_start:key_start+32][0:32]; // repeated for output-dim chunks - } -} -``` - -The head-dim reduction loop count is the same in both cases (`128 / 32 = 4`). The difference is the -physical selected-key span: - -```text -K64: one route block -> one 256x64 score tile -K32: one route block -> two 256x32 score tiles -``` - -K32 adds one extra microtile iteration per 64-token route block, but each physical tile is smaller. -The unitrace result below shows that smaller tile wins because it greatly reduces SEND/SBID and -memory-write pressure. - -## Correctness - -After rebuilding, `auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py` passed. -Relevant BF16 SDPA all-selected result: - -```text -[sage_sparse_sdpa][torch.bfloat16_all_selected] D=128 max_diff=0.001953 mean_diff=0.000111 -``` - -## Unitrace profile - -The profile below uses `topk=0.5`, `seq_len=75000`, HND, head_dim 128, `q_tile_override=256`, -`sparse_q_block_tokens=256`, and the same 64-token sparse routing blocks. The profiler adds large -wall-time overhead, so the table uses the included `SPARSESDPAFwdMainloop` kernel GPU metrics rather -than benchmark wall time. - -Files: - -- K32 ComputeBasic: `benchmarks/results/unitrace_k32_compute_20260814/k32_compute.metrics.2889557` -- K32 VectorEngineStalls: `benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853` -- K64 ComputeBasic: `benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755` -- K64 VectorEngineStalls: `benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213` -- K32 kernel properties: `benchmarks/results/unitrace_k32_verbose_20260814/k32_verbose.3726840` -- K64 kernel properties: `benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.2948755` - -Commands: - -```bash -# K32 kernel properties. Run after building the K32 variant. -source /opt/intel/oneapi/setvars.sh --force -export ZE_AFFINITY_MASK=5 -export ZE_FLAT_DEVICE_HIERARCHY=FLAT -export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu -unitrace \ - --device-timing --verbose \ - --include-kernels SPARSESDPAFwdMainloop \ - --output k32_verbose \ - .venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ - --topk 0.5 --tensor-layout HND --q-tile-override 256 \ - --sparse-q-block-tokens 256 --warmup 0 --iters 1 \ - --output-csv benchmarks/results/unitrace_k32_verbose_20260814.csv -``` - -```bash -# K64 ComputeBasic. Run after temporarily changing launch_sparse_sdpa_prefill_kernel_128 -# back to ShapeQK=Shape<_256,_64,_32>, ShapePV=Shape<_256,_32,_64> and rebuilding. -source /opt/intel/oneapi/setvars.sh --force -export ZE_AFFINITY_MASK=5 -export ZE_FLAT_DEVICE_HIERARCHY=FLAT -export SAGE_ATTN_SPARSE_PREPROCESS_BACKEND=triton_xpu -unitrace \ - --device-timing --kernel-submission --metric-query --group ComputeBasic \ - --include-kernels SPARSESDPAFwdMainloop \ - --output k64_compute_real \ - .venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ - --topk 0.5 --tensor-layout HND --q-tile-override 256 \ - --sparse-q-block-tokens 256 --warmup 0 --iters 1 \ - --output-csv benchmarks/results/unitrace_k64_compute_real_20260814.csv -``` - -```bash -# K32/K64 stall pass: use the same build-specific setup as above and change only the group/output. -unitrace \ - --device-timing --kernel-submission --metric-query --group VectorEngineStalls \ - --include-kernels SPARSESDPAFwdMainloop \ - --output _stalls \ - .venv/bin/python benchmarks/bench_sparse_topk.py --dtype bf16 --seq-len 75000 \ - --topk 0.5 --tensor-layout HND --q-tile-override 256 \ - --sparse-q-block-tokens 256 --warmup 0 --iters 1 \ - --output-csv benchmarks/results/_stalls.csv -``` - -Kernel properties from `unitrace --device-timing --verbose`: - -| variant | SIMD | SLM / WG | private memory / thread | spill memory / thread | register file size / thread | -|---|---:|---:|---:|---:|---:| -| K32 | 16 | 0 | 2432 B | 0 B | 256 | -| K64 | 16 | 0 | 2432 B | 3840 B | 256 | - -ComputeBasic aggregate over the two profiled `SPARSESDPAFwdMainloop` rows: - -| metric | K32 | K64 | K64/K32 | -|---|---:|---:|---:| -| GPU time | 1684.6 ms | 3072.4 ms | 1.824x | -| XVE active | 64.718% | 39.934% | 0.617x | -| XVE stall | 35.149% | 59.939% | 1.705x | -| thread occupancy | 99.828% | 99.843% | 1.000x | -| SEND instructions | 18.593G | 81.568G | 4.387x | -| GPU memory read | 43.462 GB | 73.245 GB | 1.685x | -| GPU memory write | 1.633 GB | 8.135 GB | 4.981x | -| LSC byte read | 9653.807 GB | 13389.615 GB | 1.387x | -| LSC byte write | 72.008 MB | 2333.083 GB | 32400.183x | -| SLM read/write | 0 / 0 | 0 / 0 | n/a | - -VectorEngineStalls aggregate: - -| stall metric | K32 | K64 | delta | -|---|---:|---:|---:| -| SBID | 31.449% | 55.730% | +24.281 pp | -| ALU write | 29.562% | 16.532% | -13.030 pp | -| instruction fetch | 12.329% | 3.638% | -8.691 pp | -| pipe stall | 4.748% | 0.891% | -3.857 pp | -| control | 4.316% | 1.310% | -3.006 pp | -| barrier | 0.240% | 0.531% | +0.291 pp | - -## Interpretation - -This confirms the K64 selected-block microtile is a major performance issue for BF16 sparse SDPA. -The kernel properties pass shows that K64 does cause compiler-reported spill memory: -`Spill Memory Per Thread` is **3840 B** for K64 and **0 B** for K32. SLM remains 0 because this is -private/scratch spill traffic, not SLM-backed storage. - -The runtime metrics match that diagnosis. K64 is memory/SEND scoreboard limited: SBID stall rises -from 31.4% to 55.7%, XVE active drops from 64.7% to 39.9%, SEND instructions rise 4.4x, and memory -writes rise ~5.0x. The large LSC write delta is now best interpreted as spill/scratch pressure plus -the extra memory traffic created by the larger K64 live state. - -Recommendation: keep the selected-block BF16 sparse SDPA path on K32 and treat K64 as a regression -case unless compiler/offline assembly data proves the write/SBID pressure can be removed another way. - -## Latest apple-to-apple ARK SDPA comparison - -After pulling the latest K32 implementation, dense ARK SDPA and BF16 sparse SDPA were rerun on XPU 0 -and XPU 1 with the same 75k-token shape and launch configuration: - -- Commit: `9b1a9512` -- Shape: `seq_len=75000`, HND, 40 Q heads, 40 KV heads, head_dim 128 -- Sparse configuration: `topk=0.5`, `q_tile_override=256`, `sparse_q_block_tokens=256`, - `sparse_k_block_tokens=64` -- Benchmark options: `--warmup 1 --iters 2` -- Timing: mean of XPU 0 and XPU 1; sparse results include both kernel-only and end-to-end paths - -| path | mean latency | speedup vs dense ARK | -|---|---:|---:| -| dense ARK SDPA | 994.6 ms | 1.00x | -| BF16 sparse K32, kernel-only | 598.2 ms | 1.66x | -| BF16 sparse K32, end-to-end | 697.6 ms | 1.43x | - -The latest Unitrace kernel-property pass reported SIMD16, SLM 0, private memory 0 B/thread, -spill 0, and GRF 256 for dense ARK. BF16 sparse reported SIMD16, SLM 0, private memory -2176 B/thread, spill 0, and GRF 256. - -The current ComputeBasic and VectorEngineStalls counter passes could not create a metric query or -streamer because the host has `observation_paranoid=1`. No system policy was changed, so the latest -comparison uses same-shape unprofiled timing plus the kernel-property pass. The raw Unitrace output -and timing CSVs are in: - -`benchmarks/results/apple_to_apple_ark_sdpa_bf16_sparse_75k_xpu0_20260814_135844/` - -Timing CSVs: - -- `benchmarks/results/k32_rerun_bf16_xpu0_20260814_134727.csv` -- `benchmarks/results/k32_rerun_bf16_xpu1_20260814_134959.csv` - -## Flux BF16 sparse topk sweep - -The latest K32 BF16 sparse path was also run through the Flux example at 1024x1024 with the same -prompt, seed, 50 denoising steps, qtile 256, Q block 256, and K routing block 64. Each point ran -in parallel on a separate XPU. All runs completed with 2,850/2,850 sparse attention calls and zero -runtime fallbacks. - -| topk | XPU | observed sparsity | PNG | -|---:|---:|---:|---| -| 1.0 | 0 | 0.00% | `flux_topk1p0.png` | -| 0.9 | 1 | 11.11% | `flux_topk0p9.png` | -| 0.8 | 2 | 20.83% | `flux_topk0p8.png` | -| 0.7 | 3 | 30.56% | `flux_topk0p7.png` | -| 0.6 | 4 | 40.28% | `flux_topk0p6.png` | -| 0.5 | 5 | 50.00% | `flux_topk0p5.png` | -| 0.4 | 6 | 61.11% | `flux_topk0p4.png` | -| 0.3 | 7 | 70.83% | `flux_topk0p3.png` | -| 0.2 | 0 | 80.56% | `flux_topk0p2.png` | -| 0.1 | 1 | 90.28% | `flux_topk0p1.png` | -| 0.01 | 2 | 98.61% | `flux_topk0p01.png` | - -The main sweep artifacts are under: - -`benchmarks/results/flux_bf16_topk_sweep_1024_parallel_20260814_160126/` - -The additional low-topk artifacts are under: - -`benchmarks/results/flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/` - -Each directory contains `summary.csv`, the exact per-run commands, logs, status files, and PNGs. diff --git a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md b/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md deleted file mode 100644 index c93f32b4d1..0000000000 --- a/auto_round_extension/ark/benchmarks/results/SPARSE_BF16_K32_AB_20260814_CN.md +++ /dev/null @@ -1,255 +0,0 @@ -# BF16 稀疏 SDPA K64 vs K32 A/B — 2026-08-14 - -## 摘要 - -本次测试将 BF16 稀疏 SDPA qtile256 路径的已选中 block 的 K tile 从 64 token 改为 32 token, -与稠密 `ark.sdpa` 在 head_dim=128 下的 K tile 大小保持一致。这是实验性补丁,尚未整理成最终实现。 - -结论:**K32 明显更快**。在 topk 0.5 下,BF16 稀疏从慢于稠密 `ark.sdpa` 变为明显快于它。 - -## 测试设置 - -- 分支:`feat/sparse-bf16-prefill-v2` -- 设备:Intel Battlemage XPU,`ZE_AFFINITY_MASK=5` -- Benchmark:`benchmarks/bench_sparse_topk.py` -- 形状:`seq_len=75000`,HND,40 头,head_dim 128 -- 稀疏配置:`q_tile_override=256`、`sparse_q_block_tokens=256`、`sparse_k_block_tokens=64` -- Benchmark 参数:`--warmup 1 --iters 2` -- 基线 CSV:`benchmarks/results/ab_k64_bf16_20260814_090508.csv` -- K32 CSV:`benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv` - -## 结果表 - -下表仅比较 `sparse_sdpa_bf16_kernel_only`。 - -| topk | K64 延迟 | K32 延迟 | K32 加速 | K64 vs ark | K32 vs ark | effective TFLOPS K64 -> K32 | -|---|---:|---:|---:|---:|---:|---:| -| 1.0 | 2986.014 ms | 1691.257 ms | 1.766x | 0.460x | 0.812x | 38.6 -> 68.1 | -| 0.5 | 1511.047 ms | 862.649 ms | 1.752x | 0.910x | 1.593x | 38.3 -> 67.1 | -| 0.25 | 766.744 ms | 455.005 ms | 1.685x | 1.792x | 3.020x | 38.1 -> 64.2 | - -同次运行中稠密 `ark.sdpa` 约为 1374 ms。K64 时,BF16 稀疏 topk 0.5 慢于稠密 ark -(`0.91x`);K32 时,BF16 稀疏 topk 0.5 变为更快(`1.59x`)。 - -## 补丁形态 - -A/B 修改了 `auto_round_kernel/wrapper/include/sycl_tla_sdpa_sparse.hpp` 中的 -`launch_sparse_sdpa_prefill_kernel_128`: - -```cpp -// K64 原始配置 -using ShapeQK = Shape<_256, _64, _32>; -using ShapePV = Shape<_256, _32, _64>; - -// K32 实验配置 -using ShapeQK = Shape<_256, _32, _32>; -using ShapePV = Shape<_256, _32, _32>; -``` - -由于路由 LUT 仍以 64-token 稀疏 K block 为单位,实验还修改了 -`auto_round_kernel/wrapper/include/stla/xe_sparse_sdpa_fwd_mainloop.hpp`,使每个稀疏路由 block -可以展开为多个物理 K microtile。在 K32 实验中,一个 64-token 路由 block 会执行两次 32-token -mainloop。 - -## Tile 含义 - -对于 QK: - -```cpp -using ShapeQK = Shape<_256, _32, _32>; -``` - -含义是: - -```text -M = 256 每个 workgroup tile 的 query token 数 -N = 32 每个物理 K microtile 的 key token 数 -K = 32 head-dim reduction chunk -``` - -因此 QK 输出的 score tile 是 `256 x 32`。由于 head_dim 是 128,每个物理 tile 仍然需要在特征维上做 -4 个 reduction chunk: - -```text -head_dim 128 / reduction chunk 32 = 4 个 QK reduction chunk -``` - -对于 PV: - -```cpp -using ShapePV = Shape<_256, _32, _32>; -``` - -含义是: - -```text -M = 256 query 行 / probability 行 -N = 32 每个 tile 的 value/output head-dim 列数 -K = 32 每个 PV tile reduction 的 selected key/value token 数 -``` - -所以一个 PV microtile 计算 `P[256, 32] x V[32, 32] -> O[256, 32]`。output head_dim 128 会拆成 -4 个 32-column output chunk。 - -一个被选中的 64-token 稀疏路由 block 的伪代码: - -```cpp -// K64 原始配置: -// ShapeQK = Shape<_256, _64, _32> -// ShapePV = Shape<_256, _32, _64> -for each selected_route_block_64_tokens { - scores[256][64] = 0; - for d = 0; d < 128; d += 32 { - scores[256][64] += Q[256][d:d+32] * transpose(K[64][d:d+32]); - } - softmax_update(scores[256][64]); - O[256][0:32] += P[256][64] * V[64][0:32]; // 对 output-dim chunk 重复 -} - -// K32 实验配置: -// ShapeQK = Shape<_256, _32, _32> -// ShapePV = Shape<_256, _32, _32> -for each selected_route_block_64_tokens { - for micro_tile = 0; micro_tile < 2; ++micro_tile { - key_start = selected_route_block_64_tokens * 64 + micro_tile * 32; - - scores[256][32] = 0; - for d = 0; d < 128; d += 32 { - scores[256][32] += Q[256][d:d+32] * transpose(K[key_start:key_start+32][d:d+32]); - } - softmax_update(scores[256][32]); - O[256][0:32] += P[256][32] * V[key_start:key_start+32][0:32]; // 对 output-dim chunk 重复 - } -} -``` - -两种配置的 head-dim reduction loop 次数相同(`128 / 32 = 4`)。差别在物理 selected-key 跨度: - -```text -K64: 一个 route block -> 一个 256x64 score tile -K32: 一个 route block -> 两个 256x32 score tile -``` - -K32 对每个 64-token route block 多了一次 microtile iteration,但每个物理 tile 更小。下面的 unitrace -结果显示,更小的 tile 胜出,因为它显著降低了 SEND/SBID 与 memory-write 压力。 - -## 正确性 - -重新编译后,`auto_round_kernel/wrapper/test/test_sage_sparse_prefill_e2e.py` 通过。 -相关 BF16 SDPA 全选结果: - -```text -[sage_sparse_sdpa][torch.bfloat16_all_selected] D=128 max_diff=0.001953 mean_diff=0.000111 -``` - -## Unitrace profile - -下面 profile 使用 `topk=0.5`、`seq_len=75000`、HND、head_dim 128、`q_tile_override=256`、 -`sparse_q_block_tokens=256`,稀疏路由 block 仍为 64 token。Profiler 会显著拉长墙钟时间,因此下表 -使用被 `--include-kernels SPARSESDPAFwdMainloop` 捕获的 kernel GPU metrics,而不是 benchmark 墙钟时间。 - -文件: - -- K32 ComputeBasic:`benchmarks/results/unitrace_k32_compute_20260814/k32_compute.metrics.2889557` -- K32 VectorEngineStalls:`benchmarks/results/unitrace_k32_stalls_20260814/k32_stalls.metrics.2892853` -- K64 ComputeBasic:`benchmarks/results/unitrace_k64_compute_real_20260814/k64_compute_real.metrics.2948755` -- K64 VectorEngineStalls:`benchmarks/results/unitrace_k64_stalls_real_20260814/k64_stalls_real.metrics.2952213` - -ComputeBasic,对两个 `SPARSESDPAFwdMainloop` 行聚合: - -| metric | K32 | K64 | K64/K32 | -|---|---:|---:|---:| -| GPU time | 1684.6 ms | 3072.4 ms | 1.824x | -| XVE active | 64.718% | 39.934% | 0.617x | -| XVE stall | 35.149% | 59.939% | 1.705x | -| thread occupancy | 99.828% | 99.843% | 1.000x | -| SEND instructions | 18.593G | 81.568G | 4.387x | -| GPU memory read | 43.462 GB | 73.245 GB | 1.685x | -| GPU memory write | 1.633 GB | 8.135 GB | 4.981x | -| LSC byte read | 9653.807 GB | 13389.615 GB | 1.387x | -| LSC byte write | 72.008 MB | 2333.083 GB | 32400.183x | -| SLM read/write | 0 / 0 | 0 / 0 | n/a | - -VectorEngineStalls 聚合: - -| stall metric | K32 | K64 | delta | -|---|---:|---:|---:| -| SBID | 31.449% | 55.730% | +24.281 pp | -| ALU write | 29.562% | 16.532% | -13.030 pp | -| instruction fetch | 12.329% | 3.638% | -8.691 pp | -| pipe stall | 4.748% | 0.891% | -3.857 pp | -| control | 4.316% | 1.310% | -3.006 pp | -| barrier | 0.240% | 0.531% | +0.291 pp | - -## 解读 - -该 A/B 确认 K64 的已选中 block microtile 是 BF16 稀疏 SDPA 的主要性能问题。这个结果并不能单独证明 -存在 register spill;unitrace 也没有直接给出 GRF spill 计数器。但它明确显示 K64 被 memory/SEND -scoreboard 限制:SBID stall 从 31.4% 升到 55.7%,XVE active 从 64.7% 降到 39.9%,SEND 指令增加 -4.4x,memory write 增加约 5.0x。SLM 流量仍为 0,因此这些指标没有显示 SLM-backed spill。巨大的 LSC -write 差异是这里能采到的最佳 spill/pressure proxy,符合 K64 带来更高 scratch/memory 压力的判断。 - -建议:BF16 稀疏 SDPA 的已选中 block 路径保持 K32;除非后续 compiler/offline assembly 数据证明可以 -用其它方式消除 write/SBID 压力,否则 K64 应视为性能回退。 - -## 最新 ARK SDPA 对比 - -拉取最新 K32 实现后,在 XPU 0 和 XPU 1 上使用相同的 75k-token shape 与 launch 配置,重新运行了 -dense ARK SDPA 和 BF16 sparse SDPA: - -- Commit:`9b1a9512` -- Shape:`seq_len=75000`、HND、40 个 Q heads、40 个 KV heads、head_dim 128 -- Sparse 配置:`topk=0.5`、`q_tile_override=256`、`sparse_q_block_tokens=256`、 - `sparse_k_block_tokens=64` -- Benchmark 选项:`--warmup 1 --iters 2` -- Timing:XPU 0 和 XPU 1 的均值;sparse 同时记录 kernel-only 和 end-to-end - -| 路径 | 平均延迟 | 相对 dense ARK 加速比 | -|---|---:|---:| -| dense ARK SDPA | 994.6 ms | 1.00x | -| BF16 sparse K32,kernel-only | 598.2 ms | 1.66x | -| BF16 sparse K32,end-to-end | 697.6 ms | 1.43x | - -最新 Unitrace kernel-property pass 报告:dense ARK 为 SIMD16、SLM 0、private memory 0 B/thread、 -spill 0、GRF 256;BF16 sparse 为 SIMD16、SLM 0、private memory 2176 B/thread、spill 0、GRF 256。 - -当前 ComputeBasic 和 VectorEngineStalls counter pass 因主机 `observation_paranoid=1`,无法创建 -metric query 或 streamer。没有修改系统策略,因此最新比较使用相同 shape 的 unprofiled timing 加 -kernel-property pass。原始 Unitrace 输出和 timing CSV 位于: - -`benchmarks/results/apple_to_apple_ark_sdpa_bf16_sparse_75k_xpu0_20260814_135844/` - -Timing CSV: - -- `benchmarks/results/k32_rerun_bf16_xpu0_20260814_134727.csv` -- `benchmarks/results/k32_rerun_bf16_xpu1_20260814_134959.csv` - -## Flux BF16 sparse topk sweep - -最新 K32 BF16 sparse 路径通过 Flux example 运行了 1024x1024 sweep,使用相同 prompt、seed、50 个 -denoising steps、qtile 256、Q block 256 和 K routing block 64。每个 topk 在独立 XPU 上并行运行。 -全部运行均完成了 2,850/2,850 次 sparse attention call,runtime fallback 为 0。 - -| topk | XPU | 实测 sparsity | PNG | -|---:|---:|---:|---| -| 1.0 | 0 | 0.00% | `flux_topk1p0.png` | -| 0.9 | 1 | 11.11% | `flux_topk0p9.png` | -| 0.8 | 2 | 20.83% | `flux_topk0p8.png` | -| 0.7 | 3 | 30.56% | `flux_topk0p7.png` | -| 0.6 | 4 | 40.28% | `flux_topk0p6.png` | -| 0.5 | 5 | 50.00% | `flux_topk0p5.png` | -| 0.4 | 6 | 61.11% | `flux_topk0p4.png` | -| 0.3 | 7 | 70.83% | `flux_topk0p3.png` | -| 0.2 | 0 | 80.56% | `flux_topk0p2.png` | -| 0.1 | 1 | 90.28% | `flux_topk0p1.png` | -| 0.01 | 2 | 98.61% | `flux_topk0p01.png` | - -主 sweep artifacts: - -`benchmarks/results/flux_bf16_topk_sweep_1024_parallel_20260814_160126/` - -新增低 topk artifacts: - -`benchmarks/results/flux_bf16_topk_sweep_1024_parallel_extra_20260814_160550/` - -每个目录包含 `summary.csv`、精确 per-run command、log、status 文件和 PNG。 diff --git a/auto_round_extension/ark/benchmarks/results/UNITRACE_USAGE_GUIDE_20260814.md b/auto_round_extension/ark/benchmarks/results/UNITRACE_USAGE_GUIDE_20260814.md deleted file mode 100644 index b813717b0c..0000000000 --- a/auto_round_extension/ark/benchmarks/results/UNITRACE_USAGE_GUIDE_20260814.md +++ /dev/null @@ -1,294 +0,0 @@ -# Unitrace Usage Guide for Intel GPU Kernels — 2026-08-14 - -This is a general unitrace workflow for profiling SYCL/Level Zero kernels on Intel GPUs. It applies -to sparse SDPA and most other GPU kernels. - -## 1. Environment - -Use the project venv and source oneAPI before profiling: - -```bash -source /opt/intel/oneapi/setvars.sh --force -export ZE_AFFINITY_MASK=5 -export ZE_FLAT_DEVICE_HIERARCHY=FLAT -``` - -`ZE_AFFINITY_MASK` chooses the GPU. `ZE_FLAT_DEVICE_HIERARCHY=FLAT` is recommended for hardware -metric profiling. - -Useful checks: - -```bash -unitrace --device-list -unitrace --metric-list -``` - -## 2. Find Hot Kernels - -Start with device timing. This has lower overhead than full metric collection and identifies which -kernels matter. - -```bash -unitrace \ - --device-timing --verbose \ - --output timing \ - -``` - -Use `--include-kernels` once you know a stable kernel-name substring: - -```bash -unitrace \ - --device-timing --verbose \ - --include-kernels "" \ - --output timing_filtered \ - -``` - -Important: the command examples do not use `--` before the application command. - -## 3. Kernel Properties: Spill, Private Memory, SLM, Registers - -The key mode for spill information is: - -```bash -unitrace \ - --device-timing --verbose \ - --include-kernels "" \ - --output kernel_props \ - -``` - -Look for the `=== Kernel Properties ===` table: - -```text -Kernel, Compiled, SIMD, Number of Arguments, SLM Per Work Group, -Private Memory Per Thread, Spill Memory Per Thread, Register File Size Per Thread -``` - -Key fields: - -| field | meaning | -|---|---| -| `SLM Per Work Group` | Shared local memory allocated per workgroup. | -| `Private Memory Per Thread` | Per-thread private memory allocation. | -| `Spill Memory Per Thread` | Compiler-reported spill/scratch memory per thread. This is the direct spill signal. | -| `Register File Size Per Thread` | Register file allocation reported by runtime/compiler metadata. | - -Example interpretation: - -```text -Spill Memory Per Thread = 0 -> no compiler-reported spill -Spill Memory Per Thread = 3840 -> compiler-reported private/scratch spill -``` - -SLM counters being zero does not rule out spill. Spill can be private/scratch memory and appear as -LSC/GPU memory traffic, not SLM traffic. - -## 4. Compute Overview: ComputeBasic - -Use `ComputeBasic` for the first hardware-counter pass. - -```bash -unitrace \ - --device-timing --kernel-submission --metric-query --group ComputeBasic \ - --include-kernels "" \ - --output compute_basic \ - -``` - -Key metrics: - -| metric | what it tells you | -|---|---| -| `GpuTime[ns]` | GPU time under the profiling pass. Use ratios more than absolute time. | -| `XVE_ACTIVE[%]` | Whether execution units are actively doing work. | -| `XVE_STALL[%]` | Time with threads loaded but no execution pipe active. | -| `XVE_THREADS_OCCUPANCY_ALL[%]` | Thread-slot occupancy. Low occupancy can indicate resource pressure. | -| `XVE_INST_EXECUTED_SEND_ALL` | SEND instruction pressure, usually memory/message traffic. | -| `GPU_MEMORY_BYTE_READ/WRITE` | Device-memory bytes. | -| `LOAD_STORE_CACHE_BYTE_READ/WRITE` | LSC traffic, useful as scratch/spill pressure proxy when spill is reported. | -| `L3_READ/WRITE/MISS/HIT` | L3 behavior and locality. | -| `SLM_BYTE_READ/WRITE` | SLM traffic only, not private/scratch spill traffic. | - -Use this pass to classify the broad bottleneck: compute active, memory/SEND pressure, occupancy, or -cache behavior. - -## 5. Stall Breakdown: VectorEngineStalls - -Use this when `XVE_STALL[%]` is high. - -```bash -unitrace \ - --device-timing --kernel-submission --metric-query --group VectorEngineStalls \ - --include-kernels "" \ - --output vector_stalls \ - -``` - -Common stall meanings: - -| metric | likely meaning | -|---|---| -| `XVE_STALL_SBID[%]` | Scoreboard waits, often memory latency or dependent SEND results. | -| `XVE_STALL_ALUWR[%]` | ALU writeback/dependency pressure. | -| `XVE_STALL_INSTFETCH[%]` | Instruction fetch/code-size pressure. | -| `XVE_STALL_PIPESTALL[%]` | Structural hazards, often register pressure, accumulator hazards, or SEND holds. | -| `XVE_STALL_BARRIER[%]` | Synchronization/load imbalance. | -| `XVE_STALL_CONTROL[%]` | Control-flow overhead. | - -High SBID plus high SEND/LSC/memory traffic usually points to memory-message latency or scratch/spill -pressure. Confirm spill with the kernel properties pass. - -## 6. Memory Deep Dive: MemoryProfile - -Use this when ComputeBasic suggests memory/SEND pressure. - -```bash -unitrace \ - --device-timing --kernel-submission --metric-query --group MemoryProfile \ - --include-kernels "" \ - --output memory_profile \ - -``` - -Useful metrics: - -| metric | what it tells you | -|---|---| -| `GPU_MEMORY_BYTE_READ/WRITE` | DRAM/device-memory traffic. | -| `LOAD_STORE_CACHE_BYTE_READ/WRITE` | LSC traffic. | -| `XVE_LOAD_STORE_CACHE_READ_MESSAGE_COUNT` | LSC read message count. | -| `XVE_LOAD_STORE_CACHE_WRITE_MESSAGE_COUNT` | LSC write message count. | -| `XVE_LOAD_STORE_CACHE_REGISTER_REQUEST_COUNT` | Payload/register transactions sent to LSC. | -| `XVE_LOAD_STORE_CACHE_REGISTER_RESPONSE_COUNT` | Payload/register responses from LSC. | -| `GPU_MEMORY_REQUEST_QUEUE_FULL[%]` | Memory request queue pressure. | -| `L3_BUSY[%]`, `L3_STALL[%]`, `L3_HIT`, `L3_MISS` | L3 saturation and locality. | - -MemoryProfile still does not label individual messages as spill/fill. Combine it with -`Spill Memory Per Thread` from the kernel properties pass. - -## 7. Timeline and Submission - -Use kernel submission timing to separate launch/queue overhead from device execution: - -```bash -unitrace \ - --device-timing --kernel-submission \ - --include-kernels "" \ - --output submission \ - -``` - -Use Chrome trace when host/device sequencing matters: - -```bash -unitrace \ - --chrome-kernel-logging --chrome-sycl-logging --chrome-device-logging \ - --output trace \ - -``` - -Open the generated JSON in Perfetto. - -## 8. Instruction-Level Stall Sampling - -For instruction-level stall analysis, unitrace supports `--stall-sampling`, but it is only useful -when shader/debug dumps are available. - -Typical flow: - -```bash -# Build or run with shader dumps/debug info enabled where supported. -export IGC_ShaderDumpEnable=1 -export IGC_DumpToCustomDir=./shader_dump - -unitrace \ - --stall-sampling \ - --include-kernels "" \ - --output stall_sampling \ - -``` - -This is the path to correlate stalls to instruction regions. For spill proof, kernel properties are -usually simpler; assembly dumps are useful when you need to inspect actual scratch send -instructions. - -## 9. Output Files - -`--output-dir-path` may not always place every output where expected with some unitrace builds. -If files appear in the current directory, move them after the run: - -```bash -mkdir -p -find . -maxdepth 1 -type f -name '*' -exec mv -t {} + -``` - -Common output patterns: - -```text -. timing/log output -.metrics. metric-query CSV-style output -.json Chrome trace, when enabled -``` - -## 10. Practical Analysis Pattern - -Use this order for most kernels: - -1. `--device-timing --verbose`: identify hot kernels and check spill/private/SLM/register properties. -2. `--metric-query --group ComputeBasic`: broad compute, occupancy, SEND, memory and L3 counters. -3. `--metric-query --group VectorEngineStalls`: dominant stall reason. -4. `--metric-query --group MemoryProfile`: deeper memory/LSC/L3 analysis if SEND or memory pressure is high. -5. Chrome trace or stall sampling only if timeline or instruction-level evidence is needed. - -Minimal command set: - -```bash -# Properties and spill -unitrace --device-timing --verbose --include-kernels "" --output props - -# Broad counters -unitrace --device-timing --kernel-submission --metric-query --group ComputeBasic \ - --include-kernels "" --output basic - -# Stall reason -unitrace --device-timing --kernel-submission --metric-query --group VectorEngineStalls \ - --include-kernels "" --output stalls - -# Memory detail -unitrace --device-timing --kernel-submission --metric-query --group MemoryProfile \ - --include-kernels "" --output memory -``` - -## 11. Reading Results Safely - -- Metric profiling adds overhead. Use ratios, percentages, and relative A/B comparisons more than - profiled wall time. -- Run the same benchmark shape for A/B comparisons. -- Use `--include-kernels` to reduce unrelated noise. -- The benchmark may call the target kernel multiple times even with `--iters 1`; aggregate rows by - kernel name or compare matching rows consistently. -- `Spill Memory Per Thread` is the direct unitrace spill field. `LSC` and `GPU_MEMORY` counters are - runtime symptoms, not direct proof by themselves. -- `SLM_BYTE_READ/WRITE = 0` only means no SLM traffic. It does not rule out private/scratch spill. - -## 12. Sparse SDPA Example - -For the BF16 sparse SDPA K32/K64 A/B, the important result came from combining: - -```text -unitrace --device-timing --verbose -unitrace --metric-query --group ComputeBasic -unitrace --metric-query --group VectorEngineStalls -``` - -Observed: - -| variant | spill/thread | XVE active | XVE stall | SBID stall | SEND instructions | GPU memory write | -|---|---:|---:|---:|---:|---:|---:| -| K32 | 0 B | 64.7% | 35.1% | 31.4% | 18.6G | 1.63 GB | -| K64 | 3840 B | 39.9% | 59.9% | 55.7% | 81.6G | 8.14 GB | - -Conclusion: K64 has compiler-reported private/scratch spill and much higher SEND/SBID and memory -pressure. K32 avoids the spill and is the better selected-block microtile for this kernel. diff --git a/auto_round_extension/ark/benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv b/auto_round_extension/ark/benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv deleted file mode 100644 index feaa6ee7fe..0000000000 --- a/auto_round_extension/ark/benchmarks/results/ab_bf16_sdpa_k32_20260814_092404.csv +++ /dev/null @@ -1,16 +0,0 @@ -mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops -dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,2198.8499785074964,ok,,1.0,0.5424874441849272,0.6248773510755263,52.39102309207733,52.39102309207733 -dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1192.848504986614,ok,,1.843360635751622,1.0,1.1518743111453715,96.57554963468958,96.57554963468958 -dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1374.0115499822423,ok,,1.6003140428738858,0.8681502750119025,1.0,83.84208997478139,83.84208997478139 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1232.5617364840582,ok,,1.7839674179565415,0.9677799250764281,1.11476083453773,93.46387818967474,93.46387818967474 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1403.636468516197,ok,,1.5665380800713522,0.8498272392762708,0.9788941658339273,82.07253272763671,82.07253272763671 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1691.256666497793,ok,,1.3001279001967296,0.7053030616912401,0.8124204783343186,68.11503084186089,68.11503084186089 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1855.3182344767265,ok,,1.1851605496281126,0.6429347175165584,0.7405799848508298,62.09177372338551,62.09177372338551 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,620.9528554463759,ok,,3.5410900509135095,1.9209968913487439,2.2127469709347345,185.521330628535,93.23500901160774 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,791.7039599851705,ok,,2.7773638754423855,1.5066850303602843,1.7355117814592957,145.5089349334034,73.12650687563928 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,862.6485769636929,ok,,2.548952188905125,1.3827745583087172,1.5927824918211992,133.54221298952947,67.11254921105966 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1023.5971785150468,ok,,2.1481594758764504,1.1653495437698485,1.3423362029734673,112.54427270610786,56.559891223337694 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,318.0901705054566,ok,,6.9126624535849235,3.7500325869583935,4.319566202875395,362.1614582335037,91.77535584421337 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,487.6641205046326,ok,,4.508943524965783,2.4460452488328643,2.8175366860297646,236.2281643373549,59.86259263543146 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,455.0045364885591,ok,,4.832589133015788,2.6216189275655886,3.01977549627528,253.18428886235216,64.15944512109019 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,615.2271990431473,ok,,3.5740454614609556,1.9388747877886927,2.233340060581229,187.24789830353512,47.45050061845107 diff --git a/auto_round_extension/ark/benchmarks/results/ab_k32_bf16_20260814_091351.csv b/auto_round_extension/ark/benchmarks/results/ab_k32_bf16_20260814_091351.csv deleted file mode 100644 index 87c04adc39..0000000000 --- a/auto_round_extension/ark/benchmarks/results/ab_k32_bf16_20260814_091351.csv +++ /dev/null @@ -1,16 +0,0 @@ -mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops -dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,2198.8636924652383,ok,,1.0,0.5408843479418712,0.6250810260167103,52.390696337727256,52.390696337727256 -dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1189.3309545121156,ok,,1.8488240671136411,1.0,1.1556648447957822,96.86118028203266,96.86118028203266 -dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1374.4679729570635,ok,,1.599792600284858,0.8653027774473059,1.0,83.81424832486708,83.81424832486708 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1226.4589419937693,ok,,1.7928555267334902,0.9697274925312238,1.1206799721502998,93.92894947851035,93.92894947851035 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1401.4715235098265,ok,,1.5689677996156737,0.848630125236916,0.9807320019709457,82.19931555333687,82.19931555333687 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,3097.4557574954815,ok,,0.7098934947316825,0.38397028000612227,0.4437409540494683,37.191814514615565,37.191814514615565 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,3262.153450981714,ok,,0.6740528076027543,0.3645846133186033,0.42133762056577395,35.3140959587084,35.3140959587084 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,620.1253090403043,ok,,3.5458376886248417,1.9178881061195592,2.216435860494337,185.76890560761282,93.35942950453526 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,791.9392834883183,ok,,2.7765559030986915,1.501795629171689,1.7355724127016838,145.46569718396762,73.10477745000057 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1558.91097598942,ok,,1.410512676049156,0.7629242290485915,0.8816847107543823,73.89774129140639,37.13781348969048 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1718.133609450888,ok,,1.2797978459707746,0.6922226234153137,0.7999773506533876,67.04950032193229,33.69618332059135 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,318.0500839953311,ok,,6.913576833067327,3.7394454972996476,4.321545700259084,362.20710446877644,91.78692305930448 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,487.35681897960603,ok,,4.51181476657917,2.4403699880556804,2.8202498034906527,236.37711736792312,59.90033883142689 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,786.9992540217936,ok,,2.793984468509226,1.5112224674093282,1.7464666782505003,146.37879186199316,37.09385801765496 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,947.5691915140487,ok,,2.3205310094050664,1.2551389019009516,1.4505199042625117,121.57423545602056,30.808133960159434 diff --git a/auto_round_extension/ark/benchmarks/results/ab_k64_bf16_20260814_090508.csv b/auto_round_extension/ark/benchmarks/results/ab_k64_bf16_20260814_090508.csv deleted file mode 100644 index cf2790e3a0..0000000000 --- a/auto_round_extension/ark/benchmarks/results/ab_k64_bf16_20260814_090508.csv +++ /dev/null @@ -1,16 +0,0 @@ -mode,batch,num_heads_q,num_heads_kv,gqa_group_size,attention_pattern,seq_len,tensor_layout,head_dim,dtype,causal,requested_topk,selected_ratio,selected_blocks_per_row,warmup,iters,latency_ms,status,note,speedup_vs_torch,speedup_vs_sagev1,speedup_vs_ark,baseline_tflops,effective_tflops -dense_torch_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,2198.8340279785916,ok,,1.0,0.5418930146026886,0.6250399004918449,52.39140314101125,52.39140314101125 -dense_sagev1,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1191.5328000322916,ok,,1.8453827103366365,1.0,1.1534378256381823,96.6821895266987,96.6821895266987 -dense_ark_sdpa,1,40,40,1,mha,75000,HND,128,bfloat16,False,,,,1,2,1374.3590020458214,ok,,1.5998978612614945,0.8669734750953854,1.0,83.82089383379264,83.82089383379264 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1231.199766509235,ok,,1.7859279117740954,0.967781859974349,1.116276204260889,93.567269206541,93.567269206541 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,1401.3589860405773,ok,,1.5690726286996692,0.8502694968966288,0.9807329997069187,82.20591664773063,82.20591664773063 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,2986.013912013732,ok,,0.7363776903824686,0.3990379265275212,0.46026543832107275,38.57986044087467,38.57986044087467 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,1.0,1.0,1172.0,1,2,3109.592208522372,ok,,0.7071133063532604,0.3831797612454428,0.4419740306395013,37.04665829952705,37.04665829952705 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,621.7157779610716,ok,,3.536719037740539,1.9165233411639406,2.21059051541696,185.29367290275394,93.12059807005808 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,790.3886099811643,ok,,2.781965732060577,1.5075277970676815,1.7388395843388653,145.75108819286416,73.2482026464249 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1511.0474135144614,ok,,1.4551720934185948,0.7885475924683075,0.9095406204688681,76.23850778584287,38.31418164349503 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.5,0.5025568148726252,588.9965870307167,1,2,1669.5242109708488,ok,,1.317042312731687,0.7136960292054708,0.8232039960933629,69.00169476009563,34.67727193944677 -sparse_qtile256_row64k_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,318.1397750158794,ok,,6.911534490991705,3.7453122608539537,4.319984830495409,362.1049898405504,91.76104618552544 -sparse_qtile256_row64k_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,487.69996053306386,ok,,4.508579466718084,2.4431677187956446,2.8180420612370463,236.21080443411262,59.85819346135797 -sparse_sdpa_bf16_kernel_only,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,766.7436815099791,ok,,2.867756306316525,1.554017109975733,1.7924621163349415,150.2457767544064,38.073790880407586 -sparse_sdpa_bf16_e2e,1,40,40,1,mha,75000,HND,128,bfloat16,False,0.25,0.2534100571934443,296.99658703071674,1,2,926.4499850105494,ok,,2.373397445684619,1.286127496692359,1.4834681032783132,124.34562239070922,31.51043128178405 diff --git a/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/SWEEP_SUMMARY_dev5.md b/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/SWEEP_SUMMARY_dev5.md deleted file mode 100644 index 35f42546a9..0000000000 --- a/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/SWEEP_SUMMARY_dev5.md +++ /dev/null @@ -1,3 +0,0 @@ -| tag | topk | wall_s | sparsity | calls | sparse_calls | runtime_fallbacks | png | -|---|---|---|---|---|---|---|---| -| sparse_bf16_qtile256 | 0.9 | 238.884 | 0.125 | 2850 | 2850 | 0 | `benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png` | diff --git a/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png b/auto_round_extension/ark/benchmarks/results/flux_bf16_topk09_k32_20260814_112445/flux_bf16_qtile256_topk0.9_512_dev5.png deleted file mode 100644 index 8f1305a610da778da604e82a6b867d5ec03a7979..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305961 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⪼F~tCv#zDWVCCK!T|wyIA+H>0KKJl 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�P^hiDHt% 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%0DZpCGd(X1*6t*0r#V5VMQr?y$hh(Vl7 zAr7E{()IWMvmecNB^uiZC$E~QlIBS7{joprdp_|>o$%}f9}SOx|F`|0|BLVbv7gJP zgMeB#76ut^{?QNr)bIO_Uor6r%^VO?!^V5EPNrUQ4-dyvA7&zvY1#}%@L~}MmZ}Ql zKty(TH~=pzs0!YC_YNE>L@y}2Xfp%I_uu%5H#X&A8wzPv2n8@(Kz`-X^ugDzzwlEF z)1V548L5MF2*c;!zB?7$lN)O%>0X9Vt?Gx~8sgz7Gp!vl+5sIin5-#2tjQC0b`VTj zUSJASgL?OuLA0r@h?uCDn31V!71W}&NUk*(DI%rllBJ3gC$SLYv{b7Pr(}1-F0zHw zX%P!bWJF>#jMMei^ghR3eKB(=?@Vs8toH zRZa?Fg#Kh79m1d^A8cOtH8*TFeXM1)oMK&a-n-#NoHk#`psM~4) zO)A9t^botmW4Z}G+fE{)pPvWx7PbDCoh<;`!|R`GQ8~3NXboppTLjzDVsg>RZJJ9N%CTIlZpNSml>L?I9;gvh|0XO5v(x!PaVQcY?pWgG$%N!1X%HQyoo zKL5ov9?;2`YM{p7TK6nkXYcu@J0t|R+o5F=jiblZIuyi=I_Cfl0&2%>wsVE!NMSy5 zw{cM}(l{cZ15VnWO`reJQ39Bc&pl_DtwyOvrh)WoJCdH@u$!~f(G3rPu6<-;)O1_i z8v7$?7eU;0klf`l!AwO6=2`;8Q_*7K`iFk>Gc{}_!yJ1fs0p)4e)!nOp8Tp`{uRUW z`IvJ|WYu*llBpWF)lmZ71 z;A$4xcKd;FYI}%VM->@h;rZ<;7azL?f25i_FCr}<9a;}P1K+fzR`nVUkOa??`r?8z#KSC(`K4B`~4MLO@Z@i z$fwhMJZfHwh!r7%cjs!yNzn~sxBh1#8UH`Eoz@Mx8O)>h#t`>)vqIKu>AD&EZj=c` zqC#EC;=-!;m3MY1SXbnV#~9FwpciiDf{qB_e2=;@cgy4}xt+$@qNBt9m%;zV2XOW+ zm$=h8{pilBRdsv=kfj(og=JZY$bn-f9@3ydkxI;>7E{V5QWO-3gH%18=EpmR!pub? z!AuI0)`Cc8D>|>dB0DXxwltj;N%Ct@LT5QfyN{ltMnh$?0VCG~Ucb!>5}Q4GP*KUa~$MrD|f{A4>R{&%9ge4MNk<_jrRzh3eCn9>)}89YWky z3`Xf=ANk;J8{T=Sq5_U)3?&NV;VAFCd-tIa1wtT;Ohe=UV6D;l<%fAGA{Lkk7TI>2 z!7#V*sAI20KuFK-j>dypP~&;7rbt7mo<{_(r7)?HhJ+9Tr>MeAv1UO46GP2J%m}=; z)Hv~%LI^p}^CB3X<)yu?#0$17mecnU^LculUF_m@bGZl5z9sG4`sl9Ra{w1T=sjPi zYN`-55mQC2R=q+gnv00YQtG_OywoLYE}Dyqks_uPrp<1gHX!6YKO8eCT8KnRYRN+2 za(j1cAT=H~qe16Wo(;pKY1+D2bIr@b1ZWtBoU=7;A`8*`pCMJCh%uvl%T;RQ|9l)g6Tl$`nCr@!m(9F7#7ycX zn{x$*n8`_pRRyRNopstLUAp1|#dbgxv+ux#+x_p;oq*TDM29?Nrg1ZXV~c+#l}S zECl9K$}o;Ho2u1Xr)ey8i7`0Y%_57Engw$G1GHhz&SP;_4_t`Mf{Rx6yxYHAxy>-~ zTC!96C^Vpkh=^H4n7K0)+l~%SPFTH5r|+8g`f8(ya#sTIicVuyk-ebr(l#9jOwUNImoFVv-+KPjKm5thzkPeKup0GPp}}v9$Hmlw8n1O%adNywNQ@i;0YctCM-4?Zkf`NsX3@t)4k<>K z;u(OcNevtz%7m20+rz`K%TqEHC89tfBd|{>APAHws8KWJfQtecIsp|XCPcyai-UgD zxr!~Tw{H9mAZj2^&xKWcFQ{L5OUeCiTazF#64kW@OsbYDW>m#W6%|O8s#2;HskO?S zb1pj1bt$&YdRin`t7;TzyWdXxt5WM+?hR3tIB3baR@z-ZzS>?>oQ{WwhlhE)-{BZk zMU7J$9DQ1HIi4Oio8A8EX0zR;aWoLeI1EEf(N(D$$ISrMDwP6@Rx&0+43R?&?Qubx zW)u6Mo)AMMCbOFJI8Ea;=A27aF2b(s8W=>XrYa1C5XiWSpr!gA2CyssGk4wpwp)7e z*Hk)M+Y_~YrrMA?#2C_$oNFX%A}XckWl^clO&})j8o{(iXy|{gXiV!}wae7-%oe!_ z6q+$45K(McLU$UMp}6*Xu?Gj;usaR^98W6jJU0hehbo*+F?F-+(Vx4G2KAtSuYu6z zN}RjXbDDEnbD62oDs$hia}9zBy-3_sgA1z<^zhpWFw*3qoZ$BMJMVtUmwd^%nVvs? z&g8{UCgPZeT5E_&6@ddnFsX4?gctR=nua?XCF4O)_at1BNBpvl!<)gjX_u5m6@AUL(@=OS4FS-w4OBp>dV~J0uz`-R6&RP!|8B; zeYJV#3(roo332PsF;%k=yfV6ZZ|48ifBff%P!c$Yv{(?0N|Q0zr1PgV1O!tNQLw^% z5-{~UZ(T^${cbLGDRo00&46QAiD`CTSq!lHb5VdSGOHAdvDFBPM16E(_~LuFGe-?k zbs17nRVm6Gpj>m?vqnZtZe$47IO}}^33~lz&DUr>88foR({CT4GpPX=ToIgwDqD_i zUexsrz>5Q-swxUolxiZTuqr0iM66aVA~}~Ll1t55<}42nWzLeb&a;ZqFpa~wtxEG; z#!Vtnsilg_JaZW5tV7<49m0s+)uZkHYMO>6mui}8&3T^ZQ-1ay#c_Z0NUDhHahW&M zR*kCJZok{^cBv!|KCqSnV#ap69fp)^2EsIq3aFMCqV;|TRg;nxy4`IVRB|!Z)4UKN zrGY|NmPPHHrF$7rL`^ls7(%dCd-r<|H6d;d0$4jI?4lRd!3^!v-99Idm<)kY6wG0q zrg5{`Znu`_Xp)aaT5B;ewZJSv4S`oGhIuolcFxGfg7gs2R>z>W_C&4lP+uDcHH&SF z_U22oUia(A?O0OhpEh&aNi`1doQt%C-V@QBUNd^_;B>a>Ju$L#iaeld=6m z&!e!u=Hb2dcWpg&Tz&;sP^)bNZcR_UIfCF?fFhs$?B_o5i+<6N#^<-sV;W*eH`g~` zeEZEvgeDJ5A*M15h-%g9CC)$)H>oWbV{S^D#AZqy8iCTZIdUHZ54gqT?%Uet)iv~9 zEjy7*N)b1nnO*dkdD8%_DO5sTKu8oQ3y9f7h%{J@R)YxvY9_T>eVFX<*`N4P{>onsQ{%cB2GtW{ z3#{6>b%PQY6;Xj}EdWCdBHEFkpsFpXQBx68sbw}USJxZn3?^_?EA9MDjA^d4fBHn0 zdk=%%{Z&OJD#ag`5lp;=j0mcxbzqDssED=kKD}4dq2!*~_D#QTJ{R=&Eo1;x8lY<4 zQ7rx8YpZDLYW-DJP1H}%L{tnas8vO*6fL!uT1(ZX)Oo4%QszbGMITPJRLWUFK^Fnn z?ViVRfLY0P$z{nB!a!1M(PhbF7+K~1{@Jrocm|J=CU zKYsf1{sa3**N=Ee`>UH;N{F1sK~0xa4k3ERIp@Xs6vxxadz%l3gR1Oz`|WP>Fnk;a z26A3%mMW#Fj4^rJNQ{wV@SMEKqJ%a|v(}nY41u*&R|N3t`bB8$CI=1w5Wnx%V%H|A z?Q{tkQ57WtcV2v6Ud-G-J*HP>+JuG~iqmS*4!33nTA$q7X!M&hyXw>`#5^mwx$n zx4nISKTVr)yV-1ahx>a4HbYuwBiJwwEXpAq9+vp>h;oNUwT9<6)YU%-5L0F%R|592 zT>c2Ckv~n1V7*FAjo8qIsm;tsmo=zb)@$wiA`xgodApTGr^T%}t7^_=a6iNpLZt0>B&bpAOX?D14Uj@pL?N^4vmnp;C(K$qv?~&^ z%hfx!p+2dDNX6cMcK7W5xQ&&`wALZTr4kUV=d(-jKJ6>-UQum z`1)$Px!HgC!(a9-U;E|12mi&7zV*(p8}_MM7Sq6tl+?oW!~E8JcNTVLU3|q% zRTFC$(n_RLeem`!; zTo;1kbdXYsd8lQGDW(WQUb4>0frpe7nwRZA_u&5@P_6bIx;C z)x+^1wT3ODvP*t?HeqT~D|2Gz7-Fr}_3@bFYWnG1vuSC0|2x!LqmZuV%?UstxM~(N znK5%rv5|jkJsuzG>7XS;ONu;s84LR1qEH=DYQb>YD7LtN_doOE`(*+HlN)lq!gWE)Z5tu2Zs(t#3Q)~q!`rfbUeQO=9^#oS>{iAW*L{QUehCnYC$= zYi}^D3j(yGbngdpqKyMNF7D8LyfbzTAokuQ4>Zt|H!^?&E6|BNSX+@-L>Mci_QFkU z52%q3JHlpwsXV&b1%{}Q-%RCJ-DxW<7>uFBfQhy8H5lqXjzMB%l+=hr==34x)(gf4 zdN>|I#?fAT?eRF!an2O>K7W@312EMA%hTcTtH1W?tB;2LelzXE{?YaR(W6%$KYrMd*{CCxz_5t z9x}i2`lCdjG851!1Q@A_5d=d>*Z=u{``v%)kN(zU{kef_F%b(#O+WFO=bwLjvGK7R z?$GK_6i87YUVHh~aR3($?)|D=Vw?v~^`QI33oz&kXV;%iBK&6S) zsF9ju-`??SB3eXhRi}IAB1uHhGqNh`xXI&PrZlxiO#Qbo~x3_N+VSl~9dGd4| zhg_5bk0F55I8AC==2KN3H{1Pw$1yxS9G9F+5wo<}#SqdkOs*_@I6j<#kVV9u6pISAMDcCQdLf*w|41(~V>+E5aT zF{BhtY+07&_@I(aD@@5Wgb;{QN-0HC&85^*MZ{Ezg6l(Eq8>f+?)GJk0GpzZ$6l@b zG+OIsY^L1FAKa_fEupclKX(r4yW#Il{C)y2xC%Q*?dB0^{}VkT?H==Nym2-^?c6Vp zfrftf`o=kgA!?|Y8=x2ONP}_LS^!*tFotQf8Hefl?KAIT9i~C6)++Bld++7j+mC$Y zWADEA?A`a?z1r`Wyc{16TL11vO5`!hSA%>%k2#*R)-d5xGr++t}cTlrw<;Y}` zh7ds^K+R=7Il)va2B+vXV9a{~ZtstWdAS*w!77x7iL|jTiCM(6Ix?eLMO9fu?fB&% zeKpuoNUaOcl6zlD*`EBvAO8GzeczA%&foBhhj>?OnRWY}{L_SQdi{9(mSvG;k$JY9p+K!wEvp#?jxj!Y`uOqFm(nz(qs9KBpV)Fz6`>Ismc0P2EbhTY=SfT^j3V%B>svv$Z@T&0e~wApU;P*iIqujP0st}9~Wc@Gm>T;`3ks^{@rmwX<$EZZsv)NT?t zTB7sJS{B6J(yztamP}C(K(GRWt*-3vbVt#+M*Tdg-&+5Lb$#><5w-$0ey9$x8BEP& zx7iFaKA5@EP~!@$(Sw1te$_`G{pzp(>T#pfcHHcy-8fuLaWljzhTV4m1OMg=|M8#u zUP=*^I=bS(1rf0-A0AGsT563GUvD?>yqk<R2c{cuPIIf2GLSgj1f~DHruQHcDIi) z9hXy#q2!!%jvTl9?bZG|4au)kt1!5V)>2e-yW2EEq3W_^ttAlEs!(GhpB@v3=%&HJ5ol z)sjoeB2r5+6N5^v?3uUE>Zuh(u!YFGGP_yR&Y9_jy^hwOGx}Bma=aEz8#oe&bxF8A z>UN}Ac@OC5JdzQYpSF%HTaVe-ykRxI?grMBbcHnDZ>P^z4CfkzzqckIXLHm6jQ+a4 z_;EW&Md;yeM@WH?;%;|kW)G+Ny=TuJj;D`&Qles zo4)Dw54`@?+i#EKD77Ha)y?(kbZ{vMHHb4mO}P=&LCoA6$T={B#iUn9SLrC%K6C88 zN6p;ouWOW##v5x!x8FIB?+nysB>bPv95jn?`Ha?7t2^rcM9$8;XLjzZx`Dtsk7>T! zJQx9>GEKuYMqaG@1SQu8ZO~SYbo|4=_qToHm&TFq6Bk$p6q-$QU{>VAM>f}Ey;Un} z(^>95-WF7(V^(dq4j9hp&6}X4E^gQw*d8 z6@Z`&QL20$H;?wUR`fEO=nC_&8r7lc=3Iv&wRVjDh^vz%L`qPQ>TWq3cOu@`^DPsg5J?DKP)cZxy>_vN|z7MoN zU{lw^R)C%N34`l8s9F(KQBf5$XZ?#>5vkQml~QfVGG|$`&5O>9EsHG+mW*7W3MDc_ zj1kO3ifQ0s7+jc#(@@o7NaHxhaT~{}8a*8DtK3mYOD-vnY6vN%abuK1n)Z*MYhx@v##2*O4zB&+rE+B_cq!DB^vr?88k(*~&KiK?{;3Vb z=tY=XHALR-cl)dT!~Hbh1!~jrNCjrjB{2XZjdZY@R~5OmqO_7@Y{h6+sN@`4fY!5v z5u#e>W1dZR+v(idA1n0p3;*;`ym_39Pd3M8Jyl)5<3;Pg)*IGn23TL}zw@F`=ta(k z`S@!qz2s~J{YtvRnpcd~AXUxmBOm>U5r6ixpSwRCKJ}@ey}G)7Na z?fvcXbbS4_*F~i)O8_43Zg;yqxeOf4Am~1ZI&uG8)-Z4g&g`I`fH1SEFf$Vzr6F<= zpB9S~)@v|g_IN~9yKio8AoNCXBLGTg)UH2zv-2u!_)ib*dm~W$77#kxgjIHE1)zEr zs0mBMb54cn5JMoi2c({vc%6y8utr7dTZYN2mhD<{Ij3G`?LSi*S`Gfl$X5S4uCXt-HZam+9j)oDqsYNa@3So zg%c3LBS9m8c&RSbD?=cryMOyve%XKb5C8RNA0CXi;MkZ~re;(P6_F4?Qy`c@L1G~C zf{22_#H?k+oN)g?`pv&1$sxkoPEI}-gRx8aQGY(Z8ntyc_5|N+gbw-pWm!&hE@B}hkeJAO_wSftm?p*jFzwSu7PZGj*J&i+YJU~SVYA&C z==N}b731~Ib%;Sq5s9L?ETyVU<1|gAcVo6I)MOaM_Wxzt=@ zienmMh%WRZYEs4VWFH|*fVEL>hEA68=kB4Ub@EON35iTsebNh9<_y<>y3#k9HNgNh zB7q-KaiMbOxj(H3xI83U+`m>pI_$WjjdcDHz4*^&)%@uFgu7YA*&d=7H{8fXIJW%$I4Ps`F0ibza-g|cUg%sp)6c*C7LVip$&>3R zPu}>@N5K4ZpZ(l8POrc6+T$mWU;p6iyX&jRPoHdeJ1@h+Ohp*vjSRfbc%cA}77`De zYGmNRiNKAb$&on`#lVrATCcADNr5AAa1~k#!I2PvIJE6g=fuZcd%}wbOvDThU9z9S z+;o6^VWX{=7JYDgkJvd-{mHmGMRVj>i&-m-1P;MpaHXw~s8KRWohH9FB@m2FLS06b zs0&+-R9OpKWzErYA{`nI0 z+PEDe=QtK255Cly2qM9Zv<#N*;mzOq>%aOFZ|tHyFa#!W7B4kir$3)nv+bPgqXn)F zAMUMS?OCdIiJu1Nc?+1hwP=N3)lwxp;iuLmmu1PzQs$*Bvn+GXi_D8G*-CZThlwKK z9gNI@uWzm&J$bU(?xy`N3@OB5jJeFmJTH<@^QqPv0*AmL3xPJ%xZ7@EHV#7!Jf=9r zAh|qy_THOseesKLfBx-v-~PgzU%0!!-HbzIdN>?T#}k1c4u`|tLCu~#dGg9DFYUM6 zCFk4Q+tYlkTFsF2LJVfkdFj*GDKB|mmi_K(9L6|A4qT-VI8*bFscPgvaG^c16&3L? zhKU1n@5gS?2RC{~3%{Ce0~5Ec++bX9hKH!k%W^y(YpE&5{eJ)W(W9&V)sPa$2(T&8 zEkNMlHySPc>?qF*5RRAh&$<2!KbM*d1cSv(Bp5y1Yl(0kJx>3PzY&AwU%ek zZqqP4dHQ6x+n?rT7{^lO>gLgtM>p?$@$EE>xfTUpdF{2U`TBG`o=zu7y?JzVynD}T ztG5Bcz{~+^%)tPF6(J2}DX&v_fBk9Bxh`gfSwH@PCtv=- z?T@`(s)53&T0mx^#KDYb-29Utzx_l1!GHBT|Ht3(>wo2!ytI27t*XYQjGz4U?O*)s z-}TRb;`tHVIq!Cxu$wlhSq+*M4mO z`+obc9_u@ib4MShzCp1-wbG4i%xZQ&YeCuO_qS5+@^tBThxM9py$PXel# zD5_W$tyN0ZT-*)lywsd^$>Oa4C8HFoVj{iaN6iQ^gqz3LkDuI3n=uW889*#*#-_gh zj8ssoBuZc^xft;{jzkefha5^2waeVURsW+g6;M3uC9L5+!o)?&@Y7B`3Q;)2gNmWA#2A5_8 z2qAKLEg_FH_G#teg6?A#I!ARCNu#b+xY-_>Y^H=xFjqe9+Ii`xd*v z^;e{*1@O(xcn8+y6|S(3o2DK|c0}S54O$QQ!lC=S?ZdPluL1gNVs(am&Y(32oy|?{ zr?uiTdk{??0>t_4ci$$2n@5jR8n@fsORv2A>ML*DKEK;+r>p(r!{N@WLDRI^?RNL$ z{W8z@ch8?ZefrK9KCg979JJQfknVshf>9Kqw7nWPo9EBoikt$o88ZiBv`Je&l#n2P zUju~@IfPnfFqt9{xy5$cAK;BbAo%EcQwI77FE_hQ^4H^VGY%|Gd zk3k!FOMMahy5_c?*5}|WPr;#$rX7al=(j7%`C4OYy$;pvAyz<6h>Zh6qQ7E%ZK0k8@}B@kc)Sna{m-e5li6`-&L3?ssKif>Z`4CWfgQGiwXjxTo-P zdU!C~d)6Oe!3<`u&LpB9kp*L|R2Cr^Lm|r;8FcqQ|GnS#*7Lvd1D|{z(pbd@?-B0^%jSMd&Dmv?TUzeuUIh}0@emYk(j%~h5xbJk_n(@C54uc!(GH~9_) zM@lh{<4B-dD$|xZ0L(EGM~5}CNY1K4Ax2OTGmZgZvmk~dI;Idpn&*7X<@)A{iOutT ze3-8vKaD(WH=7ucQk>`G;o(T27~?qZ%%l`K%_ma}Av}HZ^y=nHMNN@Q&N)xxV9bZ( zf~qkF4spBN#+Y2gC)cGJ4`=tPkGANztaGazEG06Zf!U4e+U9mc8|!rJ*Nxm&uaHCT*Ldb62D6`pfxvsVOxWU#F8$*aGI{i6~L&+tTT1r+h$N18?IUbkW+vgwt z$j5fOy=Xn1j-ojzaR}pf3PU8qW;;cqFMj6d4&{Lgd{nl%0p=hUjkY#yru}OVhj*B# z7y$}m6k{+HCtQdZ57a=xfD{s?n9I@Qb`Cy4fEp(f?De3=|3j}qdIso3BENBN!8!s% zz4Yz`&CcX%_qbPhI)wlPmlC7(j-Bsk1KHLZme*h-jZ<77J|Q?TXWGVViQsr#)UG2Z zGoPOkR2dXhRD;GuQ;KFr@T-ytWPh(I5M*fA%ka|M&jjr-g1R4HXFr zA`NT?gMz^^Fw_`EmXRM)dH$=u{`EicM}FJm&3%;nV6_V)s%Z_KpxrizM?!s^f#>dS zs8&hOChpd=I}Z!J6S%6HLe6}D6}75TMRF;nS`jI3`WL5r+Tyr>wkjk_W+VoH&EsGq z*AUulH~Xu7jFFhtNJT|Tt*XX(F1c7r6NjMCnq``{IoDkC!+aXI`;gLUS@u^~h8R-3 zKiqLlH#bjG2-jD;-F^e5_uhTiK()#+r2Wke%pML0Fy&lecF)hLp^Vi7S+eL?t>T3zI62`B<03@htu#$wCkI zU$9)42F-neg!NFdq*lbx3g-;xLX+o;O466?#@CKMB$_q02bS1 z+)P(*WS$BN2$d`j+dw0SQ0hTsX_>cznHk0m3Q#L%6oO;R+R`nTVNf&?HDb>kz4q9% zx^4-2=UjhOM7@Pr`-5lZwv761g~16V4k2}wDsi=vnxBgZ|5zR$%m1U`U zk!6v*=)73YS}R0UjYV2lfx%~0$}oh@ZZl3Prby96>`7FMSgCeemRuynp_;0QnQ@GF z#|JRar4F0jwA5Co^wOh8*B~5^hv(03iD?|hyyO^SEp_)~&oNl#^=BAT&INt83y096`@Xrl zMY_UlW}3$F;o%|Y#YE6U=5~_Ynt#v@`AX_{x4+u=HOlY1-=ZggExe{yR9Yb)q1CA=8g)B4An{Jh^;w0s+9R{^XiN9~^X(w40Q?JiEfk05 zD=xzs0-IVXH7_OCavkE6$1m;nTTpoX^y$-=UfN&Z5JHM6=luNkd5GcaYOgxwX(1Q~ zhFKcM-4$)8DSzoF9-hDTX1!0_MREUw>i=kXHzGKdMeSl3Z$?m zLed_q0|dQ_egW^9dC|%5J9`0&NvRE_BO>C^a3|7nh-R}hpg^rFg2?+fm52`yRVBi} z6gikyW=<;Ak=aOmbG4OvL=1q4T5oYS5K&0g23R1iAY&{8J^O|)|KRWWji2~S-~Hop z^GeYOr__??v82wtib-HbK6AwkM!H0Mi20r0_N`z3$N#{$Cwa>UlT92(($uV2SMnkw zu>fePF;HYvIbDy_#7nWcI&yDdGg2Apq=)-@dWaLD3e1OpRI<}1D97d3ef{+}eC2QX zS3mpwfB4rw`(r=(*>|7c9~WDsMrfjNHI1*meD#Tsf8tku-ABLXOJ3Tg#qy^kj%)?y zB@@@5Fs44Lb4}vW|Kb^iwP4?Rmv76>3@YtCrwp|$(fTBJQJ4IzMMbSvtyM~qQY2?> z|66p)KJ-zmz==cF7lo>EAOnmbDy7zWnK#TBf}fJA&2v_xAq~bs302e#!w~lS-NT$Y zuo5jLKY8->=FyY8`@@jN`-kK4wCu00C+6*Db9#8lMUJOA4dcz#brl_kL23;#&dZWg zdi?b9e!pAhn1gRcte54^AI7G=|_4C)SGwI1!<=og6V`_)_^K$q~q zFZe@iy3u<~JF)%pH|R1wdVe-?mLqL%QvBy!GCCX% zA*3fSJ-xYk^!Vx1mtJ}0=H^ivrmO2~6B7}sMK#8hQi!MH19ONefRWNjkT3c2FP{ef zfqcAv{Nc(^k9g2H&Xsw59h*0nnnH+ix3Bq7LzJ`!C6R1#0V97gCZ1zNJ;ma6 zSS8Q~gAm+wL|1oU7FD-&Q%Zyd#_;-v7yuunW`J6J_xYkU1_~enTwjZUpsD}_LHoXy z3_uXy(`|E+)g86F>38WaIw0~2#- zW6scpDQZ9snnyc6xz7Ky-}P^Q`!|2tu>4%GOk_l9H;z}E^l;2X!Pwy`C~D%I>M801 z6KIX8Zd0+-VY{ax4bu?Dm{JO3h}&WN`ju|^FtSh}fSFUN8e%Zbkz|jWhUdTbD|g@W zwO?8EtM4E3!z}ZhhhV#DvyH=kzYSD^olrhUr2v_%0>+V@fetf|Eq&f>bGMB-OwD(l zx4(79r+M7fY(S%cb*hha^5_46Z=Ul1+Ftw^8P$iASFl{!V_}=roQ_dlcH~and&2<`vx8C|< zsU~_zY1(af%(UBW4~N4%=Q-!ic57yb!(qGI2BMPd!|`}?^C-nMgu&F_e&_Aycek6( zX0w?@nhJB#db8UVSvqXZ9HN+(QmWL*!PTyO5>pq+FvnsYM7O4KVouA3FV+itg^t8o z=Px#qE;OpB_G+xE4;?ECWu`Qa%pvFe{O(yIB^8E*7*vIrNWEi2OhkPUL}0I1lP`2@ z`ag{i3Ttjg*VeXk=TJLUYJqb+M~-K#ztbBU}3)<}UdisncHD^5Z7 zMm<&I$joFWZqV6pD6_R$46UD|<^Lc9xRVcBwq#9rn$|qw;<>nGS7}h(3Rd=70QGrC z&Os!m0HYL>XC*M0DFPF0Rmud>?ZZjIpa3ILA&OE9v$qZ#P>9_apx>`(lmZ~Mky`rcpoEC1lrU;LtkD+^l+Bg}{tD#XU5(84m0`tZ_D zf8)1&&2RbjU;Xkv$A?c1rL9kaTro!q*!mJI@q1gnJfTIU<#B=p}?jKQQZ=oEUE;K*CS|? z7^GTas8T8wg1J*y&t3)AkUwuxUX6Q`X<;?v&b=^OWv-fiZx2=#fQlCZ;5;8yQ!!Ea zEZ?U4ZzkFxAQ7#iwOXxOs!w;ZTpNbt(7zg)u{KqS#;@@9_LRb-M~_~5>7{8JrB+cZ zRjNoSRg9OcVxTaLn<<6i;o;%#aE#;hwFzomHDpGQJ`s8UG(hvt#`|RgF_ujkjz5e=ZH;=9#j;C7c)&2^m zV@!c)S(fc)dpgaVX;RfDj6)3ahMNF2sTv~_GqiR~MWPk}HH(eO&F;{e&XTSD_#KUK z@8Ik^@8?3B(bQ6ISex&rsobtHFTi`dt0YJ+0`O;~6OKa1btZu3yLn&Oa^KIG@$o9(^^+Z1 zecuPHfo;u%txyr%r)pE&1OPP^k-&U)b;TS?EvM6|mf{FTh#X_wY$h{`F?g+Znx@xY zd+qU)C!6hd7{<+R8$#M{HgQOK$&8SOIt~L2Ok^Aahjk>}I87$H+26!Ce(6{J((5f9 z@sP(<6WN#+-b#%ehatqON*n`o?UO)bV3;x)ajb+Ps>*DLibyuF?KsV-vuP$QY74jk zVkQk9Z@yIs%uFiM+qRmz#G1`D4FYX%uArD&3lIDK^cccmy+mvP(9vU;Mj$4%A+aui zHH z{Mm9k#t>nuA|Y6W1vZqQ{RRLb>wqqywYXc80aO^7p({X`I!BSnBXm^~H4pry z>pj#eBI=YOev*h&SBz*=d*#^k%BN*y>*C+ee1WCO~~U3SHEo%5h3Xt`M93^bKrFHy4D zDiEaJ>vM)Y8c^L5yJ3hihO3*s$<4hKbBt}>hXWXcuiZ=T8jw9eh|b;hkz zYz^qa2&!0?d0EQw_;8wMRgEDq^Ds=u`SiuN-um!I zKKy|XzVZ0cqpF(HKt$KW&1RbRyImTBs`=dO3fBdP8e)j1P-7#G(>U#~Dr!-iS)m$J zGNBNo8j(`q(KuxDnj#ZWK}^PheGp86g%HCyAZ>Vfr1>`Mk?AD5upLQ{gcE5tEinin zMHUqc!~`D@#@5_3uL`3LDKj(YjH?Tmu8w;RBVTx6{{AC9;jA&_DvtX`lWy5Tkq!h=DYQ+_l_KNx1s%%uD8>EAHQQ$J0GM66b;f?83gA5<57;sQ?A7b&u;IYK6!eaPtTse_u6Z(K6-Th z=9^zU+#kkiGfe|bbFM0?qFQA}o~BKy6{H3&WvQjcDfaDQBGvV!8BG%cjEGQcb!?Lb-^J>1_v9PU+W44h(o{OIv1^7HpWU4?QGLRApaR3J%zPR02Vu8kmEMfEw#Br~*~{W^zTww#mC6GZ>jwuUq)Y8uNma zFokn~W+3tj;|5h&n~oVcs0dT=k~xT6Y_;KOXvW*MU7f_O4H#$&z1px~hh>`b=fys3 zly;YTUge$FKixN&HjYqLhkc|JEk#SUQdGo5NR^#)XKU-Rt=5Nq_c61GCm8{tWm!Z8 z9Ab)TlYpTr&GW3LS65fVG;xT`35wg>=X0*(W^;A5k8yx%K9!p%+gj_JZ@qIW<;hDg z-QGS^v6y%m$8j7>sSn5FwB4NMg(&1wjt|G{>#J#)KK-+wdiVJ|AN;@vMQt-pdC4`` zal1V&OG-nCafm6GrAnPP<2=tH#$gzkImQ^7=Wf|JMy=|8APliOi%?Br99;R9S=Za$ z?u;w0IQy3RJVtRs4^xnsqxBpUAtJbQu z*V%j9=lJ*#Y-|%la16+i46%?*93uRH2q-)N4+szf5rF~%p#bqiWFbWe2qaMg4v|Bg zgd{R?NKEV`KCzE|a(r$%`@YwzRaO6WUdI@{x7K)Qy^lF-9p~5HtE%Qd=a}Qtd%Jw? zYhPhi@9zhJc`|!#JIW@zLQBL?ntat(MCW<9>fwE>|yJezI6Cee_c5lNlV3C!}D8 zyWJK6y3{R}%gT~9Eu}E=SV{;!xm3$Ejni=`8C9edA_yT&rC`wz141wcsUmFzL?+;Z z{fglFMCM?+allw0GWA44R1ikeE0hz;LG_r+PKRew4PcJEJ26MK7#N^J9nwpU6<+=H zJTr)9Y_dH!!UjClzTY!6Ip0#}j6#b)=N0FCO#)4vSA2luGmJY#zz77y90PM;4y;$} z@&|wRC6^;&9Tv=tYT`~3L=f?|!&Q$+69OPO)&_>AprnRJCCEgjs>*TNT^unZmM}Z5Y_P7DtV7k#I@b)nBjWE z4A4_1t6@6TO1k;1UN;TQl`^N$dd_?*j-jd%a;th_gLcl5RDFzUwO3B69I3XFU(;Se z2Y(&wcZ9+G0CwI?Y9=ab=9PdfrHD?YOr_+aStMtfviiWgB98o+8v0bR8F&Jyps?rV zqB>;})9dRiQ=6vDUdK*BeR?8>#d5hIE}ndt?6=#g6lCs~>%QwsE(pW{*Xwnj^4quX zrc!QSzY0i*aC37LQr9n+r_*pcovv?h2=QsVee>BHBm_Vy`hy?-U^ty_Z*HcXPp9Fz z+ZHW9^ToFh$KyCmy3}P#rQ~rO5up?*S-TjBD5Ml>br)6Z;Fozy9RLubXpQveU1H#} z&)%Z1%}xS%D^d+|scycyLcpQ3X_)r=!!%9+x_f>qSyDf~bCcO@dsEZS4$6x>ip?>JXj-O-tId->8fa${WRvX>I{QCLJceFQM z{Oyc5)#!5e5c50nqmNzu%+|j}tn+JbooHqXxnD#=Vg>_d4$J_^9Ff@&cKhe`_1d>V z2w~Z;QtEu09QFrOST0ru6ao>Eil`P(z(g^Z2~CfuLmmeZ;U?6csi+z;GY14LMFmt8 zn8*wQ2NhMaz$9u_78KCX1;QgB7^naf2BHMGqHslW1h|6!n)F%A6TuF24|*glfK$;7 zW=s)19CYHE+T6i7uSXAJ5!wG*b>ID2SY=H4J%ieLR42ZDT=c2;RzU*_<=r3qL%;jw z?aP}_-}F6o5m#ME6ghARLd4g79P%+m5m8t=!P6<_?3nuFS^-BiRhWwoO zB&r(JTVx@Go15FN?@B3TWB?&17r2Wd8HOp_;czTP6}hMyK)>kMn=1oQ6BXco(e)h# z{`%{;O7hv~pZVy85V%|R-D354|JbdTFRpG?HLHB~>FX53M^lAI_GvEFW5)Q*Lgea<|6bm#P5VOi^YpHR=-3ZWtLN!7nGS@YI(#32tYnTsi zf2wP*z86~?jWww<1XWP5EOHo*yZvs;<8s-pSBtlg@3oB4OEpDGDTo%Biwc;jDxtGs z&I!K<3@xN?xJq5C4Ryg50(jK)k)gKWYT@q3t8crM)SRuXwdlUC^ZM0LJ;vDq%oX4Z zt5J`3_AN7v|IyDk(gpv%i)zH>>70S78PGbPq+byEATBcmT&`Bvo6UN?F@yEh=KA`2 zz22-gYb2T`d3<<0ro*e3uT$5hE-^764C7z~eM%`sPz5VR!6XAh$>TJQMPxXhbSmDw z6+-|bVqSI&q#%IPFjb{kPDrMzK#m&pEi;c9>k#=m z^+Ew#-3pMfARK<~P51NP{oOua)})Xb>S(4$CS?SZSS*kdnqE-m>Sb5qY^jFS7y#Sp zGBsT}tW-2*B0vCQoBLGIr#5->0iZX`5!K;_;G(VIv^kH4Yi!UiO~GY4m6%l&q)lB` zZHa81t>#$ttdhh;E!)CM&jbWRY>mWoj94jpglY=j4UoSD=54uN zMDMff&`Zs^X2|Q|E?3aS$AA0r=Mc7K3pH%KSlGWESwbY5KZ(_*0W+J~cDtSO6k^)# zcaKj`FJ8QSC9ht-c(qzBOD^L$K0iNguC6$8m%1(`4$%O{X)00z1DTdQnPyWdCGYop zGaJXrqd5f3EUD|e5HN&ERfa*ukTDPgDR|>A)FNJJI&fev^bQI_0EWg$0_L)%=G0MB z2z}5M#kGzrC|ALr*>(X>WJjI$WjcaoCkVS_eJun#?g15)^fd!E51y%au{q;&hlq#5 zt_)GvI068w3V53Ad`-y#HJ^?MgszMzM##XXCLt(*csH_o&6-?xx%zbjBFC=?%}g{i zvDX@)_6wkjIhIk&sNzLAQZ)y@04^eW56{*6rhTv|pem@jvU?lQV!ngbpoOlDJ>~bJ zX>EG@p~vPp<1=kV8#o-Jpycwrt{3XbQ_au4V1NjK>Z2?x1_Mx2)SArKdGva=>~pB) zx6Ems*3Lsqi%G5W^+Zj@06-12h56QoylbQXSBs)m?yZRBq9yzPBo`0?6_5g=;FMEs zwYoWatP^I?K_~Mb%*A5COye*b$S|I+Z#GOEV;~{{kWxy?L=?ItV%?(a7R#b~I39~? z*Dp8MH^p?)ayT3TfS8}29~a$fb$h+Ky1Kr)e%@}Ei^XSeJ|zyv!(p>oABWRnzkBo9 z=f}fo7)~EPynp@r6%h@?`14*Sqw`cKduh9oOrtezA-( zrWgsK0YN2G!iBvH61<02WSfx+%`1V zY0%=6YFQk4nDaWUYD06kN2^1Efwv9Ryrn)*A_TMmVkTr*ad2k@xusIj%1}iDs?tU( zbzGTiRU(=g)``dUd8}J$tSCj%fg*YQwaWykUVquo#^*?Mrh0oLC}qTb-W(q8`Vuq2&m$bzB^p3Mxny8 z&F*7^<$S=)TxYd&JaqYHXwve~qBy9sWdH^$s_G{Ho6 zQi($VcJ3>#JRo!Z)>_i*VrK@s-Oe5DV%aa3D+3+V>lYm2RJ7|C&)e;oI5d=g&{i zPmhl|Pq#PMecwGkJRMK_?XLgyvo}n*-yc+jQw%YxYAJafPsAa_;Le&5i-?E-La2?3 zPFQPjq}y0kA`~$NLnKwBN(c2=zZu>(3DUt*YL>C~@|%g(nFQlF#1I09X&6q^xaiW$ z7cUv??c1MbpZ!_4tk&t0m$aN3u~+2njFi}%C7c=iEjv0PszY zbFBX{3JleWoX@0LV`#WRv&Vlcga04#a|sSzzSw{xo3jeP3zrH-7oTWe7m8Gt1##Hz zb}6QmVvG@h&~O-rQc8?n>eA_Ocrse8O5gWJbaQjtEqYNMhEplUL{bcapcFao5AWW8 zsim0ca2k+swb~FdQZPUxJRVPWID{^x)Egyq31z@6ifBcR*xeLOQa}|5*#-T5!Ku$y zL^JYAA~I77RcP8e%K@NM=+$~CYlL;+4eJAzN3uPXgXx6EprT}e>ej%MGIIG(tipld z|Fo8twB_OxC~Mfz>N)N}wC1$cZi!mphzJ7Kz%~K$Shy}QU$hRr*j%V5YAW65bYOPy zDuP5_(=%0epdAeT$V64wkgzs5fq5MT+Ijh^p^sS*bEwc{V$Gm7`dfv!l$vygs+WT+ z5C&8=9o@7+1*Yn{pX*;Pr0!Wj4Ua1(d;S4-m1^}VY`1Muc*l~PRH ziNP=otM&EvX*a2U_W7HX(r&+7tyUDGH=S*F+ppe!b=dA-zPw%Z-EbOz{F5JdvFjI$ z+uIk<&sz~4#<7Yz5F8Ju?QXx`tfi<1kRnd@Q?n}XO$2k-kD->@!(yJ7BAW_vt)lr< zNFtOo9mp##^;RJPA)6`@i?f)`vJ_u$YO=oC9G;f%pB{(PVbOQDFJ4U3`0nesW&#Ky zFo?<}EYc{IbyZvA^~_aTcMN9&F~FGw>KV^DZVs&^`>`#bOBUY<@_(DnwTu6@gwvn zC$FxquEuHFtT)SkwOL=SH&QLQwq+U@{gOlQ z^_oS%fDrSk1P%zu9F;Ur833~i33^{L8LCnNE;>1U5g|xJ3Vf0T18KY1Vv1Fap{>lc z1WibZLJ#E%rnQbqM`0`o!U4zQMjYG_`zR#@AP#Cq2r8vo zy>nRLq`S)u)E9v^rKt+qV8d!I24wpOiO@%JgKu9VRuv}pTB%owJq85uns8fj^Zo%J z3w2Jh{q_;UY@-p$%%Mx+=27%pXG-ei}yJW01t9q*KDr>h_4a3ZjW@^Qw<45J<%C@9$PuSBip=a?TvOtE(%D0m)Wf zzu8=Ece{|fZrP91cztty_x{84(+^{3;pTXdzUif{;? zhZQNM6sSX%NEC7@-~$qfU`7$$C=wRcK-Dao8W9!+huW$$RQ1JHX|?95v$_H})pi1B zB^vW|xFLXQP6n4|M9ZN!qcZE9Kh8_wV( z$8gzReEFTN>vz%xpvs=!kd*j?|Ge>s6(w0Jy-rBh;QV0@SIE?fMY_%%|6pDFL~7C{Z9HzyP7+ zlrUiE0Zu?gA#0gRpolS%P9T#CAQm*mrUzXgb2UPT-;?URyRm12vTzVyo7P=cYdIfSvq~0P5r=2WRF*Swn0m z#J7B+P4qTb2J~_T%zbYy^{M*3UX$<|>{%QethJiYX?5d0HXOtdt1NE~#1H{grS1%~ z`YhXsd1wg)NcEs<;`1BK6p_6}qXIoh2&U*zzIzKdF3=o-S%qbEZVT`<3mWtfP2ykG zT;oB{F}_w^8FvrW=+|z5*+X35PEd!~G_U}g_p46TyO}He4ad`o7*?xgzgR98%f9af zV9Ne=rlx(@84x1I5Jfa_Sagfy>GbgQu;^Et<(fId-UMxi< zaCraq*G^pRmOX)`7~Z{m_xSj{TCMuN&(jn_R520dz@REB!#JHzCz0YSS5;JH8mAb8 ztHnui`3J2lhp57&ZMW2pPAP#yZM1aLs)k?QXZ-j>Bk0 z%UBMFgPEz>a5#f4qMvChLBEeSOm}`*A$|;78wo z{mJV$uiqR_hr7EEOelF84u`{b`}pwS6G(C?rm(rb0uI;fO_w?|5Gl-TiUGifF~$%% zFe0Qr5u<3)YVIv^Fm+M^1SVq7GLbm2kFG=}0w!{GWCaWCe0@>{MFPR804n3eFmY6h zO3cw&-RN@5q=aCm=%b(jT|V3~v?}{U(5#M^(X~!K)atgi`fr_cHM@8i;2LbrK-L;5 z0@N`TU{!J*&45fnfhb&*717`00DNt%si}r9Q~!2Pduy9f>^9b)?O_Qf+f1voo}`Zj-vxniO^|3f7dyBXyluG0x#twe{9u^NQ?fRhIRT z67j6>RBeobHT?#EwT=&(J9T{dx5J+KowF%#WnMK$7VF<#=SPY<^|SVc`G^=jcZ9Wb zXbC_ApAmrorHPKsTiI=ccQ%^}AuSgDV!7!06k;%d5Q2hgF$4@49P%P`z|ExO{q}jc z-*+i3y8h|z4r3g0e(~bvdbK(pPZ;9ndUG5GHH;i0hce~I=Vw*jY}T3rBlLa$;lqdb zA3jJao6V-{`}KOA^E656y536J?)J;|3PAU}y$4sdsIDd=AqE5}rMNz*fr$zcBcPgi zii1AH$Adie^$-mG7CX7QaVqON5C{IvKtU;RQJtn~7{~p7clZAN$?ZFsWI3EpMKw#w zdCZw2Q%XrnE;*}6m7{AMUx2f3CM3Mj#c}Y*BbGU&@no@5kUc-HHUNXKp^K2cZJPFS z%lMj0ad-Cd+p)Qh8AfW@6V~;CGt2~YJ+fN=i>MyX=D(K6+OOt~j4h98-pomg;7ibm zhyw*?mwT;%teUBaj%Fcp5Vk_pfj{_ev%Fd_R#~!Hy1jXM^Ww$nczk%cfAQjWk;3D{ z!}js%`SEeTeV&G4bG6y5H>yG@hS)8atH8WF>~kqsS63X8ngBZfZVHaSnhxSkK+J@Q zOr%v}2MN&w!U7sNx_l9Nw=0~pf6oRgs?J0d3@vbPumatfY;@X*9zjM12uuJ%&VNyL zID$BsH7O@O-_>do?fe{VwxrFM`%PEJ7VC4sR!YFulmd+mZ#4j^0E|`K#uus9sM!H~ zWO6jd4 zha;*=Y?T`^a3UCc;Ww2KQjA>+A&3D5LMv1~E*k|k%~KWuq%cjzegEU*eYaSU^3B!t ztD9Gk+Xp3nxxU)(cBj*@xqh*^x{5KpfA>yQyS^vDJWc`e!`JWj`@O0X@y*SP)OE2- z`~9Ko`<(NBza`-DG?>abo>GX2=xCJzND&1igi;DXCk7Na7YTd@1I-#r$wOvQ zIG-{*XJP*IZ0^WxjW1F(s|?e0JRFAMcs%Uhz5R;8x|F)EBcy4{MG9&$0RcpW5Q3JX zRIwLmX#IIfULgBkwKbdJ5vy_hIf|Y`^K)hwv}JnL61Nbk#$R)t;Ue}vTjcidYVF~| zH?)l7yfMzX`}tM7NDt-`2VDNqK91*4!0c7LJn7EP`P9thjrDoTVnRM)oiKH&4_yr0 z#TZlSmy495h!MeQ*e|-iONj&D-`&0a`rTsLtrx2we*gO-1^AX79l zFpw-9P+V&TN!f@3BO+1Y4iu4$f?-k|RF7Ijq!g4PvVtjr0g+nEA@TCL)TdK{?*`~$ zeMg;sB{^qVMJT@&2EBP?Mbc+%ekb@xf40%#+NKPU9sxx0wOS&!=~8a z8n|rQLa2UdZj`EpRYaT}P+cH4bDXpq{qy3hh{;9u$dBuLtY$oQKO;b$wTa#%3~1`= zzVilX`wA5SmoY*?R8?%yr2TpomH? zM3fe>U-XEmDr!{Jrcw|i01z<{DUeR8r2vp=ar-GH_kG_lmPK{B>i4JJqFbcJYRZ#} zc-Kx0@#}YAAC8Ab-}lJ}OHdy3pS%?ohG6%j??w#YB(K{7Ko6& z@GDwWa>-mmQd0t{V~|TqNwlO`mfJE%B#WU2o?lOn_GlDWlHy6R%Tu{0Q z@SB71e}~y=HD+ncNR?{K{2_y6N z>FNDfUw0{ql*4X!JRKhI?xmFPe&^f$qCXstOnh~9z200e*Bb}PnZt1!z-+Z##TZmX z0X3HpV{k}^2*6iZ$q0lLD5R8pY#t+q5IpGeduvWgFcY7&1f*@1k?*FOkE$vWwZqon%OeVF10HBbCmR>cwOXjQ?=w`<{5Hx1pk}d% zP`lm~kW96ylRAil%@NkqY<$q#W;uhOt^kC9092zLHLU%{uD~Arw{2Hc)wU|-U!hU= zCDk8UgYzpB38312tQmnDl-kt^~>(f4OV&Izc*dX@+#bPoLryg>3RG9!~5O+T|Vu*$T86S`*(e} zh+RlsnxI4z7!qnqq`un_e)7VRgrg$ZKzDE_QzRMUoB8n_T?+@&vGDtuveo zL`1>eruA;Vzt~K4%3tkAO`MJ7nqOx{dgL; zPtUvUwv_Vt_!v_p;-}~5>lZI#itEj09LI;pr*5%Ggek^h9H)}OY`xqdS`KrWIsvZ@k@mCA?BTmqng5;onjwrDC{r`C<;408q#yhZY&jl_>j^Rn?- z0*$1GsN#XYp?7JT)9ukzxt_DmV1zGwLh?4v7Idg*5KQ7z{H7PwOV7YH(VnEGiWWoPR=(n5LGOq4fC&U0hPz;Adh*~SBpw%e#(CU0RR9= zL_t*joK>6ePqKE6=>@dx%6~4r1gKn7MUZ+wT9cFSe=~)c5_9y6HqgWoEA;ApAY5&S znP{1&EXBEPKETNkt?N@vUEg9ucT=3?VEQDJ2h|^OOy-6zRKV*L5#ne)8h>_H-If$3xe3 ziM#h7-ZF>HdcEiq(`vVSEIFsxl_H1zVX;`<+`KTun7W7i$LrhM7cX8Fk*B8zQRz5t zHdjC}O;e1C5Z3E;>N)@m9GvSJn2AYERfPxxQDA0v;Xn@o5mm_tc9}^jTHDEpfCD8W zASP81z<>$E3MqQfrT}(ORRa}8B@SRkRgi!X%KRv-#o_h#Ic*pa2|ZS|ihH;Pbc?QY zpF8@n+WLCiBJQs)9vXVM=;CZxVHK>@G%4c80h)11tSOFTCZ<+7@2Dnh!IvsERZ(}B z_5IC@Y1LUWRA+(`sQ7|ud!`Q3LG)0)UOrTRg|0qZUW8bB64H0st5IiB*o>Fo4zN2r?WE`v8cbDz>Hi8T&C*0CqeLhwUza^j!=wM8c1GsH{)^N>Js1{+F znL(9n^0;m0WHdWFrx3o)Lj9%-O3g=qVuN;C;AqWepX2s=#A@&TWjp_)nQoguHNONi z#p1$8wF5Oovi-(d)p0Io)C0BXveiE36u~D{1P*~yj8fDX0UT$5z%c~=?svZX^3}_) z-@SXde>|K{<2Xc4i$31oUawZm$NT&JcGsu$b3gmDUwrF}ii2SA_Y>4DKIftb^##*1tKC; zLnAbA(^LSP`w6K%95wZ2r(mXJ7&+cB2BxTtkmRB=$GhSr8g z+OkKpIza&H-bQdsYuMVCpe;OY&$$NZ*d)?DDR2u5GYO&Uw9Nz^L<4Toj4B|vg!JqW z0F;Q;36utA3dGL!GyoN2hPE#W%sEtGbuNmTiPu6LZ7{c&mqjIW)riWtG!xI6>S{N% z*0u%}9AW2&v=Sj3H0Zw$AOrw(UX!+nhlneqvjKf=GyAr!#WsR=OZf*kxR8FY^kf82Me zFQuduV&KDJcRU=w{_3aKSJyxJ(T|GCi`!ceVFE2OjbliWh)OBTu+#z~4&_710su_T z1@fj2W9Cv+RT$kpsCWoa$#2-2Jk9`z_jeZ2!#F%XJq^S7^5rMx+u!|RK0e*Q&-u7m z^h^{Po}VB4u3K~+h?Z%ZSNqIto`Y(rfij-mfJ3P^3(2B2s+G>711)Bsfla85U|Q)k z^H1G;m;Z#z-?wnT+G1Z%7wyNsb>;#Xe0;ciuybO2`7JHuXpyGPh*CRv)2(Y*`I)vc z1GO{Eltq!yj1!XAOI>kMRkfI^ia41GeCj7k2igjX9jbWUT;{{=r){KT{M^ee42yOnV7s0BPZn{_=x>UFYj9QHE znUt9!V-21B8eQ9`tx&JiI(pS4dJwcyaavFVY8Hr~?#6ReVn|X1DG-qqF*B;klUCHV zp-4oGwODIv;%T_~jWnRf%LT+1qXD|`g&Gorhx=X|Q19P11K0Zm$D+LQD7AyDK|rRW zCZ?jT5NxhOP=RGJQhG(|cd={&GGv=KTbq$vT?HVM0jSgoeS}zwfr6@5oA;v%vRR9#jB2fq_hSVoT+n-K%U;gBH9IrRGAMPKJc+szyT~8)#TE-Eh zb*mLKIWuy%+r|(OF~qdqY_6|w0BN^<3NazlG!1=9+uc*1#vlFgM<2d^tDn7j_wMcI zZ$2N7Czru1q{m@c$4%9pQUJhG3VRlAUO|zlW?)PVfJ{MAr#t~PofK$|^8l*FQz9Q6 z;0!ckQh{Nbj^pWR`}F?Z*C6Hkdh_WgpPqJ4r^7Q^=@)(9g;Mx*Iv`lz^%-m&N7Z@q zA+~S|pjDD;>|H|{RGWnzXQu$r6olY1=&7F}01Q}r<~`PdWpcl*=ns3O00`rg%x>sPNn zd2##tVgGm>PV1|i5E20Pi$%X!4yRL|^69XDczC$Ixye%zkZBr2U=Nj32qAX~GLF-6f81}k&(Dv;ao;hf6gKOX z=0hptexJLp>$_B@ynEj2a@nU?T{Akd9}q6sV&+L(MKot4S|7LX0-HM-5kOl8?i;h( zO(YCDZv36iupejy+P4b2#maNOym+JAutgm zlC~-u0z%UO5JkXXxL{rzZ-7=r3xnF4W=^fqs+T}S&J&pD1^9|-=t{Nf9tXIV4Pa&e zDV~=jIX$6rXyzRC{AlM|8djov1t90Vqv0z)sH<)ysKf?pFq%V14z4s+Q94JX?HbzZ zvl;1foD@pn#^}Lnpx8im9FHMa>g5 z8fh)cRtt{jI1Al(%$^==qy&5K)8 zNL@clHYma`O^b>uG8&kOC=wHaK~X8CFp(;lDKo2SQN^O{6>5oriyLs~9P@5f0)i?hFJr7x|$(>7*b z(Y%Pw+opcF#U*yea=z&&YH_bRA)CL*_X(a+XRkfh@TB5Wh{TbZ9fAZiA}U#8BqGXn zawLSv%=F>?2WIU0{Y#!mj>xrm*(9J+r3ig|8lFX%0oEd^WB zstgc70zxq%=h9S@4~-Sn`I1WCrsS7a%RD-VTx<%hF*4MYM zn1g|))W3N3BC9^$-*f72UcOp%VLTppPfzRh)&1RvezEMj4$O|ngP5-Sjh1{m>`lrz zp00AmRLw6@RBA%qy>{`onV-1V!F!q0#9>Epxw^Yi1~`+Eg@@#4k9 z-QBBCJ~{07kB?7Rn`<%2G6uf={N?Mh z@|2ll*F^*r6&suanYh+_;PMnXeXCL(|kJWK~`)D$ovA|Dr1^%4-!XUt%2 z$Z$%&p6{L_LI?!Fk^vD>!F$jMNh&T~m52S?s>%%*%!5g==~h~6{;?XfRv@9lP*|z^ z^Al}(Va4C!BIr~AKx!RTE!=Rfjm=uP?r-MBYXGKI2(!jN06u@Ql7*}dY(cAYnyj_b zC|7c3O>A1T@VR7NS0BPGHGwtNKU4VUWrvL5!^JoWCBa}A(8zqA4?s}?pu}48mSn^# z>FC;`097#w=hj=_CUt}vAYcIMl{eWIgK##;=HqrvprGbuv|f(EPM}lW6l!QNw`f;u zFcT8n_NoEA=gD(mR)Z--w2FZnnko^30W;#v{TG;#BveoX2AuITGcyw)%q6EqUvjy> z`>?*cF}3II^JyG&Da0|w?rObq9lAh?LX4d&crH`Fb}|{cijGc-ZaUe)W?s1vH&b1Ff$mXIjAV zcpRs3eYF4v=ZV&yuTUR@FMtq3$;DKGsHlb*)N3fJYCt4VTLh}5ax$%pP#K^Zh}tks z!#EDZvE*_0^r%w$$h+|fIUk0@$go~6tY7VS`%4Fem7;pMBBhuyyDyR=yJ zt7VTI`woc5aa6UJw=ZddQl?=TM6HyPy1rlZU@kQ%gg^!%hCs|jfop0aQcR0#3B;~D zNQ@p%D_97Th$zI6I-j$sTFgsL2!S19X#KI+o)b|n1;!Dl6F~+S=B$RGtt3Jd^JzH< z=v7p>&_ZxVA~s8jSg{UhEU(7qx4PmQ71&z=u%gVf&8^0{abW6VZ7GGdPTq4(0kJ9( zp*Ii^Ai_#!fBbL%(wBD!m;`dsl4Y94X&TAOCoA~x{{w&Yvqcv$lhcFDs<<22%((${%BEj* zZBjMR<|v^8a%f%+WX3w5P3l-S0RuF060sqZ0eiLy0LD*B$4(uCd6g zmA~9h?Nh#r+*vihRNvAfmv&ko{|5k6l{p|06U7*!>p~EM8ixQ(A|-~H`VNWi?(e5* z3Na$!db56fyeFck$EWRfyXY6k<7u_tym|9xD*560F(AGF@FDhTz1ci%pXJ9t{QO%# z(=QgO>#nY@uh!S&IPDJm#bU8puGj0UVLa`hcOoTcVZ^}1MB{M)(}`d>gb--a_lv$y zsf#gk;83fk1_mksh7=g;BPR-hn4MXOExSQLP*G6Avs?%v0(WT3&|O(turL$@a2#3Z zd*#%x^YC1c$`PRUNHqwQuhqtoG(oUBBg$VHiu(H<5Wj;@=F0<-wJPQOcQRF(J0OlPvC!*(=sEXgsXRdyh zs@_EB_=(M)4h)G+S)hM^Sp1nk|4aYguf6~9FdU9k7MK1dP)V#eVfsh^p+E86n}|Br z!)qI$h-5VfGeS0;Z;q=?#N!zLsXzPI-k!n)SBhjnri`=#=!1& z^msV-iv<&(PW$698jzZW5R&L(wTwPGAVvcQWJZ>f6)7NYR_ng&O)bWVG4_jox$F__ z@&108M&_ucT)lkJ_3`<6m%xfb*LA98IE{B-fA!T*e}W3X@i+hGZ~XeNr5F}nl9Ic= zPbs7n^OUDy1hsJ-Qnx4~sqetBWS`WcM1aIaB$N_3Og0&S6jjy0(X475I-ZQw)Tn%5 zGI^y9wMZ^9ma;n>_J`wcyM2H6o<#c)Py46V7gs<SDW?y{ljK+b9H^4 zr%6i@DeKJ@g)k1M{qeY3F8gi)SGawCnx=sO29eao#I)>JeTseGxs7Kherf?x^~vPU zbO8u~N>O5RmU?9Yr~&~a0zw^9VFHRq>TC=GbP;3*0*Vw8a6mz`dGgo!Nti3(pEVe~ zZK|~zxR#X@XU?mjHZwOyz#O<%*8>$S0<*aX1;EV3INd;8%uR*4)}U=U*CEa(b3i`CV)zWDSfzco#` ztnCthPfZZH=m;2@47Fa`Y!aYFRQT~l&1D^Ee`3Q-v2py-ov|7s5TI3U3N*t2z6Sjl zQ1b>s08_=lU{Iy^@-&(0vR?w=ezzaS5fF<405USD#SpxB9ylmch#e7!m;eLCgv17t zx-ND-aY&0ro`w(a-y5Q+b*X#t;sq1k-G4~2N3cExG6A*Y)8m&v{2>bbhrjU~zxA8H z9vE+LuR~y!(x)B(N-0d-bt$G;rm0^n>qt)Y9%d`0NP({JK&=E#0fXFhU}v zQdCfw*c3!Hgg{hBkOHBI7S$=|VVaJo)AROOik5Nu>Zd<^d9~?M8c!2~d1tm)Ac|z> z0N|0-jDA2Xf$BNnuJ&`r?CSD`2K;D6TrceDWgI;t00s!)lGZRMq1aZ%WgK@|U9N3C zEdul`WZr@EVsei2MFub*?~DRnoRC57T$o=wGtp-cg6$q?C80MyXuU1|Lq11~2vwv2 z3=;%qGcv2_o$3jhx;_Earw;}X_aFAh)63hJ@87=*99PTLo6kOb|Mu&{Vb2`iy!q_$ z@!`v#e)ak1Z$x0TUQc=4K0m*B^~vdYS}d1RataX_s4BTgAqgp7-QM(lciitWg}zIx zMNa_4JdURnV+gfK?dKnu)Vp)p)eguI04anJQVNd#RACuFhh-5#6|hS3n~{i-liQ_` zWY7$n%?ef7n1%pibDnc`y@}PF^Q`)uth)SGk7_Y<Sp9=flE8}x(;&xl)a^-j z)tG4UL|v9*vvz{7>K6N$LDg-B8m>Z%Kt%n07 z1W|2`Ep-_;E)Imii_J3IB#4(K6arQw0i09;UH(&$$V7ZIY4cDXOgP}yxZ`b4IktxL zZ2=_rw^feHPtgn*0TEQu%-9nmMkIt%0SE8%5=2izR0{wwhhaRaS`n>DmUl{vNXg@H zRFLIz69O9&pv4r3xu^lnS&I>Xmh$laZX735qZnh1H&<6N&~CS-5JHN86as_FG#;NH z?*hQX!`*-Qo4*QL)|<`MW)%bXi^X!)rxZ#l+@-$n5pbHas=9W%8E8>0l57l}_G@~We_1C~=4moB+SvLwI5uiKu zOV0jzJGO}ajKenowe8lnPcQBC#i7m)+^9JX9eWZC;eTX}dkHUL$SwC0I`hES{bJ{uCTsyLj7WSt*&GaPQL9lEY= z`n;shBmy`WvZ@h3KjW%Br&KFFQpBZ!TIAlMS2b`pWJ@}o2UWpIN4N=^z(a*Yurlay z4u)(FPuja`866bBR1~pR*?mW-8r4dbHK#~`2v)kl-}&z6zxMdvfPfg(kXZ!)(GVul zsY-QPm4L-cLG@l`H@)*;JcU(n17(hVsBIDcw5WD?0#Xq;9ZzOxsEDZGvUpglz)jt= z?n(5pLFYIL@LbIGoFpaAR*8Bolaz`4Olpo%IcmTN50 zVv8#7Br=T(1TU9ML^vH!-C`M20Kj1wD8yhIVvKb!MQ)vm6u$7#I3fA9e9#qFyf{^W;0_d9;>)r(IK!(q`a_QUY-_|W&uPgW~1-EDWo zK?G8lhSO;h>AINn)TPw-{Xug?CZxcG2-7s3q%0SUMVCTKh)u%)5h(znA~G=`DPj>Q zV#J0_GiT8QZ4l#7p+r+aP+($4GzAdQ5#R(cfQ{%apNMEP`dpt8RjE1uKR^S!+d`}y zss;k#9K6p@p_VOtz>8h1p^9VZIoU&SM*KXCpgN*9&%s}7_+bMQXOe0yApv-QfX^;= z%df4Ji---;x>zgjn{fVSH{aOm$I#FqFc4M3mJD5_!!}n@YaCwp1c8DLpTArMmB6e( z2Bu;NjCGs~WD%eQQahH>TT)!+s3qf29ar7=IG<=1P(!YqC^I7jL;^)I9L9;b#{$+8 z0q{u_El;YPXlsN|&+wqt+s{v+BCfS7nJW8pE|oj^-%$ncXhQ-b6sa2%4NySD2vA)} zPC*cikQt@wW>zgJW(b63n#8PMY=|guFoYO`=X*$2WIPUs?fx)LxnHaZY_;rH*XtB` z%%_kRMat&px|9rNt8VdlcfWsrUWW8|clZ2ow^^=2OdX{~zr4A;S`e`$8Du6GP`E^IZyoE;6o$Hm8klnVibNI>}V<;(4EfBWJV8IGsJ?TeR&Fph(JwJxRMblM*d zUwrX1UFzO`{ne`%w_RG4QkZGAT93nMSPZc1yBGo*z8Hpkk`v`8Lo+9w?Y854;RC^;+C00^)dW^WkbW*5AR z$*U>Q9(5B=u2M5+i&ZHl?IBPdp4WgK1Tw6mn;vs0oR^@rDU2|u0s`RrI^O3t+wi(R z0T3DInJVDlP%)({$c$K_*fZeam=B&?#629Do8;T+Ak<;M0Ikc!yc5%L5%pHAIun_I zR7GtJHhlVW8FWG|9D7&VAr7X6kX3BTVnp+(83Vs(?g?BozyKWpG@@BhNRb?BlJmZ* zd%FVgr4&GR&;$$#sW^C2cSr?NuvSJq@T8GE(5RugPDfR31 zI>y8ybc_BpOtI^`)FB7r+NVu~Dn-?yv&x`0RRlBDJWVkM5h*z%kr@DCofHOUuG&rv zNCt2m##}^1PRHZ%czk|(eBM6yU5AJ%(EW$I#iD=t^5w(**Qe8|lyZA>v)XJ_?Q}f2 zARsb3!y6l0>?3n`Uam8;S|6yt=K{E|{X+mPV{P<+*&nDHk%igL`nqgUW<^DqP9x-T9EpjUODQ6%B0zQ;#}r|;UV&N869O&zE(FebIvfsx(=ZN?&yTBqbsSEM z)wo)3#&LXpd*=%id`TOF%n}4#zBYy*^JEb z5X5GTYXWBm;FUuHkc&sMHF3)au!QyVSuN#9y?=8Nj;Xh z2(g<>(Q{p4?pxNn(p$*VGL_azP**{#W6#y9My~`QY{s|YL0YGHTUEAjXXeos0GN25 zq@d2at;K~#pjS1jO4CNj0MnFYY0b0V-lP0c0Onhloxh=Syxj6Vtl1QRsKlK@Z~6z2P`@_9UE(MwhpqIyXj4ZOyS4H5zbH20$3 z6*g-EX%lWTs0090C}uznsz5>o5>)~fAOuEI_4dI!82v0l0HA86OgZP+^<4}AB6;f9 zYd}P%z(I1^9}nX=roM}*qY(Q=m%8YATAp&~Lf7>vMiAYsmYU0luiuWtVZVJE_B%9r z@#0F0C{Vv#U0rREXtiE5N8++vtwIc9z|5y%Sgto_mZ!;xOmrBFc#BL?BovWc3I{4u ziWE|6@nj|<71y|62&86N)WF7R-0%0h?e=ikNy!g)cZ zVxnf@&&dLu9m?Er-;Q>fH9(t4Tu-HaQ8g!c5xak6^3Uh-k)i)v|KOb9z}ZM4R+Bg9 zI8`u!nP{eckmIT#Qh~e>0w9dT0DvKcz&w@=$kcJy_3u8s->f$TW~hsPk#inS!|jV( zAehFnqz(~di0k!g7{{;PeyNCWKL6Yw4Iw>0K6hQWTCEXa9Ea2C?=5tX8b{exrlM z3g?|dh7QlN0ty-#0FfaDMzc1br2_npT&V%7LC)q{q=-PSX5F$Tk0ODpQUO%Q4;N1Z z&&ZDl{eHKgYGv2GO+YPm^Pz}_77(R?84wa0kh;bPDjFMz_;5=1MqZ;Lm#G(3vw{Fj z*u|h_+CM*Tu3u;#DPoA7l(O3&3~{|$g|1VD>+2g15jm8cId*Co0tY4r=u*@&eR%)% z>F~UNdVIKhf80GEw!5qARf-EEUagkQ7*g!IZW>20T(4Gu$i!L%BXy}Ggj{k;-H@|t z_06Z#F?9(6@>Gbh4OftqNQ;PS>LRvrrD|4Gb1qr(@p!zyd)Pido{sz7_6fAyy?e~3 z>(!z|(7?Dm?AD9L&wTOickjMF9(E58kE_LkLtraV+C2FR+j|G!ocuOu@NDgBKr>@1 z7g4mYttPu$9Yqa{eBXLVb7r5e=Y|GiUAs_?cIgM`l zBt|}+hMU_PDKbr2vSOfd$_4<`GocnqDNzVSkRkv;DFqCW83R)Y1n8hp9pmD4PeMQ? zuD;EXAVdIb`4|$BC?Ez3OYUD%|C)4bGNBc4$l8s4rG)xps8Hki{#UU`vsnb9{T~|4 z((w4XG2Ne()?A@3F>JtMZRo8Ch$~aKVS5b-su;Jg;wtxV2H>=M02O5RVqK*P0HW3E znKtnTGpKD8hN?<{YVJoHTnT9NU;_Y8{2f86LaEi}`By7CGu63CF2#XlqE4$K1ciKi z^Rn;gAS5-@Fvq(iG8pAai2@M=nt==a6k^gW$ZS9cRFD;u#RYP26xCII zYBS$Nf>;n;rGe)7x{ieOHKXLaw(e>p1S9n6zSeU5I)9=$2Y<{i{xi!>8GstF4^(qJ zFMv;%#40O`>RPqx6LCNV7(oqHOnml$F9t>=OsPv9YdMM0aM-5EoFZ7sQwf2W>kWq} zYW-#rQz8n(I03P!aOeW^X1xj_g2{(>@9sZ*ecbKdfA!TgoTlN}cd<)dh$*CQxmt)? z>LMbF>Uy;Xuu^2XT4c3AjEF@G6-Y5^$)ZBcgfI?6U;?md8XXBQr67<%38AMUQNHg7(A^Zp&}woixS zu}d)o2GgRoGUQ*;tfVzl-*(%_JzFzV=Ug&vx!DEh4bMlZX4VWWTqGATr+PCcuZ?*I z*7`g@szJ;Ke1>-1bJcUKxFt3w;AMI-oA+~;@{N}-4sQ*6GC1={=agf<7Z(`{LKXFD zR>3@LGpq0eGo=)Z6fmoE(r$$-+uYs?|ygH zucmRhy1g-gGUcbIr|X;B#c~-KkB37DoMHm7-EP}=%hht(szzu)reMs-C}vhP)FHtb zBbh1^8leIpRs|Lyrq-8afC}J)5s`wAFb6WzDrboR0HhW~Bhv=c%QC#jvSS+<7%DKL zh*azH&_ooV#hD0FlP#KKj+SE1jvpE%3~gXWi!^2{3^m6jbAbo&V7&Sn1w{7O>ZQ#M zv7WEe`8e!)oW$Pj08sT`i5L(_sXlQuWD=1kZ>tDREv~gDd%uBCj;xWgIqvU+=qoix z>wtKzFqaCTD-Mww5GYXqQ~x3(n`Hi36fA2>>d47881AXVa-}(8!?bCNpXw>^y5-(erdLhSLM?ss-ZhA)u zv&2!|BZyc>R{8U+tr6CERPM&w)L-BK?)VX*LO?ZRq8cwW$vkm`K)`BhAc9IzLEw8U`3{6$K*rk{ji*B4s$s@-;CQd0V zx)=~p^5L-G-oGFB+YeuTIUSE8IR)-g>QV|R#(tq96cPfeN?=+nduJ<%ii3rWD5X$j z6EQ90Fma$Rq+yzJ2xfXZ97`@SB{hhVee?nml_Kuri>e5Sib&b-504KI+vn$TIP9LE zK(iO$p6>7DG<@>r6A9FJ-C@6be7e8cT;JYY6Y1fwKMki80}~OqLfwqaRM52r+gP9P z*+y504xoXnGo(6q=sQAV_4k)H(+9#_057$IJ4fuEsKRCaYz_qhE?NLS4%@B9m2;L* z3j_1pF8;jCXzHio+)ip2|C#^ZK3$ztOI}=w1IU;N5Mu}_CD+~cR-oDuW@@Iy3}~ek zQ3*yWkf&Tq2`P$5k+R&Zcl%wxSZ=Pbx4SI`+N`g(yY2n`L;t3KaeH(3@OX7|(=Qiq zzkdJl;lt}s-*DtWeE0Q-*Pp)bVqdZxk4F_`^H^)7pBv7W)XmPfXe!#M@3B0`RL%#UBOPQ3?hCI(=ZSMW3dRn(oC1Fv;Oh_^WV z+HikEu5sXmABt>J3;rc%CN>vuaS{b%9eb$WM*&*Y!~lWNCk@nDe~1Q%Ez7|gI1!i{ zA-h&IB1$cifFco-jLLyPj0mM<43WSB(Q+B>QG8aGx{#mm2cj%W#D0`Ogn+erAC@Iv z4fyI8fBoH```7+|zx7r#XKcSl+guT;s<$3_ScHgZ1{k!GChCUs29 zvC_tbsM2urE=58R7b`=PDqD|ezOMYq)_fVjxdjH`j4SZ*F~Aiz05z+0VN#q+6h=rw zQgaeSf)G&6Oi{rJ=$3O)#Sjxy&eOh>3?VMp8<5eA7OM>gB2+Y)P6tL?FBgWm>bqs1 z_Ro(5`0nekrsLuH?tMP&KqL_|^Ln}L`vt`qQ&ObmY9(d}7y^NrNJ**Br7))yA|q)o zYLo%Xl=CoXVD2H0;|Wa7N-iQs7%4CzgMtYVvsAqk9fq+KQNY9D@Nj=O49C-Hx7$7w z=zjM+osP?{kA#m8?>1M95JDH3iB8A;yVL3B>T0=M7|3BSMM^2aOvq&O7|0fZ&3122 z0-C*^?O^2vob6>xi=n1;)oQlvp@!6FIq1s(+?w5=J;8;Km>o#_;5R=!pI7q|{wl)d znScEL|LC6?6}p6n+Us)~Zw{0aaUdp+A;b_|Gg&~%5vls_8qNABJ}`(O8bC~e899?kIQ5IZkm?9P3f`cD096Wx5Cx*qioy-WE!mL>G#^w)Kvfe&L{#*faQUG8>z&^)KYFat zQ47|=!)e!uGzXs=ZsgzY4Gq?625QRamJ56;GeTqT8UUhKnJa4u(A0>l3lS9n@Bxr* zzKH?_ttCb?WDy|d^KrleqM4{DHMvBWnZvqc(EQCIN?q*a0vv8B0~A0tD}b!n8Ae5d zz-X#iPzyi?1Lx@ku+1WwIUH+s0_`mR%|AP-B ztT4W|6pNAooQfcssHw7e@?c=5>=B&%CPm3+0$js-fL8T&oaUnX0?sOQ@ahvK6z*h#gP{$2o zu=b%E)_an8VW`{J&;P3Z3g@a}s{+s8e;K~x*&BTH;y0bn-@-F|{A1tvOTG9SOjhvU zhuPXVj*>GIBc>3OUy{$hb}T3$5K+z<5pyog!ApFSGXNpeA}#Vb-CW_{GbYw>LLo-}Q^`1-;llKj)G| z38&MzSkN#Ii^cLfq;VRC(+R~YJHBY@l7a#uBUE6>p;Z-tD#J!CI96~GAXJ3b%3bSi z2nawJqLp5GHNhf4pJGJ%Rq$J7F^7+@WIg;u=_g6lz2Rl-rN!+2Z*+DnCw zFH-Zyh;`zxG-gWup~@pi5QU2G8>k2nVWaW5AV$?RQ}F{31v9T(SAd1URg!=x6f+e9 zOkferoSrC_$rKZu140ccT#$OV&81Z6M`+?$3HI;8|KLCQ{yqOs z{x|=`Po4tCPYip3V1nj?po9RZXoggAc&NaeDKNRXAtG>1fXoQd$@bPTSOh>9;V{&S zAYAladr{r>@CXgOst=-`{!~>ZaI!B|5I~#as^>)t;8WLpiKwWc5h2z&!>HzimTS~# z?0hH3lYGR5h?$9kk(O~hZu{keG3Q|-?vzngpiCUQU?Y^{+n;y?z-gE-ZBZW<~$;U^!)tr_;}yNz-Z5h-2{qY<8;c?36YM6{fDpL ze){H32y{4fr^CLeYr#xCqN=J$^|9DuD>xfataiRdvaNcGElK}|J*{vKwBn~b z0Km)lhDNbycuE6ltKt7<$li?pM;vNTP3DiCi5$M@<_`h10>?K@{y8K0=&Ks=WZ(Q1 z)T^KGN>vXwbB14VCOAPZB@l-|_4*LaV@U;(;^8SXAptXr77+miCNk8i3?cD$x9^r+ z;BL8G02qkHkiekiydTEpa@BR+5+6Kn4H25M6bWCgUU;0%$uY-b=d0LJ1XZ?%Bsx)*{#TEzP#j8K7;`l&?KR3IG(JRJ3S z$~jBUdAaFc-rTHvOFSkT0%epTg=kU;>bx_ea4hMk&-RlK$6VMZ9fsZRXg__}{^aYs zY5$}D)&KDCeYLj2so>_fzJx#bul}XK@bCWS^I_~6{*J%>^MBw^{?VU%{knrYkpamF zEpPx6aALTFwt!55h|AmtB^nZCz)=@Jde8sh|L&i8yWd#c6zC9B%VI%6A^1RcLf}?A zH$nu%v;I4wXdB5~k=ZtK2V1^ew_1gU+~^a464c>1I{TK28GEQ(;RI_NRp%Y+vvkm~ z_5DG`4gE4M)csOpr^lRXgQKt9(NA|aa^shY_#Ec z$fXQoQC~eiJRXjR#d7if?)}aBsvHjsHYG7OB%(}>e$;(%aY1U_5oN{?$XLW}cjbbs!&y0F}J?agfp=ZY*` zyy%Df*qvOQ26)l?N6h#wa3@BLb>w*Y#k$UibU`-pOI6mU9jqj;B-VIwE@i{@trruQoSV!#M7q_I%u@ zzC*?#$3AtNtLt%`{I)Ju3q%ae(>MW=s2EWxrIh2MPaHZxa1pdpBrt<1F%zPQ5+KKb zfK}_5NK~2Xjc|AcS`#f88ZxIP_cvOuEI)uz5kXT#164KkA;ADXWf2X*>f{h`;UPdI z5Av%>6#$SA0mjNGsI_IE;$=qYgB}SD(G<~xIA~+GY6l8Cs)ayaw8>fs7yyh}z?q2> zpb%s<0Wb=zKnheS9W@Pk{rxY?U;UM@{>HEW^xge*IF&4*ifR%AtUCMRv(?}62Y%)c z{ej={GoR1`pGXIG&u0!|bS1p{pZ+8Nw_pFj3fBl?Kn1{%3GG#<_s5u4-9Z-r+F$zh z|KmUXm!1!6il0J~y-fe=FFyW_-~4C)8-MQ~`lEmQ7cZ7W3Izy47uyy^52Fmg5DaiC zDnROtWMF}GwDq6@5J|Kp}Drf;x`l=`c*2%@vj?)!3<@bL* zbR!7zPA1jqFptTqhg7<1?_&U6qnW#fk_3Od>uqT11G0 zA%+k_j2u%V<`DpRhwwNIyZxSspSRDTcG&I4X#f++!{L-S>xF9sl~TZriKU2t{nNwK zG)$j<`swY}?Qk5%;biC(BV#7O+D2EcKVCe+`tTd{GNbz~O2%1j!CFgA^%x&p(F?TK z5W+`^12!^-FXV3+;uG2MGKZbrJDOx2tr#y+@n#egv<5~2u6fm>Hx6s7hTt<)Tx#!mxO3& zxs>bF<(vs=zuO}qsJ(yx{`S=;UDv(5eFX?Uxb^Aj@#XEye$l6Hy+0g>VN89u=obhO z0*h)9En_ZI>HB^hhH09*t`8xE7~FTUi$be9nKA%FozqlPpT-2_CaI~WKB+@N6ctlg zg#HTQM#oXcY+`2FV}e@uo&COngYeFF@WnMVIL!cR*bdM}%7dY`As7l~#0D-Zho%b1 zs8DC0s3jj?Ope)+8i{riuMQc9Vk%Iw6rkOphf}uc_@bBZyy-d`P>Ui$T1`1l^zyHM z@5BH3pZv2we5(U&3U|sK&;kGv89<@PQ^{Zb*72|Z)?fcK|MFk?qks5k|Ng({@BFme zbp`}tIs&o@D)gsm8CIVi$`VikRm`OvGW9sfi>E35pZ?5W_~-xpuVj8r-DU(P0wPge ze6`*E>3{Oy{42kB`#=6~|Chi0N*q~IQA~gc>J$T2Rm)kA!vqw75I`mkQ&|1V_nv;` zhldG2G3=xuVik8%QK$fnp_84!2w6m!5t`Vo-*^gPoN^IOwIffx+qq!~uI*gwcs^Rh z(7X?#sze}=p@I>UkCwMe3U{$FZLXt25_Q*@v9o*?l?)J78o%0{En0C|?;bD%CRA|F zsIr5HifVNhMHQQ11DVE?4yP%^*t1IB@1A$1lpPX@G>Sllc72A;|%BbaZQUWc4 z0A1>-3l!N95RHJ?=e$$h-KkGSz<@XejuCuZGqb2@oib!05Qks}9HRlG)GHh9RpJJXy0yLAueka8cW-2u)i= z^E+om=WMU5)bE+DRG;+xjv0QM?YCo4Ewq5fY&xF~%(S#QhrqM=P(6V;C!I~dXO@nb zBZ-RN=Sedd#K0*;03c>0L#g?dy8#4r-EE@4M5@L_Qe?3RYKF`P7Gfgg5aM=wOes15 zzvvgHR&p_gz(GZGDTn=Gxw)EhzP-IICNV`Pn2*yyM_w*h%f&)fPRAn=#*h|$@8d?N zY07yThU0R%M73!gbDokUCek9Q?*bb!BdQhiwkZ$)Yr>8Q;BDXD5$#xeK~XRzEhV40 zWb_^$AVdNI1k^hFS7(q-XI+19`T`U+G;^6lKvDnz22eCn6=E_`AohIBC{7j(5d-;M zbz*%n#F)S^zy#BtvD8OLae(!|@E3mVm%sP)e1h>PIp=Yb=c8}R~t$4HsX45Ux-+n;~_qwi%y6;%VRU1Gqek-vK2f9_xTxBmHm^EXO( zW6+Bw@coN~OaeSA{oB9%_y>RSd;iTp{(A+T!{v)hph6~U2pDiGSEd7c zH~zgtxyq0rFgiubz!ZRq&_|3LgE6S6AqDSncT;ItA$Ua`n#s6;ZNVp%)a~QdZmT*- zEfIIGfB;om9vaFI9?l~`n@Z$WMsM2lxeNx57WyDy0x-qeBCD=H18gm7(Ap0MsNg}a z?^zLLSDGpSK5ZD)!*l{!FILlOFGpoWvnfvl0SCqubU*D93aeNyT_CgxwFHWZv0E%G z^u-V;a_BKMms$L&(GUcz4&uaCN;dQ@+`3p6~7s({#02)yfvLNG9j+QuX4e;UroX zt3}tP)9C~r&$;<)O*WN_aW;t+D5=ZLr}k7z&N*?LvGfaiXw^@yKnPx1We6X;joHH2 zAmSshQoRt=gz}8I%u)P>`Tk~^;L>oPBlpTyYrn3!%#37R2tiFkBvl^Ad>Y4+r@rq$+iL?4nOw`zn>@(24Fhn^-mv`|MNffPyOhzE8&ZRogym$ zGN8*RI7^*S43SvWhy!3e$>Ilh+yBL%`hWiK|Diwm#U>(70R*gciQjy7n}79(*e!@q zT8R*WCtLoD|Hd!>m0$jWq}M7PQUYK`Fc1JVVB>DWRk8gbok0Svy#lTOWj3+^0LR0r zhz2k~Q0(44%U}MhKN0>6Al9m`Ly(My3N{8RDkmBTopS60hIPSCEqVt?>*Y2NS>`qD zD?n=oU$=YRFjULJP}_jeJHph+ObJ1qJy6x(&ZAv?pAt1CxQZt@hGb2Z-FLkycsD>T z2)fpUC)?@=uk%^!Cax{n!NpoUxgh}S`vpK5^O(9s1X`vpf|)J)0G1JQWFRstg*l;> zK!yP$({iz(#q}|(0;jY9VlhxdqoBy*J_sqKj$+JHCW8<{Vp4>dB8Svm-=V2ofU5BHB9BO>gdpSuu`huv_bz?>0tnH+O&^5kwp zb<9KAW-ts~N0wFuWoFLL5nWwJ_|5;+R1eP2r3J*$`t@eB*_3&z%kWPlVyLM?dz8@J zNNxFW5{PjCj0&Tge$rDx6OtM}%V zIu+AG2!zPYf!X0v3N93bZ4(%H(?1X*g%GA(JiXN|etLfFyQLzD$=&0_cfS2Q0*}wz=gs;ma1bryI6gf+bX_;3m|`;3=lyfy zFbt<@qLfmMkqE9g*Qev5lroi)LLwql;DD++sTvM3h7=>Tv-ig+VxbNXnwJSWdP9iB zh-AnGU;rCRKB0~Xs@^Mm0n^naA5c}0SaI=~gY}<{N~Tyc9rvg0_P9HagyBcu|MmaE zfA)92xk)x117Q(WB#rCueRcX@|LH&X{@4$aCQ$=2CB#Y&>Fo5AA3Xe#Klld_juA5< zW}}R$AZWZ6TN^;}iijGKgw%cU#b<;i@M1gBPagVz@E`tX-X3m8*a#$mU}|o=+?bhx zA!$pN5luyiqHq}C`X{^mkNwks{(tu0`MZf^i30&xnIehl!~~*>HH`rSE*O95H{Tt~ zwPHeYKC!1j1XlG-4K(%e#kXD;5nwi}gSQyT3pRCmDo6o@0KkG;p#PQM{Cbduasp(r zLV-=eOb8Hd?D^R9;XnC%zw`5-fA;F;<(FT*|JVQ0FWqMtj4}WiIcNz;22{k%zy;uH zWk>-Lm{G*}mQ~r*jkw2+Zr!Um63oOyl|fCS7`P!Wt# zkq{XXq3`>+TFWRD`@mfm2^7STVv5}&c737{Ls~A^K%{U|v(ztQOh6P;OkI~^^c$lF zQp;poEDyu!cs!OOyXPk`lae1F?wN?p)~jVO98bsh@4kNh>JwBoDP4-Cj0mPG$S9?- z%kEZ{Jujn!Xca7J2wJm}2o;vW*#b6GS*>vc+r7oMm7W?Oz_)~pzxYSonl_04Y?-ST z&^OTjik4Tqi)VDmf9aH8{ir5fotsshY4%aG6RKx1|FdSNZ~-yRex};z^NH20r7=(O z!skHi3-zSdbzfA)0AgScWG09aeD_w7^f@#_0PvyVs^Z$;9MdpPF?C4f!F~vFzu$)t zPN!47^@PY6DJj@;wK)yLV!3#FdJeJs>h0T4U%x(`PSOh^xWdof-QBBKuXfwrX1$@n zB&wuLlylzhwy$1(5-6C;YPBjQmr_72bzNkJR#+*eAffv+s=z-YkbtpfVt;)+x%^V116eqj>cm9L7fAOz=`N#e-S?<$pwkF~akI>gR9&{y*`@zjd1yHi3x#o?rNT{@5S>AN_CtuRne&2t-I( zg=!#&qTq`W;H=sy)b+MpD%f*enO~`F18nd=n@_7okkjCC62) zk)|vlQX(^rfmf@wbrcsXfH363F&Q$2L>$wikFoDkpSs?VD4kSfwOVzl140TRrpQbx znx}%Mt`SsUu}nis1faX^Q$UD;$Kk{g0}}y?C?Pa) za;U>A+yFJ28_eyrRtrcToi{JpWLIiim>cp2N~rzMX=*4K#IsR(B2&7AZd0t?xSn8iw)e`W66F>X^fFwIbq_IyDQ- z92uMHPEqOmR5 z)fEyxKR+PQ_4Ou~978~asbrU<36a6-l&Ui2QLXQLmnQ>Pwe$F`lC>3T$18aN1`1Y+ zih_cQ1p{-Z~w8MS2+TJLVS1{_M=(PK6b!6 zi%3hb!!P{K+dgDN8gcb+{k0$ewcpyE@MR%HoY06km>C))lBt^s(<;wJh-{*D;tCle zWr+ya|Mx%lm;cV+|6f~oT_3WcreI)JD<@Df4h3UGt=10^1V{;tPzA{>s7a*E$q6xrSb*Tw{w?rSg!2nd{zUxM_%8CIO2{!<&l?pe{UfFIe)|!I2fl?piBZ`6Q zJp*9E5HJ@BgoZ{`wP8uX5SR?n0s{mBx2lR149u7;%OrVG1cgw!#vhWwv{+jblSgf@!XE)LcZl`unicK)uGZk$iSZR_P(U7nbo&lxYGkdJ>_5bs;< zqX6$f5Wh>r%Qx9aZs4O!oc}-P1Q%YzGj3mGF$N?Wrg6FG2+8wt@KUScw>)cYjVK{`CrsK5P ztgml20D3qcMap5nTf#b~phkybFH)9^-97J1A39JiQXsH#_vPKLU=(D>U~1==FMk8XRA~8&zw)F1 z>L2@0M2HAfEdKiUzs$-|wabJU5rEJ_IsD$A`}stefuA(}KmOnUPUcMkpkQWVNLIZ$ zkYz0gkv+&nOnuylE(9VW82~d#os$`|^gn&r|K(r${-5~6-%{LzX`f;nBS6s7XaW?; z4s9T2h8*K3e5TO5Bsy~8{F-N?)`;4Ez?`)x zB1Hq73U3EgN`QnUU?7f@pn#oz-+%1$*PHPQwn4M$Bq|~HtKP1!B78N92w<4uzgCm4 z(O<3J5V@K)5UK(L0fLgc8Fms8sI!I)0O}kC?_2QluT!Zir?d?qYau4h4JcMACG1PC z>5kQR`V4BC%~754SMAVDH6Vs+GEhYvJPW~N5-^hx(JIY_z)FlY&J!~NG(`jV7CaY%q@V*Ns6j9z^eE$j^vh6ErYWSRmERt~!Z z0D|Vj{*b!v`SC$=?jk=-r-O`U#WHvQf5QGW*0wD>55vAO#++-dy-#=VeQotE$s)x@ z5=n`aNXoWkMP{r>3KCg?1=x;}z>XcnhVvtif5Zk7!~xO(asC+apEw2rBer7;N*uYB zC`Fb8Hj+rOS5>i^S5@!5+nr|bz1Es@jQkj5&b7}g+BtRW-Fwd2d+pWC`HgRUqs#Je zJ13FXFW240UYM3rPN%~-jK{K2XslZoHrLjy1yQ0hE>O`P1K*>6cV^uWwH>rPGu+`|JcV2@F@SYXS;`o`*mJ* z(A~6CwZq{c*J(bTOw)8dUhMa$;|ZoYrD>dMEr-KBa53Z|wY+2ZeZ&i(tQM`h&cqN= zVPOy3DJhVXcZdUn$e7JIaha{wRhK0jhMd7;!HPPok(qf8P)O$%0)S_gFzSAfAN=8u z|JHy0zUu6?O%#s2R_OD)@9_0+9hI(#7%1$c7`=+kG~3;m zzA*me@BhJP*VC()55M?#zwygo`Ebc^tm-oyIXYj$NQSvgfAtrB>redD_f1?p_QTwS zN#h6skP#^hN?8P_Jiq?_&y4@`f98Mi_L#YPPAv;@dUab~-`ADQL;>ra-Mkg_yB~i#jzq_$uCp)_St(1t zpdqtbh68pKyKj)AaDG{GY?a~!P$d>-RrUGF0I5Ql)l`{;m`GC; zNO~~?X$6_(3@{3FN}Q*m*dQsV(Xl?W_M(2ek#p1y-lI=PGlZ?mw|$zMnloe4e}Q(@aW#>(((Fqw1NLMX0!%fh zWNPy~PvZzLK9ciKAg>Vve3&YwA*q=b1<}>@H4zWP2qI=)OJNaa&O;i;;q~q7cR#kD z=ViCsn?aHgY#4@G%DODi-gx79JmxHGna%X|>(>|i{r+N4M6Yje&D4hz9FNB#X9AYf zawrG7!8i_;aC`fD9H*=6Yb&K{6=qY#kW$Ji4YjIjT}!Ez600O;79w~aH?eCTX4M#~ z)r3&WT2F_%-enxvW@dtyX8DkEwAPs|Y|mh=6})D-|LH&Qh5ygb{Z6f?f-zbm2c6)h zq%VKt^^bk=vsUhiYOT6d{qW@-{>Vgcdk{EOHByMN`M{MeI+vfTe4{^dXazyCM>;$Q!Tzxyx$Pyfsp-Y)#`T(A^YA|05B zyfqul=gWt3LZ#Tc7?POr>)X?+$^%tYgklqNd@c3zVrR92s#_o?1IYq?`s9*vhf*bF zF9h>R?W@*mk=5aiG^p=D3I~tfRd@dYR9k9=zkob=YXHa%ur_vP?R_NPsH2x=yQt@t z#J=x(kkT=o3>N+WY&(`ilSoXyjA0WksvMoJ0u|XTN}t(Cfh5diIUF|cOwF}Iz#`s1 z3OUO#jcPj+F+<9E$fJUjBu<%A@_t&8aOq=30b)|ELQaX4R1=w)3hAn=unODZ@F1jC zmc!jEwtD;e#r5TW7-U_JT4XItS<>b8<^AhhW~}q<^Rxl1>ylEUicVx(*8irSY+uyr zd}Gbj(2vj~pdW$g&a^iN;LKn&_DzizbhRd4otjLvodh|wJ5~1wXq(k~blm0)1YWy{ zY8|yd`gIQP=jYgEFZ9d)u48NlD(;A#zY-Sx(bNoWpodkP#?h)()RjOa-gG-+W0Cf5 zY9=X@$XW`Bh-H|DQi|jOhO*QbFJDNK-ELRvnq|mo9P_xYnunp3!i+o&^Xa(TUw-qO zU*BKsce}};TB?XV9PaK9*OFw&!}aCW-NU`@ZO@~7y?MyBR$a=&!+p+AhG8%@Gd&#+ z(=>4sW>&3-!!iuRGz>BfB2iUY>Z)Mo%FKyG&AjxUI9btxlB^1wWGR`fRI97nqE=DY zkd7%vB}ayzX>a1ew(@%Sd%x%7@7&1o<*by{TRaF^H3P4fe*1Tx7yI5!307*Q)2iQj z{}yzuP+~UJvqkIa=xj8div0brzW;kZ@fk3Rrr-JM`=)G03NvC~iwynj$KQFf+o9Nk z-OvBhR~3_~k3}<6ACN|bmDh(q^T+?do4a*amvpK;-0m>`)Bo5X`Q=~xcRo1ip{P-c zp0uO@E9duLJ%8`{?Ps4|QnfKbSXcLgLceU{nUR&#JJ!uwr=s$o$B3rQ+|E3|q`Oejbh1~!?} zup5SiDyZN}P$oiMlGSHdJF2UQ)aqGx?)+0NK4X|UAWgSE{tPG)p;mvwA)drsu(qe# zt~Sr0F!S+U zuYf5;$kXHrmc-Lpz0te*TzDep#84!mA?H<-v5@%9$B>hkCqp$2J^<00OsD3;3)xFz%Pb@%Gir-8h^c2xikTzIy%gjc0Gnw-2?f zB2tT)fkj+NW9C|0+m$A#G&gO_=jo6~8_=Pl{~1^|ver5q1ppE~?z7Wkq9F8~&}P&v z9;g|2n|qcD6gb{|2}j)V)_Oc0ORatZF|n4srGAW%Bx0{msZ~`i4`a^5x|W0S&>fXSEvt6&3}&p3+YMb#()s-=2mjH+n8r1htM^m9@U ztW`XwtIjDIGJWm6R}UvrC4(pp@4q-47jK->+JKTlnv%$-Rux7v{l;&-Hlg z_!%+4ME)%ki5EVD5c8dUh8q#VC;T!I`$lr%kjaMx5R4gd6pG1j9;>2g%1t0J`^XOR zGZ0~6O3V_2QCWmj^7Dj|kN<56CPXJ~nQ1p={LbO=4 zHkZR2*;(~zZ$8MKoQXgQ3aeIEt1EP2Es3hmr$jo4T}HRC7c zkVXgG8r>07%E@E1568o4o|&aqEv2e;d8~DVK3F<w&NigNSExSye5j)w^r@Fl#e!k>5&q;8jtU?D$hZ`uTl22#SM= z8XJod3FY_Rd-48<_mD}=jK<&oo#(6VU>V9}EF@k9S`nk5yogm~`t7g1e<;alxILU+ zy*fDR!@Ow6*MffGvmX;$0sHXf>*udd3K1bdx2CS3s`J}#Up~D~jDwYhRmL#p8SpT7oWK=Lp$5pQd>y+s0&eLE6`d?Em{DK zmm_B;W@7g7gdnKtvaDK_z{HF|RU&F>4k0nKBQ>2X@{PR_EK-WOmyx4$tA^?1aP0UV z$nLg;h$a5vJGg8c{Y95MzS4=Cc!eUjyRDEQGs%gm# zVH0Q)Wafc6k=1*_4d@<0V_?&HK$JSn zHAFXyH$8?)I)mXT>G=qd+V&Z70MExw{dfHk+sSRlpiz(JLG*Y*e4d>dFXvL-f5G`D zJi6K*jE)V1z=4mx-fUZv{q)*9Lo(!8ieRdx7F7^LB&TeIrK~9@pMM+05EQPc>v8Tr zz)V<@BGbQ&Gq$oHO$Kb(Dl{jvuDrThbU!Tmvui) zoJ4CarIfO+iwx6{S*Bqy=sX`_I*k)RC~AN)BQYr$P*By9Sb@S=h>k?7)>*AWD-7I& zGoH&45+NH*t-?oQnV}ZO@drNl?#G_y+vlsnTTOCnN0V<4^($Y0{>3+Lk{RXkH~#*Y z3wE$1X=JgroCZ;#R*y{s(Jdj3-}uhU_g}8pdwzI0-5*vW0gO1xxe3a;e&&;Jq@jR^ zuYKb^WigO>sV$ii6O)myrCi@ki3>^*u&O1=i&mYFS7XYeY^G3xx7hXl%|+$a?P;x& zs$E`QPW$n0R`|S@kV%c1bSWQy=gAvag7vwog2d$!B^5U3?;uuh{z)cGOkx`M$;>~{ zKvdP1WrZaIZmzGgh-n2Sw-j2HU`lG7K79Fbs86Wcka*E*#E`tu_`&n%Mp=yv#smmK zm55feqDsl#ZZdAU2zyZLzZc4KZp z=cPOx4sB#<1Y^wSpgFd0wX;CeW7{DSuUx_s2tAR@rK^Y`EY{+qw-kpw6_MS3 zI?bnXnk4687&FV5hr|rk{cgIyyIYre$k|Fc-rqCu`sIrZ?~T$7$N{_Cp@bm{=|^FK=$1TwYuWb2SB-B*{}Yw!`7!{`U6a{;rf+n6fZKb)DHN zLoN3}5(Xv8I@+HWusHH5+d?3;xOG=5EV?3AV{k2xl)*K>r0tdEQxhxYcf8fWy zC|JEafL9nB5mGuqe*JgeTPQ2>0{XQtzemGPeOEG(m3QCVzqMa?^&x2`h$@u|U^p!H zwQoIF8}9B;>&iy0z!nfDqPoxc_}e#AMoRMf?%)NY?x}^wt)HjPAmE*pJC{fMhj&Ee_KNm* za94ke2y=23r)fJN27Jh6cQt%yDG{*{OE?fBB23J#GST_xgcH#IB;lMSdoNCroOm3> zLtsNh;o{FQrg2JnkRhiylq6vm7DUhVjw7a317Xyeelb${kS{Qb9d1C2B zav3%WsKHuCREzcHdS;YjTeN&=ZzdorR?a1y#`v2P(2v>U5@*hVZFZu0D1CXh|F`q} z-GrcaaNGWzU3A-sT?sq;ob3*{c3tbbF11zyn5k;5wU#EErePq^vXo^ly~zo)m*99B zG?+Ls4=L+fYAO5OeqC2)@y^d`I!)6!j>9y8c$|im(^`ueOqGd-l!WQq-}=^&WJu}s z@KD$F=IZA5?snQu!;t6W@pL>A*={#JdHMu|bzP=$$|;lg(_t1#H#bjio<19=9l#)- z#_8tj=H}))B|e=_cei)r)nEiAh7e*}i>VDM4<2KTB5R-24g;2A%WAcd zu5}RJ4^ozeC;}x+q*_&BwEwlQzWVq6^Iv(*pSqJz+@?<*#?Kw{=l_HM^wDjx7!skso!*=`)>~NC>0B9f{)~R{_@egO$h`I+58F4i8Ch`8s?Z3=T(NYq`Cx zrO!2Bj7R`=Dal>8aDd_y;MPIa%u>^Mn)u`T4)vOW`1lA#M@NYO?Q@yQT0U1lH$xPW z+kXT0pZPld9cb@pV$(<8-Ckn=sSi7CcGB8Rm~iAwchhdI>$1$#kjEkCoN`WP%0#tR zW@1kpA`p`#InBqMa;@cXJYHU2FUwrl!aNWmr+m4mhvR8C?TN_Lij~tkkK^!ge?Jb> zd+&Yo+u!>3+i$;BRZA@w7nis9cV$_Il*_u@-QMn|Y1;4Rbxufk_YZ3H?AgbV$O9ijdvn6{)3mNSNB?Wj^SEMC9SrsU;6yV|H__U-L0ybh(x3mCC-2Ex4(YUAN}CveKGa{ zlF^M7U|m1^iKmwnhD4<-*VCk>7}s{bt#>h$;aMA@!xNclWf>_=YHOrAN%*{QWj1ES zn=+JgTmAt&Rsk|2##*#0YbAy;sIG+*!)Ln#Aktbl;6#hTf>^jZ0U{`41(sTs zi4BSBvzsjMot79eZ^UY3Oei24-};aK%Gdt(uf6w!-}||zZ@y)A`o*9B^2<@U}0PlsVgnP>Wl(Y>p@23y*3C@7VM_NbhDfLJ%T0FiePn zsI`V!U6+g9uB_|r-GgbRNTzlHHNGgY&($w$u4PDFopuGBHR2VB=f6A?b3PIxur3uf z#HUsVaIVUr^AW@Y-as7$vvjWUZ$9KBTyElDPwd&Mf`eCW7lZC2^p$fSjQFT1)FKxC zvvZ(tM)GkT^ml)Cf227m;k(qTESz&%%8FWZ%KlKyP*lAnz;nwidI>x5*}5z@Po5qR z57wG54nwMCb<;eI!>ilZOcz9yM6}jg>a!cxJ4adoN7s^dBh z!`zf-hySu%;y1E*7W0C|RGt^QKhr`9i<&Xye!#Jp?vnuwx!6$Yt>$3Ks zJyccKb)FA*x5vYMSq}5V@kqL#@@^XHX&T3I7{bE{TzWwa-Yv1}-rEHK| zHEI)TwfXdHl$(j{`OL$Pp<0#M)Z}a5etvtXuOCW9ViF%8#zX{7n7{P-cL%ylQtL`j zt}iGe)E1fLs$^tl!o!CjF88NAr8J0te#m_!QPHY79By;Z@qW;t#5p})ZbJ{l0BvC0s(m+P)BffeDho@ z;@r`D+Y5+J&+sA`azth|L!TfNU87;1wcmo$*8Gg%2R*D9M-CiRZINVhexV9cMt$tdeI>QFs~*cMFA?W4xL>T_!?8#3UeLVj~7g6>18nM0_KtqN-IU zGOHfBX_K}+^5?08s@0%c%Sx(NtCotY&`MB(Ez3->oa98tY^Qlm*)A?FPNzl97|cxS z4WC_Cr8Y%#L;Oe2s9~&|3F@#Li@d|$N8pXl2z58wn>W$z148_1n>sv-#s<0+l&quo z*$tyj-9LlcbCi7y;{FJ`F4K9#@80a~(bs0~`gNQiKU@zxyKRqN7C(&kCFX-_)iYd@ z_)wsl+~JgLz`7RU!5A)6#&WGj0E6e#aX(#HwPjweu5WTq>sna2E^{fRlroKj`@d#T zm=TTRG>#MJG}`dS(>K2P&2N18{QW0SZ}O0Y$%s-;?qk%lzIyd?cd=XNg(Y2FUX@a` z=;7gDdmVQWS^Wg#B( zFyuuSTJQAuLDE;i-M}hIbS)kVWg^vR5z?hZ^A+kN*Wm@UDw4>KfB46~^cVii-=1*= zkVcUgz-h+tD_{NA_kZd4|HfDU4)dEZ`K~^GYRU!t7%I-J5`K{ml=DPdzr(n^y(($ov8;1(I=1$6;wOs%M({|K8A0RZXf)|4e~sixfhfMx)g zSXfA4q>{*gLoBAmuEdiGQ=+8A=GBPg)6q3uMl(m?Wi? z5)pIC9s&c28gm+kX}`a^*Ue5GkPWSiaclOP{*=o{wK~U1HIQ)M^S*+5h}6fAxf`U;F#- zgLh04ns_x)`}D`&e0njyb#sNX#*A=c11oZstN+`7_?LhF*S#N55Ap7;yz?6Gye#kh(%)bI z%HMhqbV-y9Y-j;Z0#J#TtE<6mRx3I4FpyI`0x`Vn20N3O*HT7|es0uc!{9m8`Qygs;sD@Z-Jl*!c3 z&_ln>9Aj0KXjLZfi$~1F@pK~}l;YAw0wh|qILBmeI!nMvCs+ueYT8owvjdL({*NlB8#%W{$=sRb7(B_am1 z)w&qKoQRW00z4S&C0;OvRkC7QRExvCc?3YsbL2b#pjM#8w7{y>Vp>H=7zFKVG0bWy z^L!%WtBXr5)$>kG&Hu!0HF&B@%$+%>+u=r9N7z8m2Cp3$gWPU-dCz{quFug?{Vy!awNTA^ETWvSX5G z@Nk%>U9BaFz_6T7Oe8F2S_wySdNFot5+}H{n)z%y4;O91_-1);CNczTX9ATSA(qD0FdAqtr_WQRS1)*GL&rof$#m)^%Z~q zdp=2j>l;a+MqY45%rZRryTA3aP@>_gstcJQMz!_k>BY_U1?*L+YnAo-LY`jI;j|>) zS0hz6BF~$Woaa?OT={?Yum1->`TM`{(?9m5H=ka8{k<3e&j0go9OS7Y0}NG=5mT*| z2}~u?`sT9>!eXdH=24i<2qZ+Nh~Xz7VOiJZbUg9EKH3;s0X3`SvMvZLk@04IYHdPSJhaW`5s)#P%XibEh$l$PUejFEC3{eAap~YBK^2P>b>M}y0 zO(20;Yoi*9K{N#l7E6X`abuhC5$TcCHf+yC@^^_uZ5es8P|Q6g5x)xzBCxS*Y(^r) zBvo07K$cQUDHUZafN8C2ZOpxzq8fX9Ev6b{l+m03GgT|qs-hOFMN6q=)%Fk5Vzt&< zN~s1@)6;1#wHkOFcl-UWtSd8XWdB>g7Zy#ExFe$l;KkjHre^K$k3eyNzOT76i3vZ6DOW zd8`ff@50>lOKS_coy*x9xQmnF1$hLitVMf+TJkZ95Xq8cEo&`x$P#%9Ub_hrAwuN& ziU_QZIh_uNWm)$7OJWugEmd+VrI?x4N+1?@OnJ!TFpbBDb$_{k_hauqfBxZ%=O2os zoYOc=mlqecu99|QI2;}>E-q5aOnh~7eRqGq!}R*~D-oW?k%$h5!@AB-pFA0cVJXMN z8D68Q(N$c{NEi?vhNKruS;mWtiLdl<9C&4%P)=BtYE3)?tLmz@0>#C9C^PN)NdDxBtT5cz)VdN-S(<3=k^Q=@V~V zq1^t+_kDh}zk1Szc!;$`SSqD-RY3+eC<&XYRwY|+_S5x6HeCq=bh#e%_x+wvz5ny~ zi>b&IHs8b4MwW)zsHEvH|Kf*#^%ws0BwTf@vRBDwOg_yD2B?UODa$m}&wTs|+da{o zQ+ea*W%=rB%BB@zhL~VJ71v7ZJP`XRu~EQQKOAhc|^9g@(6@##LED*WgR0g7Em{h+YOOHSTD2B3^HK7(u4Y=+)ivRwC{=|;QfderQzabqz4I2j z{&?UfDUH-(=XCqEAw_t&;(asHcr>ESaz{-Wl^`Q!TCH2h{! zf(~>yru{klv~%~Q`<9@_J6jfOw@S1bk1e!p_L0xtuEIh$Li=c~s#Tj=C9Nt#IcFlC zPxCUbs;X+<^Z@QSn+c1V)mm#Us>MnflHA|ljyWSzCn)8d(+DLYDzz-@nsPFSF2lv; zHA@mnp1^jzf2hmy;`s;F>TWj@k(uUU*iBPe*ZbT1+uPSw%l`7>>6=e-&UbgW^E?w_ z8pru`y1l=>yT3i24)b!Tx|&vnR;`{!=dza)r)f9rE;;3tGjpl+Fr+dK6?#~g*H#`< zsy>k$Rbx^uTv`htG1Yj4zN^*TaR$JyPN1?LKmFG9eV=h%C zLqDAIiBPph{%3T3(!y+JLtA|-+1R@L4celGTeHE$?W4AhFsIC-wn1)tZN1R^1yfs4> z;(C<%!%yEV|HPmEgG2pbk|XJf;QBrrqBmrSIaCRY&`HY6n_NaIjFo9+tb#R5A*{u) zGMj5Wt=A+Gp~+s6=&)@yi+ot>+9$dE#njar^j!8WwLc`KI1IJg;r7Fxq3GYD*Wo&L zGr@(OE#E(hBu+^rv1CasiMJHeUOEu9!NTP2E8GNl4tJ|LU@vI2s#+6s8gj}5r_3@) zN?y2d2D*^~hciMO{enD)M^zpDRU_=79CM`9$V}K0fwWLnfE26{wMKXkz>+e)ZJ zc6D`OR=otw%O4Epp)m!Hb0Hd_3~!)K2@ob}892t#|Aq${ZZ5CAOPOOURHZe{IUG-B zMrH|`a2)FMf9MZ>?$7-rKb)6uPj<)UL|WNE)u@`7v94nCQ0~X_;kAA1pZmvt`oH@R zeyKeFojgC!^Yc7^kmnEO@S)80gRg#hCmz_0rVarvaNM`%?6=lE9-7!Vwl~m?hA3OI ze@ojZ3Z&h_M-;n_+V1zxKSB@*WnY*92(!bxNPv0d_^005L4?W0eGy7YL?~y@SyC3q z&m@vka?1e%F$t4*4a$g~=Cfrs4XhDsZ1CBEl0FJ_!TcYg zX;;`nR3X}Yh;VB@qLm;6|cJK!Kz2nf}X`pwv#OC5oH}V>v2L+$ry_3yjV{ z-OhgD2ijhHZsQ(bEVV@1?(UuyPlp!~s#W`!ZGLWZX5*%pWi4f8=G{1YKxeJ1C~>%) zjB3nmN@`Y1%}EXq_wK~jx(?IDvaGm~qIDdHQp;M_aTtX;4}+ST)^RsoUSFLKhcer4 zKdogxoeo6l?(X*H;cgsviS>mp<_q{K({f`jyxZpJ?A1{zRkfDto^)uBFo{6_!8PyYz!ZweJPWwJ3rJj2}w zn-D-y)eI2$;eKY$l>}CaS!0noq{-h&`Dwh+P$?XT0L+SB%p6bVke&6w?Hd8hI>h;*3yJ1CV<%#W~!XTPyt~U74hk!)vRh&t$;EN zrnRi9HCB~Dn5)99s=>SRnfX-THWG5f<@O#IX8f#N%<3_U&5rfghYG)8cw_;0{(f%Q zy1Ah)4}CPoi$^c-m%cf;?Q_xM4WVd877&MBp~hm?b#*IWO5IJnhlfMXX+Q1!Q%cb! z($3$=0dG0xG?lV&8fqyvj{bR$_(W9J3Zj(LpyTm)G|=^vCony%^R%0m`81@wYPr6; zzJ2-f&9{d^(tJ2%N#i&wA*BSAZ+_!rA?kRxJyoXgQtgni5jxvcjs*z3m|{ihb+4wwWgp z`dBm=;QW=kWi>Su(zl=FAN<~T{`#-p0vALHZR(Hf>}nqDBD13P^zNG%yV0<&LoQ$X z{F_fN%JaI+%8=wVTbN=p1qJDbt~*{n|H(I)UNUG|>aZJyEZ4(N|M18D&<|by+%G@e zRYu-Nrxo(G-BQ1z2~QNh`yyu&A^>HgIh7Cog@5u-KO64zd=QihvRbEcU=b2o!z=fJ zihxly+#eU?>=K|x84+u(kuR#xc1mND&4=G??3h0lv#z1PcQ|Ko|ppnUHXk|6`h+R*({E zEpvuBL!e*Zcjt zE|=-Llof!;FrVhKu9p{MB2Jumlv30{*Edhh6j~VuHHMXkqGcV&>D7zpZ@l%k)>_w@ z#(|8M`Iz&-WZ!!4oAvGb*7WxNVlSCry}CUv$Ng@PgW6@p;okW_F8_47?uy z$WQ*BzxgZwrO4ihy(6iqx?mFRKjGX>Kl_PiJE?q{8TR(o)%Sn#V}JG6j)`~G;CYs= zHWGVTueXz2Kl!og=>>@{Kuw8ZMrH$-b$S1P^5_5IU;9`8@3zW)1t=5cT8+r{Utjnz zL}z&?QA|QGM#*}p4`2W1|A{~Rhkp32Vfhx*tXfkVlx^6JOi)_|1d>`;7A907uQImc ze31#IcxM>rSzaeW0KkBzg!S+Or+dW_94mBy5iEM55sO!(Ig>CZA~Ke!E@-{G;C%%{1W;vSg{pUPfH9L|Bi-zR3_uth zzR5_PFak{8D2f3FC*mZMl|)IH#mTy=yW3jUwboiIYDM*qC@olGTK&G6SM|57O(IyI z$$O5X?ewTA6H*!pwDk~ z&~2XuH#6tvYCE?x&TePk3tHM|e{nF&e)aJ~-?t6YVNvDmuhVY9&M3!s#Zj7ZvR-%M zNTx=hX`F6vZ^vl-U>_JP3y9f)+rAU z_xH~~e1DjRVHkG%-EJJ#c`;RQLHcn2u-}aWtIK>uWh)Fd$|;Xbwk!u)4g;H_z=}|1 zG7JLmCS0{xVXNc~Z;8C(S0jO7!(jk0ZV7761H9)j$m<$eM?L<;4}b1D|E0B-Vk(?K zUWyu58`brzva^Y8niPyhUH{OVj6PPEEs8joEgU$P0-m)=IFCN4ljJKu0>J)7Soo z|Ggjovw!S|hUHti9t;W>opgD2K^HtLj;k4bbYg|o!nNe8hZpZ>rnwY&=v&P|LZa|H z>C?|Ok=cCz{hxocV4U{Pc6-@fj=PKDdK|BJ`RRqd^8~uQgcf$!#mr2pp0X`s>wxs+ z+4RMy&rF20>N>-|jd^7hVMSG#3K5|=rSUp;HH~>HP~uRx{krWj9XeA=0hkN=;+0{J zDB8-2IxuuP8GFLdx+xK!Th)=lg0ovAv(zZOZ$fEfJc%MTi-Ov_!b7bqWq1m$qnrm4 z1QE0)pLyrWHSpnZUXToesR)tycrt6<>bO9CGLADN2R3yQ6qe6@X=U+6oQVr@A`<^3 z^CW^u!%@{zimk#lFCj5=0*ZOfgLT4 zLCXr&b)HYhBc78*=uOoTi=RA>}meCKcJO7qZNEx3~NK?(1Ls z@)th;#Y}wn>cyM+t&!>W)$_OCdiUyLf12mJmoN7Fi-An4u3G2Qad)v3<9Rs(Wj_vv zQj4CB3bJY1djk@-Mc0SJ{RcyNz|QJ zI_3NUEXg3lI7*T!4;Q=ZC%fqfKmTO8e=e*Xw4XR;7C3BHW;Q6W*z)1e{>+#D(f`)9 z79(BN=BjI1D`2ckvYFPID5fwNL2LDOOywjgYgtgCk>6j0{IEX2F#`48zrzD922)ig z3u@#;c%o4afgB@(k$bET26fp*eL6Q$BSsW18Nx0D-eA;ktwq~tG#3Ct077gsN=Bx+_U<0c{GpB*l0!}ICviQ`Ta8pdJtn0FBH7Y(;5bXAonN;CD zA*@Bq5xS@~1nUdw#}mPn7_hP~Ipxzl3-iT(_i%r_xZHc1+E&PCYPG6W(-l_N<+LoP zArDo}tgg$vEb}yZUk6FUpv7vbm)BQU*EeKpFq%xE!!o{DJ}}ke-R&>_jsNfWeDV99 zzWHoD-sWjarXPOin>RO4$COTYuWeauIhECTkQH@UCFLvxfstuW3_!JLS*#}23e;qW za(JHXp7oApv3e@&5w?PA%)lT|^i&_gRKtYEN^t(6sw^qO=0@BC1HnfqX*H%wW;Vb6 z=|Av&|J5)5^+PF=M(?E3N>ItngqTeST0iyn4cjcqU}Z?dC*HaF*jraGzO}Aam{_X{ zld3X|Y9TYy(_WT$-?(C3-S;C9*Z^Zd>kO2E%a=a!V;Jhnx=eO@`-*?|kN(I%`bU50&E1iY-=6qX$}AEIPfTid`0Shef9qfW zbCf3HG>k$F5l$p55IWfDrJi0BiVEPhawJgi9Kz8GjSRFBDwb23zs*WyMpW4}dug32 zv%#vBy0RF5Ty20GFIF2px(*b%tkst!3sY_VMD{lwmqFA1x)YvK4v zPe$?-9ay|EK-4F}gGiVfJ0T$ex-6Wsu+=hq_abADWclqOjgmkH8C1z9DQ$sDhjs!} zN<%eO9cmdkXReW{>Xb5hOKZSXYqbiLidt86vCOop#mH?{Yn{Y#2AF|b)-2~a$KRgU zcYRS4wGEGeaYOE=xowXaEyXf)oU@OI^ZC@R5YCx)z-W8JnK^PoVF0B-TEAibzl+}Y zxAxNu&mq*nCL&?85%#-Y@OBQ5S0I|T3mEHbwn2ZaM34Nqce$H(>$+AS`K!iMb4seV ztjpVPz4_|y^^k{QDKzHl?Y0OG1U@%&U6xwcTGm>NCef<37BUb)GM;Z%z-#{qBfb#x%UVd;eE|<(J<5*t=i&o-a&gM-qxvO3O>=U6PfDq%>$n@hk*q z=mxe%KbjqdJN|C)EL6^IJu>-^qH@@b8Hr5l@khSzllwHU&_zMS-ftQpkS2!N%5;3P z*N?rmv+@CKW-?t*DKB68(kFlQy{}{$ms)em1gmusQnG4gO?KMh^yz1N)CE=?Ry+s8 z>7+sjSeAzo@BQO{>{CDchd=upUwiq>zy7t~{_3l5eEaq5yZNwyn0IV%KOKJ07vK5G z-~WZ*|NWo7m}V~T<Q5vw=qZ#$+j_5_k){4qMfS~ z5xF-OZQcCEAuF&D3?cV36H#J-ETX$kqABtM*rK05F~Os$FkhG!L24`B!y3%Qi8yl_BoCsw$>mr9!I1F1-a|@ zrGFHqMg|^zBt?~WgWO<@of3kYQxUiByA0Ra8bWgrdt~Af|3^Hh=0Eng+4+;fciowG z_3hu`^t6xivtyQF$fwh>)@nwkHRnXkYJk=K#r`;-j`Ok`FUnffbU#huu7-|eR_%0n zSeJPmr^EgIFeG7y)^W&WTGzF#3#Y85Oc#4qJDuj7^Rmw4Fqo;N%S6d)(fMf0@qV{E z9$tU@YhU4VdgtTsJbCjiHa*@iqtGz!m`rPtoB%uA-(6o_*RoU?a|STv!BmBzs#FV> zMa#qb@V>0?5B91qFA5G=Pfpdj^(aQT|50;m5dvvta$!yJPEoLdn!+F(M=? z?>rg5`0?vses3{y6_k;nq--^z!j?(yKmTUl%aUvrR8yU@taSUO&tLLidM&l?NOqDh zraX*%eUU!-@i%XVVWQK!*N4x)wc~mKnU<=gAqh8}gB4OtTqj$mQQrKX@yEaC2MUIz z^8Lwf4<;$!?DA#ONtSH)qTi%t5h!C(wW^g8l?s?aV_H_?$~?o9NzAO8Koh&b0)jC^ zRjoG7q2=)PR+{L2n2oHOZP@Ju#hA#G#9baHBQy1`g&|geoi;XBV*n))ZP38X9Z60w}S#3d#+Z==K>*bZgHoiUF@uyD>|1I7uuXj!Z*YaVi%b561pp^`<0oL1Ees}=zg z5Ui?^w$AR2cXzXk?g?yQ)?AQIpj-Ejb0lmi*YE9P4E(6wXy*U?s|Q`T1>;}I9-Yi4 z@^9;@3w>Q?a--D2y!#2X9j9B?k47Xmj}(2?ZtWA#)t#OuYFitKunW!3p+zlmuA4P; zDM>_RUDmbuJSLSSFfZLUfKnb_zIeWyro-u&h=*Yq^1z&2aE)%Uu=#XQHLYctkLzg? zl65|%lmV%=uFH~$sumwYIxnY-i~Y`~X&ki{1~Is-%L2Q;zP`V@OjzdQ{i_eZHD(<$ zL9zj_Yq`39vcJ4?KcbvWB%cm<GZ<#(Wn%kxw^jp6W{m7zw}T2AsTM3_q%tVUB7WX?Wc@- z+6^XEljtamEibj4pcRtX7_qOa$nTY{8$^6y6@d`y&A`O+scSl1f!-l!hX%VXeh508~}gCz~ z6T&0Z_m9%;b2-q@RN*6l7{hM2+#SlgvhcDjDUYxfR+!8v0c5_g(H z7oSSqS?MnNV+5zOXS3n2HCi4J+TFNV7wrY{;Tv@J3|<0|dL*Gg>&?P6)IJYX_k*4@ z_p_Jvw>3wyzc0=--b5{5FV4CCSTcJj=KoEy50{%=;x7Z$!KZAw`&3%*#D$m6XU(PV;;?GO?E8X`{8QG!3R@T}~j) zDJ_RmYZ<3;H|>`Bq^ssU4C9zci`d(5y>*xI>cgd!Q$0OkJ`5N8ySqb?jwJcsCsiw75H4UNBy4m-# z6t5!lSR|P#eAbmy7VUPudPSI$s8w$mmISrj{n4NJ;+MbrJMX;n*{4shF0aOMOuLaT z^Z4Xqw;w6-!t;ma^dUHzgnPkMp5^18{6n8MB-4U&m+*?K0yPywS-EIM4KU<3s>GB$ zP2H##Wl02-TA7)wz$`Tf)RP&jsniTqc-l3s+8Kkumo0$htJ!GS3(`F*i z1O%f}T)Q@B1()>beUIz?RUGB z`QhO>Oj$kQt*I}avU0?q{2+yk!gxJgG5r!!=&qy(rFlmVHi@HlhiCW zq%>wNMNO*_qK#mUToy(7~{iTZc_;L*?9zb&Zn+3zXv^!y!<9}PVM$446bM?Wv& zqhGWgvr~H7@HyNS`sjf|Z|Hy9M=s^e-)t5NXc2;L8=BpCeBN|+{O~m6_=FY}jxXm^DqcF`45M2sMQiP!-Fff4Sq3B$)?FRzq)7^`_9}||t{rgJGB^Asc9PZzr=x*QwwxU&w79q3n zlYMj)H$G3%U*6Lo9j6?fj79o_@uX*tp3nxX-c`8P%5@n~-bnR-`9J#OTCLQDNtqN{ zp+}~J>cUjhxN^!Y1cDc;02pl5@&br4vfLJ~)|JKBB8?i%Mt~BWiMujj2I6WOgFetY z*O^BS*@xT_L3IHcJ0}OJ76w607$B%Q^EBq9EmK0RaAGYL%+LyhY77W+QV1fLM3*E$ z)#r*^WTlgrw3)izPNozD+Xv5?R=2_2S`#}9(&p60?2u4=6ph-Erz{d&uxl|uujU{% z^WF$ix{Vm=-ndgsETK*R4dsQRk42Yy;=L4vY};?>`>pS@;AQ~|ZrpqNQ2>81-;3*>Av!J#w9-}@ zt}VFb6(|0Q@OUqjl>jp$ACGnhHY_B`YL=8a<&;O3Q%ZRnhqcyXnoF91qPnh%$OS?Z zgQ7Mf;%*HCt=-hkqdFtc9a_;#I^tn>5DxnM-N9qDAS-~DHP8vSfg+EKT8ZD8c4J9R z3H=xSY}$=(=X&myH0-wXh0^K2TR?h5`1>`UUvKzCXZL-JPj=t%(fP)EKH_Sir?CQ2 zQfOwiuG<}v5FSBf3WZ+m_OD*ObW2iIVJafyG(8-TL?GEI)JS*JnBfj5qtNY*Dt;^rs4YX z>c#UHsw)d0Umm5*Qcv}G@$`+SJ|r0HN$=}I>*e*6by*(f=a(a;@_adduw+g4Q0q&x zL&41E^Qj%~sHjgnfO?XT5p;X3LFt-N)#{0cErXtb)=oe;sgfD07GeSllr!pje_)c4 z*(fGGwX&f~WK5N!pez;)5fLfd9AX`TT+i|1&|1AAPxvK9s+BQ@zB;YfXPi)pmh7MM`FEew_9;)w!!^+B}6rr zS|#JYOQ>rswmlL5Z|~;}7^ik&{x}WRM~1cBN>e5Bc7%x8^A?`B|K)lQVBX5PITI1- zrKt7wE2g$K9-&WofbPw^PUJBVgf<0`R^^GglnAb@CWn*w}pXl#_iTPs0UZT9~C#4evGGIfHi{AmeCZ z6Sc0~^VXS}Tm_~8@sPeZ66J{h$fqV#WuH-_E+u=jd}VO_3@xLo?Iv&oa)MR!{6j=r zLO*JoO9n7;tzMd>+|>4l#iZsA21OZfbZpjW8_*aPA)@*2AvsQ(V{{}Jg%{DDQBRWq z5Iy5O^+-4xNVJHkqYLP)@V7bVOk(j%YPn3^gpftU9#3+Wt7C?zRHQ%VL+S&FLUVJVB1y0R?w#HwILv^#`XxJOPPsHsbBL?}T^ z%Liz_LIX}RFhnG0$pfcEB$6cMEc3!xJ@%24=rGi(s%yjfHl@9XZCh`QZhf0F*D1H1 zSp(mOaKZ8Xt67l-vJHltQ+5^~Xu#T5>UIokrG7*JS+WT8Z#FSlU~q6l3)yea;mn8W zpV^%o+FsBB9*>8^@wA(!+q-*jEM7s!c{v;o@4kC+oKOBZwN_>->%t%+Z&8XQnYPtQ zJ*m|BI7JizcD6O(4PDW+mqzD+Zodf@%st32S}v>qmfX~|9&r8;G>EK*^W*!8!W9Xg z7Tw&eRTukD!mf8PV3M{|xtATBxed|Q8Bp#h((Yx;WkX9%G&PS0cyQ=+JPy-XwXAD3 zD6=tI!ygX=sj5ZG1~np!R;}TbfWV?!<4M6iPyk$mgfobp{`;gd5gBsMsjg)e(iI@@ z>qUeWYbjQ(71{S|-5{7EMBlEE;^NTs>;O}1FFp&{c1Zv3uaJAFMNZG&<41cGjOZT> zN~UTg)@{Ps?T_1jX1n5Njr+vuoWcF$_;q{0u=DRXS16>bb{Fgs{%`A}UHX}mNZksy z*kxSg8CM`6+-h@rrYb32Twc6-`N|A{5@l7rxV&7J<#;+0$viK$mNDmfg)!ef972G0k0TM!^OA;HRjsbI^0J(g@H{Uo@p6*={(_muaavAC;#|{8 zY?^p~dHJwBJh{1E=2!FK^^>dJy*^}`GwR4?WX&lFFNYUjxqkcI{je+Lz%<-He|Y1~ zXZuv|?(S_^g{$eRS`^i9gvSZJ8%d-dG$Dx4xIcQwn3h}6(v@KbPxs_NF*hLID4XFO zKwURrC4(BFHtB<)Rb2JI0vVMtZ#g~2kd;73h?S9RjABP_ip^{je#(hCH zSDqS$acQ7ir_f|KW!|5ZGdHLjOH1D&G|QpkeKp?HLtA~DwyDZJ+(^wIkLvlj#b