Files
ds4/tests/compare_glm53_vision_embeddings.py
T
Salvatore Sanfilippo 0e9cc2d43e Fix GLM attention masking and reductions across GPU backends
Use the model-defined 2051-token dense boundary, handle padded selections, and synchronize reused reduction storage in Metal, CUDA and ROCm, including vision normalization.

Enable bounded ROCm selected-attention GEMM for GLM 5.3 without RoPE. Add independent attention references, boundary tests and finite, repeatable vision checks. Focused Strix continued prefill improves from about 21 to 68 tokens per second; stored official scores are unchanged.
2026-09-05 19:42:01 +02:00

59 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python3
"""Compare a GPU vision embedding with an accepted reference."""
import array
import math
import pathlib
import sys
def read_f32(path):
values = array.array("f")
values.frombytes(pathlib.Path(path).read_bytes())
return values
def main():
if len(sys.argv) != 3:
print(f"usage: {sys.argv[0]} REFERENCE.f32 CANDIDATE.f32", file=sys.stderr)
return 2
reference = read_f32(sys.argv[1])
candidate = read_f32(sys.argv[2])
if not reference or len(reference) != len(candidate):
print("vision embedding lengths differ or are empty", file=sys.stderr)
return 1
dot = ref_sq = candidate_sq = sum_abs = sum_sq = max_abs = 0.0
nonfinite = 0
for expected, actual in zip(reference, candidate):
if not math.isfinite(expected) or not math.isfinite(actual):
nonfinite += 1
continue
delta = abs(expected - actual)
max_abs = max(max_abs, delta)
sum_abs += delta
sum_sq += delta * delta
dot += expected * actual
ref_sq += expected * expected
candidate_sq += actual * actual
count = len(reference)
if nonfinite or ref_sq == 0 or candidate_sq == 0:
print(f"invalid vision embeddings: nonfinite={nonfinite} "
f"reference_norm_sq={ref_sq} candidate_norm_sq={candidate_sq}",
file=sys.stderr)
return 1
cosine = dot / math.sqrt(ref_sq * candidate_sq)
mean_abs = sum_abs / count
rms = math.sqrt(sum_sq / count)
print(f"values={count} nonfinite={nonfinite} max_abs={max_abs:.9g} "
f"mean_abs={mean_abs:.9g} rms={rms:.9g} cosine={cosine:.12f}")
if max_abs > 0.06 or mean_abs > 0.001 or cosine < 0.995:
print("vision embedding comparison failed", file=sys.stderr)
return 1
return 0
if __name__ == "__main__":
raise SystemExit(main())