Skip to content

Commit 673d18c

Browse files
committed
add fused silu and mul in qwen2.5-vl
Signed-off-by: kf <kuanfu.liu@embeddedllm.com>
1 parent 34f48d8 commit 673d18c

1 file changed

Lines changed: 18 additions & 16 deletions

File tree

vllm/model_executor/models/qwen2_5_vl.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@
4343
from vllm.distributed import utils as dist_utils
4444
from vllm.logger import init_logger
4545
from vllm.model_executor import SamplingMetadata
46-
from vllm.model_executor.layers.activation import _ACTIVATION_REGISTRY
46+
from vllm.model_executor.layers.activation import _ACTIVATION_REGISTRY, SiluAndMul
4747
from vllm.model_executor.layers.layernorm import RMSNorm
4848
from vllm.model_executor.layers.linear import (ColumnParallelLinear,
49+
MergedColumnParallelLinear,
4950
QKVParallelLinear,
5051
RowParallelLinear)
5152
from vllm.model_executor.layers.quantization import QuantizationConfig
@@ -171,28 +172,23 @@ def __init__(self,
171172
quant_config: Optional[QuantizationConfig] = None,
172173
prefix: str = ""):
173174
super().__init__()
174-
self.gate_proj = ColumnParallelLinear(in_features,
175-
hidden_features,
176-
bias=bias,
177-
quant_config=quant_config,
178-
prefix=f"{prefix}.gate_proj")
179-
self.up_proj = ColumnParallelLinear(in_features,
180-
hidden_features,
181-
bias=bias,
182-
quant_config=quant_config,
183-
prefix=f"{prefix}.up_proj")
175+
self.gate_up_proj = MergedColumnParallelLinear(
176+
input_size=in_features,
177+
output_sizes=[hidden_features] * 2, # [gate_proj, up_proj]
178+
bias=bias,
179+
quant_config=quant_config,
180+
prefix=f"{prefix}.gate_up_proj")
184181
self.down_proj = RowParallelLinear(hidden_features,
185182
in_features,
186183
bias=bias,
187184
quant_config=quant_config,
188185
prefix=f"{prefix}.down_proj")
189-
self.act_fn = act_fn
186+
self.act_fn = SiluAndMul()
190187

191188
def forward(self, x: torch.Tensor):
192-
x_gate, _ = self.gate_proj(x)
193-
x_gate = self.act_fn(x_gate)
194-
x_up, _ = self.up_proj(x)
195-
x_down, _ = self.down_proj(x_gate * x_up)
189+
gate_up, _ = self.gate_up_proj(x)
190+
x = self.act_fn(gate_up)
191+
x_down, _ = self.down_proj(x)
196192
return x_down
197193

198194

@@ -539,6 +535,10 @@ def __init__(
539535
head_dim = self.hidden_size // self.num_heads
540536
self.rotary_pos_emb = Qwen2_5_VisionRotaryEmbedding(head_dim // 2)
541537

538+
if vision_config.hidden_act != "silu":
539+
raise ValueError(f"Unsupported activation: {vision_config.hidden_act}. "
540+
"Only silu is supported for now.")
541+
542542
self.blocks = nn.ModuleList([
543543
Qwen2_5_VisionBlock(
544544
dim=self.hidden_size,
@@ -752,6 +752,8 @@ def load_weights(self, weights: Iterable[tuple[str,
752752
("attn.qkv.", "attn.q.", "q"),
753753
("attn.qkv.", "attn.k.", "k"),
754754
("attn.qkv.", "attn.v.", "v"),
755+
("mlp.gate_up_proj.", "mlp.gate_proj.", 0),
756+
("mlp.gate_up_proj.", "mlp.up_proj.", 1),
755757
]
756758
params_dict = dict(self.named_parameters(remove_duplicate=False))
757759
loaded_params: set[str] = set()

0 commit comments

Comments
 (0)