Estimated FLOPs per token, or ``None`` when the model family is not
supported. Communication, recomputation, normalization, dropout,
RoPE and optimizer work are not included.
"""
if getattr(config, "model_type", None) != "qwen3_moe":
return None
hidden = int(config.hidden_size)
layers = int(config.num_hidden_layers)
heads = int(config.num_attention_heads)
kv_heads = int(getattr(config, "num_key_value_heads", None) or heads)
head_dim = int(getattr(config, "head_dim", None) or hidden // heads)
intermediate = int(config.intermediate_size)
moe_intermediate = int(config.moe_intermediate_size)
topk = int(config.num_experts_per_tok)
vocab = int(config.vocab_size)
query = heads * head_dim
key_value = kv_heads * head_dim
# Per token, per standard-attention layer.
attention = 6.0 * (
hidden * (query + key_value + key_value)
+ query * float(seq_length)
+ query * hidden
)