# Copyright (c) Microsoft Corporation. # SPDX-License-Identifier: Apache-2.0 # DeepSpeed Team # Create a container object to save model-specific tensors using the policy file above. from ..common_parameters import * from ..layer_container_base import LayerContainer ''' # HF Qwen2 model looks like this: Qwen2ForCausalLM( (model): Qwen2Model( (embed_tokens): Embedding(151936, 1024) (layers): ModuleList( (0-23): 24 x Qwen2DecoderLayer( (self_attn): Qwen2SdpaAttention( (q_proj): Linear(in_features=1024, out_features=1024, bias=True) (k_proj): Linear(in_features=1024, out_features=1024, bias=True) (v_proj): Linear(in_features=1024, out_features=1024, bias=True) (o_proj): Linear(in_features=1024, out_features=1024, bias=False) (rotary_emb): Qwen2RotaryEmbedding() ) (mlp): Qwen2MLP( (gate_proj): Linear(in_features=1024, out_features=2816, bias=False) (up_proj): Linear(in_features=1024, out_features=2816, bias=False) (down_proj): Linear(in_features=2816, out_features=1024, bias=False) (act_fn): SiLU() ) (input_layernorm): Qwen2RMSNorm() (post_attention_layernorm): Qwen2RMSNorm() ) ) (norm): Qwen2RMSNorm() ) (lm_head): Linear(in_features=1024, out_features=151936, bias=False) ) ''' class Qwen2TransformerContainer(LayerContainer): """ Transformer layer container for the Qwen2 model. """ qkv_w: UnfusedQKVParameter qkv_b: UnfusedQKVParameter attn_out_w: AttentionOutputParameter mlp_1_w: GatedMLPParameter mlp_2_w: MLP2Parameter attn_norm_gamma: NormParameter mlp_norm_gamma: NormParameter PARAM_MAPPING = { "self_attn.q_proj.weight": "qkv_w.q_params", "self_attn.k_proj.weight": "qkv_w.k_params", "self_attn.v_proj.weight": "qkv_w.v_params", "self_attn.q_proj.bias": "qkv_b.q_params", "self_attn.k_proj.bias": "qkv_b.k_params", "self_attn.v_proj.bias": "qkv_b.v_params", "self_attn.o_proj.weight": "attn_out_w.params", "mlp.gate_proj.weight": "mlp_1_w.gate_params", "mlp.up_proj.weight": "mlp_1_w.up_params", "mlp.down_proj.weight": "mlp_2_w.params", "input_layernorm.weight": "attn_norm_gamma.params", "post_attention_layernorm.weight": "mlp_norm_gamma.params", } class Qwen2NonTransformerContainer(LayerContainer): """ Non-Transformer layer container for the Qwen2 model. """ word_emb: EmbeddingParameter word_unembed: UnembedParameter final_norm: NormParameter PARAM_MAPPING = { "model.embed_tokens.weight": "word_emb.params", "model.norm.weight": "final_norm.params", "lm_head.weight": "word_unembed.params", }