alexwengg's picture
LFM3-Audio-2B Core ML: initial release for FluidAudio LFM3AudioManager (FluidAudio #49)
21447f6 verified
Raw History Blame Contribute Delete
5.74 kB
{
"format": "lfm3-coreml-text/1",
"model": "LiquidAI/LFM3-Audio-2B",
"revision": "9d49701c372d6011d900f6abb40c6b296fb706dd",
"variant": "int8b32",
"hidden_size": 2048,
"vocab_size": 128000,
"head_dim": 128,
"num_layers": 24,
"layer_types": [
"conv",
"conv",
"full_attention",
"conv",
"sliding_attention",
"conv",
"full_attention",
"conv",
"sliding_attention",
"conv",
"full_attention",
"conv",
"sliding_attention",
"conv",
"full_attention",
"conv",
"sliding_attention",
"conv",
"full_attention",
"conv",
"sliding_attention",
"conv",
"full_attention",
"conv"
],
"cache_len": 4160,
"fifo_len": 256,
"sliding_window": 256,
"rope": {
"full": {
"theta": 1000000.0,
"pairs": 32
},
"sliding": {
"theta": 10000.0,
"pairs": 64
}
},
"mask_neg": -30000.0,
"topk": {
"k": 64,
"chunks": 4,
"chunk_size": 32000,
"note": "topk_v/topk_i are [1,chunks,k]: per-chunk top-k with LOCAL ids; global id = i + c*chunk_size; merge on the host (GPU topk/int math is 16-bit on macOS 27)"
},
"embedding": {
"file": "embed_tokens.f16.bin",
"dtype": "float16",
"shape": [
128000,
2048
]
},
"stages": [
{
"package": "LFM3-A-C4160-int8b32.mlpackage",
"layers": [
0,
12
],
"functions": [
{
"name": "decode_q1",
"q": 1,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "decode",
"calls": [
"decode_q1",
"decode_q1"
]
},
{
"name": "decode_hidden_q1",
"q": 1,
"span": 4096,
"head": "none",
"role": "decode_hidden",
"calls": [
"decode_q1",
"decode_q1"
]
},
{
"name": "prefill_q256",
"q": 256,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "prefill",
"calls": [
"prefill_q256",
"prefill_q256"
]
},
{
"name": "prefill_q64",
"q": 64,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "prefill",
"calls": [
"prefill_q64",
"prefill_q64"
]
},
{
"name": "prefill_q16",
"q": 16,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "prefill",
"calls": [
"prefill_q16",
"prefill_q16"
]
},
{
"name": "prefill_q13",
"q": 13,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "prefill",
"calls": [
"prefill_q13",
"prefill_q13"
]
}
]
},
{
"package": "LFM3-B-C4160-int8b32.mlpackage",
"layers": [
12,
24
],
"functions": [
{
"name": "decode_q1",
"q": 1,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "decode",
"calls": [
"decode_q1",
"decode_q1"
]
},
{
"name": "decode_hidden_q1",
"q": 1,
"span": 4096,
"head": "none",
"role": "decode_hidden",
"calls": [
"decode_q1",
"decode_q1"
]
},
{
"name": "prefill_q256",
"q": 256,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "prefill",
"calls": [
"prefill_q256",
"prefill_q256"
]
},
{
"name": "prefill_q64",
"q": 64,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "prefill",
"calls": [
"prefill_q64",
"prefill_q64"
]
},
{
"name": "prefill_q16",
"q": 16,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "prefill",
"calls": [
"prefill_q16",
"prefill_q16"
]
},
{
"name": "prefill_q13",
"q": 13,
"span": 4096,
"head": "topk",
"k": 64,
"penalty": true,
"role": "prefill",
"calls": [
"prefill_q13",
"prefill_q13"
]
}
]
}
],
"head": {
"package": "LFM3-Head-int8b32.mlpackage",
"inputs": {
"h": "[1,1,H] fp16 (last row of stage B h)",
"rp": "[1,1,V] fp16 repetition-penalty mask"
},
"outputs": "topk_v/topk_i [1,chunks,k]",
"stateless": true
},
"prefill": {
"buckets": [
256,
64,
16,
13
],
"pad_first": true
},
"tokens": {
"bos": 124894,
"eos": [
124900,
125014
],
"pad": 124893
},
"generation": {
"temperature": 0.0,
"top_k": 1,
"repetition_penalty": 1.0,
"do_sample": false
},
"inputs": {
"x": "[1,Q,H] fp16 inputs_embeds (host gathers embed_tokens rows; zero rows = pads)",
"cos_g/sin_g": "[1,1,Q,D] fp16 zero-tail RoPE (rope.full) at positions slot - n_pad",
"cos_s/sin_s": "[1,1,Q,D] fp16 RoPE (rope.sliding)",
"mask_g": "[1,1,Q,span] additive -3e4: key slot <= query slot, same pad class",
"mask_s": "[1,1,Q,fifo+Q] over cat(fifo[256], new[Q]); fifo j holds slot slot0-256+j; window 256 incl. self",
"write_pos": "int32 [1] slot of the first row (prefill; decode too unless decode_kv_write == onehot)",
"onehot": "[1,1,span,1] fp16, 1.0 at the write slot (decode functions when decode_kv_write == onehot)",
"rp": "[1,1,V] fp16, 1 = token seen in prompt+generated (repetition penalty in graph)"
},
"outputs": {
"h": "[1,Q,H] fp16 after embedding_norm (stage B)",
"topk_v/topk_i": "[1,chunks,k] last row: per-vocab-chunk top-k (desc) with local int32 ids"
},
"notes": "stage A output h (raw residual) feeds stage B input x; both stages take the same host inputs; one MLState per stage shared by all its functions; never pad a chunk except the first on a fresh state",
"spans": [
4096
],
"build_seconds": 318.7,
"quantization": "int8b32",
"k": 64,
"awq": null,
"decode_kv_write": "onehot"
}