From 47c077ecc34fd4c1c6e47f039924fc9e48758061 Mon Sep 17 00:00:00 2001 From: PGFLMG <1106310035@qq.com> Date: Wed, 23 Jul 2025 02:49:56 +0800 Subject: [PATCH 01/15] update huggingface path --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index da1ac905..b5fdeb28 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@
logo -[![HF-llama4-eagle3](https://img.shields.io/badge/🤗%20Hugging%20Face-Llama4%20Eagle3-yellow.svg?style=flat)](https://huggingface.co/models//) +[![HF-llama4-scout-eagle3](https://img.shields.io/badge/🤗%20Hugging%20Face-Llama4%20Scout-yellow.svg?style=flat)](https://huggingface.co/lmsys/sglang-EAGLE3-Llama-4-Scout-17B-16E-Instruct-v1) +[![HF-llama4-maverick-eagle3](https://img.shields.io/badge/🤗%20Hugging%20Face-Llama4%20Maverick-yellow.svg?style=flat)](https://huggingface.co/lmsys/sglang-EAGLE3-Llama-4-Maverick-17B-128E-Instruct-v1) [![license](https://img.shields.io/badge/License-MIT%202.0-blue)](./LICENSE)
- ## Table of Contents - [📍 Overview](#-overview) From 3af76ea71fad3c1ef4c4ff1c24def77f62e3a5b5 Mon Sep 17 00:00:00 2001 From: fzyzcjy <5236035+fzyzcjy@users.noreply.github.com> Date: Wed, 23 Jul 2025 12:32:58 +0800 Subject: [PATCH 02/15] Update README.md (#52) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b5fdeb28..d785b886 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ We provide two orthogonal paths so everyone can start training in minutes, regar > **Why does disk matter?** > During Eagle3 training, the frozen target model will first generate the hidden states for each token given the data sample. The hidden states are fed to the draft model for training. -> Offline mode stores these hidden states to the local disk, so a small disk fills can be filled up fast. +> Offline mode stores these hidden states to the local disk, so a small disk can be filled up fast. > Online mode only generates these hidden states on the fly without storing them to the disk, but needs to keep the draft model alive during training, trading GPU RAM for almost-zero disk footprint. ### ⚡️ SGLang-ready From bcb6b59544209c77403e3f12d990f611652aef99 Mon Sep 17 00:00:00 2001 From: Yineng Zhang Date: Tue, 22 Jul 2025 22:11:40 -0700 Subject: [PATCH 03/15] docs: update README (#54) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index d785b886..22d2202f 100644 --- a/README.md +++ b/README.md @@ -297,3 +297,7 @@ We would like to express our sincere gratitude to the EAGLE official team, espec We would like to extend our special thanks to Meituan for their strong support and contributions, which have played a key role in driving this project forward. This project has also been inspired by many outstanding open-source projects from the LLM community, including [EAGLE](https://github.com/SafeAILab/EAGLE), [BaldEagle](https://github.com/NickL77/BaldEagle), and [TensorRT-Model-Optimizer](https://github.com/NVIDIA/TensorRT-Model-Optimizer) and others. Their contributions and shared knowledge have greatly benefited our work. + +## 💡 Special Thanks to Voltage Park + +We would like to extend our sincere thanks to [Voltage Park](https://www.voltagepark.com/), our official infrastructure partner. As part of a formal collaboration with the SGLang team, Voltage Park provided critical GPU resources that empowered us to train and evaluate large-scale speculative decoding models efficiently and reliably. This partnership was instrumental in making SpecForge possible. We deeply appreciate Voltage Park’s mission to make cutting-edge AI infrastructure more accessible, and we look forward to continued collaboration as we push the boundaries of open-source LLM serving and optimization. From ba1ba0dff6efe6ba908a1d3baaec44c313b02b0f Mon Sep 17 00:00:00 2001 From: lukec <118525388+sleepcoo@users.noreply.github.com> Date: Wed, 23 Jul 2025 14:28:43 +0800 Subject: [PATCH 04/15] fix code format (#55) --- scripts/prepare_hidden_states.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/scripts/prepare_hidden_states.py b/scripts/prepare_hidden_states.py index d9692134..7c7bae77 100644 --- a/scripts/prepare_hidden_states.py +++ b/scripts/prepare_hidden_states.py @@ -10,12 +10,13 @@ import os from pathlib import Path from typing import Optional -import torch.nn as nn import torch +import torch.nn as nn from datasets import Dataset, load_dataset from sglang.bench_one_batch import BenchArgs, load_model from sglang.srt.entrypoints.engine import _set_envs_and_config +from sglang.srt.layers.logits_processor import LogitsProcessor, LogitsProcessorOutput from sglang.srt.managers.schedule_batch import Req, ScheduleBatch from sglang.srt.managers.scheduler import Scheduler from sglang.srt.model_executor.forward_batch_info import CaptureHiddenMode, ForwardBatch @@ -30,23 +31,33 @@ require_mlp_tp_gather, set_gpu_proc_affinity, ) -from sglang.srt.layers.logits_processor import LogitsProcessor, LogitsProcessorOutput from tqdm import tqdm from transformers import AutoConfig, AutoTokenizer from specforge.data import build_eagle3_dataset from specforge.utils import print_with_rank, rank_0_priority + class LogitsProcessorForEAGLE3(torch.nn.Module): def __init__(self, logits_processor: LogitsProcessor): super().__init__() self.logits_processor = logits_processor - - def forward(self, input_ids, hidden_states, lm_head, logits_metadata, aux_hidden_states: Optional[torch.Tensor] = None) -> LogitsProcessorOutput: - ret = self.logits_processor.forward(input_ids, hidden_states, lm_head, logits_metadata, aux_hidden_states) + + def forward( + self, + input_ids, + hidden_states, + lm_head, + logits_metadata, + aux_hidden_states: Optional[torch.Tensor] = None, + ) -> LogitsProcessorOutput: + ret = self.logits_processor.forward( + input_ids, hidden_states, lm_head, logits_metadata, aux_hidden_states + ) ret.last_hidden_states = hidden_states return ret + def wrap_logits_processors_in_module(module: nn.Module): for name, submodule in module.named_modules(): if isinstance(submodule, LogitsProcessor): @@ -54,6 +65,7 @@ def wrap_logits_processors_in_module(module: nn.Module): setattr(module, name, wrapped) print(f"wrapped {name} with LogitsProcessorForEAGLE3") + class SglangHiddenStatesGenerator: def __init__(self, args, tp_rank: int): self.args = args From cf9a68dd6a77060e6dfbe40d1705e6e0c2b70580 Mon Sep 17 00:00:00 2001 From: Yineng Zhang Date: Tue, 22 Jul 2025 23:45:28 -0700 Subject: [PATCH 05/15] chore: add acknowledgements (#56) --- README.md | 8 ++++++-- assets/acknowledgements.png | Bin 0 -> 382844 bytes 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 assets/acknowledgements.png diff --git a/README.md b/README.md index 22d2202f..579a4e0e 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ - [🪅 Customize model](#-customize-model) - [🤖 Serving and Benchmarking On SGLang](#-serving-and-benchmarking-on-sglang) - [✨ Acknowledgements](#-acknowledgements) +- [💡 Special Thanks to Voltage Park](#-special-thanks-to-voltage-park) ## 📍 Overview @@ -292,9 +293,12 @@ In this way, as long as your `config.json` specifies the correct architecture na Please refer to the [benchmarks](./benchmarks/README.md) document for more details. ## ✨ Acknowledgements -We would like to express our sincere gratitude to the EAGLE official team, especially Hongyang Zhang and Yuhui Li, for their valuable work and support. We are also thankful to the NVIDIA team, in particular Avery H and Izzy Putterman, as well as the Google team, especially Ying Wang, for their insightful discussions and generous help throughout this project. -We would like to extend our special thanks to Meituan for their strong support and contributions, which have played a key role in driving this project forward. +acknowledgements + +We would like to express our sincere gratitude to the official EAGLE team, especially Hongyang Zhang and Yuhui Li, for their invaluable contributions and support. Our thanks also go to the NVIDIA team—particularly Avery H and Izzy Putterman—and to the Google team, especially Ying Wang, for their insightful discussions and generous assistance throughout the project. + +We are especially grateful to Meituan for their strong backing and meaningful contributions, which played a vital role in driving this project forward. This project has also been inspired by many outstanding open-source projects from the LLM community, including [EAGLE](https://github.com/SafeAILab/EAGLE), [BaldEagle](https://github.com/NickL77/BaldEagle), and [TensorRT-Model-Optimizer](https://github.com/NVIDIA/TensorRT-Model-Optimizer) and others. Their contributions and shared knowledge have greatly benefited our work. diff --git a/assets/acknowledgements.png b/assets/acknowledgements.png new file mode 100644 index 0000000000000000000000000000000000000000..c903f2ccc433d41569978cf51040c50909442c07 GIT binary patch literal 382844 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 Date: Wed, 23 Jul 2025 19:28:39 -0700 Subject: [PATCH 06/15] Add local data path support and separate out build dataset code from hidden states generation (#57) * add local data path support and more assistant * small refactor * separate out the data-preprocess logic --- scripts/build_eagle3_dataset.py | 58 +++++++++++++++++++++++++++++++++ scripts/prepare_data.py | 40 +++++++++++++++++++---- 2 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 scripts/build_eagle3_dataset.py diff --git a/scripts/build_eagle3_dataset.py b/scripts/build_eagle3_dataset.py new file mode 100644 index 00000000..70c27b85 --- /dev/null +++ b/scripts/build_eagle3_dataset.py @@ -0,0 +1,58 @@ +""" +Preprocess data for dataset generation. This runs faster without c10d comms. +""" + +import argparse +import hashlib +import os +from pathlib import Path +from typing import Optional +import torch.nn as nn + +import torch +from datasets import Dataset, load_dataset +from tqdm import tqdm +from transformers import AutoConfig, AutoTokenizer + +from specforge.data import build_eagle3_dataset + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--data-path", type=str, required=True) + parser.add_argument("--cache-dir", type=str, default="./cache") + parser.add_argument("--output-path", type=str, default=None) + parser.add_argument("--max-length", type=int, default=2048) + parser.add_argument("--num-samples", type=int, default=None) + return parser.parse_args() + + +def main(): + args = parse_args() + torch.distributed.init_process_group(backend="nccl") + assert os.path.exists( + args.data_path + ), f"Dataset path {args.data_path} does not exist" + if args.output_path is None: + root_path = Path(__file__).parent.parent + args.output_path = root_path.joinpath("cache", "hidden_states") + + dataset = load_dataset("json", data_files=args.data_path)["train"] + if args.num_samples is not None: + print(f"Selecting {args.num_samples} samples from {len(dataset)}") + dataset = dataset.select(range(args.num_samples)) + tokenizer = AutoTokenizer.from_pretrained(args.model_path) + cache_key = hashlib.md5(args.data_path.encode()).hexdigest() + eagle3_dataset = build_eagle3_dataset( + dataset=dataset, + tokenizer=tokenizer, + chat_template=args.chat_template, + max_length=args.max_length, + cache_dir=os.path.join(args.cache_dir, "processed_dataset"), + cache_key=cache_key, + ) + print(f"Built dataset") + + +if __name__ == "__main__": + main() diff --git a/scripts/prepare_data.py b/scripts/prepare_data.py index 44b398df..0ae5f6fe 100644 --- a/scripts/prepare_data.py +++ b/scripts/prepare_data.py @@ -20,7 +20,13 @@ } """ -ROLE_MAPPING = {"human": "user", "gpt": "assistant"} +ROLE_MAPPING = { + "human": "user", + "gpt": "assistant", + "chatgpt": "assistant", + "bing": "assistant", + "bard": "assistant", +} def parse_args(): @@ -37,6 +43,12 @@ def parse_args(): default=None, help="The path to save the processed dataset, if not specified, the dataset will be saved in the cache/dataset/dataset_name directory of the root path", ) + parser.add_argument( + "--data-path", + type=str, + default=None, + help="The path to the custom dataset, if not specified, the default dataset will be loaded", + ) return parser.parse_args() @@ -77,25 +89,37 @@ def process_sharegpt_row(row) -> Dict: """ conversations = row["conversations"] formatted_conversations = [] - + skipped_count = 0 for message in conversations: + if message["from"] not in ROLE_MAPPING: + skipped_count += 1 + continue new_role = ROLE_MAPPING[message["from"]] content = message["value"] formatted_conversations.append({"role": new_role, "content": content}) row = {"id": row["id"], "conversations": formatted_conversations} - return row + return row, skipped_count + + +def load_dataset_from_path(data_path: Path): + suffix = data_path.suffix.split(".")[1] + ds = load_dataset(suffix, data_files=str(data_path), split="train") + return ds def main(): args = parse_args() - # load dataset if args.dataset == "ultrachat": ds = load_dataset("HuggingFaceH4/ultrachat_200k")["train_sft"] proc_fn = process_ultrachat_row elif args.dataset == "sharegpt": - ds = load_dataset("Aeala/ShareGPT_Vicuna_unfiltered")["train"] + if args.data_path is None: + ds = load_dataset("Aeala/ShareGPT_Vicuna_unfiltered")["train"] + else: + print("Loading dataset from custom data path: ", args.data_path) + ds = load_dataset_from_path(Path(args.data_path)) proc_fn = process_sharegpt_row else: raise ValueError( @@ -117,11 +141,15 @@ def main(): ) return + total_skipped_count = 0 with open(output_jsonl_path, "w") as f: for item in tqdm(ds, desc=f"Processing {args.dataset} dataset"): - row = proc_fn(item) + row, skipped_count = proc_fn(item) + total_skipped_count += skipped_count f.write(json.dumps(row) + "\n") + if total_skipped_count > 0: + print(f"Skipped {total_skipped_count}/{len(ds)} messages for {args.dataset}") if __name__ == "__main__": main() From ec812445dba97b64f0b337d10eb5d5bf3fa281ad Mon Sep 17 00:00:00 2001 From: ZhengHSI <75197202+ZhengHSI@users.noreply.github.com> Date: Sun, 27 Jul 2025 21:51:54 +0800 Subject: [PATCH 07/15] Added Eagle training support for qwen3 series models (#58) * add support for qwen3 eagle train * fix * Update README.md * fix * fix and add test * fix code style * feat: add training scripts for qwen3-8B Co-authored-by: sleepcoo * fix * add 235B config * fix chat template * fix chat template --------- Co-authored-by: Yubo Wang --- README.md | 8 +- configs/qwen3-235B-A22B-eagle3.json | 36 + configs/qwen3-30B-A3B-eagle3.json | 31 + configs/qwen3-8b-eagle3.json | 31 + examples/run_qwen3_dense_eagle3_online.sh | 24 + examples/run_qwen3_moe_eagle3_online.sh | 24 + specforge/modeling/auto.py | 10 +- specforge/modeling/target/qwen3_moe.py | 981 ++++++++++++++++++++++ tests/test_qwen3_tp.py | 92 ++ 9 files changed, 1235 insertions(+), 2 deletions(-) create mode 100644 configs/qwen3-235B-A22B-eagle3.json create mode 100644 configs/qwen3-30B-A3B-eagle3.json create mode 100644 configs/qwen3-8b-eagle3.json create mode 100755 examples/run_qwen3_dense_eagle3_online.sh create mode 100755 examples/run_qwen3_moe_eagle3_online.sh create mode 100644 specforge/modeling/target/qwen3_moe.py create mode 100644 tests/test_qwen3_tp.py diff --git a/README.md b/README.md index 579a4e0e..4f639822 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ cat dataset1.jsonl dataset2.jsonl > merged_dataset.jsonl ### 🏎️ Online Training -We have provided a simple startup script to train the Eagle3 model for the Llama 3 and 4 models. You can run the following command to start the training. +We have provided a simple startup script to train the Eagle3 model for the Llama 3 and 4, Qwen3 models. You can run the following command to start the training. ```bash # make sure you have sharegpt data prepared @@ -154,6 +154,12 @@ bash ./examples/run_llama3_eagle3_online.sh # train llama4-scout bash ./examples/run_llama4_eagle3_online.sh + +# train Qwen3-30B-A3B +bash ./examples/run_qwen3_moe_eagle3_online.sh + +# train Qwen3-8B +bash ./examples/run_qwen3_dense_eagle3_online.sh ``` ### 💨 Offline Training diff --git a/configs/qwen3-235B-A22B-eagle3.json b/configs/qwen3-235B-A22B-eagle3.json new file mode 100644 index 00000000..8e28c04a --- /dev/null +++ b/configs/qwen3-235B-A22B-eagle3.json @@ -0,0 +1,36 @@ +{ + "architectures": [ + "LlamaForCausalLMEagle3" + ], + "eagle_config": { + "eagle_aux_hidden_state_layer_ids": [ + 1, + 46, + 90 + ], + "use_aux_hidden_state": true + }, + "attention_bias": false, + "attention_dropout": 0.0, + "bos_token_id": 151643, + "draft_vocab_size": 32000, + "eos_token_id": 151645, + "head_dim": 128, + "hidden_act": "silu", + "hidden_size": 4096, + "initializer_range": 0.02, + "intermediate_size": 24576, + "max_position_embeddings": 40960, + "model_type": "llama", + "num_attention_heads": 64, + "num_hidden_layers": 1, + "num_key_value_heads": 4, + "rms_norm_eps": 1e-06, + "rope_theta": 1000000.0, + "rope_scaling": null, + "tie_word_embeddings": false, + "torch_dtype": "bfloat16", + "transformers_version": "4.51.0", + "use_cache": true, + "vocab_size": 151936 +} diff --git a/configs/qwen3-30B-A3B-eagle3.json b/configs/qwen3-30B-A3B-eagle3.json new file mode 100644 index 00000000..558cb180 --- /dev/null +++ b/configs/qwen3-30B-A3B-eagle3.json @@ -0,0 +1,31 @@ +{ + "architectures": [ + "LlamaForCausalLMEagle3" + ], + "attention_bias": false, + "attention_dropout": 0.0, + "bos_token_id": 151643, + "eos_token_id": 151645, + "head_dim": 128, + "hidden_act": "silu", + "hidden_size": 2048, + "initializer_range": 0.02, + "intermediate_size": 12288, + "max_position_embeddings": 2048, + "max_window_layers": 48, + "model_type": "llama", + "num_attention_heads": 32, + "num_hidden_layers": 1, + "num_key_value_heads":4, + "rms_norm_eps": 1e-06, + "rope_scaling": null, + "rope_theta": 1000000.0, + "sliding_window": null, + "tie_word_embeddings": false, + "torch_dtype": "bfloat16", + "transformers_version": "4.53.2", + "use_cache": true, + "use_sliding_window": false, + "vocab_size": 151936, + "draft_vocab_size": 32000 +} diff --git a/configs/qwen3-8b-eagle3.json b/configs/qwen3-8b-eagle3.json new file mode 100644 index 00000000..2bf9844c --- /dev/null +++ b/configs/qwen3-8b-eagle3.json @@ -0,0 +1,31 @@ +{ + "architectures": [ + "LlamaForCausalLMEagle3" + ], + "attention_bias": false, + "attention_dropout": 0.0, + "bos_token_id": 151643, + "eos_token_id": 151645, + "head_dim": 128, + "hidden_act": "silu", + "hidden_size": 4096, + "initializer_range": 0.02, + "intermediate_size": 12288, + "max_position_embeddings": 2048, + "max_window_layers": 36, + "model_type": "llama", + "num_attention_heads": 32, + "num_hidden_layers": 1, + "num_key_value_heads":8 , + "rms_norm_eps": 1e-06, + "rope_scaling": null, + "rope_theta": 1000000, + "sliding_window": null, + "tie_word_embeddings": false, + "torch_dtype": "bfloat16", + "transformers_version": "4.51.0", + "use_cache": true, + "use_sliding_window": false, + "vocab_size": 151936, + "draft_vocab_size": 32000 +} diff --git a/examples/run_qwen3_dense_eagle3_online.sh b/examples/run_qwen3_dense_eagle3_online.sh new file mode 100755 index 00000000..eb1a3a7b --- /dev/null +++ b/examples/run_qwen3_dense_eagle3_online.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +ROOT_DIR=$(dirname $SCRIPT_DIR) + +# support tp4 train eagle3 for Qwen3-8B +NUM_GPUS=${1:-1} + +torchrun \ + --standalone \ + --nproc_per_node $NUM_GPUS \ + $ROOT_DIR/scripts/train_eagle3_online.py \ + --target-model-path Qwen/Qwen3-8B \ + --draft-model-config $ROOT_DIR/configs/qwen3-8b-eagle3.json \ + --train-data-path $ROOT_DIR/cache/dataset/sharegpt.jsonl \ + --output-dir $ROOT_DIR/outputs/Qwen3-8B-eagle3 \ + --num-epochs 10 \ + --batch-size 1 \ + --learning-rate 1e-4 \ + --max-length 2048 \ + --chat-template qwen \ + --cache-dir $ROOT_DIR/cache \ + --embedding-key model.embed_tokens.weight \ + --tp-size $NUM_GPUS diff --git a/examples/run_qwen3_moe_eagle3_online.sh b/examples/run_qwen3_moe_eagle3_online.sh new file mode 100755 index 00000000..e890d037 --- /dev/null +++ b/examples/run_qwen3_moe_eagle3_online.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +ROOT_DIR=$(dirname $SCRIPT_DIR) + +# support tp4 train eagle3 for Qwen3-30B-A3B +NUM_GPUS=${1:-4} + +torchrun \ + --standalone \ + --nproc_per_node $NUM_GPUS \ + $ROOT_DIR/scripts/train_eagle3_online.py \ + --target-model-path Qwen/Qwen3-30B-A3B \ + --draft-model-config $ROOT_DIR/configs/qwen3-30B-A3B-eagle3.json \ + --train-data-path $ROOT_DIR/cache/dataset/sharegpt.jsonl \ + --output-dir $ROOT_DIR/outputs/Qwen3-30B-A3B-eagle3 \ + --num-epochs 10 \ + --batch-size 1 \ + --learning-rate 1e-4 \ + --max-length 2048 \ + --chat-template qwen \ + --cache-dir $ROOT_DIR/cache \ + --embedding-key model.embed_tokens.weight \ + --tp-size $NUM_GPUS diff --git a/specforge/modeling/auto.py b/specforge/modeling/auto.py index 11ab1a59..9124d61a 100644 --- a/specforge/modeling/auto.py +++ b/specforge/modeling/auto.py @@ -5,12 +5,19 @@ import torch from transformers import AutoConfig from transformers import AutoModelForCausalLM as AutoModelForCausalLMBase -from transformers import Llama4Config, Llama4TextConfig, LlamaConfig, PretrainedConfig +from transformers import ( + Llama4Config, + Llama4TextConfig, + LlamaConfig, + PretrainedConfig, + Qwen3MoeConfig, +) from specforge.utils import default_torch_dtype from .draft.llama3_eagle import LlamaForCausalLMEagle3 from .target.llama4 import Llama4ForCausalLM +from .target.qwen3_moe import Qwen3MoeForCausalLM class AutoEagle3DraftModel(AutoModelForCausalLMBase): @@ -40,6 +47,7 @@ class AutoDistributedTargetModel(AutoModelForCausalLMBase): # the model mapping is currently hardcoded, we should support lazy model mapping via registry _model_mapping = { Llama4TextConfig: [Llama4ForCausalLM], + Qwen3MoeConfig: [Qwen3MoeForCausalLM], } @classmethod diff --git a/specforge/modeling/target/qwen3_moe.py b/specforge/modeling/target/qwen3_moe.py new file mode 100644 index 00000000..2284b4c5 --- /dev/null +++ b/specforge/modeling/target/qwen3_moe.py @@ -0,0 +1,981 @@ +# coding=utf-8 +# Copyright 2025 Qwen Team and HuggingFace Inc. team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import math +from typing import Any, Callable, Dict, List, Optional, Tuple, Union + +import torch +import torch.distributed as dist +import torch.nn as nn +import torch.nn.functional as F +from transformers import Qwen3MoeConfig +from transformers.activations import ACT2FN +from transformers.cache_utils import Cache, DynamicCache +from transformers.generation import GenerationMixin +from transformers.integrations import use_kernel_forward_from_hub +from transformers.masking_utils import ( + create_causal_mask, + create_sliding_window_causal_mask, +) +from transformers.modeling_flash_attention_utils import FlashAttentionKwargs +from transformers.modeling_layers import GradientCheckpointingLayer +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + MoeCausalLMOutputWithPast, + MoeModelOutputWithPast, +) +from transformers.modeling_rope_utils import ROPE_INIT_FUNCTIONS, dynamic_rope_update +from transformers.modeling_utils import ALL_ATTENTION_FUNCTIONS, PreTrainedModel +from transformers.processing_utils import Unpack +from transformers.utils import LossKwargs, auto_docstring, can_return_tuple, logging + +from specforge.distributed import get_tp_group +from specforge.layers.linear import ColumnParallelLinear, RowParallelLinear + +from .base import DistributedTargetModel + +logger = logging.get_logger(__name__) + + +def rotate_half(x): + """Rotates half the hidden dims of the input.""" + x1 = x[..., : x.shape[-1] // 2] + x2 = x[..., x.shape[-1] // 2 :] + return torch.cat((-x2, x1), dim=-1) + + +def apply_rotary_pos_emb(q, k, cos, sin, position_ids=None, unsqueeze_dim=1): + """Applies Rotary Position Embedding to the query and key tensors. + + Args: + q (`torch.Tensor`): The query tensor. + k (`torch.Tensor`): The key tensor. + cos (`torch.Tensor`): The cosine part of the rotary embedding. + sin (`torch.Tensor`): The sine part of the rotary embedding. + position_ids (`torch.Tensor`, *optional*): + Deprecated and unused. + unsqueeze_dim (`int`, *optional*, defaults to 1): + The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and + sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note + that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and + k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes + cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have + the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2. + Returns: + `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding. + """ + cos = cos.unsqueeze(unsqueeze_dim) + sin = sin.unsqueeze(unsqueeze_dim) + q_embed = (q * cos) + (rotate_half(q) * sin) + k_embed = (k * cos) + (rotate_half(k) * sin) + return q_embed, k_embed + + +def repeat_kv(hidden_states: torch.Tensor, n_rep: int) -> torch.Tensor: + """ + This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch, + num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim) + """ + batch, num_key_value_heads, slen, head_dim = hidden_states.shape + if n_rep == 1: + return hidden_states + hidden_states = hidden_states[:, :, None, :, :].expand( + batch, num_key_value_heads, n_rep, slen, head_dim + ) + return hidden_states.reshape(batch, num_key_value_heads * n_rep, slen, head_dim) + + +def eager_attention_forward( + module: nn.Module, + query: torch.Tensor, + key: torch.Tensor, + value: torch.Tensor, + attention_mask: Optional[torch.Tensor], + scaling: float, + dropout: float = 0.0, + **kwargs, +): + key_states = repeat_kv(key, module.num_key_value_groups) + value_states = repeat_kv(value, module.num_key_value_groups) + + attn_weights = torch.matmul(query, key_states.transpose(2, 3)) * scaling + if attention_mask is not None: + causal_mask = attention_mask[:, :, :, : key_states.shape[-2]] + attn_weights = attn_weights + causal_mask + + attn_weights = nn.functional.softmax(attn_weights, dim=-1, dtype=torch.float32).to( + query.dtype + ) + attn_weights = nn.functional.dropout( + attn_weights, p=dropout, training=module.training + ) + attn_output = torch.matmul(attn_weights, value_states) + attn_output = attn_output.transpose(1, 2).contiguous() + + return attn_output, attn_weights + + +class Qwen3MoeAttention(nn.Module): + """Multi-headed attention from 'Attention Is All You Need' paper""" + + def __init__(self, config: Qwen3MoeConfig, layer_idx: int): + super().__init__() + self.config = config + self.layer_idx = layer_idx + self.head_dim = getattr( + config, "head_dim", config.hidden_size // config.num_attention_heads + ) + self.total_num_kv_heads = config.num_key_value_heads + self.num_key_value_groups = ( + config.num_attention_heads // config.num_key_value_heads + ) + self.scaling = self.head_dim**-0.5 + self.attention_dropout = config.attention_dropout + self.is_causal = True + + # Add TP support + self.tp_group = get_tp_group() + + self.q_proj = ColumnParallelLinear( + config.hidden_size, + config.num_attention_heads * self.head_dim, + bias=config.attention_bias, + ) + self.k_proj = ColumnParallelLinear( + config.hidden_size, + config.num_key_value_heads * self.head_dim, + bias=config.attention_bias, + ) + self.v_proj = ColumnParallelLinear( + config.hidden_size, + config.num_key_value_heads * self.head_dim, + bias=config.attention_bias, + ) + self.o_proj = RowParallelLinear( + config.num_attention_heads * self.head_dim, + config.hidden_size, + bias=config.attention_bias, + ) + self.q_norm = Qwen3MoeRMSNorm( + self.head_dim, eps=config.rms_norm_eps + ) # unlike olmo, only on the head dim! + self.k_norm = Qwen3MoeRMSNorm( + self.head_dim, eps=config.rms_norm_eps + ) # thus post q_norm does not need reshape + self.sliding_window = getattr(config, "sliding_window", None) + + def forward( + self, + hidden_states: torch.Tensor, + position_embeddings: tuple[torch.Tensor, torch.Tensor], + attention_mask: Optional[torch.Tensor], + past_key_value: Optional[Cache] = None, + cache_position: Optional[torch.LongTensor] = None, + **kwargs: Unpack[FlashAttentionKwargs], + ) -> tuple[torch.Tensor, Optional[torch.Tensor], Optional[tuple[torch.Tensor]]]: + input_shape = hidden_states.shape[:-1] + hidden_shape = (*input_shape, -1, self.head_dim) + + query_states = self.q_norm( + self.q_proj(hidden_states).view(hidden_shape) + ).transpose(1, 2) + key_states = self.k_norm( + self.k_proj(hidden_states).view(hidden_shape) + ).transpose(1, 2) + value_states = self.v_proj(hidden_states).view(hidden_shape).transpose(1, 2) + + cos, sin = position_embeddings + query_states, key_states = apply_rotary_pos_emb( + query_states, key_states, cos, sin + ) + + if past_key_value is not None: + # sin and cos are specific to RoPE models; cache_position needed for the static cache + cache_kwargs = {"sin": sin, "cos": cos, "cache_position": cache_position} + key_states, value_states = past_key_value.update( + key_states, value_states, self.layer_idx, cache_kwargs + ) + + attention_interface: Callable = eager_attention_forward + if self.config._attn_implementation != "eager": + attention_interface = ALL_ATTENTION_FUNCTIONS[ + self.config._attn_implementation + ] + + attn_output, attn_weights = attention_interface( + self, + query_states, + key_states, + value_states, + attention_mask, + dropout=0.0 if not self.training else self.attention_dropout, + scaling=self.scaling, + sliding_window=self.sliding_window, # diff with Llama + **kwargs, + ) + + attn_output = attn_output.reshape(*input_shape, -1).contiguous() + attn_output = self.o_proj(attn_output) + # Add all_reduce for TP + dist.all_reduce(attn_output, op=dist.ReduceOp.SUM, group=self.tp_group) + return attn_output, attn_weights + + +class Qwen3MoeMLP(nn.Module): + def __init__(self, config, intermediate_size=None): + super().__init__() + self.config = config + self.hidden_size = config.hidden_size + self.intermediate_size = ( + intermediate_size + if intermediate_size is not None + else config.intermediate_size + ) + + # Add TP support + self.tp_group = get_tp_group() + + self.gate_proj = ColumnParallelLinear( + self.hidden_size, self.intermediate_size, bias=False + ) + self.up_proj = ColumnParallelLinear( + self.hidden_size, self.intermediate_size, bias=False + ) + self.down_proj = RowParallelLinear( + self.intermediate_size, self.hidden_size, bias=False + ) + self.act_fn = ACT2FN[config.hidden_act] + + def forward(self, x): + down_proj = self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x)) + # Add all_reduce for TP + dist.all_reduce(down_proj, op=dist.ReduceOp.SUM, group=self.tp_group) + return down_proj + + +class Qwen3MoeSparseMoeBlock(nn.Module): + def __init__(self, config): + super().__init__() + self.num_experts = config.num_experts + self.top_k = config.num_experts_per_tok + self.norm_topk_prob = config.norm_topk_prob + + # gating + self.gate = nn.Linear(config.hidden_size, config.num_experts, bias=False) + self.experts = nn.ModuleList( + [ + Qwen3MoeMLP(config, intermediate_size=config.moe_intermediate_size) + for _ in range(self.num_experts) + ] + ) + + def forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + """ """ + batch_size, sequence_length, hidden_dim = hidden_states.shape + hidden_states = hidden_states.view(-1, hidden_dim) + # router_logits: (batch * sequence_length, n_experts) + router_logits = self.gate(hidden_states) + + routing_weights = F.softmax(router_logits, dim=1, dtype=torch.float) + routing_weights, selected_experts = torch.topk( + routing_weights, self.top_k, dim=-1 + ) + if self.norm_topk_prob: # only diff with mixtral sparse moe block! + routing_weights /= routing_weights.sum(dim=-1, keepdim=True) + # we cast back to the input dtype + routing_weights = routing_weights.to(hidden_states.dtype) + + final_hidden_states = torch.zeros( + (batch_size * sequence_length, hidden_dim), + dtype=hidden_states.dtype, + device=hidden_states.device, + ) + + # One hot encode the selected experts to create an expert mask + # this will be used to easily index which expert is going to be sollicitated + expert_mask = torch.nn.functional.one_hot( + selected_experts, num_classes=self.num_experts + ).permute(2, 1, 0) + + # Loop over all available experts in the model and perform the computation on each expert + expert_hitted = torch.greater(expert_mask.sum(dim=(-1, -2)), 0).nonzero() + for expert_idx in expert_hitted: + expert_layer = self.experts[expert_idx] + idx, top_x = torch.where(expert_mask[expert_idx].squeeze(0)) + + # Index the correct hidden states and compute the expert hidden state for + # the current expert. We need to make sure to multiply the output hidden + # states by `routing_weights` on the corresponding tokens (top-1 and top-2) + current_state = hidden_states[None, top_x].reshape(-1, hidden_dim) + current_hidden_states = ( + expert_layer(current_state) * routing_weights[top_x, idx, None] + ) + + # However `index_add_` only support torch tensors for indexing so we'll use + # the `top_x` tensor here. + final_hidden_states.index_add_( + 0, top_x, current_hidden_states.to(hidden_states.dtype) + ) + final_hidden_states = final_hidden_states.reshape( + batch_size, sequence_length, hidden_dim + ) + return final_hidden_states, router_logits + + +@use_kernel_forward_from_hub("RMSNorm") +class Qwen3MoeRMSNorm(nn.Module): + def __init__(self, hidden_size, eps=1e-6): + """ + Qwen3MoeRMSNorm is equivalent to T5LayerNorm + """ + super().__init__() + self.weight = nn.Parameter(torch.ones(hidden_size)) + self.variance_epsilon = eps + + def forward(self, hidden_states): + input_dtype = hidden_states.dtype + hidden_states = hidden_states.to(torch.float32) + variance = hidden_states.pow(2).mean(-1, keepdim=True) + hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon) + return self.weight * hidden_states.to(input_dtype) + + def extra_repr(self): + return f"{tuple(self.weight.shape)}, eps={self.variance_epsilon}" + + +class Qwen3MoeDecoderLayer(GradientCheckpointingLayer): + def __init__(self, config: Qwen3MoeConfig, layer_idx: int): + super().__init__() + self.hidden_size = config.hidden_size + + self.self_attn = Qwen3MoeAttention(config, layer_idx) + + if (layer_idx not in config.mlp_only_layers) and ( + config.num_experts > 0 and (layer_idx + 1) % config.decoder_sparse_step == 0 + ): + self.mlp = Qwen3MoeSparseMoeBlock(config) + else: + self.mlp = Qwen3MoeMLP(config, intermediate_size=config.intermediate_size) + + self.input_layernorm = Qwen3MoeRMSNorm( + config.hidden_size, eps=config.rms_norm_eps + ) + self.post_attention_layernorm = Qwen3MoeRMSNorm( + config.hidden_size, eps=config.rms_norm_eps + ) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[tuple[torch.Tensor]] = None, + output_attentions: Optional[bool] = False, + output_router_logits: Optional[bool] = False, + use_cache: Optional[bool] = False, + cache_position: Optional[torch.LongTensor] = None, + position_embeddings: Optional[ + tuple[torch.Tensor, torch.Tensor] + ] = None, # necessary, but kept here for BC + **kwargs: Unpack[FlashAttentionKwargs], + ) -> tuple[ + torch.FloatTensor, Optional[tuple[torch.FloatTensor, torch.FloatTensor]] + ]: + """ + Args: + hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)` + attention_mask (`torch.FloatTensor`, *optional*): attention mask of size + `(batch, sequence_length)` where padding elements are indicated by 0. + output_attentions (`bool`, *optional*): + Whether or not to return the attentions tensors of all attention layers. See `attentions` under + returned tensors for more detail. + output_router_logits (`bool`, *optional*): + Whether or not to return the logits of all the routers. They are useful for computing the router loss, + and should not be returned during inference. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding + (see `past_key_values`). + past_key_value (`Tuple(torch.FloatTensor)`, *optional*): cached past key and value projection states + cache_position (`torch.LongTensor` of shape `(sequence_length)`, *optional*): + Indices depicting the position of the input sequence tokens in the sequence. + position_embeddings (`tuple[torch.FloatTensor, torch.FloatTensor]`, *optional*): + Tuple containing the cosine and sine positional embeddings of shape `(batch_size, seq_len, head_dim)`, + with `head_dim` being the embedding dimension of each attention head. + kwargs (`dict`, *optional*): + Arbitrary kwargs to be ignored, used for FSDP and other methods that injects code + into the model + """ + + residual = hidden_states + + hidden_states = self.input_layernorm(hidden_states) + + # Self Attention + hidden_states, self_attn_weights = self.self_attn( + hidden_states=hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_value=past_key_value, + output_attentions=output_attentions, + use_cache=use_cache, + cache_position=cache_position, + position_embeddings=position_embeddings, + **kwargs, + ) + hidden_states = residual + hidden_states + + # Fully Connected + residual = hidden_states + hidden_states = self.post_attention_layernorm(hidden_states) + + hidden_states = self.mlp(hidden_states) + if isinstance(hidden_states, tuple): + hidden_states, router_logits = hidden_states + else: + router_logits = None + + hidden_states = residual + hidden_states + + outputs = (hidden_states,) + + if output_attentions: + outputs += (self_attn_weights,) + + if output_router_logits: + outputs += (router_logits,) + + return outputs + + +class Qwen3MoeRotaryEmbedding(nn.Module): + def __init__(self, config: Qwen3MoeConfig, device=None): + super().__init__() + # BC: "rope_type" was originally "type" + if hasattr(config, "rope_scaling") and config.rope_scaling is not None: + self.rope_type = config.rope_scaling.get( + "rope_type", config.rope_scaling.get("type") + ) + else: + self.rope_type = "default" + self.max_seq_len_cached = config.max_position_embeddings + self.original_max_seq_len = config.max_position_embeddings + + self.config = config + self.rope_init_fn = ROPE_INIT_FUNCTIONS[self.rope_type] + + inv_freq, self.attention_scaling = self.rope_init_fn(self.config, device) + self.register_buffer("inv_freq", inv_freq, persistent=False) + self.original_inv_freq = self.inv_freq + + @torch.no_grad() + @dynamic_rope_update # power user: used with advanced RoPE types (e.g. dynamic rope) + def forward(self, x, position_ids): + inv_freq_expanded = ( + self.inv_freq[None, :, None] + .float() + .expand(position_ids.shape[0], -1, 1) + .to(x.device) + ) + position_ids_expanded = position_ids[:, None, :].float() + + device_type = ( + x.device.type + if isinstance(x.device.type, str) and x.device.type != "mps" + else "cpu" + ) + with torch.autocast(device_type=device_type, enabled=False): # Force float32 + freqs = ( + inv_freq_expanded.float() @ position_ids_expanded.float() + ).transpose(1, 2) + emb = torch.cat((freqs, freqs), dim=-1) + cos = emb.cos() * self.attention_scaling + sin = emb.sin() * self.attention_scaling + + return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype) + + +@auto_docstring +class Qwen3MoePreTrainedModel(PreTrainedModel): + config_class = Qwen3MoeConfig + base_model_prefix = "model" + supports_gradient_checkpointing = True + _no_split_modules = ["Qwen3MoeDecoderLayer"] + _skip_keys_device_placement = ["past_key_values"] + _supports_flash_attn_3 = True + _supports_flash_attn_2 = True + _supports_sdpa = True + _supports_flex_attn = True + _supports_cache_class = True + _supports_quantized_cache = True + _supports_static_cache = False # MoE models don't work with torch.compile (`torch.where(condition)` not supported) + _supports_attention_backend = True + + def _init_weights(self, module): + std = self.config.initializer_range + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=std) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=std) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, Qwen3MoeRMSNorm): + module.weight.data.fill_(1.0) + + +@auto_docstring +class Qwen3MoeModel(Qwen3MoePreTrainedModel): + def __init__(self, config: Qwen3MoeConfig): + super().__init__(config) + self.padding_idx = config.pad_token_id + self.vocab_size = config.vocab_size + + self.embed_tokens = nn.Embedding( + config.vocab_size, config.hidden_size, self.padding_idx + ) + self.layers = nn.ModuleList( + [ + Qwen3MoeDecoderLayer(config, layer_idx) + for layer_idx in range(config.num_hidden_layers) + ] + ) + self.norm = Qwen3MoeRMSNorm(config.hidden_size, eps=config.rms_norm_eps) + self.rotary_emb = Qwen3MoeRotaryEmbedding(config=config) + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_tokens + + def set_input_embeddings(self, value): + self.embed_tokens = value + + @can_return_tuple + @auto_docstring + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[list[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + output_router_logits: Optional[bool] = None, + cache_position: Optional[torch.LongTensor] = None, + **flash_attn_kwargs: Unpack[FlashAttentionKwargs], + ) -> MoeModelOutputWithPast: + output_attentions = ( + output_attentions + if output_attentions is not None + else self.config.output_attentions + ) + output_router_logits = ( + output_router_logits + if output_router_logits is not None + else self.config.output_router_logits + ) + output_hidden_states = ( + output_hidden_states + if output_hidden_states is not None + else self.config.output_hidden_states + ) + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if (input_ids is None) ^ (inputs_embeds is not None): + raise ValueError( + "You must specify exactly one of input_ids or inputs_embeds" + ) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning_once( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + if use_cache and past_key_values is None: + past_key_values = DynamicCache() + + if inputs_embeds is None: + inputs_embeds = self.embed_tokens(input_ids) + + if cache_position is None: + past_seen_tokens = ( + past_key_values.get_seq_length() if past_key_values is not None else 0 + ) + cache_position = torch.arange( + past_seen_tokens, + past_seen_tokens + inputs_embeds.shape[1], + device=inputs_embeds.device, + ) + if position_ids is None: + position_ids = cache_position.unsqueeze(0) + + mask_function = ( + create_causal_mask + if self.config.sliding_window is None + else create_sliding_window_causal_mask + ) + causal_mask = mask_function( + config=self.config, + input_embeds=inputs_embeds, + attention_mask=attention_mask, + cache_position=cache_position, + past_key_values=past_key_values, + position_ids=position_ids, + ) + + hidden_states = inputs_embeds + + # create position embeddings to be shared across the decoder layers + position_embeddings = self.rotary_emb(hidden_states, position_ids) + + # decoder layers + all_hidden_states = () if output_hidden_states else None + all_self_attns = () if output_attentions else None + all_router_logits = () if output_router_logits else None + + for decoder_layer in self.layers: + if output_hidden_states: + all_hidden_states += (hidden_states,) + + layer_outputs = decoder_layer( + hidden_states, + attention_mask=causal_mask, + position_ids=position_ids, + past_key_value=past_key_values, + output_attentions=output_attentions, + output_router_logits=output_router_logits, + use_cache=use_cache, + cache_position=cache_position, + position_embeddings=position_embeddings, + **flash_attn_kwargs, + ) + + hidden_states = layer_outputs[0] + + if output_attentions: + all_self_attns += (layer_outputs[1],) + + if output_router_logits: + all_router_logits += (layer_outputs[-1],) + + hidden_states = self.norm(hidden_states) + + # add hidden states from the last decoder layer + if output_hidden_states: + all_hidden_states += (hidden_states,) + + return MoeModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=past_key_values, + hidden_states=all_hidden_states, + attentions=all_self_attns, + router_logits=all_router_logits, + ) + + +class KwargsForCausalLM(FlashAttentionKwargs, LossKwargs): ... + + +def load_balancing_loss_func( + gate_logits: Union[torch.Tensor, tuple[torch.Tensor], None], + num_experts: Optional[int] = None, + top_k=2, + attention_mask: Optional[torch.Tensor] = None, +) -> Union[torch.Tensor, int]: + r""" + Computes auxiliary load balancing loss as in Switch Transformer - implemented in Pytorch. + + See Switch Transformer (https://huggingface.co/papers/2101.03961) for more details. This function implements the loss + function presented in equations (4) - (6) of the paper. It aims at penalizing cases where the routing between + experts is too unbalanced. + + Args: + gate_logits: + Logits from the `gate`, should be a tuple of model.config.num_hidden_layers tensors of + shape [batch_size X sequence_length, num_experts]. + num_experts: + Number of experts + top_k: + The number of experts to route per-token, can be also interpreted as the `top-k` routing + parameter. + attention_mask (`torch.Tensor`, *optional*): + The attention_mask used in forward function + shape [batch_size X sequence_length] if not None. + + Returns: + The auxiliary loss. + """ + if gate_logits is None or not isinstance(gate_logits, tuple): + return 0 + + if isinstance(gate_logits, tuple): + compute_device = gate_logits[0].device + concatenated_gate_logits = torch.cat( + [layer_gate.to(compute_device) for layer_gate in gate_logits], dim=0 + ) + + routing_weights = torch.nn.functional.softmax(concatenated_gate_logits, dim=-1) + + _, selected_experts = torch.topk(routing_weights, top_k, dim=-1) + + expert_mask = torch.nn.functional.one_hot(selected_experts, num_experts) + + if attention_mask is None: + # Compute the percentage of tokens routed to each experts + tokens_per_expert = torch.mean(expert_mask.float(), dim=0) + + # Compute the average probability of routing to these experts + router_prob_per_expert = torch.mean(routing_weights, dim=0) + else: + batch_size, sequence_length = attention_mask.shape + num_hidden_layers = concatenated_gate_logits.shape[0] // ( + batch_size * sequence_length + ) + + # Compute the mask that masks all padding tokens as 0 with the same shape of expert_mask + expert_attention_mask = ( + attention_mask[None, :, :, None, None] + .expand( + (num_hidden_layers, batch_size, sequence_length, top_k, num_experts) + ) + .reshape(-1, top_k, num_experts) + .to(compute_device) + ) + + # Compute the percentage of tokens routed to each experts + tokens_per_expert = torch.sum( + expert_mask.float() * expert_attention_mask, dim=0 + ) / torch.sum(expert_attention_mask, dim=0) + + # Compute the mask that masks all padding tokens as 0 with the same shape of tokens_per_expert + router_per_expert_attention_mask = ( + attention_mask[None, :, :, None] + .expand((num_hidden_layers, batch_size, sequence_length, num_experts)) + .reshape(-1, num_experts) + .to(compute_device) + ) + + # Compute the average probability of routing to these experts + router_prob_per_expert = torch.sum( + routing_weights * router_per_expert_attention_mask, dim=0 + ) / torch.sum(router_per_expert_attention_mask, dim=0) + + overall_loss = torch.sum(tokens_per_expert * router_prob_per_expert.unsqueeze(0)) + return overall_loss * num_experts + + +@auto_docstring +class Qwen3MoeForCausalLM( + Qwen3MoePreTrainedModel, GenerationMixin, DistributedTargetModel +): + _tied_weights_keys = ["lm_head.weight"] + _tp_plan = {"lm_head": "colwise_rep"} + _pp_plan = {"lm_head": (["hidden_states"], ["logits"])} + + def __init__(self, config): + super().__init__(config) + self.model = Qwen3MoeModel(config) + self.vocab_size = config.vocab_size + + # Use ColumnParallelLinear for lm_head + self.lm_head = ColumnParallelLinear( + config.hidden_size, config.vocab_size, bias=False + ) + + self.router_aux_loss_coef = config.router_aux_loss_coef + self.num_experts = config.num_experts + self.num_experts_per_tok = config.num_experts_per_tok + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.model.embed_tokens + + def set_input_embeddings(self, value): + self.model.embed_tokens = value + + def get_output_embeddings(self): + return self.lm_head + + def set_output_embeddings(self, new_embeddings): + self.lm_head = new_embeddings + + def set_decoder(self, decoder): + self.model = decoder + + def get_decoder(self): + return self.model + + @can_return_tuple + @auto_docstring + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[list[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + output_router_logits: Optional[bool] = None, + cache_position: Optional[torch.LongTensor] = None, + logits_to_keep: Union[int, torch.Tensor] = 0, + **kwargs: Unpack[KwargsForCausalLM], + ) -> MoeCausalLMOutputWithPast: + r""" + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for computing the masked language modeling loss. Indices should either be in `[0, ..., + config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored + (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`. + + Example: + + ```python + >>> from transformers import AutoTokenizer, Qwen3MoeForCausalLM + + >>> model = Qwen3MoeForCausalLM.from_pretrained("Qwen/Qwen3-MoE-15B-A2B") + >>> tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-MoE-15B-A2B") + + >>> prompt = "Hey, are you conscious? Can you talk to me?" + >>> inputs = tokenizer(prompt, return_tensors="pt") + + >>> # Generate + >>> generate_ids = model.generate(inputs.input_ids, max_length=30) + >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0] + "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you." + ```""" + + output_attentions = ( + output_attentions + if output_attentions is not None + else self.config.output_attentions + ) + output_router_logits = ( + output_router_logits + if output_router_logits is not None + else self.config.output_router_logits + ) + + output_hidden_states = ( + output_hidden_states + if output_hidden_states is not None + else self.config.output_hidden_states + ) + + # decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn) + outputs: MoeModelOutputWithPast = self.model( + input_ids=input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + output_router_logits=output_router_logits, + cache_position=cache_position, + **kwargs, + ) + + hidden_states = outputs.last_hidden_state + # Only compute necessary logits, and do not upcast them to float if we are not computing the loss + slice_indices = ( + slice(-logits_to_keep, None) + if isinstance(logits_to_keep, int) + else logits_to_keep + ) + logits = self.lm_head(hidden_states[:, slice_indices, :]) + + # Gather logits from all TP ranks + logits = self._gather_tensor(logits, get_tp_group()) + + loss = None + if labels is not None: + loss = self.loss_function(logits, labels, self.vocab_size, **kwargs) + + aux_loss = None + if output_router_logits: + aux_loss = load_balancing_loss_func( + outputs.router_logits, + self.num_experts, + self.num_experts_per_tok, + attention_mask, + ) + if labels is not None and aux_loss != 0: + loss += self.router_aux_loss_coef * aux_loss.to( + loss.device + ) # make sure to reside in the same device + + return MoeCausalLMOutputWithPast( + loss=loss, + aux_loss=aux_loss, + logits=logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + router_logits=outputs.router_logits, + ) + + def load_weights(self, state_dict: Dict[str, torch.Tensor]): + """Load weights with TP sharding support""" + tp_group = get_tp_group() + + updated_state_dict = {} + for key, value in state_dict.items(): + # Ensure that the state dict is a flat dict of keys and tensors + if not isinstance(value, torch.Tensor): + raise ValueError( + f"Expected all values in the state dict to be torch.Tensor. " + f"Found {type(value)} instead." + ) + + module_key = ".".join(key.split(".")[:-1]) + try: + module = self.get_submodule(module_key) + except AttributeError: + # Skip keys that don't correspond to existing modules + continue + + # Handle expert weights specially + if "experts.gate_up_proj" in key: + gate, up = value.chunk(2, dim=-1) + # Shard the gate and up based on tp + gate = self._shard_tensor(gate, tp_group, -1) + up = self._shard_tensor(up, tp_group, -1) + value = torch.cat((gate, up), dim=-1) + elif "experts.down_proj" in key: + value = self._shard_tensor(value, tp_group, 1) + elif isinstance(module, RowParallelLinear) and key.endswith(".weight"): + value = self._shard_tensor(value, tp_group, -1) + elif isinstance(module, ColumnParallelLinear) and key.endswith(".weight"): + value = self._shard_tensor(value, tp_group, 0) + elif isinstance(module, ColumnParallelLinear) and key.endswith(".bias"): + value = self._shard_tensor(value, tp_group, 0) + + updated_state_dict[key] = value + + # Load state dict + self.load_state_dict(updated_state_dict, strict=False) diff --git a/tests/test_qwen3_tp.py b/tests/test_qwen3_tp.py new file mode 100644 index 00000000..88e3c058 --- /dev/null +++ b/tests/test_qwen3_tp.py @@ -0,0 +1,92 @@ +import os +import tempfile +import unittest + +import torch +import torch.distributed as dist +import torch.multiprocessing as mp +from accelerate.utils import set_seed +from transformers.models.qwen3_moe.configuration_qwen3_moe import Qwen3MoeConfig +from transformers.models.qwen3_moe.modeling_qwen3_moe import Qwen3MoeForCausalLM + +from specforge.distributed import init_distributed + + +def test_qwen3_moe_tp(rank, world_size, temp_dir): + os.environ["RANK"] = str(rank) + os.environ["WORLD_SIZE"] = str(world_size) + os.environ["MASTER_ADDR"] = "localhost" + os.environ["MASTER_PORT"] = "29500" + + init_distributed(tp_size=4) + set_seed(42) + config = Qwen3MoeConfig( + vocab_size=151936, + hidden_size=4096, + intermediate_size=6144, + moe_intermediate_size=1536, + num_hidden_layers=2, + max_position_embeddings=2048, + num_attention_heads=64, + num_key_value_heads=4, + num_experts=128, + num_experts_per_tok=8, + hidden_act="silu", + rms_norm_eps=1e-6, + ) + + # create a simple single-gpu model + model = Qwen3MoeForCausalLM(config).cuda() + + from specforge.modeling.target.qwen3_moe import ( + Qwen3MoeForCausalLM as DistQwen3MoeForCausalLM, + ) + + dist_model = DistQwen3MoeForCausalLM(config).cuda() + + # save the model weights to a temp directory + if dist.get_rank() == 0: + model.save_pretrained(temp_dir) + print(f"Saved model to {temp_dir}") + dist.barrier() + + # load the model weights to the distributed model + print(f"Loading model from {temp_dir}") + dist_model.load_checkpoint(temp_dir) + dist.barrier() + + # create data + input_ids = torch.randint(0, 1000, (1, 256)).cuda() + attention_mask = torch.ones_like(input_ids).cuda() + + expected_logits = model(input_ids=input_ids, attention_mask=attention_mask).logits + dist_logits = dist_model(input_ids=input_ids, attention_mask=attention_mask).logits + + print(expected_logits, dist_logits) + assert torch.allclose( + expected_logits, + dist_logits, + rtol=1e-4, + atol=1e-4, + ), f"Logits are not close, {expected_logits} vs {dist_logits}" + + +class TestQwen3MoeTP(unittest.TestCase): + + def setUp(self): + self.temp_dir = tempfile.TemporaryDirectory() + + def tearDown(self): + self.temp_dir.cleanup() + + def test_qwen3_moe_tp(self): + mp.spawn(test_qwen3_moe_tp, nprocs=4, args=(4, self.temp_dir.name)) + + +if __name__ == "__main__": + suite = unittest.TestSuite() + + suite.addTest(unittest.TestLoader().loadTestsFromTestCase(TestQwen3MoeTP)) + + runner = unittest.TextTestRunner(verbosity=2) + runner.run(suite) From f3cf0824f264c13355c068f7b939e50073d60bdb Mon Sep 17 00:00:00 2001 From: Moussa Kamal Eddine Date: Tue, 29 Jul 2025 05:30:01 +0200 Subject: [PATCH 08/15] Fix draft_vocab_size < existing_tokens (#76) --- specforge/data/preprocessing.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/specforge/data/preprocessing.py b/specforge/data/preprocessing.py index e4615c28..affd31d3 100644 --- a/specforge/data/preprocessing.py +++ b/specforge/data/preprocessing.py @@ -354,6 +354,14 @@ def process_token_dict_to_mappings( - d2t: A tensor mapping draft token ids to target token ids. - t2d: A tensor mapping target token ids to draft token ids. """ + if len(token_dict) < draft_vocab_size: + existing_tokens = set(token_dict.keys()) + missing_tokens = set(range(draft_vocab_size)) - existing_tokens + for token in missing_tokens: + token_dict[token] = 0 + if len(token_dict) >= draft_vocab_size: + break + total_frequency = sum(token_dict.values()) top_N = token_dict.most_common(draft_vocab_size) top_N_frequency_sum = sum(freq for key, freq in top_N) From 5e56befaf65bf154a1eb105d1497babc4dbfb4c0 Mon Sep 17 00:00:00 2001 From: Pengyu Wang Date: Tue, 29 Jul 2025 14:06:04 +0800 Subject: [PATCH 09/15] fix bug for skip count (#72) Co-authored-by: lukec <118525388+sleepcoo@users.noreply.github.com> --- scripts/prepare_data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/prepare_data.py b/scripts/prepare_data.py index 0ae5f6fe..f255c95f 100644 --- a/scripts/prepare_data.py +++ b/scripts/prepare_data.py @@ -71,7 +71,7 @@ def process_ultrachat_row(row) -> Dict: assert role in ["user", "assistant"] formatted_conversations.append({"role": role, "content": content}) row = {"id": row["prompt_id"], "conversations": formatted_conversations} - return row + return row, 0 def process_sharegpt_row(row) -> Dict: From ab0b7006f8639628b66f1f64a8891fd01d8bcd04 Mon Sep 17 00:00:00 2001 From: Shenggui Li Date: Tue, 29 Jul 2025 18:47:10 +0800 Subject: [PATCH 10/15] updated badges (#82) * updated badges * Update README.md --------- Co-authored-by: lukec <118525388+sleepcoo@users.noreply.github.com> --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4f639822..5185a810 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@
logo -[![HF-llama4-scout-eagle3](https://img.shields.io/badge/🤗%20Hugging%20Face-Llama4%20Scout-yellow.svg?style=flat)](https://huggingface.co/lmsys/sglang-EAGLE3-Llama-4-Scout-17B-16E-Instruct-v1) -[![HF-llama4-maverick-eagle3](https://img.shields.io/badge/🤗%20Hugging%20Face-Llama4%20Maverick-yellow.svg?style=flat)](https://huggingface.co/lmsys/sglang-EAGLE3-Llama-4-Maverick-17B-128E-Instruct-v1) +[![github badge](https://img.shields.io/badge/📃%20LMSYS-Blog-black.svg?style=flat)](https://lmsys.org/blog/2025-07-25-spec-forge/) +[![slack badge](https://img.shields.io/badge/Slack-join-blueviolet?logo=slack&)](https://sgl-fru7574.slack.com/archives/C09784E3EN6) +[![SGLang Eagle3](https://img.shields.io/badge/🤗%20Hugging%20Face-SGLang%20Eagle3-yellow.svg?style=flat)](https://huggingface.co/collections/lmsys/eagle-3-6886b2329f3998a8bc23f8ed) [![license](https://img.shields.io/badge/License-MIT%202.0-blue)](./LICENSE) +
From a8a2ea9517f9323b8d623b0dfd7b8af4fba3da4d Mon Sep 17 00:00:00 2001 From: Patricy <56418139+Qin10@users.noreply.github.com> Date: Wed, 30 Jul 2025 14:15:56 +0800 Subject: [PATCH 11/15] fix: enable custom max_len for building offline dataset (#83) --- scripts/train_eagle3_offline.py | 2 ++ specforge/data/preprocessing.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/scripts/train_eagle3_offline.py b/scripts/train_eagle3_offline.py index df14fed4..09cade2a 100644 --- a/scripts/train_eagle3_offline.py +++ b/scripts/train_eagle3_offline.py @@ -151,6 +151,7 @@ def main(): ) train_eagle3_dataset = build_offline_eagle3_dataset( args.train_hidden_states_path, + args.max_length, ) train_dataloader = prepare_dp_dataloaders( @@ -169,6 +170,7 @@ def main(): if args.eval_data_path is not None: eval_eagle3_dataset = build_offline_eagle3_dataset( args.eval_hidden_states_path, + args.max_length, ) eval_dataloader = prepare_dp_dataloaders( eval_eagle3_dataset, diff --git a/specforge/data/preprocessing.py b/specforge/data/preprocessing.py index affd31d3..f90e4da8 100644 --- a/specforge/data/preprocessing.py +++ b/specforge/data/preprocessing.py @@ -273,9 +273,11 @@ def set_epoch(self, epoch): def build_offline_eagle3_dataset( hidden_states_path: str, + max_len: int = 2048, ) -> torch.utils.data.Dataset: return OfflineEagle3Dataset( list_local_files(hidden_states_path), + max_len=max_len, ) From fcb9ea089faceac765d8696fd378b737cb2f09a2 Mon Sep 17 00:00:00 2001 From: lukec <118525388+sleepcoo@users.noreply.github.com> Date: Wed, 30 Jul 2025 14:46:56 +0800 Subject: [PATCH 12/15] add wandb args check (#80) * add wandb args check * fix * opt error log * remove local --- scripts/train_eagle3_offline.py | 6 +++++- scripts/train_eagle3_online.py | 11 ++++++++++- specforge/utils.py | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/scripts/train_eagle3_offline.py b/scripts/train_eagle3_offline.py index 09cade2a..2342f387 100644 --- a/scripts/train_eagle3_offline.py +++ b/scripts/train_eagle3_offline.py @@ -22,7 +22,7 @@ from specforge.distributed import destroy_distributed, get_dp_group, init_distributed from specforge.lr_scheduler import CosineAnnealingWarmupLR from specforge.modeling.target.target_head import TargetHead -from specforge.utils import print_with_rank, rank_0_priority +from specforge.utils import print_with_rank, rank_0_priority, validate_wandb_args def parse_args(): @@ -82,6 +82,10 @@ def parse_args(): parser.add_argument("--wandb-key", type=str, default=None) args = parser.parse_args() + + # Validate wandb arguments + validate_wandb_args(parser, args) + return args diff --git a/scripts/train_eagle3_online.py b/scripts/train_eagle3_online.py index 2cae0405..03e0c767 100644 --- a/scripts/train_eagle3_online.py +++ b/scripts/train_eagle3_online.py @@ -25,7 +25,12 @@ ) from specforge.distributed import destroy_distributed, get_dp_group, init_distributed from specforge.lr_scheduler import CosineAnnealingWarmupLR -from specforge.utils import get_last_checkpoint, print_with_rank, rank_0_priority +from specforge.utils import ( + get_last_checkpoint, + print_with_rank, + rank_0_priority, + validate_wandb_args, +) def parse_args(): @@ -80,6 +85,10 @@ def parse_args(): parser.add_argument("--wandb-key", type=str, default=None) args = parser.parse_args() + + # Validate wandb arguments + validate_wandb_args(parser, args) + return args diff --git a/specforge/utils.py b/specforge/utils.py index fc23a091..0cb886d2 100644 --- a/specforge/utils.py +++ b/specforge/utils.py @@ -1,4 +1,5 @@ import json +import netrc import os import re from contextlib import contextmanager @@ -9,6 +10,38 @@ from transformers import PretrainedConfig +def validate_wandb_args(parser, args): + if args.wandb_key is not None: + return + + if "WANDB_API_KEY" in os.environ: + args.wandb_key = os.environ["WANDB_API_KEY"] + return + + # Check ~/.netrc file for wandb credentials + try: + netrc_path = os.path.expanduser("~/.netrc") + if os.path.exists(netrc_path): + netrc_file = netrc.netrc(netrc_path) + # Check for api.wandb.ai machine + if "api.wandb.ai" in netrc_file.hosts: + login, account, password = netrc_file.authenticators("api.wandb.ai") + if password: + args.wandb_key = password + return True + except (FileNotFoundError, netrc.NetrcParseError): + pass + + if args.wandb_key is None: + if dist.get_rank() == 0: + parser.error( + "When --wandb is enabled, you must provide a wandb API key via one of:\n" + " 1. --wandb-key argument\n" + " 2. WANDB_API_KEY environment variable\n" + " 3. wandb login api-key" + ) + + @contextmanager def rank_0_priority(): rank = dist.get_rank() From 8c227240bc20c3e19ebbf4c50e5c2034edd7f845 Mon Sep 17 00:00:00 2001 From: xuhaojie-2025 Date: Thu, 31 Jul 2025 01:07:51 -0700 Subject: [PATCH 13/15] Adapted the training of Kimi-K2 --- README.md | 13 +- configs/kimi-k2-eagle3.json | 39 ++ examples/get_hidden_states.sh | 11 + examples/run_kimi_k2_eagle3_offline.sh | 21 + examples/run_kimi_k2_eagle3_online.sh | 45 ++ requirements.txt | 4 +- scripts/convert_kimi_tokenizer.py | 110 +++ scripts/prepare_data.py | 2 +- scripts/prepare_hidden_states.py | 8 +- scripts/train_eagle3_offline.py | 4 +- specforge/data/preprocessing.py | 17 +- specforge/data/template.py | 65 ++ specforge/modeling/auto.py | 5 +- specforge/modeling/target/kimi_k2.py | 927 +++++++++++++++++++++++++ 14 files changed, 1257 insertions(+), 14 deletions(-) create mode 100644 configs/kimi-k2-eagle3.json create mode 100644 examples/get_hidden_states.sh create mode 100644 examples/run_kimi_k2_eagle3_offline.sh create mode 100644 examples/run_kimi_k2_eagle3_online.sh create mode 100644 scripts/convert_kimi_tokenizer.py create mode 100644 specforge/modeling/target/kimi_k2.py diff --git a/README.md b/README.md index 5185a810..b269df43 100644 --- a/README.md +++ b/README.md @@ -162,15 +162,26 @@ bash ./examples/run_qwen3_moe_eagle3_online.sh # train Qwen3-8B bash ./examples/run_qwen3_dense_eagle3_online.sh + +# train Kimi-K2 +bash ./examples/run_kimi_k2_eagle3_online.sh ``` ### 💨 Offline Training -We have provided a simple startup script to train the Eagle3 model for Llama-3.1-8B-Instruct model in an offline manner. You can run the following command to start the training. Almost Everything is the same as the Online Training Step, except that you don't need to configure anything about target model. Instead, you need to pass `--train-hidden-states-path` to the file. +We have provided a simple startup script to train the Eagle3 model for Llama-3.1-8B-Instruct and Kimi-K2-Instruct model in an offline manner. You can run the following command to start the training. Almost Everything is the same as the Online Training Step, except that you don't need to configure anything about target model. Instead, you need to pass `--train-hidden-states-path` to the file. + +Note: The tokenizer automatically obtained for the Kimi-K2-Instruct model is TikTokenTokenizer. This tokenizer is not a fast model supported by Rust and lacks the interfaces required during data processing. You need to first run the script to generate tokenizer.json in the root directory of the Kimi-K2-Instruct model, and then modify AutoTokenizer to PreTrainedTokenizerFast in scripts/prepare_hidden_states.py. After doing this, the framework can be called normally. +```bash +python scripts/convert_kimi_tokenizer.py +``` + ```bash # make sure you have sharegpt data prepared bash ./examples/run_llama3_eagle3_offline.sh + +bash ./examples/run_kimi_k2_eagle3_offline.sh ``` ### 📈 Wandb Integration diff --git a/configs/kimi-k2-eagle3.json b/configs/kimi-k2-eagle3.json new file mode 100644 index 00000000..9222cb93 --- /dev/null +++ b/configs/kimi-k2-eagle3.json @@ -0,0 +1,39 @@ +{ + "architectures": [ + "LlamaForCausalLMEagle3" + ], + "eagle_config": { + "eagle_aux_hidden_state_layer_ids": [ + 2, + 30, + 58 + ], + "use_aux_hidden_state": true + }, + "attention_bias": false, + "attention_dropout": 0.0, + "bos_token_id": 163584, + "eos_token_id": 163585, + "head_dim": 128, + "hidden_act": "silu", + "hidden_size": 7168, + "initializer_range": 0.02, + "intermediate_size": 18432, + "max_position_embeddings": 131072, + "max_window_layers": 48, + "model_type": "kimi_k2", + "num_attention_heads": 64, + "num_hidden_layers": 1, + "num_key_value_heads":64, + "rms_norm_eps": 1e-06, + "rope_scaling": null, + "rope_theta": 1000000.0, + "sliding_window": null, + "tie_word_embeddings": false, + "torch_dtype": "bfloat16", + "transformers_version": "4.53.2", + "use_cache": true, + "use_sliding_window": false, + "vocab_size": 163840, + "draft_vocab_size": 32000 +} diff --git a/examples/get_hidden_states.sh b/examples/get_hidden_states.sh new file mode 100644 index 00000000..747b498f --- /dev/null +++ b/examples/get_hidden_states.sh @@ -0,0 +1,11 @@ +torchrun --nproc_per_node=8 \ + scripts/prepare_hidden_states.py \ + --model-path moonshotai/Kimi-K2-Instruct \ + --enable-aux-hidden-states \ + --data-path cache/dataset/sharegpt.jsonl \ + --chat-template kimi_k2 \ + --max-length 2048 \ + --tp-size 8 \ + --batch-size 1 \ + --mem-frac=0.95 \ + --num-samples 2000 \ No newline at end of file diff --git a/examples/run_kimi_k2_eagle3_offline.sh b/examples/run_kimi_k2_eagle3_offline.sh new file mode 100644 index 00000000..6a6f7b5b --- /dev/null +++ b/examples/run_kimi_k2_eagle3_offline.sh @@ -0,0 +1,21 @@ +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +ROOT_DIR=$(dirname $SCRIPT_DIR) + +# train eagle3 for llama3.1-8b +NUM_GPUS=${1:-8} + +torchrun \ + --standalone \ + --nproc_per_node $NUM_GPUS \ + $ROOT_DIR/scripts/train_eagle3_offline.py \ + --target-model-path moonshotai/Kimi-K2-Instruct \ + --draft-model-config $ROOT_DIR/configs/kimi-k2-eagle3.json \ + --train-data-path $ROOT_DIR/cache/dataset/sharegpt.jsonl \ + --train-hidden-states-path $ROOT_DIR/cache/hidden_states/sharegpt \ + --output-dir $ROOT_DIR/outputs/Kimi-K2-eagle3 \ + --num-epochs 10 \ + --batch-size 1 \ + --learning-rate 1e-4 \ + --max-length 2048 \ + --chat-template kimi_k2 \ + --cache-dir $ROOT_DIR/cache \ No newline at end of file diff --git a/examples/run_kimi_k2_eagle3_online.sh b/examples/run_kimi_k2_eagle3_online.sh new file mode 100644 index 00000000..0d52a365 --- /dev/null +++ b/examples/run_kimi_k2_eagle3_online.sh @@ -0,0 +1,45 @@ +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +ROOT_DIR=$(dirname $SCRIPT_DIR) + +# train eagle3 for llama3.1-8b +NUM_GPUS=${1:-8} + +torchrun \ + --standalone \ + --nproc_per_node $NUM_GPUS \ + $ROOT_DIR/scripts/train_eagle3_offline.py \ + --target-model-path /root/models/Kimi-K2-Instruct \ + --draft-model-config $ROOT_DIR/configs/kimi-k2-eagle3.json \ + --train-data-path $ROOT_DIR/cache/dataset/test.jsonl \ + --train-hidden-states-path $ROOT_DIR/cache/hidden_states/rows_0-5000 \ + --output-dir $ROOT_DIR/outputs/Kimi-K2-eagle3 \ + --num-epochs 10 \ + --batch-size 1 \ + --learning-rate 1e-4 \ + --max-length 2048 \#!/bin/bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +ROOT_DIR=$(dirname $SCRIPT_DIR) + +# support tp6 train eagle3 for Kimi-K2 +NUM_GPUS=${1:-8} + +torchrun \ + --standalone \ + --nproc_per_node $NUM_GPUS \ + $ROOT_DIR/scripts/train_eagle3_online.py \ + --target-model-path /root/models/Kimi-K2-Instruct \ + --draft-model-config $ROOT_DIR/configs/kimi-k2-eagle3.json \ + --train-data-path $ROOT_DIR/cache/dataset/sharegpt.jsonl \ + --output-dir $ROOT_DIR/outputs/Kimi-K2-eagle3 \ + --num-epochs 10 \ + --batch-size 1 \ + --learning-rate 1e-4 \ + --max-length 2048 \ + --chat-template kimi_k2 \ + --cache-dir $ROOT_DIR/cache \ + --embedding-key model.embed_tokens.weight \ + --tp-size $NUM_GPUS + + --chat-template kimi_k2 \ + --cache-dir $ROOT_DIR/cache \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index c656ec3a..3655c34d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ pre-commit -torch==2.6.0 -transformers==4.53.2 +torch +transformers datasets setuptools tqdm diff --git a/scripts/convert_kimi_tokenizer.py b/scripts/convert_kimi_tokenizer.py new file mode 100644 index 00000000..2affeb1c --- /dev/null +++ b/scripts/convert_kimi_tokenizer.py @@ -0,0 +1,110 @@ +import tiktoken +from tiktoken.load import load_tiktoken_bpe +from transformers.integrations.tiktoken import convert_tiktoken_to_fast +from transformers import AutoTokenizer + +def load_kimi_encoding(model_path, base_encoding_name="cl100k_base"): + """ + Load Kimi encoding from tiktoken model file + + Args: + model_path (str): Path to the tiktoken.model file + base_encoding_name (str): Name of base encoding to use as fallback + + Returns: + tiktoken.Encoding: Kimi encoding object + """ + try: + # Attempt to create encoding directly from file + with open(model_path, 'rb') as f: + data = f.read() # Read file for potential future use + + # Load BPE ranks using tiktoken's internal function + mergeable_ranks = load_tiktoken_bpe(model_path) + + except Exception as e: + # If failed, use base encoding + special tokens + print(f"Failed to load {model_path} directly: {str(e)}. Using base encoding {base_encoding_name}...") + base_encoding = tiktoken.get_encoding(base_encoding_name) + mergeable_ranks = base_encoding._mergeable_ranks + + # Kimi's special tokens + special_tokens = { + "[BOS]": 163584, + "[EOS]": 163585, + "<|im_end|>": 163586, + "<|im_user|>": 163587, + "<|im_assistant|>": 163588, + "<|start_header_id|>": 163590, + "<|end_header_id|>": 163591, + "[EOT]": 163593, + "<|im_system|>": 163594, + "<|tool_calls_section_begin|>": 163595, + "<|tool_calls_section_end|>": 163596, + "<|tool_call_begin|>": 163597, + "<|tool_call_argument_begin|>": 163598, + "<|tool_call_end|>": 163599, + "<|im_middle|>": 163601, + "[UNK]": 163838, + "[PAD]": 163839 + } + + # Create tiktoken.Encoding object + return tiktoken.Encoding( + name="kimi_k2", + pat_str=r"""'(?:[sdmt]|ll|ve|re)|[^\r\n\p{L}\p{N}]?[\p{L}]+|\p{N}{1,3}| ?[^\s\p{L}\p{N}]+[\r\n]*|\s*[\r\n]+|\s+(?!\S)|\s+""", + mergeable_ranks=mergeable_ranks, + special_tokens=special_tokens + ) + +def convert_to_fast_tokenizer(encoding, output_dir): + """ + Convert tiktoken encoding to fast tokenizer and save + + Args: + encoding (tiktoken.Encoding): Encoding object to convert + output_dir (str): Directory to save the fast tokenizer + """ + # Convert to fast tokenizer + convert_tiktoken_to_fast(encoding, output_dir) + print(f"Conversion completed! Fast tokenizer saved to {output_dir}") + + # Verify conversion result + fast_tokenizer = AutoTokenizer.from_pretrained(output_dir) + print(f"Verification: Fast tokenizer is {'valid' if fast_tokenizer.is_fast else 'invalid'}") + return fast_tokenizer + +def main(model_path, output_dir, base_encoding_name="cl100k_base"): + """ + Main function to orchestrate the tokenizer conversion process + + Args: + model_path (str): Path to the tiktoken.model file + output_dir (str): Directory to save the fast tokenizer + base_encoding_name (str): Name of base encoding to use as fallback + """ + try: + # Load encoding using Method 1 + encoding = load_kimi_encoding(model_path, base_encoding_name) + + print(f"Successfully created encoding object: {encoding.name}") + print(f"Number of special tokens: {len(encoding._special_tokens)}") + print(f"Number of BPE ranks: {len(encoding._mergeable_ranks)}") + + # Convert to fast tokenizer + return convert_to_fast_tokenizer(encoding, output_dir) + + except Exception as e: + print(f"Conversion failed: {str(e)}") + import traceback + traceback.print_exc() + return None + +if __name__ == "__main__": + # Configuration parameters - can be modified or passed as command line arguments + MODEL_PATH = "moonshotai/Kimi-K2-Instruct/tiktoken.model" + OUTPUT_DIR = "moonshotai/Kimi-K2-Instruct" + BASE_ENCODING = "cl100k_base" + + # Execute main function with parameters + main(MODEL_PATH, OUTPUT_DIR, BASE_ENCODING) diff --git a/scripts/prepare_data.py b/scripts/prepare_data.py index f255c95f..48f8e0dd 100644 --- a/scripts/prepare_data.py +++ b/scripts/prepare_data.py @@ -116,7 +116,7 @@ def main(): proc_fn = process_ultrachat_row elif args.dataset == "sharegpt": if args.data_path is None: - ds = load_dataset("Aeala/ShareGPT_Vicuna_unfiltered")["train"] + ds = load_dataset("/root/models/ShareGPT_Vicuna_unfiltered")["train"] else: print("Loading dataset from custom data path: ", args.data_path) ds = load_dataset_from_path(Path(args.data_path)) diff --git a/scripts/prepare_hidden_states.py b/scripts/prepare_hidden_states.py index 7c7bae77..9e2bcfb9 100644 --- a/scripts/prepare_hidden_states.py +++ b/scripts/prepare_hidden_states.py @@ -32,7 +32,7 @@ set_gpu_proc_affinity, ) from tqdm import tqdm -from transformers import AutoConfig, AutoTokenizer +from transformers import AutoConfig, AutoTokenizer, PreTrainedTokenizerFast from specforge.data import build_eagle3_dataset from specforge.utils import print_with_rank, rank_0_priority @@ -73,7 +73,9 @@ def __init__(self, args, tp_rank: int): self.server_args = ServerArgs.from_cli_args(args) self.server_args.enable_return_hidden_states = True self.server_args.context_length = args.max_length - + + # 新增:添加trust_remote_code参数 + self.server_args.trust_remote_code = True # 关键修改 self.server_args.cuda_graph_max_bs = max(self.bench_args.batch_size) self.server_args.cuda_graph_bs = list(self.bench_args.batch_size) _set_envs_and_config(self.server_args) @@ -335,7 +337,7 @@ def main(): dataset = load_dataset("json", data_files=args.data_path)["train"] if args.num_samples is not None: dataset = dataset.select(range(args.num_samples)) - tokenizer = AutoTokenizer.from_pretrained(args.model_path) + tokenizer = PreTrainedTokenizerFast.from_pretrained(args.model_path, trust_remote_code=True, use_fast=True) cache_key = hashlib.md5(args.data_path.encode()).hexdigest() with rank_0_priority(): eagle3_dataset = build_eagle3_dataset( diff --git a/scripts/train_eagle3_offline.py b/scripts/train_eagle3_offline.py index 2342f387..282f4f38 100644 --- a/scripts/train_eagle3_offline.py +++ b/scripts/train_eagle3_offline.py @@ -10,7 +10,7 @@ from torch.distributed.fsdp import FullyShardedDataParallel as FSDP from torch.distributed.fsdp import MixedPrecision, ShardingStrategy, StateDictType from tqdm import tqdm -from transformers import AutoTokenizer +from transformers import AutoTokenizer, PreTrainedTokenizerFast from specforge import AutoDraftModelConfig, AutoEagle3DraftModel, OfflineEagle3Model from specforge.data import ( @@ -132,7 +132,7 @@ def main(): print_with_rank(f"Initialized draft model") # build dataloaders - tokenizer = AutoTokenizer.from_pretrained(args.target_model_path) + tokenizer = PreTrainedTokenizerFast.from_pretrained(args.target_model_path) # convert to dataloader cache_key = hashlib.md5(args.train_data_path.encode()).hexdigest() diff --git a/specforge/data/preprocessing.py b/specforge/data/preprocessing.py index f90e4da8..34a611dd 100644 --- a/specforge/data/preprocessing.py +++ b/specforge/data/preprocessing.py @@ -29,7 +29,7 @@ import torch from datasets import Dataset as HFDataset from tqdm import tqdm -from transformers import PreTrainedTokenizer +from transformers import PreTrainedTokenizer, PreTrainedTokenizerFast from specforge.utils import padding @@ -44,7 +44,7 @@ # ============================== # Copied from https://github.com/SafeAILab/EAGLE/blob/main/eagle/traineagle3/cnets.py def preprocess_conversations( - tokenizer: PreTrainedTokenizer, + tokenizer: PreTrainedTokenizerFast, conversations: List[Conversation], chat_template: ChatTemplate, max_length: int = 2048, @@ -65,11 +65,20 @@ def preprocess_conversations( - attention_mask: List of attention masks. """ system_prompt = chat_template.system_prompt + # This template is only suitable for other models. For kimi_k2, use the modified conversation template. + + # user_message_separator = ( + # f"{chat_template.end_of_turn_token}{chat_template.user_header}" + # ) + # assistant_message_separator = ( + # f"{chat_template.end_of_turn_token}{chat_template.assistant_header}" + # ) + user_message_separator = ( - f"{chat_template.end_of_turn_token}{chat_template.user_header}" + chat_template.user_header ) assistant_message_separator = ( - f"{chat_template.end_of_turn_token}{chat_template.assistant_header}" + chat_template.assistant_header ) # prepare result diff --git a/specforge/data/template.py b/specforge/data/template.py index 16b0f5d7..94d241ab 100644 --- a/specforge/data/template.py +++ b/specforge/data/template.py @@ -113,3 +113,68 @@ def get_all_template_names(self) -> List[str]: end_of_turn_token="<|im_end|>\n", ), ) + + +TEMPLATE_REGISTRY.register( + name="qwen3", + template=ChatTemplate( + # 角色头部标识 + system_header="<|im_start|>system\n", + user_header="<|im_start|>user\n", + assistant_header="<|im_start|>assistant\n", + system_prompt="You are a helpful assistant.", + tool_header="<|im_start|>tool\n", + + # 工具相关标记 + tools_declaration_prefix="# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within XML tags:\n", + tools_declaration_suffix="\n\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n", + + # 工具调用标记 + tool_call_begin="\n", + tool_call_end="\n", + tool_response_wrapper="\n{content}\n", + + # 思考过程标记 + reasoning_wrapper="<|FunctionCallBegin|>\n{reasoning}\n<|FunctionCallEnd|>\n\n", + + # 轮次结束标记 + end_of_turn_token="<|im_end|>\n", + + # 生成提示 + generation_prompt="<|im_start|>assistant\n", + default_thinking_prompt="<|FunctionCallBegin|>\n\n\n\n" + ), +) + + +TEMPLATE_REGISTRY.register( + name="kimi_k2", + template=ChatTemplate( + # 系统提示相关配置 + system_header="<|im_system|>system<|im_middle|>", + system_prompt="You are a helpful assistant.", + + # 角色前缀配置 + user_header="<|im_user|>user<|im_middle|>", + assistant_header="<|im_assistant|>assistant<|im_middle|>", + tool_header="<|im_system|>tool<|im_middle|>", + + # 工具调用相关标记 + tool_declare_prefix="<|im_system|>tool_declare<|im_middle|>", + tool_calls_section_begin="<|tool_calls_section_begin|>", + tool_calls_section_end="<|tool_calls_section_end|>", + tool_call_begin="<|tool_call_begin|>", + tool_call_argument_begin="<|tool_call_argument_begin|>", + tool_call_end="<|tool_call_end|>", + + # 媒体内容标记 + media_start="<|media_start|>image<|media_content|><|media_pad|>", + media_end="<|media_end|>", + + # 轮次结束标记 + end_of_turn_token="<|im_end|>\n", + + # 生成提示前缀 + generation_prompt="<|im_assistant|>assistant<|im_middle|>" + ), +) \ No newline at end of file diff --git a/specforge/modeling/auto.py b/specforge/modeling/auto.py index 9124d61a..281e1ff1 100644 --- a/specforge/modeling/auto.py +++ b/specforge/modeling/auto.py @@ -11,6 +11,7 @@ LlamaConfig, PretrainedConfig, Qwen3MoeConfig, + DeepseekV3Config, ) from specforge.utils import default_torch_dtype @@ -18,6 +19,7 @@ from .draft.llama3_eagle import LlamaForCausalLMEagle3 from .target.llama4 import Llama4ForCausalLM from .target.qwen3_moe import Qwen3MoeForCausalLM +from .target.kimi_k2 import DeepseekV3ForCausalLM class AutoEagle3DraftModel(AutoModelForCausalLMBase): @@ -48,6 +50,7 @@ class AutoDistributedTargetModel(AutoModelForCausalLMBase): _model_mapping = { Llama4TextConfig: [Llama4ForCausalLM], Qwen3MoeConfig: [Qwen3MoeForCausalLM], + DeepseekV3Config: [DeepseekV3ForCausalLM], } @classmethod @@ -59,7 +62,7 @@ def from_pretrained( **config_kwargs, ): config = AutoConfig.from_pretrained( - pretrained_model_name_or_path, **config_kwargs + pretrained_model_name_or_path, trust_remote_code=True, **config_kwargs ) if isinstance(config, Llama4Config): diff --git a/specforge/modeling/target/kimi_k2.py b/specforge/modeling/target/kimi_k2.py new file mode 100644 index 00000000..e4352657 --- /dev/null +++ b/specforge/modeling/target/kimi_k2.py @@ -0,0 +1,927 @@ +# coding=utf-8 +# Copyright 2025 Qwen Team and HuggingFace Inc. team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import math +from typing import Any, Callable, Dict, List, Optional, Tuple, Union, TypedDict + +import torch +import torch.distributed as dist +import torch.nn as nn +import torch.nn.functional as F +from transformers import DeepseekV3Config +from transformers.activations import ACT2FN +from transformers.cache_utils import Cache, DynamicCache +from transformers.generation import GenerationMixin +from transformers.integrations import use_kernel_forward_from_hub +from transformers.masking_utils import ( + create_causal_mask, + create_sliding_window_causal_mask, +) +from transformers.modeling_flash_attention_utils import FlashAttentionKwargs +from transformers.modeling_layers import GradientCheckpointingLayer +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + MoeCausalLMOutputWithPast, + MoeModelOutputWithPast, +) +from transformers.modeling_rope_utils import ROPE_INIT_FUNCTIONS, dynamic_rope_update +from transformers.modeling_utils import ALL_ATTENTION_FUNCTIONS, PreTrainedModel +from transformers.processing_utils import Unpack +from transformers.utils import LossKwargs, auto_docstring, can_return_tuple, logging + + +from specforge.distributed import get_tp_group +from specforge.layers.linear import ColumnParallelLinear, RowParallelLinear + +from .base import DistributedTargetModel + +logger = logging.get_logger(__name__) + +class TransformersKwargs(TypedDict, total=False): + """ + Keyword arguments to be passed to the loss function + + Attributes: + num_items_in_batch (`Optional[torch.Tensor]`, *optional*): + Number of items in the batch. It is recommended to pass it when + you are doing gradient accumulation. + output_hidden_states (`Optional[bool]`, *optional*): + Most of the models support outputing all hidden states computed during the forward pass. + output_attentions (`Optional[bool]`, *optional*): + Turn this on to return the intermediary attention scores. + output_router_logits (`Optional[bool]`, *optional*): + For MoE models, this allows returning the router logits to compute the loss. + cumulative_seqlens_q (`torch.LongTensor`, *optional*) + Gets cumulative sequence length for query state. + cumulative_seqlens_k (`torch.LongTensor`, *optional*) + Gets cumulative sequence length for key state. + max_length_q (`int`, *optional*): + Maximum sequence length for query state. + max_length_k (`int`, *optional*): + Maximum sequence length for key state. + """ + + num_items_in_batch: Optional["torch.Tensor"] + output_hidden_states: Optional[bool] + output_attentions: Optional[bool] + output_router_logits: Optional[bool] + cumulative_seqlens_q: Optional["torch.LongTensor"] + cumulative_seqlens_k: Optional["torch.LongTensor"] + max_length_q: Optional[int] + max_length_k: Optional[int] + + + + + +def rotate_half(x): + """Rotates half the hidden dims of the input.""" + x1 = x[..., : x.shape[-1] // 2] + x2 = x[..., x.shape[-1] // 2 :] + return torch.cat((-x2, x1), dim=-1) + + +def apply_rotary_pos_emb(q, k, cos, sin, position_ids=None, unsqueeze_dim=1): + """Applies Rotary Position Embedding to the query and key tensors. + + Args: + q (`torch.Tensor`): The query tensor. + k (`torch.Tensor`): The key tensor. + cos (`torch.Tensor`): The cosine part of the rotary embedding. + sin (`torch.Tensor`): The sine part of the rotary embedding. + position_ids (`torch.Tensor`, *optional*): + Deprecated and unused. + unsqueeze_dim (`int`, *optional*, defaults to 1): + The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and + sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note + that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and + k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes + cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have + the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2. + Returns: + `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding. + """ + cos = cos.unsqueeze(unsqueeze_dim) + sin = sin.unsqueeze(unsqueeze_dim) + q_embed = (q * cos) + (rotate_half(q) * sin) + k_embed = (k * cos) + (rotate_half(k) * sin) + return q_embed, k_embed + + +def repeat_kv(hidden_states: torch.Tensor, n_rep: int) -> torch.Tensor: + """ + This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch, + num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim) + """ + batch, num_key_value_heads, slen, head_dim = hidden_states.shape + if n_rep == 1: + return hidden_states + hidden_states = hidden_states[:, :, None, :, :].expand(batch, num_key_value_heads, n_rep, slen, head_dim) + return hidden_states.reshape(batch, num_key_value_heads * n_rep, slen, head_dim) + + +def eager_attention_forward( + module: nn.Module, + query: torch.Tensor, + key: torch.Tensor, + value: torch.Tensor, + attention_mask: Optional[torch.Tensor], + scaling: float, + dropout: float = 0.0, + **kwargs: Unpack[TransformersKwargs], +): + key_states = repeat_kv(key, module.num_key_value_groups) + value_states = repeat_kv(value, module.num_key_value_groups) + + attn_weights = torch.matmul(query, key_states.transpose(2, 3)) * scaling + if attention_mask is not None: + causal_mask = attention_mask[:, :, :, : key_states.shape[-2]] + attn_weights = attn_weights + causal_mask + + attn_weights = nn.functional.softmax(attn_weights, dim=-1, dtype=torch.float32).to(query.dtype) + attn_weights = nn.functional.dropout(attn_weights, p=dropout, training=module.training) + attn_output = torch.matmul(attn_weights, value_states) + attn_output = attn_output.transpose(1, 2).contiguous() + + return attn_output, attn_weights + + + +def apply_rotary_pos_emb_interleave(q, k, cos, sin, position_ids=None, unsqueeze_dim=1): + r""" + TODO let's just use the original freqcis computation to not have the view + transpose + reshape! This is not optimized! + Applies Rotary Position Embedding to the query and key tensors. + + Args: + q (`torch.Tensor`): The query tensor. + k (`torch.Tensor`): The key tensor. + cos (`torch.Tensor`): The cosine part of the rotary embedding. + sin (`torch.Tensor`): The sine part of the rotary embedding. + position_ids (`torch.Tensor`): + The position indices of the tokens corresponding to the query and key tensors. For example, this can be + used to pass offsetted position ids when working with a KV-cache. + unsqueeze_dim (`int`, *optional*, defaults to 1): + The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and + sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note + that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and + k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes + cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have + the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2. + Returns: + `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding. + """ + cos = cos.unsqueeze(unsqueeze_dim) + sin = sin.unsqueeze(unsqueeze_dim) + + b, h, s, d = q.shape + q = q.view(b, h, s, d // 2, 2).transpose(4, 3).reshape(b, h, s, d) + + b, h, s, d = k.shape + k = k.view(b, h, s, d // 2, 2).transpose(4, 3).reshape(b, h, s, d) + + q_embed = (q * cos) + (rotate_half(q) * sin) + k_embed = (k * cos) + (rotate_half(k) * sin) + return q_embed, k_embed + + +def yarn_get_mscale(scale=1, mscale=1): + if scale <= 1: + return 1.0 + return 0.1 * mscale * math.log(scale) + 1.0 + + + +class DeepseekV3Attention(nn.Module): + """Multi-headed attention from 'Attention Is All You Need' paper""" + + def __init__(self, config: DeepseekV3Config, layer_idx: int): + super().__init__() + self.config = config + self.layer_idx = layer_idx + self.num_key_value_groups = config.num_attention_heads // config.num_key_value_heads + self.attention_dropout = config.attention_dropout + self.num_heads = config.num_attention_heads + self.rope_theta = config.rope_theta + self.q_lora_rank = config.q_lora_rank + self.qk_rope_head_dim = config.qk_rope_head_dim + self.kv_lora_rank = config.kv_lora_rank + self.v_head_dim = config.v_head_dim + self.qk_nope_head_dim = config.qk_nope_head_dim + self.qk_head_dim = config.qk_head_dim + + self.is_causal = True + + # Add TP support + self.tp_group = get_tp_group() + + if self.q_lora_rank is None: + self.q_proj = ColumnParallelLinear(config.hidden_size, self.num_heads * self.qk_head_dim, bias=False) + else: + self.q_a_proj = ColumnParallelLinear(config.hidden_size, config.q_lora_rank, bias=config.attention_bias) + self.q_a_layernorm = DeepseekV3RMSNorm(config.q_lora_rank) + self.q_b_proj = ColumnParallelLinear(config.q_lora_rank, self.num_heads * self.qk_head_dim, bias=False) + + self.kv_a_proj_with_mqa = ColumnParallelLinear( + config.hidden_size, + self.kv_lora_rank + self.qk_rope_head_dim, + bias=config.attention_bias, + ) + self.kv_a_layernorm = DeepseekV3RMSNorm(self.kv_lora_rank) + self.kv_b_proj = ColumnParallelLinear( + self.kv_lora_rank, + self.num_heads * (self.qk_nope_head_dim + self.v_head_dim), + bias=False, + ) + + self.o_proj = RowParallelLinear( + self.num_heads * self.v_head_dim, + config.hidden_size, + bias=config.attention_bias, + ) + + self.scaling = self.qk_head_dim ** (-0.5) + if self.config.rope_scaling is not None: + mscale_all_dim = self.config.rope_scaling.get("mscale_all_dim", 0) + scaling_factor = self.config.rope_scaling["factor"] + if mscale_all_dim: + mscale = yarn_get_mscale(scaling_factor, mscale_all_dim) + self.scaling = self.scaling * mscale * mscale + + def forward( + self, + hidden_states: torch.Tensor, + position_embeddings: tuple[torch.Tensor, torch.Tensor], + attention_mask: Optional[torch.Tensor], + past_key_value: Optional[Cache] = None, + cache_position: Optional[torch.LongTensor] = None, + **kwargs: Unpack[FlashAttentionKwargs], + ) -> tuple[torch.Tensor, Optional[torch.Tensor], Optional[tuple[torch.Tensor]]]: + batch_size, seq_length = hidden_states.shape[:-1] + query_shape = (batch_size, seq_length, -1, self.qk_head_dim) + key_shape = (batch_size, seq_length, -1, self.qk_nope_head_dim + self.v_head_dim) + + if self.q_lora_rank is None: + q_states = self.q_proj(hidden_states) + else: + q_states = self.q_b_proj(self.q_a_layernorm(self.q_a_proj(hidden_states))) + q_states = q_states.view(query_shape).transpose(1, 2) + q_pass, q_rot = torch.split(q_states, [self.qk_nope_head_dim, self.qk_rope_head_dim], dim=-1) + + compressed_kv = self.kv_a_proj_with_mqa(hidden_states) + k_pass, k_rot = torch.split(compressed_kv, [self.kv_lora_rank, self.qk_rope_head_dim], dim=-1) + + k_pass = self.kv_b_proj(self.kv_a_layernorm(k_pass)).view(key_shape).transpose(1, 2) + k_pass, value_states = torch.split(k_pass, [self.qk_nope_head_dim, self.v_head_dim], dim=-1) + + k_rot = k_rot.view(batch_size, 1, seq_length, self.qk_rope_head_dim) + + cos, sin = position_embeddings + if self.config.rope_interleave: # support using interleaved weights for efficiency + q_rot, k_rot = apply_rotary_pos_emb_interleave(q_rot, k_rot, cos, sin) + else: + q_rot, k_rot = apply_rotary_pos_emb(q_rot, k_rot, cos, sin) + k_rot = k_rot.expand(*k_pass.shape[:-1], -1) + + query_states = torch.cat((q_pass, q_rot), dim=-1) + key_states = torch.cat((k_pass, k_rot), dim=-1) + + if past_key_value is not None: + # sin and cos are specific to RoPE models; cache_position needed for the static cache + cache_kwargs = {"sin": sin, "cos": cos, "cache_position": cache_position} + key_states, value_states = past_key_value.update(key_states, value_states, self.layer_idx, cache_kwargs) + + if self.config._attn_implementation == "flash_attention_2" and self.qk_head_dim != self.v_head_dim: + value_states = F.pad(value_states, [0, self.qk_head_dim - self.v_head_dim]) + + attention_interface: Callable = eager_attention_forward + if self.config._attn_implementation != "eager": + attention_interface = ALL_ATTENTION_FUNCTIONS[self.config._attn_implementation] + + attn_output, attn_weights = attention_interface( + self, + query_states, + key_states, + value_states, + attention_mask, + dropout=0.0 if not self.training else self.attention_dropout, + scaling=self.scaling, + **kwargs, + ) + + if self.config._attn_implementation == "flash_attention_2" and self.qk_head_dim != self.v_head_dim: + attn_output = attn_output[:, :, :, : self.v_head_dim] + + attn_output = attn_output.reshape(batch_size, seq_length, -1).contiguous() + attn_output = self.o_proj(attn_output) + # Add all_reduce for TP + dist.all_reduce(attn_output, op=dist.ReduceOp.SUM, group=self.tp_group) + return attn_output, attn_weights + + +class DeepseekV3MLP(nn.Module): + def __init__(self, config, hidden_size=None, intermediate_size=None): + super().__init__() + self.config = config + self.hidden_size = config.hidden_size if hidden_size is None else hidden_size + self.intermediate_size = config.intermediate_size if intermediate_size is None else intermediate_size + + # Add TP support + self.tp_group = get_tp_group() + + self.gate_proj = ColumnParallelLinear(self.hidden_size, self.intermediate_size, bias=False) + self.up_proj = ColumnParallelLinear(self.hidden_size, self.intermediate_size, bias=False) + self.down_proj = RowParallelLinear(self.intermediate_size, self.hidden_size, bias=False) + self.act_fn = ACT2FN[config.hidden_act] + + def forward(self, x): + down_proj = self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x)) + # Add all_reduce for TP + dist.all_reduce(down_proj, op=dist.ReduceOp.SUM, group=self.tp_group) + return down_proj + + +class DeepseekV3TopkRouter(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.top_k = config.num_experts_per_tok + self.n_routed_experts = config.n_routed_experts + self.routed_scaling_factor = config.routed_scaling_factor + self.n_group = config.n_group + self.topk_group = config.topk_group + self.norm_topk_prob = config.norm_topk_prob + + self.weight = nn.Parameter(torch.empty((self.n_routed_experts, config.hidden_size))) + self.register_buffer("e_score_correction_bias", torch.zeros(self.n_routed_experts)) + + @torch.no_grad() + def get_topk_indices(self, scores): + scores_for_choice = scores.view(-1, self.n_routed_experts) + self.e_score_correction_bias.unsqueeze(0) + group_scores = ( + scores_for_choice.view(-1, self.n_group, self.n_routed_experts // self.n_group) + .topk(2, dim=-1)[0] + .sum(dim=-1) + ) + group_idx = torch.topk(group_scores, k=self.topk_group, dim=-1, sorted=False)[1] + group_mask = torch.zeros_like(group_scores) + group_mask.scatter_(1, group_idx, 1) + score_mask = ( + group_mask.unsqueeze(-1) + .expand(-1, self.n_group, self.n_routed_experts // self.n_group) + .reshape(-1, self.n_routed_experts) + ) + scores_for_choice = scores_for_choice.masked_fill(~score_mask.bool(), 0.0) + topk_indices = torch.topk(scores_for_choice, k=self.top_k, dim=-1, sorted=False)[1] + return topk_indices + + def forward(self, hidden_states): + hidden_states = hidden_states.view(-1, self.config.hidden_size) + router_logits = F.linear(hidden_states.type(torch.float32), self.weight.type(torch.float32)) + scores = router_logits.sigmoid() + topk_indices = self.get_topk_indices(scores) + topk_weights = scores.gather(1, topk_indices) + if self.norm_topk_prob: + denominator = topk_weights.sum(dim=-1, keepdim=True) + 1e-20 + topk_weights /= denominator + topk_weights = topk_weights * self.routed_scaling_factor + return topk_indices, topk_weights + + +class DeepseekV3MoE(nn.Module): + """ + A mixed expert module containing shared experts. + """ + + def __init__(self, config): + super().__init__() + self.config = config + self.experts = nn.ModuleList( + [ + DeepseekV3MLP(config, intermediate_size=config.moe_intermediate_size) + for _ in range(config.n_routed_experts) + ] + ) + self.gate = DeepseekV3TopkRouter(config) + self.shared_experts = DeepseekV3MLP( + config=config, intermediate_size=config.moe_intermediate_size * config.n_shared_experts + ) + + def moe(self, hidden_states: torch.Tensor, topk_indices: torch.Tensor, topk_weights: torch.Tensor): + r""" + CALL FOR CONTRIBUTION! I don't have time to optimise this right now, but expert weights need to be fused + to not have to do a loop here (deepseek has 256 experts soooo yeah). + """ + final_hidden_states = torch.zeros_like(hidden_states, dtype=topk_weights.dtype) + expert_mask = torch.nn.functional.one_hot(topk_indices, num_classes=len(self.experts)) + expert_mask = expert_mask.permute(2, 0, 1) + + for expert_idx in range(len(self.experts)): + expert = self.experts[expert_idx] + mask = expert_mask[expert_idx] + token_indices, weight_indices = torch.where(mask) + + if token_indices.numel() > 0: + expert_weights = topk_weights[token_indices, weight_indices] + expert_input = hidden_states[token_indices] + expert_output = expert(expert_input) + weighted_output = expert_output * expert_weights.unsqueeze(-1) + final_hidden_states.index_add_(0, token_indices, weighted_output) + + # in original deepseek, the output of the experts are gathered once we leave this module + # thus the moe module is itelsf an IsolatedParallel module + # and all expert are "local" meaning we shard but we don't gather + return final_hidden_states.type(hidden_states.dtype) + + def forward(self, hidden_states): + residuals = hidden_states + orig_shape = hidden_states.shape + topk_indices, topk_weights = self.gate(hidden_states) + hidden_states = hidden_states.view(-1, hidden_states.shape[-1]) + hidden_states = self.moe(hidden_states, topk_indices, topk_weights).view(*orig_shape) + hidden_states = hidden_states + self.shared_experts(residuals) + return hidden_states + + +@use_kernel_forward_from_hub("RMSNorm") +class DeepseekV3RMSNorm(nn.Module): + def __init__(self, hidden_size, eps=1e-6): + """ + DeepseekV3RMSNorm is equivalent to T5LayerNorm + """ + super().__init__() + self.weight = nn.Parameter(torch.ones(hidden_size)) + self.variance_epsilon = eps + + def forward(self, hidden_states): + input_dtype = hidden_states.dtype + hidden_states = hidden_states.to(torch.float32) + variance = hidden_states.pow(2).mean(-1, keepdim=True) + hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon) + return self.weight * hidden_states.to(input_dtype) + + def extra_repr(self): + return f"{tuple(self.weight.shape)}, eps={self.variance_epsilon}" + + +class DeepseekV3DecoderLayer(GradientCheckpointingLayer): + def __init__(self, config: DeepseekV3Config, layer_idx: int): + super().__init__() + self.hidden_size = config.hidden_size + + self.self_attn = DeepseekV3Attention(config=config, layer_idx=layer_idx) + + if layer_idx >= config.first_k_dense_replace: + self.mlp = DeepseekV3MoE(config) + else: + self.mlp = DeepseekV3MLP(config) + + self.input_layernorm = DeepseekV3RMSNorm(config.hidden_size, eps=config.rms_norm_eps) + self.post_attention_layernorm = DeepseekV3RMSNorm(config.hidden_size, eps=config.rms_norm_eps) + + def forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Cache] = None, + use_cache: Optional[bool] = False, + cache_position: Optional[torch.LongTensor] = None, + position_embeddings: Optional[tuple[torch.Tensor, torch.Tensor]] = None, # necessary, but kept here for BC + output_attentions: Optional[bool] = False, # 新增:控制是否返回注意力权重 + output_router_logits: Optional[bool] = False, # 新增:控制是否返回MoE路由logits + **kwargs: Unpack[TransformersKwargs], + ) -> tuple[torch.Tensor, ]: + residual = hidden_states + hidden_states = self.input_layernorm(hidden_states) + # Self Attention + hidden_states, self_attn_weights = self.self_attn( + hidden_states=hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_value=past_key_value, + use_cache=use_cache, + cache_position=cache_position, + position_embeddings=position_embeddings, + output_attentions=output_attentions, # 传递参数:控制是否计算注意力权重 + **kwargs, + ) + hidden_states = residual + hidden_states + + # 全连接/MoE层:处理路由logits + residual = hidden_states + hidden_states = self.post_attention_layernorm(hidden_states) + mlp_output = self.mlp(hidden_states) + + # 分离隐藏状态和路由logits(仅MoE层有效) + if isinstance(mlp_output, tuple): + hidden_states, router_logits = mlp_output # MoE层返回(hidden_states, router_logits) + else: + hidden_states = mlp_output # 普通MLP层仅返回hidden_states + router_logits = None # 非MoE层时路由logits为None + + hidden_states = residual + hidden_states + + # 构建动态返回值:根据参数包含额外信息 + outputs = (hidden_states,) + if output_attentions: + outputs += (self_attn_weights,) # 附加注意力权重 + if output_router_logits and router_logits is not None: + outputs += (router_logits,) # 附加路由logits(仅MoE层且参数开启时) + + return outputs + + +class DeepseekV3RotaryEmbedding(nn.Module): + def __init__(self, config: DeepseekV3Config, device=None): + super().__init__() + # BC: "rope_type" was originally "type" + if hasattr(config, "rope_scaling") and isinstance(config.rope_scaling, dict): + self.rope_type = config.rope_scaling.get("rope_type", config.rope_scaling.get("type")) + else: + self.rope_type = "default" + self.max_seq_len_cached = config.max_position_embeddings + self.original_max_seq_len = config.max_position_embeddings + + self.config = config + self.rope_init_fn = ROPE_INIT_FUNCTIONS[self.rope_type] + + inv_freq, self.attention_scaling = self.rope_init_fn(self.config, device) + self.register_buffer("inv_freq", inv_freq, persistent=False) + self.original_inv_freq = self.inv_freq + + @torch.no_grad() + @dynamic_rope_update # power user: used with advanced RoPE types (e.g. dynamic rope) + def forward(self, x, position_ids): + inv_freq_expanded = self.inv_freq[None, :, None].float().expand(position_ids.shape[0], -1, 1).to(x.device) + position_ids_expanded = position_ids[:, None, :].float() + + device_type = x.device.type if isinstance(x.device.type, str) and x.device.type != "mps" else "cpu" + with torch.autocast(device_type=device_type, enabled=False): # Force float32 + freqs = (inv_freq_expanded.float() @ position_ids_expanded.float()).transpose(1, 2) + emb = torch.cat((freqs, freqs), dim=-1) + cos = emb.cos() * self.attention_scaling + sin = emb.sin() * self.attention_scaling + + return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype) + + + +@auto_docstring +class DeepseekV3PreTrainedModel(PreTrainedModel): + config_class = DeepseekV3Config # 显式指定配置类 + base_model_prefix = "model" + supports_gradient_checkpointing = True + _no_split_modules = ["DeepseekV3DecoderLayer"] + _skip_keys_device_placement = ["past_key_values"] + + # 细化Flash Attention版本支持 + _supports_flash_attn_3 = True + _supports_flash_attn_2 = True + _supports_sdpa = True + _supports_flex_attn = True + + # 新增缓存相关功能支持 + _supports_cache_class = True + _supports_quantized_cache = True + _supports_static_cache = False # 根据模型特性调整(如MoE层可能不支持静态缓存) + + _supports_attention_backend = True + + def _init_weights(self, module): + # 调用父类初始化逻辑后,添加自定义细化初始化 + super()._init_weights(module) + + # 原有的路由层初始化保留 + if isinstance(module, DeepseekV3TopkRouter): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + + # 新增其他模块的精细化初始化 + if isinstance(module, nn.Linear): + # 线性层权重用配置的初始化范围,偏置置0 + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + # 嵌入层权重初始化,padding位置置0 + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, DeepseekV3RMSNorm): + # RMSNorm层权重初始化为1(保持输入分布稳定) + module.weight.data.fill_(1.0) + + +@auto_docstring +class DeepseekV3Model(DeepseekV3PreTrainedModel): + _keys_to_ignore_on_load_unexpected = [r"model\.layers\.61.*"] + + def __init__(self, config: DeepseekV3Config): + super().__init__(config) + self.padding_idx = config.pad_token_id + self.vocab_size = config.vocab_size + + self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.padding_idx) + self.layers = nn.ModuleList( + [DeepseekV3DecoderLayer(config, layer_idx) for layer_idx in range(config.num_hidden_layers)] + ) + self.norm = DeepseekV3RMSNorm(config.hidden_size, eps=config.rms_norm_eps) + self.rotary_emb = DeepseekV3RotaryEmbedding(config=config) + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + @can_return_tuple + @auto_docstring + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[Cache] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + cache_position: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + output_router_logits: Optional[bool] = None, + **kwargs: Unpack[TransformersKwargs], + ) -> MoeModelOutputWithPast: + # 参数默认值处理 + output_attentions = ( + output_attentions + if output_attentions is not None + else self.config.output_attentions + ) + output_hidden_states = ( + output_hidden_states + if output_hidden_states is not None + else self.config.output_hidden_states + ) + output_router_logits = ( + output_router_logits + if output_router_logits is not None + else self.config.output_router_logits + ) + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if (input_ids is None) ^ (inputs_embeds is not None): + raise ValueError("You must specify exactly one of input_ids or inputs_embeds") + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning_once( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + if inputs_embeds is None: + inputs_embeds: torch.Tensor = self.embed_tokens(input_ids) + + if use_cache and past_key_values is None: + past_key_values = DynamicCache() + + if cache_position is None: + past_seen_tokens = past_key_values.get_seq_length() if past_key_values is not None else 0 + cache_position: torch.Tensor = torch.arange( + past_seen_tokens, past_seen_tokens + inputs_embeds.shape[1], device=inputs_embeds.device + ) + + if position_ids is None: + position_ids = cache_position.unsqueeze(0) + + causal_mask = create_causal_mask( + config=self.config, + input_embeds=inputs_embeds, + attention_mask=attention_mask, + cache_position=cache_position, + past_key_values=past_key_values, + position_ids=position_ids, + ) + + hidden_states = inputs_embeds + position_embeddings = self.rotary_emb(hidden_states, position_ids) + + # 初始化收集变量 + all_hidden_states = () if output_hidden_states else None + all_self_attns = () if output_attentions else None + all_router_logits = () if output_router_logits else None + + # 层循环处理 + for decoder_layer in self.layers[: self.config.num_hidden_layers]: + # 在每层处理之前保存隐藏状态 + if output_hidden_states: + all_hidden_states += (hidden_states,) + + # 调用层处理 + layer_outputs = decoder_layer( + hidden_states, + attention_mask=causal_mask, + position_ids=position_ids, + past_key_value=past_key_values, + cache_position=cache_position, + position_embeddings=position_embeddings, + output_attentions=output_attentions, + output_router_logits=output_router_logits, + use_cache=use_cache, + **kwargs, + ) + + # 处理层输出 + if isinstance(layer_outputs, tuple): + hidden_states = layer_outputs[0] + + # 收集注意力权重 + if output_attentions and len(layer_outputs) > 1: + all_self_attns += (layer_outputs[1],) + + # 收集路由器输出 + if output_router_logits and len(layer_outputs) > 2: + all_router_logits += (layer_outputs[-1],) + else: + # 如果层返回的不是元组,直接赋值 + hidden_states = layer_outputs + + # 应用最终的层归一化 + hidden_states = self.norm(hidden_states) + + # 添加最后一层的隐藏状态 + if output_hidden_states: + all_hidden_states += (hidden_states,) + + print("+"*50) + print(f"all_hidden_states 包含的层数: {len(all_hidden_states)}") + # 返回 MoE 模型输出 + return MoeModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=past_key_values, + hidden_states=all_hidden_states, + attentions=all_self_attns, + router_logits=all_router_logits, + ) + + +class KwargsForCausalLM(FlashAttentionKwargs, LossKwargs): ... + +@auto_docstring +class DeepseekV3ForCausalLM(DeepseekV3PreTrainedModel, GenerationMixin, DistributedTargetModel): + _tied_weights_keys = ["lm_head.weight"] + _tp_plan = {"lm_head": "colwise_rep"} + _pp_plan = {"lm_head": (["hidden_states"], ["logits"])} + + def __init__(self, config): + super().__init__(config) + self.model = DeepseekV3Model(config) + self.vocab_size = config.vocab_size + # Use ColumnParallelLinear for lm_head + self.lm_head = ColumnParallelLinear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def set_decoder(self, decoder): + self.model = decoder + + def get_decoder(self): + return self.model + + @can_return_tuple + @auto_docstring + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_values: Optional[Cache] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + output_router_logits: Optional[bool] = None, + cache_position: Optional[torch.LongTensor] = None, + logits_to_keep: Union[int, torch.Tensor] = 0, + **kwargs: Unpack[TransformersKwargs], + ) -> CausalLMOutputWithPast: + r""" + Example: + + ```python + >>> from transformers import AutoTokenizer, DeepseekV3ForCausalLM + + >>> model = DeepseekV3ForCausalLM.from_pretrained("meta-deepseek_v3/DeepseekV3-2-7b-hf") + >>> tokenizer = AutoTokenizer.from_pretrained("meta-deepseek_v3/DeepseekV3-2-7b-hf") + + >>> prompt = "Hey, are you conscious? Can you talk to me?" + >>> inputs = tokenizer(prompt, return_tensors="pt") + + >>> # Generate + >>> generate_ids = model.generate(inputs.input_ids, max_length=30) + >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0] + "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you." + ```""" + output_attentions = ( + output_attentions + if output_attentions is not None + else self.config.output_attentions + ) + output_router_logits = ( + output_router_logits + if output_router_logits is not None + else self.config.output_router_logits + ) + + output_hidden_states = ( + output_hidden_states + if output_hidden_states is not None + else self.config.output_hidden_states + ) + + outputs: BaseModelOutputWithPast = self.model( + input_ids=input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + output_router_logits=output_router_logits, + cache_position=cache_position, + **kwargs, + ) + + hidden_states = outputs.last_hidden_state + # Only compute necessary logits, and do not upcast them to float if we are not computing the loss + slice_indices = slice(-logits_to_keep, None) if isinstance(logits_to_keep, int) else logits_to_keep + logits = self.lm_head(hidden_states[:, slice_indices, :]) + + # Gather logits from all TP ranks + logits = self._gather_tensor(logits, get_tp_group()) + + loss = None + if labels is not None: + loss = self.loss_function(logits=logits, labels=labels, vocab_size=self.config.vocab_size, **kwargs) + + return CausalLMOutputWithPast( + loss=loss, + logits=logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def load_weights(self, state_dict: Dict[str, torch.Tensor]): + """Load weights with TP sharding support""" + tp_group = get_tp_group() + + updated_state_dict = {} + for key, value in state_dict.items(): + # Ensure that the state dict is a flat dict of keys and tensors + if not isinstance(value, torch.Tensor): + raise ValueError( + f"Expected all values in the state dict to be torch.Tensor. " + f"Found {type(value)} instead." + ) + + module_key = ".".join(key.split(".")[:-1]) + try: + module = self.get_submodule(module_key) + except AttributeError: + # Skip keys that don't correspond to existing modules + continue + + # Handle expert weights specially + if "experts.gate_up_proj" in key: + gate, up = value.chunk(2, dim=-1) + # Shard the gate and up based on tp + gate = self._shard_tensor(gate, tp_group, -1) + up = self._shard_tensor(up, tp_group, -1) + value = torch.cat((gate, up), dim=-1) + elif "experts.down_proj" in key: + value = self._shard_tensor(value, tp_group, 1) + elif isinstance(module, RowParallelLinear) and key.endswith(".weight"): + value = self._shard_tensor(value, tp_group, -1) + elif isinstance(module, ColumnParallelLinear) and key.endswith(".weight"): + value = self._shard_tensor(value, tp_group, 0) + elif isinstance(module, ColumnParallelLinear) and key.endswith(".bias"): + value = self._shard_tensor(value, tp_group, 0) + + updated_state_dict[key] = value + + # Load state dict + self.load_state_dict(updated_state_dict, strict=False) \ No newline at end of file From 2f14bdfd34ea78fdcfab8d6d4b2994358b775554 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 3 Aug 2025 17:53:29 +0800 Subject: [PATCH 14/15] Added Eagle training support for Kimi-K2 --- examples/get_hidden_states.sh | 4 ++-- examples/run_kimi_k2_eagle3_offline.sh | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/get_hidden_states.sh b/examples/get_hidden_states.sh index 747b498f..1be6c3d1 100644 --- a/examples/get_hidden_states.sh +++ b/examples/get_hidden_states.sh @@ -1,8 +1,8 @@ torchrun --nproc_per_node=8 \ scripts/prepare_hidden_states.py \ - --model-path moonshotai/Kimi-K2-Instruct \ + --model-path /root/models/Kimi-K2-Instruct \ --enable-aux-hidden-states \ - --data-path cache/dataset/sharegpt.jsonl \ + --data-path /root/script/SpecForge/cache/dataset/test.jsonl \ --chat-template kimi_k2 \ --max-length 2048 \ --tp-size 8 \ diff --git a/examples/run_kimi_k2_eagle3_offline.sh b/examples/run_kimi_k2_eagle3_offline.sh index 6a6f7b5b..40255166 100644 --- a/examples/run_kimi_k2_eagle3_offline.sh +++ b/examples/run_kimi_k2_eagle3_offline.sh @@ -8,10 +8,10 @@ torchrun \ --standalone \ --nproc_per_node $NUM_GPUS \ $ROOT_DIR/scripts/train_eagle3_offline.py \ - --target-model-path moonshotai/Kimi-K2-Instruct \ + --target-model-path /root/models/Kimi-K2-Instruct \ --draft-model-config $ROOT_DIR/configs/kimi-k2-eagle3.json \ - --train-data-path $ROOT_DIR/cache/dataset/sharegpt.jsonl \ - --train-hidden-states-path $ROOT_DIR/cache/hidden_states/sharegpt \ + --train-data-path $ROOT_DIR/cache/dataset/test.jsonl \ + --train-hidden-states-path $ROOT_DIR/cache/hidden_states/rows_0-5000 \ --output-dir $ROOT_DIR/outputs/Kimi-K2-eagle3 \ --num-epochs 10 \ --batch-size 1 \ From ba3389b27c14f4f170ce74cde27725687ff1a5ce Mon Sep 17 00:00:00 2001 From: root Date: Mon, 4 Aug 2025 11:30:20 +0800 Subject: [PATCH 15/15] Added Eagle training support for Kimi-K2 and Resolve conflicts with upstream/main --- specforge/data/preprocessing.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/specforge/data/preprocessing.py b/specforge/data/preprocessing.py index 34a611dd..4782f40f 100644 --- a/specforge/data/preprocessing.py +++ b/specforge/data/preprocessing.py @@ -65,22 +65,23 @@ def preprocess_conversations( - attention_mask: List of attention masks. """ system_prompt = chat_template.system_prompt - # This template is only suitable for other models. For kimi_k2, use the modified conversation template. + # This template is only suitable for other models. - # user_message_separator = ( - # f"{chat_template.end_of_turn_token}{chat_template.user_header}" - # ) - # assistant_message_separator = ( - # f"{chat_template.end_of_turn_token}{chat_template.assistant_header}" - # ) - user_message_separator = ( - chat_template.user_header + f"{chat_template.end_of_turn_token}{chat_template.user_header}" ) assistant_message_separator = ( - chat_template.assistant_header + f"{chat_template.end_of_turn_token}{chat_template.assistant_header}" ) + # For kimi_k2, use the modified conversation template. + # user_message_separator = ( + # chat_template.user_header + # ) + # assistant_message_separator = ( + # chat_template.assistant_header + # ) + # prepare result results = {"input_ids": [], "loss_mask": [], "attention_mask": []}