nano-decoder
nano-vllm/nanovllm/models/qwen3.py · bb823b3 · L120–169 · 固定 commit 上游
这是固定版本源码的只读摘录;可在线阅读,也可通过上游链接查看原文件。
120class Qwen3DecoderLayer(nn.Module):
121
122 def __init__(
123 self,
124 config: Qwen3Config,
125 ) -> None:
126 super().__init__()
127 self.self_attn = Qwen3Attention(
128 hidden_size=config.hidden_size,
129 num_heads=config.num_attention_heads,
130 num_kv_heads=config.num_key_value_heads,
131 max_position=config.max_position_embeddings,
132 rms_norm_eps=config.rms_norm_eps,
133 qkv_bias=getattr(config, 'attention_bias', True),
134 head_dim=getattr(config, 'head_dim', None),
135 rope_theta=getattr(config, "rope_theta", 1000000),
136 rope_scaling=getattr(config, "rope_scaling", None),
137 )
138 self.mlp = Qwen3MLP(
139 hidden_size=config.hidden_size,
140 intermediate_size=config.intermediate_size,
141 hidden_act=config.hidden_act,
142 )
143 self.input_layernorm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps)
144 self.post_attention_layernorm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps)
145
146 def forward(
147 self,
148 positions: torch.Tensor,
149 hidden_states: torch.Tensor,
150 residual: torch.Tensor | None,
151 ) -> tuple[torch.Tensor, torch.Tensor]:
152 if residual is None:
153 hidden_states, residual = self.input_layernorm(hidden_states), hidden_states
154 else:
155 hidden_states, residual = self.input_layernorm(hidden_states, residual)
156 hidden_states = self.self_attn(positions, hidden_states)
157 hidden_states, residual = self.post_attention_layernorm(hidden_states, residual)
158 hidden_states = self.mlp(hidden_states)
159 return hidden_states, residual
160
161
162class Qwen3Model(nn.Module):
163
164 def __init__(
165 self,
166 config: Qwen3Config,
167 ) -> None:
168 super().__init__()
169 self.embed_tokens = VocabParallelEmbedding(config.vocab_size, config.hidden_size)