vllm_omni.diffusion.models.krea2.krea2_transformer ¶
Krea2Attention ¶
Bases: Module
Self-attention with grouped-query projections, q/k RMSNorm, rotary embeddings and a sigmoid output gate.
Q/K/V layout is [B, seq, heads, head_dim]; attention_mask is a 2D boolean key-padding mask (batch, key_seq_len) that the backend broadcasts.
attn instance-attribute ¶
attn = Attention(
num_heads=self.num_heads,
head_size=self.head_dim,
softmax_scale=1.0 / self.head_dim**0.5,
causal=False,
num_kv_heads=self.num_kv_heads,
role=role,
)
num_kv_heads instance-attribute ¶
to_gate instance-attribute ¶
to_gate = _linear(
hidden_size,
hidden_size,
False,
quant_config,
_join_prefix(prefix, "to_gate"),
)
to_k instance-attribute ¶
to_out instance-attribute ¶
to_out = nn.ModuleList(
[
_linear(
hidden_size,
hidden_size,
False,
quant_config,
_join_prefix(prefix, "to_out.0"),
),
nn.Dropout(0.0),
]
)
to_q instance-attribute ¶
to_v instance-attribute ¶
Krea2FinalLayer ¶
Krea2RMSNorm ¶
Bases: Module
RMSNorm with a zero-centered scale: the effective multiplier is 1 + weight, matching the Krea 2 checkpoint format. Activations are upcast so the normalization runs in float32.
Krea2RotaryPosEmbed ¶
Krea2SwiGLU ¶
Krea2TextFusion ¶
Bases: Module
Fuses the stack of tapped text-encoder hidden states into a single sequence of text features.
Two layerwise_blocks attend across the num_text_layers axis independently for every token, a linear projector collapses that axis, and two refiner_blocks attend across the token sequence.
layerwise_blocks instance-attribute ¶
layerwise_blocks = nn.ModuleList(
[
(
Krea2TextFusionBlock(
dim,
num_heads,
num_kv_heads,
intermediate_size,
eps,
quant_config=quant_config,
prefix=_join_prefix(
prefix, f"layerwise_blocks.{i}"
),
)
)
for i in (range(num_layerwise_blocks))
]
)
projector instance-attribute ¶
refiner_blocks instance-attribute ¶
refiner_blocks = nn.ModuleList(
[
(
Krea2TextFusionBlock(
dim,
num_heads,
num_kv_heads,
intermediate_size,
eps,
quant_config=quant_config,
prefix=_join_prefix(
prefix, f"refiner_blocks.{i}"
),
)
)
for i in (range(num_refiner_blocks))
]
)
Krea2TextFusionBlock ¶
Bases: Module
Pre-norm transformer block (no rotary embeddings, no time modulation) used by the text fusion stage.
attn instance-attribute ¶
attn = Krea2Attention(
dim,
num_heads,
num_kv_heads,
eps=eps,
role="self",
quant_config=quant_config,
prefix=_join_prefix(prefix, "attn"),
)
ff instance-attribute ¶
ff = Krea2SwiGLU(
dim,
intermediate_size,
quant_config=quant_config,
prefix=_join_prefix(prefix, "ff"),
)
Krea2TextProjection ¶
Krea2TimestepEmbedding ¶
Bases: Module
Sinusoidal flow-time embedding (cos-first, input scaled by 1000) followed by a two-layer MLP.
Keeps the sequence dimension at size 1 so the per-block modulations broadcast over tokens.
Krea2Transformer2DModel ¶
Bases: Module
The single-stream MMDiT flow-matching backbone used by the Krea 2 pipeline (vLLM-Omni port).
Text conditioning enters as a stack of hidden states tapped from several layers of a multimodal text encoder. A small text-fusion transformer collapses the layer axis and refines the token sequence; the result is concatenated with the patchified image latents into a single [text, image] sequence processed by the transformer blocks. The timestep conditions every block through one shared modulation vector plus per-block learned tables.
dtype instance-attribute ¶
final_layer instance-attribute ¶
final_layer = Krea2FinalLayer(
hidden_size,
in_channels,
norm_eps,
quant_config,
"final_layer",
)
img_in instance-attribute ¶
rotary_emb instance-attribute ¶
rotary_emb = Krea2RotaryPosEmbed(
theta=rope_theta, axes_dim=list(axes_dims_rope)
)
text_fusion instance-attribute ¶
text_fusion = Krea2TextFusion(
num_text_layers=num_text_layers,
dim=text_hidden_dim,
num_heads=text_num_attention_heads,
num_kv_heads=text_num_key_value_heads,
intermediate_size=text_intermediate_size,
num_layerwise_blocks=num_layerwise_text_blocks,
num_refiner_blocks=num_refiner_text_blocks,
eps=norm_eps,
quant_config=quant_config,
prefix="text_fusion",
)
time_embed instance-attribute ¶
time_embed = Krea2TimestepEmbedding(
timestep_embed_dim,
hidden_size,
quant_config,
"time_embed",
)
time_mod_proj instance-attribute ¶
transformer_blocks instance-attribute ¶
transformer_blocks = nn.ModuleList(
[
(
Krea2TransformerBlock(
hidden_size=hidden_size,
intermediate_size=intermediate_size,
num_heads=num_attention_heads,
num_kv_heads=num_key_value_heads,
norm_eps=norm_eps,
quant_config=quant_config,
prefix=f"transformer_blocks.{i}",
)
)
for i in (range(num_layers))
]
)
txt_in instance-attribute ¶
txt_in = Krea2TextProjection(
text_hidden_dim,
hidden_size,
norm_eps,
quant_config,
"txt_in",
)
forward ¶
forward(
hidden_states: Tensor,
encoder_hidden_states: Tensor,
timestep: Tensor,
position_ids: Tensor,
encoder_attention_mask: Tensor | None = None,
) -> Tensor
Predict the flow-matching velocity for the image tokens.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
hidden_states | Tensor | Packed (patchified) noisy image latents | required |
encoder_hidden_states | Tensor | Tapped text-encoder hidden states | required |
timestep | Tensor | Flow-matching time in | required |
position_ids | Tensor |
| required |
encoder_attention_mask | Tensor | None | Boolean mask marking valid text tokens | None |
Krea2TransformerBlock ¶
Bases: Module
attn instance-attribute ¶
attn = Krea2Attention(
hidden_size,
num_heads,
num_kv_heads,
eps=norm_eps,
role="self",
quant_config=quant_config,
prefix=_join_prefix(prefix, "attn"),
)
ff instance-attribute ¶
ff = Krea2SwiGLU(
hidden_size,
intermediate_size,
quant_config=quant_config,
prefix=_join_prefix(prefix, "ff"),
)