[Diffusion] model: fix zimage tp (#16719)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
gemini-code-assist[bot]
parent
294ff71d18
commit
82a8d77bc0
@@ -6,6 +6,7 @@ import torch.nn as nn
|
|||||||
|
|
||||||
from sglang.jit_kernel.norm import can_use_fused_inplace_qknorm
|
from sglang.jit_kernel.norm import can_use_fused_inplace_qknorm
|
||||||
from sglang.multimodal_gen.configs.models.dits.zimage import ZImageDitConfig
|
from sglang.multimodal_gen.configs.models.dits.zimage import ZImageDitConfig
|
||||||
|
from sglang.multimodal_gen.runtime.distributed import get_tp_world_size
|
||||||
from sglang.multimodal_gen.runtime.layers.activation import SiluAndMul
|
from sglang.multimodal_gen.runtime.layers.activation import SiluAndMul
|
||||||
from sglang.multimodal_gen.runtime.layers.attention import USPAttention
|
from sglang.multimodal_gen.runtime.layers.attention import USPAttention
|
||||||
from sglang.multimodal_gen.runtime.layers.layernorm import RMSNorm, apply_qk_norm
|
from sglang.multimodal_gen.runtime.layers.layernorm import RMSNorm, apply_qk_norm
|
||||||
@@ -118,9 +119,23 @@ class ZImageAttention(nn.Module):
|
|||||||
self.num_kv_heads = num_kv_heads
|
self.num_kv_heads = num_kv_heads
|
||||||
self.qk_norm = qk_norm
|
self.qk_norm = qk_norm
|
||||||
|
|
||||||
self.to_q = ReplicatedLinear(dim, dim, bias=False)
|
tp_size = get_tp_world_size()
|
||||||
self.to_k = ReplicatedLinear(dim, self.head_dim * num_kv_heads, bias=False)
|
assert (
|
||||||
self.to_v = ReplicatedLinear(dim, self.head_dim * num_kv_heads, bias=False)
|
num_heads % tp_size == 0
|
||||||
|
), f"num_heads {num_heads} must be divisible by tp world size {tp_size}"
|
||||||
|
assert (
|
||||||
|
num_kv_heads % tp_size == 0
|
||||||
|
), f"num_kv_heads {num_kv_heads} must be divisible by tp world size {tp_size}"
|
||||||
|
self.local_num_heads = num_heads // tp_size
|
||||||
|
self.local_num_kv_heads = num_kv_heads // tp_size
|
||||||
|
|
||||||
|
self.to_q = ColumnParallelLinear(dim, dim, bias=False, gather_output=False)
|
||||||
|
self.to_k = ColumnParallelLinear(
|
||||||
|
dim, self.head_dim * num_kv_heads, bias=False, gather_output=False
|
||||||
|
)
|
||||||
|
self.to_v = ColumnParallelLinear(
|
||||||
|
dim, self.head_dim * num_kv_heads, bias=False, gather_output=False
|
||||||
|
)
|
||||||
|
|
||||||
if self.qk_norm:
|
if self.qk_norm:
|
||||||
self.norm_q = RMSNorm(self.head_dim, eps=eps)
|
self.norm_q = RMSNorm(self.head_dim, eps=eps)
|
||||||
@@ -134,9 +149,9 @@ class ZImageAttention(nn.Module):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.attn = USPAttention(
|
self.attn = USPAttention(
|
||||||
num_heads=num_heads,
|
num_heads=self.local_num_heads,
|
||||||
head_size=self.head_dim,
|
head_size=self.head_dim,
|
||||||
num_kv_heads=num_kv_heads,
|
num_kv_heads=self.local_num_kv_heads,
|
||||||
dropout_rate=0,
|
dropout_rate=0,
|
||||||
softmax_scale=None,
|
softmax_scale=None,
|
||||||
causal=False,
|
causal=False,
|
||||||
@@ -150,10 +165,9 @@ class ZImageAttention(nn.Module):
|
|||||||
q, _ = self.to_q(hidden_states)
|
q, _ = self.to_q(hidden_states)
|
||||||
k, _ = self.to_k(hidden_states)
|
k, _ = self.to_k(hidden_states)
|
||||||
v, _ = self.to_v(hidden_states)
|
v, _ = self.to_v(hidden_states)
|
||||||
|
q = q.view(*q.shape[:-1], self.local_num_heads, self.head_dim)
|
||||||
q = q.view(*q.shape[:-1], self.num_heads, self.head_dim)
|
k = k.view(*k.shape[:-1], self.local_num_kv_heads, self.head_dim)
|
||||||
k = k.view(*k.shape[:-1], self.num_kv_heads, self.head_dim)
|
v = v.view(*v.shape[:-1], self.local_num_kv_heads, self.head_dim)
|
||||||
v = v.view(*v.shape[:-1], self.num_kv_heads, self.head_dim)
|
|
||||||
|
|
||||||
if self.qk_norm:
|
if self.qk_norm:
|
||||||
if (
|
if (
|
||||||
|
|||||||
Reference in New Issue
Block a user