diff --git a/.github/ci/benchmark_config.json b/.github/ci/benchmark_config.json index 43f8895d..48285191 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,9 @@ }, "smolvlm_500m": { "config": "ported_models/llama_cpp_et/benchmarks/smolvlm_500m.json" + }, + "falcon_h1_1_5b": { + "config": "ported_models/llama_cpp_et/benchmarks/falcon_h1_1_5b.json" } } } diff --git a/ported_models/falcon_h1_1_5b/docs/RECIPE.md b/ported_models/falcon_h1_1_5b/docs/RECIPE.md new file mode 100644 index 00000000..05dcefcd --- /dev/null +++ b/ported_models/falcon_h1_1_5b/docs/RECIPE.md @@ -0,0 +1,66 @@ +# Falcon-H1-1.5B-Instruct Porting Recipe + +## Overview + +Adds `tiiuae/Falcon-H1-1.5B-Instruct` (1.5B-parameter causal LM, TII's +newer hybrid attention+SSM architecture) to the `llama.cpp-et` framework. +Confirmed via local GGUF metadata inspection: `general.architecture = +falcon-h1` -- distinct from `falcon` (already ported earlier in this +campaign), a genuinely different architecture, not just a size variant: +Falcon-H1 interleaves standard attention layers with Mamba-style recurrent +layers in the same model (hybrid, not pure transformer or pure SSM). + +## Model Reference + +- **Source**: `tiiuae/Falcon-H1-1.5B-Instruct` (Hugging Face), revision + `80ebc50d7799a440b96c93bb6686a3924a09b0cb` +- **License**: Falcon LLM License (`falcon-llm-license`, + https://falconllm.tii.ae/falcon-terms-and-conditions.html) -- a custom + TII license, not a standard OSI license; same family as falcon7b's + license in this campaign but a distinct license id +- **GGUF source**: `tiiuae/Falcon-H1-1.5B-Instruct-GGUF` (official), file + `Falcon-H1-1.5B-Instruct-Q8_0.gguf` +- **Quantization**: Q8_0, + `sha256=0044322ad5aaea5ccc2264f83f430f4ab2d20acc6db71a12d79b3f5acb0f69d5` + (verified locally against the downloaded file) +- **Architecture**: `arch = falcon-h1` per GGUF metadata, 411 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 standard transformer KV cache (`llama_kv_cache`, +256 cells / 24 layers) **and** a recurrent SSM state cache +(`llama_memory_recurrent`, 1 cell / 24 layers) simultaneously -- direct +confirmation this is a genuine hybrid, not mislabeled: + +``` +Final estimate: PPL = 11.6708 +/- 2.60807 +``` + +This is the second SSM-adjacent model in this campaign (after +`mamba_1_4b`) to confirm `SSM_CONV`/`SSM_SCAN` work on `ggml-cpu`, and the +first to combine them with standard attention in one graph. + +## Why this port's ET-SoC1 kernel support is a real, open question + +Same caveat as `mamba_1_4b`: CPU-backend success does not prove the +ET-SoC1 backend supports `SSM_CONV`/`SSM_SCAN`. This is a second, mostly +independent data point on the same open question (different model, same +underlying ops) -- if either mamba_1_4b or this port ever gets a real +board run, it directly answers whether ET-SoC1 can run recurrent-state +architectures at all. + +## Open items for maintainer review + +- Registered in `artifacts.json`, `ported_models/llama_cpp_et/benchmarks/falcon_h1_1_5b.json`, + and `.github/ci/benchmark_config.json` (port 18141) -- board-testable now, + independent of the model-ports track claim below. +- `ported_models/submissions/model_ports/falcon_h1_1_5b.json` is the + model-ports track claim, pending identity approval. +- No changes to any protected file or the vendored submodule. +- SSM ops (`SSM_CONV`/`SSM_SCAN`) confirmed on CPU, NOT live-verified + against ET sysemu specifically. diff --git a/ported_models/falcon_h1_1_5b/oracle/perplexity_oracle.json b/ported_models/falcon_h1_1_5b/oracle/perplexity_oracle.json new file mode 100644 index 00000000..6f5264e1 --- /dev/null +++ b/ported_models/falcon_h1_1_5b/oracle/perplexity_oracle.json @@ -0,0 +1,25 @@ +{ + "oracle_type": "perplexity_threshold", + "model_artifact": { + "repo": "tiiuae/Falcon-H1-1.5B-Instruct-GGUF", + "revision": "main", + "filename": "Falcon-H1-1.5B-Instruct-Q8_0.gguf", + "sha256": "0044322ad5aaea5ccc2264f83f430f4ab2d20acc6db71a12d79b3f5acb0f69d5" + }, + "corpus": { + "artifact": "wikitext2_raw_test", + "sha256": "173c87a53759e0201f33e0ccf978e510c2042d7f2cb78229d9a50d79b9e7dd08" + }, + "command": "llama-perplexity --model Falcon-H1-1.5B-Instruct-Q8_0.gguf -f wiki.test.raw -c 128 -b 128 -ub 128 --chunks 4", + "reference_run": { + "final_ppl": 11.6708, + "final_ppl_stderr": 2.60807, + "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 [9.34, 14.00] to be considered consistent with this reference run. No ET-SoC1 hardware was available to this session to perform that re-run directly." + } +} diff --git a/ported_models/llama_cpp_et/artifacts.json b/ported_models/llama_cpp_et/artifacts.json index 9c419ae1..f9236886 100644 --- a/ported_models/llama_cpp_et/artifacts.json +++ b/ported_models/llama_cpp_et/artifacts.json @@ -485,6 +485,23 @@ "sha256": "d1eb8b6b23979205fdf63703ed10f788131a3f812c7b1f72e0119d5d81295150", "size_bytes": 108783360, "note": "SmolVLM 500M vision projector (SigLIP ~93M + MLP). Q8_0 quantized. Must be loaded alongside smolvlm_500m_q8_gguf." + }, + "falcon_h1_1_5b_q8_gguf": { + "kind": "model", + "framework": "llama.cpp-et", + "variant": "Falcon-H1-1.5B-Instruct-Q8_0", + "filename": "Falcon-H1-1.5B-Instruct-Q8_0.gguf", + "env": "FALCON_H1_1_5B_MODEL_PATH", + "source": { + "type": "huggingface", + "repo": "tiiuae/Falcon-H1-1.5B-Instruct-GGUF", + "revision": "main", + "filename": "Falcon-H1-1.5B-Instruct-Q8_0.gguf", + "url": "https://huggingface.co/tiiuae/Falcon-H1-1.5B-Instruct-GGUF/resolve/main/Falcon-H1-1.5B-Instruct-Q8_0.gguf" + }, + "sha256": "0044322ad5aaea5ccc2264f83f430f4ab2d20acc6db71a12d79b3f5acb0f69d5", + "local_cache": "local-artifacts/models/Falcon-H1-1.5B-Instruct-Q8_0.gguf", + "board_path": "/data/models/Falcon-H1-1.5B-Instruct-Q8_0.gguf" } } } diff --git a/ported_models/llama_cpp_et/benchmarks/falcon_h1_1_5b.json b/ported_models/llama_cpp_et/benchmarks/falcon_h1_1_5b.json new file mode 100644 index 00000000..2a025584 --- /dev/null +++ b/ported_models/llama_cpp_et/benchmarks/falcon_h1_1_5b.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": "Falcon-H1-1.5B-Instruct-Q8_0", + "score": { + "metric": "tokens_per_second", + "label": "Decode tokens/s", + "higher_is_better": true + }, + "llama_server": { + "source_artifact": "llama_cpp_source", + "model_artifact": "falcon_h1_1_5b_q8_gguf", + "server_artifact": "llama_server", + "workdir_artifact": "llama_cpp_build", + "host": "127.0.0.1", + "port": 18141, + "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/persimmon_8b/docs/RECIPE.md b/ported_models/persimmon_8b/docs/RECIPE.md new file mode 100644 index 00000000..0d12aad1 --- /dev/null +++ b/ported_models/persimmon_8b/docs/RECIPE.md @@ -0,0 +1,59 @@ +# Persimmon-8B -- Negative Result + +## Summary + +Attempted to add `adept/persimmon-8b-base` (8B-parameter causal LM, Adept's +Persimmon architecture) to the `llama.cpp-et` framework. **This repo's +vendored `llama.cpp-et` submodule has no `persimmon` architecture support +compiled in at all -- the model fails to load with `unknown model +architecture: 'persimmon'`.** No model-ports claim is filed. + +## Model Reference + +- **Source**: `adept/persimmon-8b-base` (Hugging Face), revision + `94dc4e0bb7eeb26ec521eb3f78c36c91f6fe866b` +- **License**: Apache-2.0 +- **GGUF source**: `maddes8cht/adept-persimmon-8b-base-gguf`, file + `adept-persimmon-8b-base-Q8_0.gguf` +- **Quantization**: Q8_0, 9.30 GiB, + `sha256=25eb5e4901cd45ae03c9a447bb49c7716a71a26562d1a5a3b291de232c27b0c4` + (verified locally against the downloaded file) +- GGUF metadata (read successfully -- the failure is architecture support, + not file corruption): `general.architecture = persimmon`, 580 tensors, + 36 layers, 4096 embedding, 64 attention heads (no GQA -- head_count == + head_count_kv), 16384-token context, RoPE freq_base 25000. + +## Root cause: confirmed, not speculative + +Built a plain CPU-only (`GGML_ET=OFF`) configuration of the exact vendored +`llama.cpp-et` source in this repo and tried to load the file with +`llama-perplexity`. The GGUF header parses completely (llama.cpp's own +metadata dump above proves the file itself is well-formed), but model +construction fails immediately after: + +``` +llama_model_load: error loading model: error loading model architecture: +unknown model architecture: 'persimmon' +llama_model_load_from_file_impl: failed to load model +``` + +Upstream llama.cpp has historically had Persimmon support (it was one of +the earlier non-Llama architectures added), but this repo's vendored fork +either predates that support or has since dropped it. Either way, the +architecture registry `llama_model_load()` dispatches on simply does not +contain an entry for `persimmon` in this exact vendored commit. + +## Why no claim is filed + +The failure is unambiguous and reproducible -- not a tooling gap like +`flan_t5_base` (where the model loads but the CLI can't drive it) and not +an exotic-quant-type collision like `bitnet_2b` (where the file itself +gets rejected). This is the simplest and most direct kind of negative +result: the architecture is not implemented in this vendored source at +all. + +## What would need to change + +Persimmon support would need to be added to (or restored in) this repo's +vendored `llama.cpp-et` fork -- a submodule content change, out of scope +for a model-port PR. diff --git a/ported_models/submissions/model_ports/falcon_h1_1_5b.json b/ported_models/submissions/model_ports/falcon_h1_1_5b.json new file mode 100644 index 00000000..cfa8beab --- /dev/null +++ b/ported_models/submissions/model_ports/falcon_h1_1_5b.json @@ -0,0 +1,16 @@ +{ + "schema_version": 1, + "track": "most_models_ported", + "benchmark_model": "falcon_h1_1_5b", + "identity_id": "falcon-h1", + "source": { + "repo": "tiiuae/Falcon-H1-1.5B-Instruct", + "revision": "80ebc50d7799a440b96c93bb6686a3924a09b0cb", + "license": "falcon-llm-license" + }, + "implementation_paths": [ + "ported_models/falcon_h1_1_5b" + ], + "benchmark_config": "ported_models/llama_cpp_et/benchmarks/falcon_h1_1_5b.json", + "recipe": "ported_models/falcon_h1_1_5b/docs/RECIPE.md" +}