Skip to content
View manunicholasjacob's full-sized avatar

Block or report manunicholasjacob

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
manunicholasjacob/README.md
Manu Nicholas Jacob. Edge AI, computer architecture, LLM inference.

I measure where the bottleneck actually is, on hardware I can put an ammeter on, and I publish the data whether or not it agrees with me.

Website · ORCID · Google Scholar

Electrical and computer engineer (UMass Amherst), based in Austin. Hardware engineer at Dell by day, on enterprise AI-server platforms, GPU and PCIe subsystems, and root-cause work. The research below is my own, run on my own hardware.


Tools

llama-roofline · zenodo.21842493
Is your llama.cpp decode memory-bandwidth-bound? Measure it in one command. Prints the operating point beside every fitted bandwidth, and refuses to quote a number for silicon it has not measured. Docs: manunicholasjacob.com/llama-roofline, with an in-browser GGUF inspector.

ml-systems-lab · zenodo.21867055
One YAML config drives llama.cpp and ONNX Runtime sweeps across laptops, a Raspberry Pi over SSH, and GPUs. TTFT, throughput, and per-rail energy from the same run.

qgemv-roofline · zenodo.22164007
Twelve CUDA kernels and a Triton implementation of the batch-1 decode GEMV over ggml q8_0 and q4_0, scored against a bandwidth ceiling the harness measures on the same device rather than reads off a spec sheet. Five NVIDIA GPUs, sm_60 through sm_89.

Measurement studies

Each one ships its data, its harness, and a DOI.

The memory wall at the edge of language · zenodo.21844855
Edge LLM decode is bandwidth-bound, with one roofline fitting all seven measured configurations at R² = 0.98 on Arm and on x86, and the KV cache hits a capacity wall well before compute does.

The break-even parallel speedup · zenodo.21987261
Multithreading saves energy exactly when parallel speedup beats the power ratio. Measuring the static power floor at every operating point shows the answer turns on whether the board's idle power is charged to the inference.

Your quantization format is not free · zenodo.21938812
What a GGUF label does and does not tell you about the file: at small model sizes the label is not the bit rate, and the community-default format pays a measurable cost on every core tested.

The cold-start tax · zenodo.21844857
What a duty-cycled wake actually costs, and the eviction cliff sitting behind it.

gguf-faultscope · zenodo.22163327
What one flipped bit does to a quantized model, and where in the file it has to land before anything downstream notices.


Upstream

NVIDIA/garak · three merged
A config_root fix in goodside.RileyIsnt, an ASCII-selection guard in badchars, and a restored unreachable-error path in load_plugin. The first shipped in garak v0.16.0.

ai-dynamo/aiperf · four merged, more open
Merged: #1340, a CLI test that asserted across a Rich line wrap; #1350, which probes the NVML energy counter once instead of failing silently; #1320, which makes crick optional so pip install aiperf needs no C toolchain on aarch64; and #1470, which keeps log lines a Windows console cannot encode. Open: a host-telemetry collector category with a RAPL backend, because a CPU-only run currently reports no energy at all, and several fixes for defects found by building against the code rather than reading it.

Arm Learning Paths: one merged
#3848, a Learning Path on measuring whether LLM decode is memory-bound on an Arm CPU: the board's read ceiling, a llama.cpp sweep over model sizes and thread counts, and a llama-roofline diagnosis, with every output block taken from one Raspberry Pi 5 capture run. Merged 12 October 2026; not yet live on learn.arm.com.

ggml-org/llama.cpp and vllm-project/vllm · issues
Measurement-backed bug reports, including an effective-bandwidth characterisation of Arm decode. Engineers with different hardware have reproduced several of them in-thread, on a 5090 and on server parts.

Journal of Open Source Software · reviewer
Reviewing submissions, which so far has meant finding a sign error in a published MALA sampler and six merged fixes to the package under review. One reviewed paper is published: doi:10.21105/joss.11187.

ATC '26 Artifact Evaluation Committee · member
Two artifact reviews delivered, on 27 September and 2 October 2026.

Pinned Loading

  1. edge-sbc-reliability-lab edge-sbc-reliability-lab Public

    Research-grade benchmarking & reliability framework for AI inference on Raspberry Pi 5: multi-runtime (ONNX Runtime/TFLite/PyTorch), thermal-drift and sustained-workload testing with reproducible o…

    Python

  2. edge-thermal-margin-control edge-thermal-margin-control Public

    When thermal-margin control helps and when it hurts: a matched-baseline study of convex allocation for multi-tenant edge inference on Raspberry Pi 5. Desk-rejected by IEEE TSUSC on scope (10 Oct 20…

    Python

  3. latency-elastic-edge-inference latency-elastic-edge-inference Public

    Reactive vs PI-SLO vs MPC-Lite runtime controllers (batch size and threads) for INT8 MobileNetV3-Small and ResNet-18 inference on Raspberry Pi 5: per-run latency tables and figures. Manuscript not …

    TeX

  4. pi5-thermal-proxy pi5-thermal-proxy Public

    Software-only thermal proxy for edge AI inference on Raspberry Pi 5: a cross-validated CPU-temperature coupling law + open 13-hour telemetry dataset (under review at IEEE ESL)

    Python

  5. ml-systems-lab ml-systems-lab Public

    Reproducible ML inference benchmarking across heterogeneous hardware: one YAML config drives llama.cpp and ONNX Runtime sweeps on laptops, Raspberry Pi (SSH) and GPUs, with TTFT, throughput, per-ra…

    Python

  6. qgemv-roofline qgemv-roofline Public

    A quantized GEMV kernel ladder measured against its own bandwidth roof. 12 CUDA kernels plus Triton for batch-1 LLM decode over ggml q8_0/q4_0, measured on 5 NVIDIA GPUs from sm_60 to sm_89.

    Jupyter Notebook