Pre-Compiled Pipeline Shards for Distributed LLM Inference on Intel AI PC Fleets
Organizations: Not Community Labs Inc. · Intel Corporation
Abstract
Modern Intel AI PCs ship capable integrated GPUs and NPUs with 16+ GB of unified memory, and they spend considerable time idle. That is not enough memory to fit a large model such as a 70B-parameter LLM. We show that a handful of AIPCs, working together over an ordinary network, can serve models beyond the capability of any single one. We use pipeline parallelism: a model is split by layer into per-stage shards, each pre-compiled into an OpenVINO graph, so that every machine runs one shard and passes activations to the next. Three techniques make this fast enough to be useful. First, we recover the speed of the unsplit model: a naive per-stage export runs well below monolithic inference because it misses an OpenVINO GPU optimization, and injecting a beam_idx Gather into each shard triggers that optimization (the IndirectKVCache fusion) and brings the shards to parity. Second, we leverage speculative decoding on stateful OpenVINO models. Third, the pipeline serves several users at once by interleaving their requests across the stages, each request carrying its own cache (micro-batching). Together, a two-node Llama 3.1 8B INT4 pipeline serves two concurrent users at 1.79x the single-user throughput of the unsplit model on the same hardware, and the gap widens under simulated wide-area latency. The same design scales to a 70B model that no single fleet member can hold: a four-node deployment of Lunar Lake AI PCs on Intel Tiber Cloud serves a single user at interactive speed, with output token-for-token identical to the same four-node pipeline decoding without speculation. Code, raw benchmark logs, and reproduction scripts ship as a self-contained package at https://github.com/labscommunity/pipeline-sharded-inference-paper (in the top-level reproduction/ directory).
Figures & tables
| Contribution | (a) PP | (b) PP SD | (c) PP SD MB |
|---|---|---|---|
| 1. Shard export beam_idx fusion unlock (§ 3.2 , § 4 ) | ✓ | ✓ | ✓ |
| 2. Mask-based KV rewind (§ 5 ) | — | ✓ | ✓ |
| 3. Micro-batching composition / WAN (§ 7 , § 6 ) | (✓) | (✓) | ✓ |
| Configuration | Tok/s | Range | vs. A |
|---|---|---|---|
| A: mono openvino_genai (C++ loop) | 24.54 | 23.95–25.06 | 1.00 |
| A ′ : mono ov.compile_model (our Python loop) | 23.12 | 22.59–23.55 | 0.94 |
| B ( _beam 1-stage, our export) | 24.45 | 24.08–24.81 | 1.00 |
| B (pre- beam_idx ) | 21.26 | 20.93–21.55 | 0.87 |
| Configuration | Tok/s | vs. (24.28) |
|---|---|---|
| Mono ( , reference) | 24.28 | 1.00 |
| _beam, 1-stage | 23.93 | 0.99 |
| _beam, 2-stage (16+16) | 20.56 | 0.85 |
| _beam, 3-stage (11+11+10) | 21.56 | 0.89 |
| trim_kv variant | ms/call |
|---|---|
| np.asarray(sv.state.data) + slice + new Tensor | 49.5 |
| In-place Tensor.set_shape() | 46.6 |
| ov.Tensor allocate + np.asarray(new)[:] | 49.9 |
| Prompt category | Baseline (tok/s) | Spec (tok/s) | Speedup |
|---|---|---|---|
| short-factual | 22.60 | 29.35 | 1.30 |
| reasoning | 21.47 | 29.48 | 1.37 |
| code-completion | 22.08 | 33.10 | 1.50 |
| list-enumeration | 21.37 | 27.91 | 1.31 |
| creative | 23.51 | 26.09 | 1.11 |
| technical-expl | 23.87 | 28.52 | 1.19 |
| Target | Tok/s | vs. mono- | vs. own baseline |
|---|---|---|---|
| Mono ( ) | 24.28 | 1.00 | — |
| 3-stage _beam shard | 21.56 | 0.89 | — |
| Mono + spec | 30.21 | 1.24 | 1.24 |
| 3-stage shard + spec | 28.38 | 1.17 | 1.32 |
| Configuration | Tok/s | vs. mono- | vs. single-stream dist. |
|---|---|---|---|
| Mono single-node reference ( , Table 2 ) | 24.54 | 1.00 | — |
| 2-stage _beam, single stream ( alpha + charlie ) | 16.33 | 0.67 | 1.00 |
| + 2-stream micro-batching (§ 7 ) | 29.34 | 1.20 | 1.80 |
| + mask-based spec decode (§ 5 ) | 43.97 | 1.79 | 2.69 |
| Component | Time | % of token |
|---|---|---|
| Stage 0 compute (coordinator, alpha Panther Lake) | 20 ms | 33% |
| Stage 1 compute (worker, charlie Lunar Lake) | 22 ms | 36% |
| TCP round trip (single hop, 802.11ax) | 6 ms | 10% |
| Python activation passing + mask construction | 13 ms | 21% |
| Total | 61 ms | 16.33 tok/s |
| Compression | Payload/hop | Tok/s | Decode | Quality |
|---|---|---|---|---|
| None (FP32) | 16 KB | 13.57 | 65–68 ms | Correct |
| FP16 | 8 KB | 12.71 | 66–67 ms | Correct |
| INT8 | 4 KB | 15.10 | 63–68 ms | Corrupted |
| Hop latency (ms) | Naïve baseline | Full stack (agg) | Per-stream | Full / naïve |
|---|---|---|---|---|
| 0 (LAN) | 14.51 | 41.01 | 20.5 | 2.83 |
| 10 | 9.89 | 37.35 | 18.7 | 3.78 |
| 50 | 4.72 | 18.25 | 9.1 | 3.87 |
| 100 | 2.77 | 11.20 | 5.6 | 4.04 |
| Hop latency (ms, one-way) | Tok/s (3-stage target-only, real WAN) |
|---|---|
| 0 (LAN) | 12.53 |
| 10 | 8.18 |
| 50 | 3.28 |
| 100 | 2.01 |
| accept | LAN tok/s | LAN | 50 ms tok/s | 50 ms | 100 ms tok/s | 100 ms | |
|---|---|---|---|---|---|---|---|
| 2 | 84.2% | 28.63 | 1.33 | 10.27 | 2.15 | 6.47 | 2.33 |
| 3 | 70.7% | 26.77 | 1.24 | 11.54 | 2.42 | 7.31 | 2.64 |
| 5 | 67.1% | 30.42 | 1.41 | 14.05 | 2.94 | 9.28 | 3.34 |
| 7 | 58.9% | 30.96 | 1.44 | 15.27 | 3.20 | 10.51 | 3.79 |
| 10 | 52.5% | 28.04 | 1.30 | 16.04 | 3.36 | 11.30 | 4.07 |
| Configuration | Tok/s | vs. mono- | Optimal |
|---|---|---|---|
| 3-stage, 2-stream, K_LAN=5 | 50.55 | 2.06 | K=5 (K=3 51.60; K=10 45.34) |
| 3-stage, 3-stream, K_LAN=5 | 64.67 | 2.64 | K=5 |
| 3-stage, 2-stream, ms/hop, K=10 | 14.97 | 0.61 | K=10 wins WAN |
| Configuration | Full FP32 | Top-1 | Speedup |
|---|---|---|---|
| 3-stage 2-stream K=3, LAN ∗ | 42.42 | 47.38 | 1.12 |
| 2-node 8B, Tiber Cloud over Tailscale DERP, 2-stream K=3 | 2.80 | 22.88 | 8.17 |
| Configuration | Tok/s (agg) | Per-stream | vs. rainier LAN |
|---|---|---|---|
| Full FP32 logits | 2.80 | 1.40 | 0.06 (15.7 slower) |
| + Top-1 logits compression | 22.88 | 11.44 | 0.52 (1.9 slower) |
| Configuration | v2 | v2_beam |
|---|---|---|
| 1-stage single-node (GPU) | 13.98 0.35 | 13.31 0.39 |
| 2-stage localhost GPU GPU | 12.78 0.34 | 13.35 0.29 |
| 2-stage multi-node GPU GPU | 10.40 0.27 | — |
| 2-stage multi-node CPU GPU | 9.87 0.08 | — |
| 2-stream micro-batch (multi-node, agg) | 16.30 0.02 | — |
| Configuration | Tok/s | Per-stream | Notes |
| Target-only, 4-stage, 1-stream | 1.74 | 1.74 | no spec, no mbatch |
| Spec K=3, 1-stream | 3.86 | 3.86 | accept 76.7% |
| Spec K=5, 1-stream | 4.78 | 4.78 | accept 75.4% |
| Spec K=10, 1-stream | 5.42 | 5.42 | accept 65.3%; 1-stream peak |
| Spec K=15, 1-stream | 4.76 | 4.76 | past peak (excess drafts) |
| Spec K=10, 2-stream, LL coord ( matias-01 ) | 5.95 | 2.95 | accept 52.0% |
| Scenario | Configuration | Agg. tok/s | Per stream | vs. (a) |
|---|---|---|---|---|
| Llama 3.1 70B INT4, 4-stage Tiber Cloud over DERP-relayed WAN (Table 17 ) | ||||
| (a) PP | target-only, 1 stream | 1.74 | 1.74 | 1.00 |
| (b) PP SD | , 1 stream | 5.42 | 5.42 | 3.11 |
| (c) PP SD MB | , 2 streams, PL coord | 6.43 | 3.21 | 3.70 |
| Llama 3.1 8B INT4, 2-stage alpha charlie 802.11ax LAN (Table 7 ) | ||||
| (a) PP | target-only, 1 stream | 16.33 | 16.33 | 1.00 |
| Model | Export / year | Single-stream | 2-stream | Gain |
|---|---|---|---|---|
| Llama 3.1 8B | external-rotary v1 (2026-04) | 14.1 | 19.4 | 1.38 |
| Llama 3.1 8B | _beam (this work, OV 2026.1) | 16.33 | 29.34 | 1.80 |
| Gemma 4 E2B | external-rotary v1 (2026-04) | 8.12 | 13.51 | 1.66 |
| Slots | ms/step | ms/token | vs. 1 slot | Context/slot |
|---|---|---|---|---|
| 1 | 10.57 | 10.57 | 1.00 | 1023 |
| 4 | 25.58 | 6.40 | 1.65 | 255 |
| 8 | 27.17 | 3.40 | 3.11 | 127 |
| 16 | 28.10 | 1.76 | 6.01 | 63 |
LLM Inference
Large language model inference studies how models generate outputs efficiently, reliably, and securely across hardware and workloads.
See all 280 papers