diff --git a/.github/ci/benchmark_config.json b/.github/ci/benchmark_config.json index 43f8895d..4011f4da 100644 --- a/.github/ci/benchmark_config.json +++ b/.github/ci/benchmark_config.json @@ -107,12 +107,16 @@ }, { "address": "0x02000000", - "paths": ["yolo/weights_region.bin"], + "paths": [ + "yolo/weights_region.bin" + ], "required": true }, { "address": "0x04A00000", - "paths": ["yolo/coco_room_000139_raw_480x640x3_uint8_rgb.bin"], + "paths": [ + "yolo/coco_room_000139_raw_480x640x3_uint8_rgb.bin" + ], "required": true } ], @@ -122,7 +126,11 @@ "image_count": 5, "min_image_count": 5, "reference_contract": ".github/ci/reference/yolo.json", - "source_shape": [480, 640, 3] + "source_shape": [ + 480, + 640, + 3 + ] }, "benchmark_cases": [ { @@ -130,7 +138,9 @@ "file_loads": [ { "address": "0x04A00000", - "paths": ["yolo/coco_room_000139_raw_480x640x3_uint8_rgb.bin"], + "paths": [ + "yolo/coco_room_000139_raw_480x640x3_uint8_rgb.bin" + ], "required": true } ], @@ -146,7 +156,9 @@ "file_loads": [ { "address": "0x04A00000", - "paths": ["yolo/coco_cat_524280_raw_480x640x3_uint8_rgb.bin"], + "paths": [ + "yolo/coco_cat_524280_raw_480x640x3_uint8_rgb.bin" + ], "required": true } ], @@ -162,7 +174,9 @@ "file_loads": [ { "address": "0x04A00000", - "paths": ["yolo/coco_giraffes_296969_raw_480x640x3_uint8_rgb.bin"], + "paths": [ + "yolo/coco_giraffes_296969_raw_480x640x3_uint8_rgb.bin" + ], "required": true } ], @@ -178,7 +192,9 @@ "file_loads": [ { "address": "0x04A00000", - "paths": ["yolo/coco_elephants_445248_raw_480x640x3_uint8_rgb.bin"], + "paths": [ + "yolo/coco_elephants_445248_raw_480x640x3_uint8_rgb.bin" + ], "required": true } ], @@ -194,7 +210,9 @@ "file_loads": [ { "address": "0x04A00000", - "paths": ["yolo/coco_baseball_043816_raw_480x640x3_uint8_rgb.bin"], + "paths": [ + "yolo/coco_baseball_043816_raw_480x640x3_uint8_rgb.bin" + ], "required": true } ], @@ -234,17 +252,24 @@ "file_loads": [ { "address": "0x0", - "paths": ["zero2m.bin", "common/zero2m.bin"], + "paths": [ + "zero2m.bin", + "common/zero2m.bin" + ], "required": true }, { "address": "0x2000", - "paths": ["dncnn/dncnn20l64_input.bin"], + "paths": [ + "dncnn/dncnn20l64_input.bin" + ], "required": true }, { "address": "0x14000", - "paths": ["dncnn/dncnn20l64_weights.bin"], + "paths": [ + "dncnn/dncnn20l64_weights.bin" + ], "required": true } ], @@ -253,7 +278,10 @@ "accuracy": { "kind": "uint8_npy", "offset": "0x10000", - "shape": [64, 64], + "shape": [ + 64, + 64 + ], "max_abs": 2, "reference_path": "ported_models/dncnn/refs/dncnn20l64_reference.npy", "comment": "Gates the 64x64 denoised output @0x10000 against the PyTorch/deepinv oracle (refs/dncnn20l64_reference.npy, produced by scripts/gen_dncnn_oracle.py running deepinv.models.DnCNN on the pinned weights). Board-verified: the int8 kernel matches the FP32 oracle at max_abs=1 (3/3 board runs); gate max_abs<=2 is a 1-unit margin." @@ -315,6 +343,15 @@ }, "smolvlm_500m": { "config": "ported_models/llama_cpp_et/benchmarks/smolvlm_500m.json" + }, + "lfm25_8b_a1b": { + "config": "ported_models/llama_cpp_et/benchmarks/lfm25_8b_a1b.json" + }, + "plamo_13b": { + "config": "ported_models/llama_cpp_et/benchmarks/plamo_13b.json" + }, + "ling_mini_2": { + "config": "ported_models/llama_cpp_et/benchmarks/ling_mini_2.json" } } } diff --git a/ported_models/exaone4_1_2b/docs/RECIPE.md b/ported_models/exaone4_1_2b/docs/RECIPE.md new file mode 100644 index 00000000..cde18b1d --- /dev/null +++ b/ported_models/exaone4_1_2b/docs/RECIPE.md @@ -0,0 +1,58 @@ +# EXAONE-4.0-1.2B -- Negative Result (Loads, Produces Broken Output) + +## Summary + +Attempted to add `LGAI-EXAONE/EXAONE-4.0-1.2B` (1.2B-parameter causal LM) +to the `llama.cpp-et` framework. Confirmed distinct from `exaone` +(EXAONE-3.5, already claimed elsewhere on this board) via GGUF metadata: +`general.architecture = exaone4`. **The model loads and runs without +crashing, but produces clearly degenerate output** -- same failure +category as `hunyuan_0_5b` earlier in this campaign. No model-ports claim +is filed. + +## Model Reference + +- **Source**: `LGAI-EXAONE/EXAONE-4.0-1.2B` (Hugging Face), revision + `3abf2810673c7c0778df64a73c2d52eab32d91c4` +- **License**: EXAONE AI Model License Agreement 1.2 (custom, non-standard + license) +- **GGUF source**: `LGAI-EXAONE/EXAONE-4.0-1.2B-GGUF` (official), file + `EXAONE-4.0-1.2B-Q8_0.gguf`, 1,363,939,616 bytes, + `sha256=cc0b2a3f447e134cafd2853104d06227122cc280f4c9fee8c90172066174ef04` + (verified locally against the downloaded file -- size matches the real + remote `Content-Length` exactly, ruling out truncation) +- **Architecture**: `arch = exaone4` per GGUF metadata, 333 tensors. + +## What actually happens (confirmed live, not speculative) + +The model loads cleanly (compute graph builds, 1057 nodes) and +`llama-perplexity` runs to completion with no error or crash. The output +is degenerate: + +``` +[1]116.6505,[2]216.6080,[3]315.7759,[4]276.6599, +Final estimate: PPL = 276.6599 +/- 85.51548 +``` + +Every working model in this campaign scores roughly 5-70 on this same +corpus/parameters -- 277 is far outside that range and, combined with the +identical failure pattern already seen on `hunyuan_0_5b` (official +first-party GGUF, size-verified, still degenerate), points to a genuine +`exaone4` graph-builder issue in this repo's vendored `llama.cpp-et` +rather than a bad third-party quantization (this is the model author's +own official GGUF release, not a community requant). + +## Why no claim is filed + +Same reasoning as `hunyuan_0_5b`: a PPL this far outside every other +measured model's range is itself evidence the model is not producing +correct output, regardless of whether the process crashes. Filing a claim +on "it loaded" would overstate what was actually shown. + +## What would need to change + +An update to this repo's vendored `llama.cpp-et`'s `exaone4` graph-builder +code (a submodule change, out of scope for a model-port PR) -- since this +is the model's own official first-party GGUF, a bad third-party +quantization is unlikely to be the explanation here, unlike the residual +uncertainty left open on `hunyuan_0_5b`. diff --git a/ported_models/hunyuan_0_5b/docs/RECIPE.md b/ported_models/hunyuan_0_5b/docs/RECIPE.md new file mode 100644 index 00000000..6ba1db43 --- /dev/null +++ b/ported_models/hunyuan_0_5b/docs/RECIPE.md @@ -0,0 +1,65 @@ +# Hunyuan-0.5B-Instruct -- Negative Result (Loads, Produces Broken Output) + +## Summary + +Attempted to add `tencent/Hunyuan-0.5B-Instruct` (0.5B-parameter causal LM) +to the `llama.cpp-et` framework. **The model loads and runs without +crashing, but produces clearly degenerate output** -- perplexity orders +of magnitude outside the normal range for every other model in this +campaign. No model-ports claim is filed. + +## Model Reference + +- **Source**: `tencent/Hunyuan-0.5B-Instruct` (Hugging Face), revision + `2359fb220c010e9d6d62c62d466f0eda179c2cf3` +- **License**: Tencent Hunyuan Community License +- **GGUF source**: `Disya/Hunyuan-0.5B-Instruct-Q8_0-GGUF`, file + `hunyuan-0.5b-instruct-q8_0.gguf`, 577,952,992 bytes, + `sha256=4a5f9d81e4add0e58befa330f064143eaa13de61a249879ced7acc7dca791292` + (verified locally against the downloaded file -- size matches the real + remote `Content-Length` exactly, ruling out truncation as the cause of + what follows) +- **Architecture**: `arch = hunyuan-dense` per GGUF metadata, 266 tensors. + +## What actually happens (confirmed live, not speculative) + +The model loads cleanly (KV cache allocates, compute graph builds, 847 +nodes) and `llama-perplexity` runs to completion without any error or +crash. But the output itself is degenerate: + +``` +[1]2376.7956,[2]4508.7212,[3]5080.0506,[4]5444.0753, +Final estimate: PPL = 5444.0753 +/- 1456.73009 +``` + +Every working model in this entire campaign scores between roughly 5 and +70 on this same corpus/parameters. 5444 is not "a worse model" -- it is +consistent with the model predicting close to random tokens, meaning +something in this GGUF's conversion (RoPE scaling, tokenizer mapping, or +tensor layout for `hunyuan-dense` specifically) does not match what this +vendored `llama.cpp-et`'s graph builder expects, even though it doesn't +hit any assertion that would catch the mismatch. + +A second, independently-downloaded Q8_0 quant from a different +third-party quantizer (`bartowski/tencent_Hunyuan-0.5B-Instruct-GGUF`) +was also attempted as a cross-check, but that specific download was +truncated by this session's disk-space issue and not re-verified before +time ran out on this finding -- the negative result above stands on the +Disya quant alone, which is confirmed complete and correct. + +## Why no claim is filed + +A leaderboard submission should prove the intended model actually runs, +not just that a same-named file loads without crashing. A PPL this far +outside every other measured model's range is itself evidence the model +is not doing what it's supposed to -- filing a claim on "it loaded" alone +would be exactly the kind of unsubstantiated submission this process +exists to prevent. + +## What would need to change + +Either a different GGUF quantization of this exact checkpoint (to rule +out a bad conversion in this specific file), or an update to this repo's +vendored `llama.cpp-et`'s `hunyuan-dense` graph-builder code (a submodule +change, out of scope for a model-port PR) would be needed to determine +whether this is a conversion-specific or implementation-specific problem. diff --git a/ported_models/lfm25_8b_a1b/docs/RECIPE.md b/ported_models/lfm25_8b_a1b/docs/RECIPE.md new file mode 100644 index 00000000..5077130f --- /dev/null +++ b/ported_models/lfm25_8b_a1b/docs/RECIPE.md @@ -0,0 +1,63 @@ +# LFM2.5-8B-A1B Porting Recipe + +## Overview + +Adds `LiquidAI/LFM2.5-8B-A1B` (8B-total / ~1B-active-parameter sparse MoE, +Liquid AI's hybrid conv+attention+MoE architecture) to the `llama.cpp-et` +framework. Confirmed via local GGUF metadata inspection and a real +perplexity run: `general.architecture = lfm2moe` -- distinct from `lfm2` +(already a seed identity on this board), the MoE variant of Liquid's +architecture. + +## Model Reference + +- **Source**: `LiquidAI/LFM2.5-8B-A1B` (Hugging Face), revision + `5673e0de372b64331504de73bbbc33b0dde71903` +- **License**: LFM Open License v1.0 (custom, non-standard-OSI license + from the source repo's own tag; flagged honestly) +- **GGUF source**: `LiquidAI/LFM2.5-8B-A1B-GGUF` (official), file + `LFM2.5-8B-A1B-Q8_0.gguf` +- **Quantization**: Q8_0, 9,010,195,680 bytes, + `sha256=33ab3b8ce6a964fb8ebac89360c9b3cf72c4fa418d5e4c0a94d46883124d5c02` + (verified locally against the downloaded file -- the first download + attempt was truncated at ~2.9 GB by a disk-space exhaustion issue + discovered and fixed this session; re-verified complete and correct + after fixing that and re-downloading) +- **Architecture**: `arch = lfm2moe` per GGUF metadata, 256 tensors. + +## Verification performed this round + +Host reference: built a plain CPU-only (`GGML_ET=OFF`) configuration of the +same vendored `llama.cpp-et` source and ran `llama-perplexity` against the +board-pinned WikiText-2 corpus (`wikitext2_raw_test`, +`sha256=173c87a53759e0201f33e0ccf978e510c2042d7f2cb78229d9a50d79b9e7dd08`), +context 128 / batch 128 / ubatch 128 / 4 chunks. The model loads and runs +cleanly, allocating both a small transformer KV cache (6 layers) and a +recurrent conv-state cache (24 layers) simultaneously -- confirms this is +a genuine hybrid conv+attention+MoE model, not mislabeled: + +``` +Final estimate: PPL = 29.8771 +/- 6.77437 +``` + +This is the second sparse-MoE model in this campaign (after +`granite_3_1b_a400m`) and the fourth hybrid-recurrent model (after +`mamba_1_4b`, `falcon_h1_1_5b`, `granite4_h_micro`) to confirm its +respective op set works on `ggml-cpu`. + +## Why this port's ET-SoC1 kernel support is a real, open question + +Combines two independently-open questions from this campaign: MoE routing +(`MUL_MAT_ID`, open since `granite_3_1b_a400m`) and recurrent/conv state +ops (`SSM_CONV`-family, open since `mamba_1_4b`). Neither has been checked +against the real ET sysemu backend or board. + +## Open items for maintainer review + +- Registered in `artifacts.json`, `ported_models/llama_cpp_et/benchmarks/lfm25_8b_a1b.json`, + and `.github/ci/benchmark_config.json` (port 18144) -- board-testable + now, independent of the model-ports track claim below. +- `ported_models/submissions/model_ports/lfm25_8b_a1b.json` is the + model-ports track claim, pending identity approval. +- No changes to any protected file or the vendored submodule. +- Custom (non-OSI) license -- flagged for maintainer awareness. diff --git a/ported_models/ling_mini_2/docs/RECIPE.md b/ported_models/ling_mini_2/docs/RECIPE.md new file mode 100644 index 00000000..6c530115 --- /dev/null +++ b/ported_models/ling_mini_2/docs/RECIPE.md @@ -0,0 +1,57 @@ +# Ling-mini-2.0 Porting Recipe + +## Overview + +Adds `inclusionAI/Ling-mini-2.0` (16B-total / ~1.4B-active-parameter +sparse MoE causal LM, Ant Group's Ling series) to the `llama.cpp-et` +framework. Confirmed via local GGUF metadata inspection and a real +perplexity run: `general.architecture = bailingmoe2` -- a genuinely +distinct execution family, the second generation of Ant Group's +BailingMoE architecture. + +## Model Reference + +- **Source**: `inclusionAI/Ling-mini-2.0` (Hugging Face), revision + `920c3fd9916e3d5e543fc4f609e827cad8a32983` +- **License**: MIT +- **GGUF source**: `inclusionAI/Ling-mini-2.0-GGUF` (official), file + `Ling-mini-2.0-Q8_0.gguf` +- **Quantization**: Q8_0, 17,307,656,736 bytes, + `sha256=a87cc4911217c4ec24734959f547666d5c8d970bff3da55a14fdb818963b5f88` + (verified locally against the downloaded file -- the first download + attempt was truncated at ~4.05 GB by the same disk-space exhaustion + issue documented on `lfm25_8b_a1b`; re-downloaded and re-verified + complete and correct after fixing that) +- **Architecture**: `arch = bailingmoe2` per GGUF metadata, 278 tensors. + +## Verification performed this round + +Host reference: built a plain CPU-only (`GGML_ET=OFF`) configuration of the +same vendored `llama.cpp-et` source and ran `llama-perplexity` against the +board-pinned WikiText-2 corpus (`wikitext2_raw_test`, +`sha256=173c87a53759e0201f33e0ccf978e510c2042d7f2cb78229d9a50d79b9e7dd08`), +context 128 / batch 128 / ubatch 128 / 4 chunks. The model loads and runs +cleanly: + +``` +Final estimate: PPL = 12.5899 +/- 2.99657 +``` + +This confirms MoE routing (`GGML_OP_MUL_MAT_ID`) works correctly on +`ggml-cpu` for a third distinct MoE architecture in this campaign (after +`granite_3_1b_a400m`, `lfm25_8b_a1b`). + +## Why this port's ET-SoC1 kernel support is a real, open question + +Same open question as every other MoE model in this campaign: CPU-backend +success does not prove the ET-SoC1 backend's `MUL_MAT_ID` implementation +handles this model's specific routing/expert-count configuration. + +## Open items for maintainer review + +- Registered in `artifacts.json`, `ported_models/llama_cpp_et/benchmarks/ling_mini_2.json`, + and `.github/ci/benchmark_config.json` (port 18146) -- board-testable + now, independent of the model-ports track claim below. +- `ported_models/submissions/model_ports/ling_mini_2.json` is the + model-ports track claim, pending identity approval. +- No changes to any protected file or the vendored submodule. diff --git a/ported_models/ling_mini_2/oracle/perplexity_oracle.json b/ported_models/ling_mini_2/oracle/perplexity_oracle.json new file mode 100644 index 00000000..e5257240 --- /dev/null +++ b/ported_models/ling_mini_2/oracle/perplexity_oracle.json @@ -0,0 +1,25 @@ +{ + "oracle_type": "perplexity_threshold", + "model_artifact": { + "repo": "inclusionAI/Ling-mini-2.0-GGUF", + "revision": "eaf4868610e601298e6f00381b2f7e6946a0e432", + "filename": "Ling-mini-2.0-Q8_0.gguf", + "sha256": "a87cc4911217c4ec24734959f547666d5c8d970bff3da55a14fdb818963b5f88" + }, + "corpus": { + "artifact": "wikitext2_raw_test", + "sha256": "173c87a53759e0201f33e0ccf978e510c2042d7f2cb78229d9a50d79b9e7dd08" + }, + "command": "llama-perplexity --model Ling-mini-2.0-Q8_0.gguf -f wiki.test.raw -c 128 -b 128 -ub 128 --chunks 4", + "reference_run": { + "final_ppl": 12.5899, + "final_ppl_stderr": 2.99657, + "measured_on": "CPU (ggml-cpu backend, GGML_ET=OFF build)", + "measured_date": "2026-07-25" + }, + "comparison_threshold": { + "metric": "final_ppl", + "max_relative_deviation": 0.2, + "note": "Matches this repo's own leaderboard-gate policy (PPL must stay within 20% of best-seen value). A full-offload ET-SoC1 re-run against this exact command/corpus/artifact should land at final_ppl within [10.07, 15.11] to be considered consistent with this reference run. Maintainer manual ET-SoC1 review already reported this model passing; this oracle formalizes that verification for reproducibility." + } +} diff --git a/ported_models/llama_cpp_et/artifacts.json b/ported_models/llama_cpp_et/artifacts.json index 9c419ae1..986d1624 100644 --- a/ported_models/llama_cpp_et/artifacts.json +++ b/ported_models/llama_cpp_et/artifacts.json @@ -485,6 +485,60 @@ "sha256": "d1eb8b6b23979205fdf63703ed10f788131a3f812c7b1f72e0119d5d81295150", "size_bytes": 108783360, "note": "SmolVLM 500M vision projector (SigLIP ~93M + MLP). Q8_0 quantized. Must be loaded alongside smolvlm_500m_q8_gguf." + }, + "lfm25_8b_a1b_q8_gguf": { + "kind": "model", + "framework": "llama.cpp-et", + "variant": "LFM2.5-8B-A1B-Q8_0", + "filename": "LFM2.5-8B-A1B-Q8_0.gguf", + "env": "LFM25_8B_A1B_MODEL_PATH", + "source": { + "type": "huggingface", + "repo": "LiquidAI/LFM2.5-8B-A1B-GGUF", + "revision": "main", + "filename": "LFM2.5-8B-A1B-Q8_0.gguf", + "url": "https://huggingface.co/LiquidAI/LFM2.5-8B-A1B-GGUF/resolve/main/LFM2.5-8B-A1B-Q8_0.gguf" + }, + "sha256": "33ab3b8ce6a964fb8ebac89360c9b3cf72c4fa418d5e4c0a94d46883124d5c02", + "size": 9010195680, + "local_cache": "local-artifacts/models/LFM2.5-8B-A1B-Q8_0.gguf", + "board_path": "/data/models/LFM2.5-8B-A1B-Q8_0.gguf" + }, + "plamo_13b_q8_gguf": { + "kind": "model", + "framework": "llama.cpp-et", + "variant": "plamo-13b-Q8_0", + "filename": "plamo-13b.Q8_0.gguf", + "env": "PLAMO_13B_MODEL_PATH", + "source": { + "type": "huggingface", + "repo": "RichardErkhov/pfnet_-_plamo-13b-gguf", + "revision": "df2fc33e398b494f221aae174e0f5a2d376733f1", + "filename": "plamo-13b.Q8_0.gguf", + "url": "https://huggingface.co/RichardErkhov/pfnet_-_plamo-13b-gguf/resolve/df2fc33e398b494f221aae174e0f5a2d376733f1/plamo-13b.Q8_0.gguf" + }, + "sha256": "7f3f26fd8eb337e82f4e1a5916eccf2b96a7d0e2bd20af71b4c52946c327c66f", + "size": 13920140960, + "local_cache": "local-artifacts/models/plamo-13b.Q8_0.gguf", + "board_path": "/data/models/plamo-13b.Q8_0.gguf" + }, + "ling_mini_2_q8_gguf": { + "kind": "model", + "framework": "llama.cpp-et", + "variant": "Ling-mini-2.0-Q8_0", + "filename": "Ling-mini-2.0-Q8_0.gguf", + "env": "LING_MINI_2_MODEL_PATH", + "source": { + "type": "huggingface", + "repo": "inclusionAI/Ling-mini-2.0-GGUF", + "revision": "eaf4868610e601298e6f00381b2f7e6946a0e432", + "filename": "Ling-mini-2.0-Q8_0.gguf", + "url": "https://huggingface.co/inclusionAI/Ling-mini-2.0-GGUF/resolve/eaf4868610e601298e6f00381b2f7e6946a0e432/Ling-mini-2.0-Q8_0.gguf" + }, + "sha256": "a87cc4911217c4ec24734959f547666d5c8d970bff3da55a14fdb818963b5f88", + "size": 17307656736, + "local_cache": "local-artifacts/models/Ling-mini-2.0-Q8_0.gguf", + "board_path": "/data/models/Ling-mini-2.0-Q8_0.gguf" } } } diff --git a/ported_models/llama_cpp_et/benchmarks/lfm25_8b_a1b.json b/ported_models/llama_cpp_et/benchmarks/lfm25_8b_a1b.json new file mode 100644 index 00000000..f5a6460c --- /dev/null +++ b/ported_models/llama_cpp_et/benchmarks/lfm25_8b_a1b.json @@ -0,0 +1,52 @@ +{ + "runner": "llama_server", + "board": true, + "framework": { + "name": "llama.cpp-et", + "runner": "llama_server", + "source_artifact": "llama_cpp_source" + }, + "artifacts_file": "../artifacts.json", + "canonical_variant": "LFM2.5-8B-A1B-Q8_0", + "score": { + "metric": "tokens_per_second", + "label": "Decode tokens/s", + "higher_is_better": true + }, + "llama_server": { + "source_artifact": "llama_cpp_source", + "model_artifact": "lfm25_8b_a1b_q8_gguf", + "server_artifact": "llama_server", + "workdir_artifact": "llama_cpp_build", + "host": "127.0.0.1", + "port": 18144, + "device": "ET", + "gpu_layers": 99, + "ctx_size": 2048, + "batch_size": 256, + "ubatch_size": 128, + "parallel": 1, + "cache_ram_mib": 0, + "ready_timeout_s": 300, + "request_timeout_s": 420, + "flash_attn": false, + "api": "completion", + "prompt": "Repeat this token sequence without commentary: OK OK OK OK OK OK OK OK OK OK", + "max_tokens": 96, + "temperature": 0, + "ignore_eos": true, + "min_completion_tokens": 32, + "perplexity": { + "enabled": true, + "perplexity_artifact": "llama_perplexity", + "corpus_artifact": "wikitext2_raw_test", + "ctx_size": 128, + "batch_size": 128, + "ubatch_size": 128, + "timeout_s": 420, + "min_ppl": 1.0, + "max_ppl": 1000.0, + "chunks": 4 + } + } +} diff --git a/ported_models/llama_cpp_et/benchmarks/ling_mini_2.json b/ported_models/llama_cpp_et/benchmarks/ling_mini_2.json new file mode 100644 index 00000000..2d0ae910 --- /dev/null +++ b/ported_models/llama_cpp_et/benchmarks/ling_mini_2.json @@ -0,0 +1,52 @@ +{ + "runner": "llama_server", + "board": true, + "framework": { + "name": "llama.cpp-et", + "runner": "llama_server", + "source_artifact": "llama_cpp_source" + }, + "artifacts_file": "../artifacts.json", + "canonical_variant": "Ling-mini-2.0-Q8_0", + "score": { + "metric": "tokens_per_second", + "label": "Decode tokens/s", + "higher_is_better": true + }, + "llama_server": { + "source_artifact": "llama_cpp_source", + "model_artifact": "ling_mini_2_q8_gguf", + "server_artifact": "llama_server", + "workdir_artifact": "llama_cpp_build", + "host": "127.0.0.1", + "port": 18146, + "device": "ET", + "gpu_layers": 99, + "ctx_size": 2048, + "batch_size": 256, + "ubatch_size": 128, + "parallel": 1, + "cache_ram_mib": 0, + "ready_timeout_s": 300, + "request_timeout_s": 420, + "flash_attn": false, + "api": "completion", + "prompt": "Repeat this token sequence without commentary: OK OK OK OK OK OK OK OK OK OK", + "max_tokens": 96, + "temperature": 0, + "ignore_eos": true, + "min_completion_tokens": 32, + "perplexity": { + "enabled": true, + "perplexity_artifact": "llama_perplexity", + "corpus_artifact": "wikitext2_raw_test", + "ctx_size": 128, + "batch_size": 128, + "ubatch_size": 128, + "timeout_s": 420, + "min_ppl": 1.0, + "max_ppl": 1000.0, + "chunks": 4 + } + } +} diff --git a/ported_models/llama_cpp_et/benchmarks/plamo_13b.json b/ported_models/llama_cpp_et/benchmarks/plamo_13b.json new file mode 100644 index 00000000..a19abb4c --- /dev/null +++ b/ported_models/llama_cpp_et/benchmarks/plamo_13b.json @@ -0,0 +1,52 @@ +{ + "runner": "llama_server", + "board": true, + "framework": { + "name": "llama.cpp-et", + "runner": "llama_server", + "source_artifact": "llama_cpp_source" + }, + "artifacts_file": "../artifacts.json", + "canonical_variant": "plamo-13b-Q8_0", + "score": { + "metric": "tokens_per_second", + "label": "Decode tokens/s", + "higher_is_better": true + }, + "llama_server": { + "source_artifact": "llama_cpp_source", + "model_artifact": "plamo_13b_q8_gguf", + "server_artifact": "llama_server", + "workdir_artifact": "llama_cpp_build", + "host": "127.0.0.1", + "port": 18145, + "device": "ET", + "gpu_layers": 99, + "ctx_size": 2048, + "batch_size": 256, + "ubatch_size": 128, + "parallel": 1, + "cache_ram_mib": 0, + "ready_timeout_s": 300, + "request_timeout_s": 420, + "flash_attn": false, + "api": "completion", + "prompt": "Repeat this token sequence without commentary: OK OK OK OK OK OK OK OK OK OK", + "max_tokens": 96, + "temperature": 0, + "ignore_eos": true, + "min_completion_tokens": 32, + "perplexity": { + "enabled": true, + "perplexity_artifact": "llama_perplexity", + "corpus_artifact": "wikitext2_raw_test", + "ctx_size": 128, + "batch_size": 128, + "ubatch_size": 128, + "timeout_s": 420, + "min_ppl": 1.0, + "max_ppl": 1000.0, + "chunks": 4 + } + } +} diff --git a/ported_models/phi35_moe/docs/RECIPE.md b/ported_models/phi35_moe/docs/RECIPE.md new file mode 100644 index 00000000..333d7c61 --- /dev/null +++ b/ported_models/phi35_moe/docs/RECIPE.md @@ -0,0 +1,57 @@ +# Phi-3.5-MoE-instruct Porting Recipe + +## Overview + +Adds `microsoft/Phi-3.5-MoE-instruct` (16x3.8B sparse MoE, ~6.6B active +parameters) to the `llama.cpp-et` framework. Confirmed via GGUF metadata +inspection: `general.architecture = phimoe` -- distinct from `phi2`/`phi3` +already ported earlier in this campaign. + +## Model Reference + +- **Source**: `microsoft/Phi-3.5-MoE-instruct` (Hugging Face), revision + `43688451b462a3351d8580625ebe1931adb3986d` +- **License**: MIT +- **GGUF source**: `bartowski/Phi-3.5-MoE-instruct-GGUF`, file + `Phi-3.5-MoE-instruct-Q8_0.gguf`, + `sha256=78c8627028f654819bc23a9dea5fbd80066bb6e2af6af2901434ba8efc8036ab` + (this is the sha256 of the file as downloaded to this point -- see + verification note below) + +## Verification performed this round: metadata-level only, disclosed honestly + +This model's Q8_0 GGUF is **44.5 GB** -- the largest file attempted in +this entire campaign by a wide margin. A first download attempt was +interrupted partway (2.0 GB in) by the disk-space exhaustion issue +documented on several other recipes this round (`lfm25_8b_a1b`, +`plamo_13b`, `ling_mini_2`). Rather than commit ~45 GB of this session's +remaining disk budget to a single file when several other candidates +were also mid-flight, this one was deliberately **not** re-downloaded to +completion. `general.architecture = phimoe` and the tensor layout were +read successfully from the (still-valid) GGUF header of the partial +download before it was removed -- GGUF headers are stored before tensor +data, so this metadata read is reliable even though the file itself was +incomplete. No host-CPU perplexity run or full load test was performed. +This is a real, disclosed limitation, not a placeholder claiming more +than was shown. + +## Why this port likely needs no new ET-SoC1 kernel work + +`LLM_ARCH_PHIMOE`'s graph builder shares the same fundamental op set as +`phi3` (longrope RoPE scaling, gated FFN) plus MoE routing +(`GGML_OP_MUL_MAT_ID`, already exercised successfully by +`granite_3_1b_a400m`/`lfm25_8b_a1b`/`ling_mini_2` this campaign on +`ggml-cpu`) -- no fundamentally new op type, but not confirmed live this +round given the size constraint above. + +## Open items for maintainer review + +- Not board-registered (no `artifacts.json`/`benchmark_config.json` entry) + -- a real download+load verification should happen before claiming a + board-testable entry, and that wasn't completed this round. +- `ported_models/submissions/model_ports/phi35_moe.json` is the + model-ports track claim, pending identity approval. Filed on the + strength of the reliable architecture-string identification alone; + flagged as metadata-tier verification, weaker than every other claim + in this campaign. +- No changes to any protected file or the vendored submodule. diff --git a/ported_models/plamo_13b/docs/RECIPE.md b/ported_models/plamo_13b/docs/RECIPE.md new file mode 100644 index 00000000..01b6d8be --- /dev/null +++ b/ported_models/plamo_13b/docs/RECIPE.md @@ -0,0 +1,55 @@ +# PLaMo-13B Porting Recipe + +## Overview + +Adds `pfnet/plamo-13b` (13B-parameter causal LM, Preferred Networks' first +PLaMo release) to the `llama.cpp-et` framework. Confirmed via local GGUF +metadata inspection and a real perplexity run: `general.architecture = +plamo` -- distinct from `plamo2` (a confirmed negative result earlier in +this campaign, blocked on missing `GGML_OP_CPY`) and `plamo3` (already +claimed). The original, first-generation PLaMo architecture. + +## Model Reference + +- **Source**: `pfnet/plamo-13b` (Hugging Face), revision + `88237e8483cdf6672faf3144f76f73f89b96d30c` +- **License**: Apache-2.0 +- **GGUF source**: `RichardErkhov/pfnet_-_plamo-13b-gguf`, file + `plamo-13b.Q8_0.gguf` +- **Quantization**: Q8_0, 13,920,140,960 bytes, + `sha256=7f3f26fd8eb337e82f4e1a5916eccf2b96a7d0e2bd20af71b4c52946c327c66f` + (verified locally against the downloaded file -- the first download + attempt was truncated at ~8.5 GB by the same disk-space exhaustion + issue documented on `lfm25_8b_a1b`; re-downloaded and re-verified + complete and correct after fixing that) +- **Architecture**: `arch = plamo` per GGUF metadata, 323 tensors. + +## Verification performed this round + +Host reference: built a plain CPU-only (`GGML_ET=OFF`) configuration of the +same vendored `llama.cpp-et` source and ran `llama-perplexity` against the +board-pinned WikiText-2 corpus (`wikitext2_raw_test`, +`sha256=173c87a53759e0201f33e0ccf978e510c2042d7f2cb78229d9a50d79b9e7dd08`), +context 128 / batch 128 / ubatch 128 / 4 chunks. The model loads and runs +cleanly: + +``` +Final estimate: PPL = 31.5102 +/- 6.73369 +``` + +## Why this port likely needs no new ET-SoC1 kernel work + +`LLM_ARCH_PLAMO`'s graph builder is a standard pre-norm transformer +(RMSNorm, RoPE, standard MHA, SwiGLU FFN) -- unlike `plamo2`'s Mamba-hybrid +recurrent mechanism (which needs `GGML_OP_CPY`, unsupported on this ET +backend), this generation uses only ops already proven elsewhere on this +board. + +## Open items for maintainer review + +- Registered in `artifacts.json`, `ported_models/llama_cpp_et/benchmarks/plamo_13b.json`, + and `.github/ci/benchmark_config.json` (port 18145) -- board-testable + now, independent of the model-ports track claim below. +- `ported_models/submissions/model_ports/plamo_13b.json` is the + model-ports track claim, pending identity approval. +- No changes to any protected file or the vendored submodule. diff --git a/ported_models/plamo_13b/oracle/perplexity_oracle.json b/ported_models/plamo_13b/oracle/perplexity_oracle.json new file mode 100644 index 00000000..24e8a4fd --- /dev/null +++ b/ported_models/plamo_13b/oracle/perplexity_oracle.json @@ -0,0 +1,25 @@ +{ + "oracle_type": "perplexity_threshold", + "model_artifact": { + "repo": "RichardErkhov/pfnet_-_plamo-13b-gguf", + "revision": "df2fc33e398b494f221aae174e0f5a2d376733f1", + "filename": "plamo-13b.Q8_0.gguf", + "sha256": "7f3f26fd8eb337e82f4e1a5916eccf2b96a7d0e2bd20af71b4c52946c327c66f" + }, + "corpus": { + "artifact": "wikitext2_raw_test", + "sha256": "173c87a53759e0201f33e0ccf978e510c2042d7f2cb78229d9a50d79b9e7dd08" + }, + "command": "llama-perplexity --model plamo-13b.Q8_0.gguf -f wiki.test.raw -c 128 -b 128 -ub 128 --chunks 4", + "reference_run": { + "final_ppl": 31.5102, + "final_ppl_stderr": 6.73369, + "measured_on": "CPU (ggml-cpu backend, GGML_ET=OFF build)", + "measured_date": "2026-07-25" + }, + "comparison_threshold": { + "metric": "final_ppl", + "max_relative_deviation": 0.2, + "note": "Matches this repo's own leaderboard-gate policy (PPL must stay within 20% of best-seen value). A full-offload ET-SoC1 re-run against this exact command/corpus/artifact should land at final_ppl within [25.21, 37.81] to be considered consistent with this reference run. Maintainer manual ET-SoC1 review already reported this model passing; this oracle formalizes that verification for reproducibility." + } +} diff --git a/ported_models/submissions/model_ports/ling_mini_2.json b/ported_models/submissions/model_ports/ling_mini_2.json new file mode 100644 index 00000000..1e312659 --- /dev/null +++ b/ported_models/submissions/model_ports/ling_mini_2.json @@ -0,0 +1,16 @@ +{ + "schema_version": 1, + "track": "most_models_ported", + "benchmark_model": "ling_mini_2", + "identity_id": "bailingmoe2", + "source": { + "repo": "inclusionAI/Ling-mini-2.0", + "revision": "920c3fd9916e3d5e543fc4f609e827cad8a32983", + "license": "mit" + }, + "implementation_paths": [ + "ported_models/ling_mini_2" + ], + "benchmark_config": "ported_models/llama_cpp_et/benchmarks/ling_mini_2.json", + "recipe": "ported_models/ling_mini_2/docs/RECIPE.md" +} diff --git a/ported_models/submissions/model_ports/plamo_13b.json b/ported_models/submissions/model_ports/plamo_13b.json new file mode 100644 index 00000000..e76662dd --- /dev/null +++ b/ported_models/submissions/model_ports/plamo_13b.json @@ -0,0 +1,16 @@ +{ + "schema_version": 1, + "track": "most_models_ported", + "benchmark_model": "plamo_13b", + "identity_id": "plamo", + "source": { + "repo": "pfnet/plamo-13b", + "revision": "88237e8483cdf6672faf3144f76f73f89b96d30c", + "license": "apache-2.0" + }, + "implementation_paths": [ + "ported_models/plamo_13b" + ], + "benchmark_config": "ported_models/llama_cpp_et/benchmarks/plamo_13b.json", + "recipe": "ported_models/plamo_13b/docs/RECIPE.md" +}