WaveSpeedAI

Palm-Infra Review: Local LLM Inference on Apple Silicon

Palm-Infra review for developers evaluating experimental Apple Silicon inference, mobile-oriented kernels, SSD offload, and runtime maturity.

By Dora7 min read
Palm-Infra Review: Local LLM Inference on Apple Silicon

It’s Dora. I started this Palm-Infra review because the runtime sits in a very specific corner: Apple Silicon, mobile inference runtime design, quantized local LLM inference, and large MoE models that do not fit neatly into RAM. That is exactly the kind of project where marketing language gets annoying fast. I checked the public repo in September, 2026. This is a work note, not a production endorsement.

Verdict for Apple Silicon Experiments

Palm-Infra is interesting if your question is: “​How far can I push local inference on Apple Silicon before memory, kernels, or package format become the bottleneck?”

The short version: good experiment target, not a mature local engine replacement yet. The Palm-Infra README describes mollm as a small C++ LLM runtime for ARM and x86 CPUs, with experimental Apple Metal support. That word stays in the review. Experimental. The Palm-Infra Tencent connection is also straightforward. The repo is under TencentYoutuResearch and says it contains AI infra projects from the PalmAI team. I would treat it as active runtime research with usable examples, not as a packaged mobile SDK with support promises.

Good enough. With boundaries.

Review the Palm-Infra Runtime Design

Mobile-Oriented Kernels and Model Execution

The runtime design is compact. mollm converts supported Hugging Face model directories into one .mollm file. That package contains graph, weights, tokenizer, and chat template. Then the runtime executes that file directly.

That matters for reproducible experiments. Fewer loose files. Fewer “which tokenizer did I use again” moments. Having many files is not the problem. Having to babysit them is.

On Apple Silicon, the CPU path focuses on fast decode. FP16 uses NEON FP16FML kernels. Quantized paths use weight-only int8 or int4 kernels optimized for ARM dot-product instructions. The README also says w4g128 is the most tested path today, with the lowest memory use and fastest decode in mollm.

The caveat is prefill. The roadmap still names prefill performance as an optimization target, especially for W8/W4 dense-model prompt processing. For chatty local testing, decode speed feels good. For long prompts and serving-style workloads, prefill stops being background noise.

Apple Metal Support and SSD Expert Offload

Metal support is not decorative. The performance document includes CPU and Metal benchmark protocols, model rows, correctness gates, and context scaling notes. The testing format is unusually useful: Apple M5 Pro, four CPU threads, warmups, independent-process medians, and pp256 + tg64.

Still, Metal is marked experimental. I would not build a production SLA around it.

The more unusual piece is SSD offload. The SSD offload notes describe dense weights staying in RAM while routed MoE experts are fetched from SSD into a bounded cache. The cache is controlled with --ssd-cache-mb. The documented examples include Qwen3.5-122B-A10B, DeepSeek-V4-Flash, and Hy3-295B-A21B.

This is where the runtime gets genuinely useful for Apple Silicon LLM experiments. Not because it makes huge MoE models magically fast. It does not. It makes the memory experiment possible, then gives enough counters and tracing hooks to see where the pain moved.

So that is where the bottleneck was.

Evaluate One Local Inference Workflow

Supported Models, Formats, and Hardware Boundaries

The supported model set is narrow, but not random. Current docs list Qwen3 dense text models, Qwen3 MoE, Qwen3.5 dense and single-image vision paths, Tencent HY-V3 / Hy-MT2, Youtu-LLM, RWKV7, and experimental DeepSeek-V4-Flash.

The format story is also clear enough: FP16 for baseline runs, W8 for int8 weight-only quantization, W4G128 for the smallest and fastest decode path, W4G32 when quality needs smaller groups, and mixed W4 modes when sensitive tensors need W8.

There are hard limits. Some MoE paths are text-only. Qwen3.5 single-image support is experimental. Multi-image input, video input, server integration for vision, and Metal vision execution are not enabled yet.

That is fine. The docs say it. I trust tools more when they admit where they stop.

Setup Effort, Observability, and Failure Recovery

The setup is regular CMake work. Build the runtime. Build mollm-quantize for W4 conversion. Convert a Hugging Face directory. Run mollm_chat.

For API-shaped testing, the local HTTP server doc describes GET /v1/models and OpenAI-compatible POST /v1/chat/completions, including SSE streaming. That makes it easier to connect a local harness without rewriting client code.

But the server is a baseline. No authentication. No TLS. No tool calls. No logprobs. No parallel requests. No continuous batching. Requests are serialized, and the cache is a single exact-prefix cache.

I paused here. That is not a complaint. It is the difference between “good for local workflow tests” and “ready to expose behind a product.”

Observability is better than expected. There are benchmark commands, performance tables, PPL checks, deterministic comparison notes, and Perfetto trace output for SSD overlap. Failure recovery still feels like an engineer’s workspace, not an operator console.

Decide Whether the Runtime Is Ready for Your Use

Strong Fits for Reproducible Experiments

Palm-Infra fits developers who want to study local runtime behavior. Kernel work. Quantization tradeoffs. CPU versus Metal comparisons. SSD expert caching. MoE memory pressure. Reproducible Apple Silicon tests.

It also fits teams that want to separate local experiment findings from hosted inference decisions. WaveSpeed belongs in the hosted comparison layer: unified API access, managed execution, and production workflow convenience. That is a different job. No official integration implied.

Cases Better Served by a Mature Local Engine

I would not choose Palm-Infra first for a broad consumer desktop app, a stable mobile redistribution package, multi-user serving, managed observability, or long-term pinned support.

The public repo has no visible release assets or tags from the checks I ran, and the open roadmap still includes CUDA backend support, more device testing, MTP support, and quantization quality work. Some CUDA work appears active in merged PR history, but the project is still moving quickly. This conclusion has an expiration date. Models update fast.

For now, my Palm-Infra review lands here: use it when the experiment itself is the point. Do not hide its maturity level from yourself.

FAQ

Does Palm-Infra publish a coordinated security disclosure and response policy?

I could not verify a public SECURITY.md in the repo as of September 1, 2026. I would not assume coordinated disclosure timelines or response SLAs.

Can organizations obtain long-term support for pinned versions?

I could not verify a public LTS policy. Pinning a commit is possible. Supported pinned versions are a different claim.

Which telemetry leaves a device during model execution?

The docs describe local execution and a loopback HTTP server. I did not find a telemetry policy. For regulated workflows, I would test network behavior directly.

Are custom kernels covered by third-party patent grants?

The repo uses Apache License 2.0, which includes a contributor patent grant under its terms. That is not the same as a third-party patent clearance opinion for every custom kernel.

Can mobile applications legally redistribute Palm-Infra runtime binaries directly?

Apache-2.0 generally allows redistribution if license and notice obligations are met. Mobile apps still need model-license review, app-store review, and packaging review. I don’t know beyond that. Better than making something up.


Previous posts:

Share