← Lab notes

MOSS-Image on rented GPUs: a 4-step LoRA makes it 14× faster, and the text survives

MOSS-Image, a 5B open text-to-image model known for legible Chinese and English text and JSON layouts, on an RTX 4090, L40S, RTX PRO 6000 and H100. The official 50-step sampler took 17–47 seconds per 1024×1024 image ($11.6–19 per 1,000 images). A community 4-step LoRA took 1.6–3 seconds ($0.74–2.22 per 1,000) and rendered text just as accurately by OCR, but photos lost the natural look the model is praised for. The cheapest card per image was the cheapest per hour.

Choosing GPUs? Compare GPUs for your traffic · Get your node measured, free

MOSS-Image came out on October 16: a 5B open-weight text-to-image model whose selling points are text you can read (Chinese and English) and layouts you can pin down with JSON bounding boxes. Within a week the community had published 3- and 4-step "turbo" versions of it.

We wanted two numbers: what an image costs on the GPUs people actually rent, and what the fast versions give up.

What we ran. MOSS-Image-SFT with the official diffusers pipeline at pinned weights, on one rented node each of RTX 4090, L40S, RTX PRO 6000 Blackwell and H100 SXM (RunPod Secure Cloud, October 24). Three samplers: the official one (50 steps, CFG 3), and two community LoRAs distilled from it (4 steps and 3 steps, no CFG). Six prompts (an English poster, a handwritten Chinese note, a bilingual menu, a JSON layout, a product shot, a street photo), two seeds each, 1024×1024, one image at a time, after a warm-up image. We scored the rendered text with OCR.

"5B" needs 27 GB

The 5B is only the image generator. It also needs a 9B text encoder (Qwen3.5-9B) and a VAE: 27 GB of weights in total, about 28 GB of GPU memory at 1024×1024.

That fits the 48, 80 and 96 GB cards with room to spare. On the 24 GB RTX 4090, the official code switches to CPU offload, keeping the model in system RAM and moving it to the GPU as needed. In our pod that was killed within three minutes: the container allows 31 GB of RAM.

What worked was quantizing the text encoder to 4 or 8 bits (bitsandbytes). The whole model then stays on the GPU at 18–22 GB. The image generator itself is untouched, and OCR text accuracy came out the same as on the unquantized cards (below).

Speed and cost per image

Seconds per 1024×1024 image, and the GPU cost of 1,000 images at the price we paid, with the GPU kept busy:

GPU (price per hour) Official, 50 steps 4-step LoRA 3-step LoRA
RTX 4090 ($0.89)* 47.1 s · $11.6 3.0 s · $0.74 2.3 s · $0.57
L40S ($1.09) 39.1 s · $11.8 2.9 s · $0.87 2.2 s · $0.67
RTX PRO 6000 ($2.49) 22.6 s · $15.6 1.6 s · $1.11 1.25 s · $0.86
H100 SXM ($3.99) 17.1 s · $19.0 2.0 s · $2.22 1.8 s · $1.95

* Text encoder in 4-bit; with 8-bit, each image took up to 0.35 s longer.

Two things stand out:

  • The 4-step LoRA is 14–16× faster on the 4090, L40S and RTX PRO 6000. On the H100 it's 8.5×, because encoding the prompt took 0.4 s there against 0.04–0.16 s on the other cards (4-bit encoder on the 4090). With only four steps of image generation, that fixed cost matters.
  • The cheapest card per hour was the cheapest per image. For LLM serving we keep finding the opposite: the H100 wins per token because it serves far more users at once. Here, one image at a time, the H100 is 2.7× faster than the 4090 at 4.5× the price. We didn't test batching several images per pass, which would favor the bigger cards.

Text and layout: the fast versions keep up

OCR on every image across the four GPUs and both 4090 runs, 28 expected strings per run, 140 per sampler:

Official, 50 steps 4-step LoRA 3-step LoRA
Average text match (0–100) 97.9 98.4 94.7
Strings read back exactly 111 / 140 124 / 140 111 / 140
Layout: title box overlap (IoU) 0.95 0.92 0.93

The 4-step LoRA rendered text at least as well as the full sampler on these prompts. The 3-step one slipped on small and handwritten text, most on the 4090 with the 4-bit text encoder (87.5). All three put the JSON-specified title where it was asked for; the fast ones a little less tightly.

Poster and JSON layout prompt, same seed, three samplers: the text is nearly identical

What the fast versions give up

MOSS-Image's reputation is that its photos don't look AI-generated: the team removed AI-made images from the training data. The full sampler shows it. Our street photo looks like a snapshot: the man off-center, a stranger half out of frame in the foreground. The 4- and 3-step versions turn the same prompt into a polished, warmly lit, cinematic frame: closer to the generic "AI look" the model was praised for avoiding. The 3-step version also blurs backgrounds noticeably.

Street photo and kitchen with a handwritten note, same seed: the fast versions look more staged and softer

Which setup to use

  • Posters, menus, infographics, anything with text: the 4-step LoRA. Under a dollar per 1,000 images on a 4090 or L40S.
  • Realistic photos: the official 50 steps. That's where the model differs from others, and it costs about $12 per 1,000 images on the same cards.
  • On a 24 GB card, quantize the text encoder rather than relying on CPU offload.
  • On one node, don't assume the biggest GPU is the cheapest; measure with your own batch size.

Limits

One node per GPU type on one platform, six prompts and two seeds, 1024×1024 only, batch size 1, list prices on the day. The few-step LoRAs are community work in progress, not from the MOSS team (who say they are working on their own). Text accuracy is OCR-based, which also misreads some correct text; image quality beyond text is our visual judgment. Same seeds don't give identical images across GPUs.

Raw data: timings, power and OCR scores per image · Method: how we measure · Prices across providers: GPU prices · Size a GPU for your own load: GPU cost calculator.

Keep reading

3 min read

GPU rental prices, early October 2026: list prices barely moved, but where you rent changes the price up to 4.7×

We collected on-demand GPU list prices from 16 cloud providers three times a day from October 7 to 19, 2026. List prices barely moved: 14 of 407 tracked offers changed. The spread between providers is the real story: H100 from $2.99 to $13.98 per GPU-hour (4.7×), A100 2.6×, L40S 2.1×. And 13 of 22 H100 listings didn't say whether the card is SXM, PCIe or NVL, a difference worth 2.25× in served tokens in our tests.

GPU pricesGPU cloudH100
3 min read

FP8 vs BF16 for LLM inference: faster tokens, but not always more capacity

We served Qwen3-8B with BF16 and FP8 weights on an RTX 4090 and an L40S. FP8 cut the median time per token by 35–42% on both cards, but it raised capacity within our latency target only on the 4090, where BF16 left too little memory for the KV cache. On the L40S, capacity didn't move.

FP8BF16quantization
6 min read

RTX 4090 vs L40S vs A100 vs A40 for LLM inference: what an 8B model really costs per token

We served Qwen3-8B on four cheaper GPUs rented from RunPod Secure Cloud under the same latency target. An RTX 4090 with FP8 weights was cheapest at $0.90 per million output tokens; the A100, the 4090 in BF16 and the L40S landed at $1.06–1.13; the A40 cost $1.61. Every card was limited by occasional slow tokens rather than average speed, and a 30B mixture-of-experts model on an H100 was about 3× cheaper per token than any of them.

RTX 4090L40SA100