Internship study

Same GPU, three engines.

Software intern at Voxomos Systems, June to July 2026. I served one small model on vLLM, SGLang and TensorRT-LLM on a 6 GB laptop GPU to find what actually limits LLM serving, then wrote the GPU kernels behind vector search.

  • Decode floor

    13.7 ms

    per token at no load; vLLM and SGLang hit 15.1. The GPU sets the floor, not the engine.

  • Admission control

    1.2 s

    to first token with 32 requests in flight, against 25–76 s uncapped.

  • Prefix caching

    2.8×

    more vLLM requests per second when prompts share a 500-token prefix.

  • Energy per token

    44×

    TensorRT-LLM tokens per watt at batch 768 against batch 1.

Setup

GPU
RTX 3050 Laptop, 6 GB (5.67 GB usable)
Model
TinyLlama-1.1B-Chat, bf16
Parallelism
One GPU, no tensor or pipeline split
Load tools
vllm bench serve, sglang.bench_serving, trtllm-bench
Workloads
ShareGPT, shared-prefix and fixed-length prompts

LLM serving

How each engine behaved.

Each engine ran under its own load tool and workloads, so read these as how each one behaves under pressure, not as a head-to-head ranking.

vLLM

vllm bench serve

Throughput kept climbing as the arrival rate rose to 32 req/s, while time to first token stayed under 80 ms. Its best run came from automatic prefix caching, on prompts that shared a 500-token prefix.

WorkloadArrivalRequestsReq/sOutput tok/sMean TTFTMean TPOT
ShareGPTAll at once1007.476592,248 ms85.3 ms
ShareGPT1 req/s1,0001.009471 ms15.1 ms
ShareGPT4 req/s2503.4234849 ms15.5 ms
ShareGPT8 req/s2505.7358555 ms16.9 ms
ShareGPT32 req/s25011.021,11280 ms23.7 ms
Shared 500-token prefixAll at once10020.802,541865 ms31.5 ms

SGLang

sglang.bench_serving

With no cap on in-flight requests, throughput flattened near 1.4 req/s while the queue grew, and time to first token reached minutes. Capping it at 32 requests kept similar traffic at about a second.

WorkloadArrivalRequestsIn-flight capReq/sOutput tok/sMean TTFTMean TPOT
Mixed promptsAll at once100None0.31161156.8 s31.1 ms
Shared prefix, 1 groupAll at once100None1.5740328.3 s24.8 ms
Shared prefix, 10 groups20 req/s1,000None0.80204591.1 s167.1 ms
ShareGPT1 req/s1,000320.992231.24 s15.1 ms
ShareGPT2 req/s250None1.3633425.2 s19.1 ms
ShareGPT8 req/s250None1.4134565.7 s23.0 ms
ShareGPT32 req/s250None1.4335075.7 s24.7 ms

TensorRT-LLM

trtllm-bench

Its offline bench sizes the batch to whatever fits in KV-cache memory: 768 short requests or 160 long ones. Batch size drove both throughput and tokens per watt. At batch 1 it gave the cleanest latency: 142 ms to first token and 13.7 ms per token.

WorkloadBatchTokens in / outReq/sOutput tok/sGPU powerTok/s per watt
Short sequences, auto batch768128 / 12823.973,068134.7 W22.8
Long sequences, auto batch1601,024 / 2564.391,12574.9 W15.0
Batch capped, 70% KV memory321,024 / 2563.31849139.1 W6.1
Latency mode11,024 / 2560.2871136.3 W0.5

Takeaways

What the numbers say.

Five things I'd tell anyone serving models on a small GPU.

  • Decode speed is set by the GPU.

    At no load, all three engines landed between 13.7 and 15.1 ms per token. The engine decides how gracefully a system degrades, not how fast it can go.

  • Reused prefixes are the cheapest throughput.

    vLLM's automatic prefix caching and SGLang's RadixAttention both posted their best numbers when prompts shared a long prefix.

  • Batch size is bounded by KV-cache memory.

    TensorRT-LLM's throughput tracked the batch it could fit, and the same knob moved tokens per watt by 44×.

  • Cap what's in flight.

    Uncapped, SGLang accepted more work than the GPU could serve and requests waited minutes for a first token. A cap of 32 held it near a second.

  • On 6 GB, memory is the bottleneck.

    Every lever that mattered, from batch size to cache fraction to prefix hits, was a way of rationing the same KV-cache memory.

Reading

Also studied.

Topics I went deep on alongside the benchmarks.

  • FlashAttention v1–v3
  • FlashInfer
  • PagedAttention and KV-cache sizing
  • Continuous batching
  • Chunked prefill
  • Speculative decoding (EAGLE-3)
  • Prompt caching
  • Model routing
  • LLM observability
  • Serverless cold starts
  • Cache-aware routing
  • DeepSeek-V3 MoE and DualPipe
  • NCCL and RCCL
  • ROCm
  • SYCL and oneAPI
  • Roofline model

Hiring for backend, forward-deployed or GPU work? Let’s talk.

saxena.shikhar1808@gmail.com