deep1401's picture
Fused INT8 kernel + loader for Ideogram 4.0 (Transformer Lab)
04e44f9 verified
Raw
History Blame Contribute Delete
1.61 kB
"""Generate an image with the fused INT8 Ideogram 4.0 DiT on a single RTX 3090.
python download_deps.py # one time (gated base-repo access required)
python usage.py "a poster that says HELLO"
Needs: an Ampere GPU with INT8 tensor cores (RTX 3090), `triton`, the `ideogram4` package,
and access to the gated base repo `ideogram-ai/ideogram-4-fp8` plus the INT8 W8A8 weights
at `transformerlab/ideogram-4-int8-w8a8` (this repo carries the fused kernel, not the
weights). On a 24 GB card the INT8 build fits at 1024px.
"""
import sys
import torch
from huggingface_hub import hf_hub_download
from ideogram4 import Ideogram4Pipeline, Ideogram4PipelineConfig
from fused_int8 import load_fused_int8
prompt = sys.argv[1] if len(sys.argv) > 1 else 'a storefront sign that says "FRESH COFFEE"'
# 1) base pipeline (text encoder + VAE + the two FP8 DiT branches, custom inference code)
pipe = Ideogram4Pipeline.from_pretrained(
config=Ideogram4PipelineConfig(weights_repo="ideogram-ai/ideogram-4-fp8"),
device="cuda", dtype=torch.bfloat16)
# 2) the INT8 W8A8 weights live in our int8-w8a8 repo; this repo provides the fused kernel
weights = hf_hub_download("transformerlab/ideogram-4-int8-w8a8",
"ideogram4-int8-w8a8.safetensors")
n_fused, n_prot = load_fused_int8(pipe, weights)
print(f"installed fused INT8 kernel on {n_fused} linears (+{n_prot} bf16-protected)")
# 3) generate (single 24 GB RTX 3090; first denoise step autotunes the kernel)
img = pipe(prompt, num_steps=48, height=1024, width=1024, seed=1000)[0]
img.save("out.png")
print("saved out.png")