liteinfer benchmarks

Each config is scored against the one it improves on (vs base), against the start of its lineage (vs first), and against vLLM at the same batch width (vs vLLM). Above 1.00x is better. Each row names the config it improves on; vLLM rows are references, not competitors. Bars show standing on the headline metric of each table.

model Llama-3.2-1B-InstructISL 128OSL 256prompts 50 / 200decoding greedy, forced lengthlast run 2026-09-12T09:45:14+00:00

latency · Llama-3.2-1B-Instruct · ISL=128 OSL=256

One request in flight at a time. Headline metric: ITL p50. 200 prompts, forced output length 256. Prompt set d97d71495aff.

These runs did not all use the same prompts.

configITL p50ITL p95TTFT p50TTFT p95E2E p50vs basevs firstvs vLLM
liteinfer-nocacheNo KV cache: every step re-feeds the whole sequence · reference point · removed from the codebase16.516.514.816.14,215.6——0.32x~
liteinfer-eagerKV cache via transformers DynamicCache · improves on liteinfer-nocache · removed from the codebase · which is no longer runnable, so this delta spans two engines13.713.915.716.33,521.21.20x1.20x0.38x~
liteinfer-native-eagerKV cache as plain tensors, no DynamicCache · improves on liteinfer-eager · removed from the codebase · which is no longer runnable, so this delta spans two engines13.713.914.816.13,518.51.00x1.20x0.38x~
liteinfer-pagedPaged KV cache: fixed-size blocks from a pool · improves on liteinfer-native-eager · removed from the codebase · which is no longer runnable, so this delta spans two engines15.315.319.321.13,910.70.90x1.08x0.34x~
liteinfer-eager-b4Static batching, B=4, eager cache · improves on liteinfer-eager · removed from the codebase · which is no longer runnable, so this delta spans two engines14.014.115.817.73,596.60.98x1.17x0.37x~
liteinfer-native-eager-b4Static batching, B=4, native eager cache · improves on liteinfer-native-eager · removed from the codebase · which is no longer runnable, so this delta spans two engines13.913.914.916.73,561.10.99x1.18x0.38x~
liteinfer-paged-b4Static batching, B=4, paged cache · improves on liteinfer-paged · removed from the codebase · which is no longer runnable, so this delta spans two engines15.015.019.020.93,832.21.02x1.10x0.35x~
liteinfer-continuousContinuous batching, up to 32 concurrent sequences · improves on liteinfer-paged-b4 · which is no longer runnable, so this delta spans two engines15.415.516.117.93,946.90.97x~1.07x~0.34x
liteinfer-sdpaContinuous batching, attention through PyTorch SDPA · improves on liteinfer-continuous14.414.414.416.33,675.91.07x1.15x~0.36x
liteinfer-paged-attnContinuous batching, decode attention reads the KV pool in-kernel · improves on liteinfer-sdpa13.313.414.116.03,414.51.08x1.24x~0.39x
liteinfer-graphsPaged decode replayed from a CUDA graph instead of launched per kernel · improves on liteinfer-paged-attn6.57.115.217.61,685.62.04x~2.52x~0.80x
liteinfer-splitkCaptured decode, narrow batches splitting their key loop across programs · improves on liteinfer-graphs6.56.514.916.81,677.81.00x2.53x~0.80x
vllmvLLM, one sequence at a time · reference point5.25.322.530.41,358.1———
vllm-b4vLLM, up to 4 concurrent sequences · reference point5.25.322.228.81,357.0———
vllm-continuousvLLM, up to 32 concurrent sequences · reference point5.25.222.428.71,356.5———

latency · Llama-3.2-1B-Instruct · ISL=3584 OSL=128

One request in flight at a time. Headline metric: ITL p50. 200 prompts, forced output length 128. Prompt set 73372d43d09a.

configITL p50ITL p95TTFT p50TTFT p95E2E p50vs basevs firstvs vLLM
liteinfer-paged-attnContinuous batching, decode attention reads the KV pool in-kernel · improves on liteinfer-sdpa13.413.4147.3165.81,847.0———
liteinfer-graphsPaged decode replayed from a CUDA graph instead of launched per kernel · improves on liteinfer-paged-attn7.87.8148.2167.21,139.51.71x~——
liteinfer-splitkCaptured decode, narrow batches splitting their key loop across programs · improves on liteinfer-graphs6.76.8147.9166.21,004.21.16x——

latency · Llama-3.2-1B-Instruct · ISL=15360 OSL=128

One request in flight at a time. Headline metric: ITL p50. 200 prompts, forced output length 128. Prompt set e8006e72d14e.

configITL p50ITL p95TTFT p50TTFT p95E2E p50vs basevs firstvs vLLM
liteinfer-graphs-16kCaptured decode with a 16k context budget, one program per KV head · reference point12.012.11,963.12,032.83,493.4———
liteinfer-splitk-16kSplit decode where attention is most of the step: long context, narrow batch · improves on liteinfer-graphs-16k7.57.51,962.52,033.22,912.91.61x1.61x—

throughput · Llama-3.2-1B-Instruct · ISL=128 OSL=256

Every request offered at once. Headline metric: output tok/s. 200 prompts, forced output length 256. Prompt set d97d71495aff.

configtok/sreq/swall (s)vs basevs firstvs vLLM
liteinfer-nocacheNo KV cache: every step re-feeds the whole sequence · reference point · removed from the codebase60.50.2846.7——0.32x
liteinfer-eagerKV cache via transformers DynamicCache · improves on liteinfer-nocache · removed from the codebase · which is no longer runnable, so this delta spans two engines73.40.3697.91.21x1.21x0.39x
liteinfer-native-eagerKV cache as plain tensors, no DynamicCache · improves on liteinfer-eager · removed from the codebase · which is no longer runnable, so this delta spans two engines72.70.3704.60.99x1.20x0.39x
liteinfer-pagedPaged KV cache: fixed-size blocks from a pool · improves on liteinfer-native-eager · removed from the codebase · which is no longer runnable, so this delta spans two engines66.80.3766.70.92x1.10x0.35x
liteinfer-eager-b4Static batching, B=4, eager cache · improves on liteinfer-eager · removed from the codebase · which is no longer runnable, so this delta spans two engines281.61.1181.83.84x4.66x0.39x
liteinfer-native-eager-b4Static batching, B=4, native eager cache · improves on liteinfer-native-eager · removed from the codebase · which is no longer runnable, so this delta spans two engines277.61.1184.43.82x4.59x0.38x
liteinfer-paged-b4Static batching, B=4, paged cache · improves on liteinfer-paged · removed from the codebase · which is no longer runnable, so this delta spans two engines252.91.0202.43.79x4.18x0.35x
liteinfer-continuousContinuous batching, up to 32 concurrent sequences · improves on liteinfer-paged-b4 · which is no longer runnable, so this delta spans two engines1,688.76.630.36.68x~27.93x~0.38x
liteinfer-sdpaContinuous batching, attention through PyTorch SDPA · improves on liteinfer-continuous1,804.67.028.41.07x29.84x~0.41x
liteinfer-paged-attnContinuous batching, decode attention reads the KV pool in-kernel · improves on liteinfer-sdpa1,997.17.825.61.11x33.03x~0.45x
liteinfer-graphsPaged decode replayed from a CUDA graph instead of launched per kernel · improves on liteinfer-paged-attn3,374.313.215.21.69x55.80x~0.77x
liteinfer-graphs-b128Captured decode at 128 concurrent sequences · reference point8,060.431.56.4——0.74x
liteinfer-packedPrefill as one flat token run; measure it on a mixed-length dataset · improves on liteinfer-graphs-mixed3,367.313.215.21.00x1.00x0.77x
liteinfer-graphs-mixedCaptured decode with a padded prefill, at a mixed dataset's context budget · reference point3,371.213.215.2——0.77x
vllmvLLM, one sequence at a time · reference point188.20.7272.1———
vllm-b4vLLM, up to 4 concurrent sequences · reference point721.42.871.0———
vllm-continuousvLLM, up to 32 concurrent sequences · reference point4,396.717.211.6———
vllm-b128vLLM, up to 128 concurrent sequences · reference point10,958.542.84.7———

throughput · Llama-3.2-1B-Instruct · ISL=128 OSL=1024

Every request offered at once. Headline metric: output tok/s. 200 prompts, forced output length 1024. Prompt set d97d71495aff.

configtok/sreq/swall (s)vs basevs firstvs vLLM
liteinfer-continuousContinuous batching, up to 32 concurrent sequences · improves on liteinfer-paged-b4 · which is no longer runnable, so this delta spans two engines1,240.71.2165.1——0.30x
liteinfer-sdpaContinuous batching, attention through PyTorch SDPA · improves on liteinfer-continuous1,265.01.2161.91.02x—0.30x
liteinfer-paged-attnContinuous batching, decode attention reads the KV pool in-kernel · improves on liteinfer-sdpa2,018.02.0101.51.60x—0.48x
liteinfer-graphsPaged decode replayed from a CUDA graph instead of launched per kernel · improves on liteinfer-paged-attn3,216.23.163.71.59x—0.77x
vllm-continuousvLLM, up to 32 concurrent sequences · reference point4,199.04.148.8———

throughput · Llama-3.2-1B-Instruct · ISL=1024 OSL=256

Every request offered at once. Headline metric: output tok/s. 200 prompts, forced output length 256. Prompt set 3cde2ae99bfc.

configtok/sreq/swall (s)vs basevs firstvs vLLM
liteinfer-continuousContinuous batching, up to 32 concurrent sequences · improves on liteinfer-paged-b4 · which is no longer runnable, so this delta spans two engines720.92.871.0——0.25x
liteinfer-sdpaContinuous batching, attention through PyTorch SDPA · improves on liteinfer-continuous806.43.163.51.12x—0.28x
liteinfer-paged-attnContinuous batching, decode attention reads the KV pool in-kernel · improves on liteinfer-sdpa1,631.96.431.42.02x—0.57x
liteinfer-graphsPaged decode replayed from a CUDA graph instead of launched per kernel · improves on liteinfer-paged-attn2,162.38.423.71.33x—0.76x
vllm-continuousvLLM, up to 32 concurrent sequences · reference point2,846.611.118.0———

throughput · Llama-3.2-1B-Instruct · ISL=1024 OSL=1024

Every request offered at once. Headline metric: output tok/s. 200 prompts, forced output length 1024. Prompt set 3cde2ae99bfc.

configtok/sreq/swall (s)vs basevs firstvs vLLM
liteinfer-continuousContinuous batching, up to 32 concurrent sequences · improves on liteinfer-paged-b4 · which is no longer runnable, so this delta spans two engines675.10.7303.3——0.21x
liteinfer-sdpaContinuous batching, attention through PyTorch SDPA · improves on liteinfer-continuous700.90.7292.21.04x—0.22x
liteinfer-paged-attnContinuous batching, decode attention reads the KV pool in-kernel · improves on liteinfer-sdpa1,912.81.9107.12.73x—0.59x
liteinfer-graphsPaged decode replayed from a CUDA graph instead of launched per kernel · improves on liteinfer-paged-attn2,534.62.580.81.33x—0.78x
vllm-continuousvLLM, up to 32 concurrent sequences · reference point3,242.63.263.2———

throughput · Llama-3.2-1B-Instruct · ISL=2048 OSL=128

Every request offered at once. Headline metric: output tok/s. 200 prompts, forced output length 128. Prompt set f687e68f2bdf.

configtok/sreq/swall (s)vs basevs firstvs vLLM
liteinfer-sdpaContinuous batching, attention through PyTorch SDPA · improves on liteinfer-continuous419.53.361.0———
liteinfer-paged-attnContinuous batching, decode attention reads the KV pool in-kernel · improves on liteinfer-sdpa908.37.128.22.17x——
liteinfer-graphsPaged decode replayed from a CUDA graph instead of launched per kernel · improves on liteinfer-paged-attn1,000.17.825.61.10x——

throughput · Llama-3.2-1B-Instruct · ISL=mixed, up to 2048 OSL=16

Every request offered at once. Headline metric: output tok/s. 200 prompts, forced output length 16. Prompt set d3de8f4e6ec9.

configtok/sreq/swall (s)vs basevs firstvs vLLM
liteinfer-packedPrefill as one flat token run; measure it on a mixed-length dataset · improves on liteinfer-graphs-mixed2,422.2151.41.34.80x4.80x—
liteinfer-graphs-mixedCaptured decode with a padded prefill, at a mixed dataset's context budget · reference point504.531.56.3———

throughput · Llama-3.2-1B-Instruct · ISL=mixed, up to 2048 OSL=128

Every request offered at once. Headline metric: output tok/s. 200 prompts, forced output length 128. Prompt set d3de8f4e6ec9.

configtok/sreq/swall (s)vs basevs firstvs vLLM
liteinfer-packedPrefill as one flat token run; measure it on a mixed-length dataset · improves on liteinfer-graphs-mixed3,336.526.17.71.66x1.66x—
liteinfer-graphs-mixedCaptured decode with a padded prefill, at a mixed dataset's context budget · reference point2,009.215.712.7———

throughput across shapes

tok/s at each ISL / OSL. A ratio measured at one shape is a claim about that shape only.

config128 / 256128 / 10241024 / 2561024 / 10242048 / 128mix2048 / 16mix2048 / 128
liteinfer-nocache60.5——————
liteinfer-eager73.4——————
liteinfer-native-eager72.7——————
liteinfer-paged66.8——————
liteinfer-eager-b4281.6——————
liteinfer-native-eager-b4277.6——————
liteinfer-paged-b4252.9——————
liteinfer-continuous1,688.71,240.7720.9675.1———
liteinfer-sdpa1,804.61,265.0806.4700.9419.5——
liteinfer-paged-attn1,997.12,018.01,631.91,912.8908.3——
liteinfer-graphs3,374.33,216.22,162.32,534.61,000.1——
liteinfer-graphs-b1288,060.4——————
liteinfer-packed3,367.3————2,422.23,336.5
liteinfer-graphs-mixed3,371.2————504.52,009.2
vllm188.2——————
vllm-b4721.4——————
vllm-continuous4,396.74,199.02,846.63,242.6———
vllm-b12810,958.5——————

latency across shapes

ITL p50 at each ISL / OSL. A ratio measured at one shape is a claim about that shape only.

config128 / 2563584 / 12815360 / 128
liteinfer-nocache16.5——
liteinfer-eager13.7——
liteinfer-native-eager13.7——
liteinfer-paged15.3——
liteinfer-eager-b414.0——
liteinfer-native-eager-b413.9——
liteinfer-paged-b415.0——
liteinfer-continuous15.4——
liteinfer-sdpa14.4——
liteinfer-paged-attn13.313.4—
liteinfer-graphs6.57.8—
liteinfer-splitk6.56.7—
liteinfer-graphs-16k——12.0
liteinfer-splitk-16k——7.5
vllm5.2——
vllm-b45.2——
vllm-continuous5.2——