Skip to content

dsv41 metal: FP8 block-scaled rows for decode and MMA tiles for prompt rows, under the kernel contract - #1706

Merged
ashhart merged 3 commits into
ashhart:mainfrom
gilby:dsv41-metal-pr/02-fp8-kernels
Nov 1, 2026
Merged

ashhart merged 3 commits into
ashhart:mainfrom
gilby:dsv41-metal-pr/02-fp8-kernels

Conversation

@gilby

@gilby gilby commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

What this changes

Metal kernels for the release's dense FP8 projections: decode rows with split-invariant 32x32 block sums (fp8_rows.metal) and prompt rows as fp32 MMA groups (fp8_mma.metal), both registered with the kernel contract with their own float64 references and planted controls. Main's shared files change only by one-line hooks (sources.zig, tensorfold.zig, registry.zig, metal_main.zig, metal_limits.zig); the family's records, suites and limits live in their own files (dsv41_metal_records.zig, metal_dsv41_main.zig, metal_dsv41_limits.zig), so later parts add to those, not to main's files.

Part 2 of 18 of the stack for #1676; stacks on dsv41-metal-pr/01-release-readers (part 1, #1705).

Receipt

  • Environment, with the TensorFold commit, MLX or PyTorch version, machine and GPU, checkpoint and revision: TensorFold 1247a9a on main 2761c24 (native Zig 0.17.0; no MLX or PyTorch); Apple M3 Ultra (60-core GPU), 96 GB, macOS, for the kernel and device tests; checkpoint deepseek-ai/DeepSeek-V4.1-Flash-1017.
  • Exactness, from tools/bench_concurrent.py --alone --serial or token_sha against "draft": false: n/a: kernels only; the kernel contract checks each launch geometry's bits against the others and against float64.
  • Decode speed before and after, from tools/bench_openai.py: measured on the PR that turns serving on.
  • Prompt speed before and after: the cold first request's ttft_s from tools/bench_cache.py --require-cold on a long prompt, or "n/a" with the reason when the change cannot reach prompt processing: measured on the PR that turns serving on.
  • Tests run, with pass, fail and skip counts: zig build test tf-kernel-contract -Dcpu=apple_m1: exit 0, 583/583 steps, 0 fail, 36 skip; kernel contract, tf-kernel-contract --only dsv41 (Metal): SUMMARY 9 kernels: 9 pass gates 1-4, 0 fail, 0 known findings; 8 controls: 8 red as planted, 0 missed; 0 limit problems; gates 17288 ms, limits 359 ms; python3 tools/zig/lean_check.py: 4831 files, 424 problems, the same count as main (4807 files, 424). Zig's summary counts only the test binaries it ran in that invocation, so the step count is the comparable figure.
  • Not run, and why: CUDA: no CUDA code changes; Metal on M1, M2, M4 and M5: one M3 Ultra only (the contract's limits check covers the M1 to M5 pipeline limits).

Checklist

  • Every token still goes through the lane rounds. No serial path, and nothing that needs drafts off.
  • Drafted output equals "draft": false, a resumed prompt equals a fresh one, and concurrent equals solo.
  • No precision traded for speed. If the bits change, the description says which sums change and why.
  • A new or changed GPU kernel is registered with the kernel contract (docs/kernel-contract.md); each backend's SUMMARY line is in the receipt.
  • Prompt processing is no slower than the last release.
  • The description says which platforms I ran, Metal M1 to M5 and CUDA, and which I could not.
  • New tests fail before the change, pass after it, and skip cleanly without their dependency.
  • Comments and docstrings are one line. No measurements or history in the source.
  • No personal data, machine names, internal hosts or local paths. No AI attribution lines.

gilby and others added 3 commits November 1, 2026 08:38
…t rows, under the kernel contract

The release's dense FP8 projections decoded exactly: fp8_rows.metal sums a row's 32x32 blocks in a split-invariant
order for 1-16 decode rows, fp8_mma.metal decodes the same blocks into fp32 MMA groups for prompt rows. Both are
registered with the kernel contract against float64 and the release's own wkv bytes, with planted controls.
@ashhart

ashhart commented Nov 1, 2026

Copy link
Copy Markdown
Owner

Thank you @gilby. This is merged into main with your commits under your own name, so you're listed as a TensorFold contributor. It ships in the next release, credited to you in the changelog and the release notes.

@ashhart

ashhart commented Nov 1, 2026

Copy link
Copy Markdown
Owner

Thanks @gilby! DeepSeek V4.1's FP8 block-scaled Metal kernels, under the kernel contract, are in 1.2.1: https://github.com/ashhart/TensorFold/releases/tag/v1.2.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants