Skip to content

[Feature]: METAL Attention support for fmt:4 #585

Description

@RDouglasSharp

Problem

Currently line 2366 in colibri.c gates METAL support to fmt:2 only:
&& l->kv_b.fmt==2. The Metal mm_gemv kernel (line 16) only supports fmt=1 (int8), fmt=2 (int4 per-row), fmt=3 (int2), and f32 — no fmt=4 (grouped int4).

As a result, PROF=1 PROMPT="Compare the myths of Lucifer and Prometheus" NGEN=64 COLI_METAL=1 DIRECT=1 MTP=0 TEMP=0 COLI_METAL_RESSET=1 SNAP=~/glm52_i4 ./colibri 64 achieves 2.39 tok/s on fmt:2 but only 0.81 tok/s on fmt:4

Proposed solution

Add fmt:4 support to the Metal attention path. This involves

  • Adding gs to AttnW struct and bind_gemv
  • Adding grouped-int4 handling in the mm_gemv Metal kernel
  • Relaxing the l->kv_b.fmt==2 guard

Alternatives considered

We could leave processing as is, but the existing code performs Apple Silicon Mac attention processing on the CPU. This is ~3X slower than the fmt:2 model on my machine.

Scope and compatibility

Limited to fmt:4 on Mac apple silicon

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNuova funzionalità

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions