<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Qaiser Mehdi</title>
    <description>The latest articles on DEV Community by Qaiser Mehdi (@qaisermehdi).</description>
    <link>https://dev.to/qaisermehdi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4180536%2Fee23146b-e527-4e3b-b771-18904d735a6b.png</url>
      <title>DEV Community: Qaiser Mehdi</title>
      <link>https://dev.to/qaisermehdi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/qaisermehdi"/>
    <language>en</language>
    <item>
      <title>RTX 3090 vs A100 for a 7B model on vLLM: the cheaper GPU depends on your answer time</title>
      <dc:creator>Qaiser Mehdi</dc:creator>
      <pubDate>Sun, 01 Nov 2026 07:23:30 +0000</pubDate>
      <link>https://dev.to/qaisermehdi/rtx-3090-vs-a100-for-a-7b-model-on-vllm-the-cheaper-gpu-depends-on-your-answer-time-56h2</link>
      <guid>https://dev.to/qaisermehdi/rtx-3090-vs-a100-for-a-7b-model-on-vllm-the-cheaper-gpu-depends-on-your-answer-time-56h2</guid>
      <description>&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Same model (Qwen2.5-7B-Instruct), same vLLM (0.27.1, default flags), same load: prompts of about 512 tokens, 256-token answers, 1 to 256 requests at once, 60 seconds per level. Two rented cards: an RTX 3090 at $0.259/hour and an A100 80GB PCIe at $1.017/hour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same load: the cheap card wins
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;1 at once: 3090 $1.81, A100 $3.16 per 1M output tokens&lt;/li&gt;
&lt;li&gt;4 at once: 3090 $0.49, A100 $0.80&lt;/li&gt;
&lt;li&gt;16 at once: 3090 $0.16, A100 $0.24&lt;/li&gt;
&lt;li&gt;64 at once: 3090 $0.08, A100 $0.11&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At every load we ran on both, the 3090 cost less per token. The A100 does 2.2x to 3x more tokens per second at the same load, but it costs 3.9x more per hour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same answer time: the A100 wins
&lt;/h2&gt;

&lt;p&gt;Answers don't take the same time on both cards. At 64 at once the A100 answered in 6.0 s (p50), the 3090 in 17.9 s. So compare at the answer time your users accept:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;About 3 s: only the A100 can do it. The 3090 already takes 6.3 s with one request at a time.&lt;/li&gt;
&lt;li&gt;About 6 to 7 s: 3090 at 4 at once (p50 6.8 s, p95 7.2 s) costs $0.490 per 1M. A100 at 64 at once (p50 6.0 s, p95 7.1 s) costs $0.106. The A100 is about 4.6x cheaper.&lt;/li&gt;
&lt;li&gt;About 18 s: 3090 at 64 at once and A100 at 256 at once both cost $0.082.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it means
&lt;/h2&gt;

&lt;p&gt;"Which GPU is cheapest" has no answer until you say how fast answers must be and how many requests you can keep in flight. Price per hour alone can point the wrong way when answers must be fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it was counted
&lt;/h2&gt;

&lt;p&gt;Cost = GPU price x the measured window, which runs until the last in-flight request finishes (that time is paid for too). Requests and tokens came from vLLM's own /metrics before and after each level, and a separate client-side meter counted the same things. They matched exactly at every level on both cards. 0 errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;These costs assume the GPU is busy the whole time; idle hours in a real day raise them, and only real traffic shows by how much. One run per level, two hosts on different days, synthetic prompts, two vast.ai prices. Other prices change the answer.&lt;/p&gt;

&lt;p&gt;Both reports, raw /metrics and server logs: &lt;a href="https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/planb-a100-2026-10-29" rel="noopener noreferrer"&gt;https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/planb-a100-2026-10-29&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want this for your own model and settings: send the model, your vLLM flags and typical prompt and answer length, and I'll run a short mini-report on a rented GPU for free. The full report is paid work: &lt;a href="mailto:qvunexaudit@gmail.com"&gt;qvunexaudit@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vllm</category>
      <category>llm</category>
      <category>mlops</category>
      <category>gpu</category>
    </item>
    <item>
      <title>Same RTX 3090, 22x cheaper per token: what concurrency does to vLLM cost</title>
      <dc:creator>Qaiser Mehdi</dc:creator>
      <pubDate>Wed, 28 Oct 2026 05:42:59 +0000</pubDate>
      <link>https://dev.to/qaisermehdi/same-rtx-3090-22x-cheaper-per-token-what-concurrency-does-to-vllm-cost-n3c</link>
      <guid>https://dev.to/qaisermehdi/same-rtx-3090-22x-cheaper-per-token-what-concurrency-does-to-vllm-cost-n3c</guid>
      <description>&lt;p&gt;I rented one RTX 3090 at $0.259/hour, served Qwen2.5-7B-Instruct with vLLM 0.27.1 and default flags, and kept it busy for 60 seconds at 1, 4, 16 and 64 requests at once. Each request had a prompt of about 512 tokens and a 256-token answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;1 at once: 40 output tokens/s, answer in 6.3 s, $1.81 per 1M output tokens&lt;/li&gt;
&lt;li&gt;4 at once: 147 tokens/s, 6.8 s, $0.49 per 1M&lt;/li&gt;
&lt;li&gt;16 at once: 442 tokens/s, 9.1 s, $0.16 per 1M&lt;/li&gt;
&lt;li&gt;64 at once: 878 tokens/s, 17.9 s, $0.08 per 1M&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;0 errors at every level.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it means
&lt;/h2&gt;

&lt;p&gt;The card costs the same per hour whatever you do with it. At 64 requests in flight it produced 22 times more tokens than at 1, so each token cost 22 times less. The price is waiting: each answer took about 2.9 times longer.&lt;/p&gt;

&lt;p&gt;So "how much does my GPU cost per token" has no single answer. It depends on how many requests you keep in flight, and that is a choice you make with your latency target.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the cost was counted
&lt;/h2&gt;

&lt;p&gt;Cost = GPU price x the measured window. The window runs until the last in-flight request finishes (62.8 to 71.7 s here), because that time is paid for too. Requests and tokens came from vLLM's own /metrics counters before and after each level, and a client-side meter counted the same things separately. They matched exactly at every level.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not tell you
&lt;/h2&gt;

&lt;p&gt;These costs assume the GPU is busy the whole time. A real server is not. If it serves requests 30% of the day, each request really costs about 3.3x these numbers, and only your own traffic shows that share. Also: one card, one run per level, synthetic prompts. The 1-at-once window includes a one-time kernel compile.&lt;/p&gt;

&lt;p&gt;Start-up was 122.9 s from launch to /health with the model already on disk. If you scale to zero, every wake pays that before the first answer: about $0.009 per wake at this price.&lt;/p&gt;

&lt;p&gt;Report, raw /metrics and server log: &lt;a href="https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/planb-3090-2026-10-27" rel="noopener noreferrer"&gt;https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/planb-3090-2026-10-27&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want this for your own model and settings and don't want to run anything on your servers, I rent the same GPU and run it for you, as paid work: &lt;a href="mailto:qvunexaudit@gmail.com"&gt;qvunexaudit@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vllm</category>
      <category>llm</category>
      <category>gpu</category>
      <category>mlops</category>
    </item>
    <item>
      <title>Two vLLM servers on one GPU: the startup check that bites, and the fix</title>
      <dc:creator>Qaiser Mehdi</dc:creator>
      <pubDate>Sat, 24 Oct 2026 17:27:42 +0000</pubDate>
      <link>https://dev.to/qaisermehdi/two-vllm-servers-on-one-gpu-the-startup-check-that-bites-and-the-fix-1nde</link>
      <guid>https://dev.to/qaisermehdi/two-vllm-servers-on-one-gpu-the-startup-check-that-bites-and-the-fix-1nde</guid>
      <description>&lt;p&gt;Someone asked on the vLLM tracker how to run a small embedding model next to a chat model on one GPU, so the card isn't half idle. I tested it on a rented RTX 3090 (24 GB) with vLLM 0.27.1: BAAI/bge-small-en-v1.5 for embeddings and Qwen2.5-1.5B-Instruct for chat, each in its own &lt;code&gt;vllm serve&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  It works
&lt;/h2&gt;

&lt;p&gt;Embedding server at &lt;code&gt;--gpu-memory-utilization 0.10&lt;/code&gt;, chat server at &lt;code&gt;0.70&lt;/code&gt;. Both came up and served with 0 errors. Together they used 18,317 of 24,576 MiB.&lt;/p&gt;

&lt;h2&gt;
  
  
  The startup check
&lt;/h2&gt;

&lt;p&gt;Start the chat server first at 0.9, then the embedding server at 0.10, and the second one refuses to start:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ValueError: Free memory on device cuda:0 (0.95/23.8 GiB) on startup is less than desired GPU memory utilization (0.1, 2.38 GiB).&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;At startup vLLM checks that free memory is at least your fraction of the whole card. The chat server had taken almost everything, so 0.10 (2.38 GiB) didn't fit, even though the embedding model never uses that much.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: give the small model a small number
&lt;/h2&gt;

&lt;p&gt;The embedding model has no KV cache to size. vLLM runs it as a pooling model, its log has no "Available KV cache memory" line, and it stayed at about 450 to 580 MiB whether I gave it 0.10, 0.05 or 0.03.&lt;/p&gt;

&lt;p&gt;At 0.03 (0.71 GiB) it started fine next to the 0.9 chat server: 23,110 MiB + 552 MiB on one card. With &lt;code&gt;--gpu-memory-utilization 0.03 --max-model-len 512 --max-num-seqs 32&lt;/code&gt; it used 454 MiB at the same throughput as at 0.10.&lt;/p&gt;

&lt;h2&gt;
  
  
  What sharing costs
&lt;/h2&gt;

&lt;p&gt;Each server busy alone, then both busy at the same time (30 seconds each, 0 errors):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;embeddings: 1,761 to 1,609 texts/s (-8.6%)&lt;/li&gt;
&lt;li&gt;chat: 2,607 to 2,298 output tokens/s (-11.8%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's no isolation between them, so that's the price.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leave headroom
&lt;/h2&gt;

&lt;p&gt;The chat server used more than its fraction: 17,710 MiB at 0.70, where 0.70 of the card is 17,203 MiB. Its own log says so too: 12.53 GiB of KV cache in use, 11.9 GiB to fit the request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;One card, one vLLM version, two small models, short runs, one try each. Starting both servers at the same moment worked once here, but one run isn't proof, so start them one at a time.&lt;/p&gt;

&lt;p&gt;Script and raw output: &lt;a href="https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/coloc-3090-2026-10-23" rel="noopener noreferrer"&gt;https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/coloc-3090-2026-10-23&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The thread: &lt;a href="https://github.com/vllm-project/vllm/issues/60599" rel="noopener noreferrer"&gt;https://github.com/vllm-project/vllm/issues/60599&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you run vLLM on your own GPUs and want to see how much of the paid time serves nothing, there's a 2-minute guide here: &lt;a href="https://github.com/qaisermehdi3-coder/qvunex/blob/main/TRY-IT.md" rel="noopener noreferrer"&gt;https://github.com/qaisermehdi3-coder/qvunex/blob/main/TRY-IT.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want it measured on your setup, I take it on as paid work: &lt;a href="mailto:qvunexaudit@gmail.com"&gt;qvunexaudit@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vllm</category>
      <category>llm</category>
      <category>gpu</category>
      <category>mlops</category>
    </item>
    <item>
      <title>A 3090 vs an L40S: 1.09x at batch 1, 0.46x at batch 128</title>
      <dc:creator>Qaiser Mehdi</dc:creator>
      <pubDate>Sun, 18 Oct 2026 13:01:09 +0000</pubDate>
      <link>https://dev.to/qaisermehdi/a-3090-vs-an-l40s-109x-at-batch-1-046x-at-batch-128-5ak5</link>
      <guid>https://dev.to/qaisermehdi/a-3090-vs-an-l40s-109x-at-batch-1-046x-at-batch-128-5ak5</guid>
      <description>&lt;p&gt;People ask "is a 3090 as fast as an L40S?" and want one number. I measured both on my own rented machines, same script, and there is no one number. It depends on how many requests you run at once.&lt;br&gt;
Setup: vLLM 0.27.1, Qwen2.5 1.5B and 7B (plain and AWQ), 128 output tokens per request, CUDA graphs on, batch 1, 8, 32 and 128, 3 repeats each, median used. RTX 3090 on vast.ai (Netherlands, 24 of 48 vCPUs). L40S on vast.ai (Romania, 8 of 64 vCPUs). The three repeats of each setting landed within 0.5% of each other on the 3090 and within 2.6% on the L40S (worst case), so these are not noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speed: 3090 as a multiple of the L40S
&lt;/h2&gt;

&lt;p&gt;7B fp16:&lt;br&gt;
batch 1 - 1.03x&lt;br&gt;
batch 8 - 1.04x&lt;br&gt;
batch 32 - 1.11x&lt;br&gt;
batch 128 - 0.72x&lt;br&gt;
7B AWQ:&lt;br&gt;
batch 1 - 1.09x&lt;br&gt;
batch 8 - 1.01x&lt;br&gt;
batch 32 - 0.71x&lt;br&gt;
batch 128 - 0.46x&lt;br&gt;
1.5B fp16:&lt;br&gt;
batch 1 - 1.09x&lt;br&gt;
batch 128 - 0.70x&lt;br&gt;
At small batches the two cards are about even. That is roughly what memory bandwidth says (936 vs 864 GB/s). At batch 128 the L40S pulls far ahead, because the work stops being about memory and starts being about compute, and the L40S has much more of it.&lt;br&gt;
So "the 3090 is 1.08x an L40S" is true at batch 1 and wrong at batch 128.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost per million output tokens
&lt;/h2&gt;

&lt;p&gt;At the prices I actually paid ($0.414/h for the 3090, $0.826/h for the L40S), counting only time the GPU was busy:&lt;br&gt;
7B fp16:&lt;br&gt;
batch 1 - 3090 $2.22, L40S $4.59&lt;br&gt;
batch 128 - 3090 $0.041, L40S $0.059&lt;br&gt;
7B AWQ:&lt;br&gt;
batch 1 - 3090 $0.77, L40S $1.67&lt;br&gt;
batch 128 - 3090 $0.040, L40S $0.036&lt;br&gt;
At low batch the 3090 is about half the cost per token. At batch 128 the gap closes, and for 7B AWQ the L40S is already cheaper. Which card is cheaper depends on your traffic, not on the card.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two things this does not tell you
&lt;/h2&gt;

&lt;p&gt;One card is one card. A different 3090 I measured earlier was clearly slower on every setting, with the same script and driver. If you are choosing hardware, measure two units, not one.&lt;br&gt;
And every cost above assumes the GPU is busy. A real server is not. If it serves requests 30% of the time, the real cost per token is about 3.3x these numbers. That idle share can be the biggest number in the bill, and many dashboards don't show it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The data
&lt;/h2&gt;

&lt;p&gt;All 192 runs, the exact script, and the machine details are public:&lt;br&gt;
&lt;a href="https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/3090-own" rel="noopener noreferrer"&gt;https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/3090-own&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/l40s-own" rel="noopener noreferrer"&gt;https://github.com/qaisermehdi3-coder/qvunex/tree/main/benchmarks/data/l40s-own&lt;/a&gt;&lt;br&gt;
If you run vLLM and want to see your own idle share, there is a 2-minute guide here (one file, reads only /metrics):&lt;br&gt;
&lt;a href="https://github.com/qaisermehdi3-coder/qvunex/blob/main/TRY-IT.md" rel="noopener noreferrer"&gt;https://github.com/qaisermehdi3-coder/qvunex/blob/main/TRY-IT.md&lt;/a&gt;&lt;br&gt;
If you want this measured on your own setup, I take it on as paid work: &lt;a href="mailto:qvunexaudit@gmail.com"&gt;qvunexaudit@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>gpu</category>
      <category>vllm</category>
      <category>benchmark</category>
    </item>
    <item>
      <title>The same H100 hour cost $1.26 or $0.22 per million tokens</title>
      <dc:creator>Qaiser Mehdi</dc:creator>
      <pubDate>Tue, 13 Oct 2026 00:46:48 +0000</pubDate>
      <link>https://dev.to/qaisermehdi/the-same-h100-hour-cost-126-or-022-per-million-tokens-27pb</link>
      <guid>https://dev.to/qaisermehdi/the-same-h100-hour-cost-126-or-022-per-million-tokens-27pb</guid>
      <description>&lt;p&gt;A GPU hour has one price. What it delivers does not. Here is one measurement that shows how big the gap can be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The setup.&lt;/strong&gt; One rented H100 SXM 80GB on vast.ai at $2.689 per hour, 20 vCPUs. vLLM 0.27.1 (official image). Qwen2.5-0.5B-Instruct in fp16, unique prompts so nothing was cached. 28 September 2026. Every number below comes from vLLM's own /metrics counters, and they matched what my client recorded exactly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two loads, three rounds each.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One request at a time:&lt;/strong&gt; each request decoded at 648-649 tokens/s. The whole server produced 589-593 tokens/s. That is about &lt;strong&gt;$1.26 per 1M output tokens&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 requests at once:&lt;/strong&gt; each request got a bit slower, 549-573 tokens/s. But the whole server produced 3,194-3,348 tokens/s. That is about &lt;strong&gt;$0.22-0.23 per 1M output tokens&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same GPU, same hour, same price. About 5.5x apart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The common mistake.&lt;/strong&gt; Many cost estimates take one request's speed and divide the hourly price by it. At 8 at once, one request ran at about 549-573 tokens/s, which would price the hour at about $1.30-1.36 per 1M tokens. The real cost was $0.22-0.23. In each round the whole server made 5.65-5.84x what one request suggests.&lt;/p&gt;

&lt;p&gt;So pricing from one request's speed can overstate cost by about 5.7x at this load. At other loads the gap is different. That is the point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What decides your real cost.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many requests your server actually runs at once, not what a benchmark ran.&lt;/li&gt;
&lt;li&gt;The idle time inside the hour. A GPU that waits still bills, so cost per token is the hourly price over everything the server produced in that hour, idle included.&lt;/li&gt;
&lt;li&gt;For scale-to-zero, the boot. On this same H100, one cold wake was about 75 of 77.3 billed seconds before the server could answer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Same ratio on a smaller card.&lt;/strong&gt; On a T4 with the same model and test, at 8 at once each request decoded at 122-124 tokens/s while the whole server made 701-708 tokens/s. Again about 5.7x.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I can and cannot say.&lt;/strong&gt; This is a small model, one GPU, three rounds per load. A 7B or 70B model, another server, or longer prompts will give different numbers. I am not saying your cost is $0.22. I am saying the number depends on your load, and you can only know it by measuring your own server.&lt;/p&gt;

&lt;p&gt;The method, the raw numbers and the open-source tool are here, if useful: github.com/qaisermehdi3-coder/qvunex&lt;/p&gt;

&lt;p&gt;If you have measured cost per token on your own servers at different loads, I would like to compare.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>gpu</category>
      <category>mlops</category>
    </item>
    <item>
      <title>Ready is not warm: one SGLang cold start on a T4</title>
      <dc:creator>Qaiser Mehdi</dc:creator>
      <pubDate>Mon, 12 Oct 2026 22:51:26 +0000</pubDate>
      <link>https://dev.to/qaisermehdi/ready-is-not-warm-one-sglang-cold-start-on-a-t4-4109</link>
      <guid>https://dev.to/qaisermehdi/ready-is-not-warm-one-sglang-cold-start-on-a-t4-4109</guid>
      <description>&lt;p&gt;I measure what GPU time actually buys. One number surprised me this month, so here it is with the raw timeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The setup.&lt;/strong&gt; One T4 on Colab. SGLang 0.5.21. Qwen2.5-0.5B-Instruct in fp16. I started a clock just before launching the server, the way a scale-to-zero platform starts billing when a worker is created. Then 8 short chat requests, then 60 seconds of health checks, then stop. One run, 5 October 2026.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The timeline.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;0 s:&lt;/strong&gt; server launched (billing starts)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~371 s:&lt;/strong&gt; prefill CUDA graph capture finished (it took 287.7 s)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;386.7 s:&lt;/strong&gt; /health returns 200, log says "ready to roll"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~563 s:&lt;/strong&gt; first chat request finishes (it took about 176 s)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~579 s:&lt;/strong&gt; second request finishes (about 16 s), the other six within the same second&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;639.6 s:&lt;/strong&gt; billing stops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After that, 8 more requests on the same server took 0.08 to 0.22 s each.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means for the bill.&lt;/strong&gt; If you split the bill at the health check, boot looks like 60% of it (386.7 of 639.6 s). But the first user got an answer about 563 s in. That is 88% of the bill gone before anyone was served.&lt;/p&gt;

&lt;p&gt;So "ready" was not the end of the wait. It was about two thirds of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I can and cannot say.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The server's own counters matched my client exactly: 8 requests, 264 prompt tokens, 80 output tokens.&lt;/li&gt;
&lt;li&gt;The log does not say what the first 176 s were spent on, so I am not claiming a cause.&lt;/li&gt;
&lt;li&gt;Each health check in the tail shows up in the SGLang log as a one-token prefill on the GPU, but the request counters do not move. So "the GPU did work" and "a request was served" are different things.&lt;/li&gt;
&lt;li&gt;For comparison, on vLLM 0.27.1 on the same card, the 8 requests after ready took 5.8 s in total. Boot there was about 165 of 171 billed seconds.&lt;/li&gt;
&lt;li&gt;This is one run on one small card. A bigger GPU or another model can look different. That is the point: measure your own.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you run scale-to-zero, record three times, not one:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;billing start to health check OK&lt;/li&gt;
&lt;li&gt;billing start to the first finished request&lt;/li&gt;
&lt;li&gt;the idle tail after the last request&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then price the whole billed time, not just the part where requests were running.&lt;/p&gt;

&lt;p&gt;The method and the open-source tool I used are here, if useful: github.com/qaisermehdi3-coder/qvunex&lt;/p&gt;

&lt;p&gt;If you have measured this on other cards or servers, I would like to see your numbers.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>gpu</category>
      <category>mlops</category>
    </item>
  </channel>
</rss>
