Qwen-Image 2.1 Turbo, FP8 β radiance container
Qwen/Qwen-Image-2.1-Turbo β the 8-step distillation of Qwen-Image 2.1,
text to image and image editing β as a single .rad container for the
radiance inference engine (AMD RDNA4, ROCm).
| File | qwen-image-2.1-turbo-fp8.rad β 16.08 GiB |
| Weights | the conditioning network's (Qwen3-VL-8B) and the diffusion transformer's linears FP8 E4M3 per 128Γ128 block (bf16 scales); the vision tower, the small linears, the norms and the VAE bf16 |
| Steps | 8, fixed by the model (a request's num_inference_steps is refused) |
| Needs | radiance built from main after 1.5.0 β Qwen-Image support is not in 1.5.0 and comes with the next release |
Serve
# one card
radiance --model qwen-image-2.1-turbo-fp8.rad --host 0.0.0.0 --port 8000
# two cards; --tp-wire wht6 sends the all-reduces as 6-bit (about 9% faster, within a dB of exact)
radiance --model qwen-image-2.1-turbo-fp8.rad --tp 2 --tp-wire wht6 --host 0.0.0.0 --port 8000
The server speaks OpenAI's Images API: POST /v1/images/generations and POST /v1/images/edits
(JSON, or multipart with image / image[] and mask, as OpenAI's SDKs send them). Pictures come back as
b64_json (png, jpeg or webp; response_format: url is refused). Also: n, size (WxH or auto =
2048x2048), seed, streaming with partial_images, background: transparent; edits take 1 to 10 reference
pictures and a mask. /v1/models lists the model.
Seconds a picture on Radeon AI PRO R9700 (gfx1201):
| 2048x2048 | 1024x1024 | 1024x1024 edit | |
|---|---|---|---|
| one card | 22.0 | 4.0 | 5.4 |
| two cards | 12.9 | 2.6 | 3.5 |
two cards, --tp-wire wht6 |
11.9 | 2.2 | 3.1 |
Against diffusers' own bf16 pipeline from the same noise (1024x1024), PSNR 36.8 dB on a prompt and 39.0 dB on an edit.
How this file was made
rad-convert Qwen/Qwen-Image-2.1-Turbo --recipe qwen-image-2.1-fp8.recipe -o qwen-image-2.1-turbo-fp8.rad
Qwen/Qwen-Image-2.1-Turbo is the diffusers download of that repository with text_encoder/ taken from
Qwen/Qwen-Image-2.1 (the two releases share it byte for byte).
The recipe (qwen-image-2.1-fp8.recipe in this repository) names what is quantised; everything it does not
name is the checkpoint's own dtype:
te.blk.*.attn_qkv.weight rtn codes=fp8_e4m3 block=128x128 scale=bf16
te.blk.*.attn_output.weight rtn codes=fp8_e4m3 block=128x128 scale=bf16
te.blk.*.ffn_gate_up.weight rtn codes=fp8_e4m3 block=128x128 scale=bf16
te.blk.*.ffn_down.weight rtn codes=fp8_e4m3 block=128x128 scale=bf16
dit.blk.*.attn_qkv.weight rtn codes=fp8_e4m3 block=128x128 scale=bf16
dit.blk.*.attn_output.weight rtn codes=fp8_e4m3 block=128x128 scale=bf16
dit.blk.*.ffn_gate_up.weight rtn codes=fp8_e4m3 block=128x128 scale=bf16
dit.blk.*.ffn_down.weight rtn codes=fp8_e4m3 block=128x128 scale=bf16
vae.* cast dtype=bf16
License
Built with Qwen. Qwen-Image 2.1 is licensed under the Qwen RESEARCH LICENSE AGREEMENT
(non-commercial; LICENSE in this repository), and NOTICE carries its attribution. This container is a
modified copy: its linear weights are re-encoded as FP8 (see above).