Safetensors
qwen2

Qwen2-7B-ReLU

Qwen2-7B-ReLU is a variant of Qwen2-7B that replaces the SiLU/Swish activation function with dReLU, achieving higher sparsity while maintaining the performance of the original model.

Key Features

  • Replaces SiLU/Swish activation function with dReLU
  • Maintains comparable or even better performance with the original Qwen2-7B
  • Significantly increases activation sparsity, enabling further optimization and compression

Benchmarks

The model has been evaluated on standard benchmarks to verify its performance:

  • MMLU: 69.19% (5-shot)
  • IFEval: 73.2% (Prompt Strict-Accuracy)
  • Livebench:
    • Average: 32.1%
    • Coding: 39.8%
    • Data Analysis: 45.3%
    • Instruction Following: 58.1%
    • Language: 9.0%
    • Math: 22.0%
    • Reasoning: 18.7%

These results demonstrate that the ReLU modification maintains competitive performance while achieving higher sparsity compared to the original model.

Technical Details

The key modification in this version is the application of ReLU activation to both branches in the MLP block. The implementation modifies the original Qwen2MLP class as follows:

class Qwen2MLP(nn.Module):
    def __init__(self, config):
        super().__init__()
        self.config = config
        self.hidden_size = config.hidden_size
        self.intermediate_size = config.intermediate_size
        self.gate_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
        self.up_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
        self.down_proj = nn.Linear(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.act_fn(self.up_proj(x)))
        return down_proj

The key change is in the forward pass, where the activation function is now applied to both the gate projection and up projection outputs before multiplication. This modification, combined with the use of ReLU, contributes to the increased sparsity of the model.

Intended Usage

This release primarily targets the research community for:

  • Studying sparsity in large language models
  • Model compression and optimization research
  • Understanding the impact of activation functions on model behavior

Model Limitations

  • The model may exhibit biases present in the training data
  • May generate incorrect, inappropriate, or harmful content
  • Performance may vary across different domains and tasks
  • Not suitable for production deployment without proper evaluation

Quick Start

You should replace original modeling_qwen FFN implementation code to dReLU firstly.

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("PowerInfer/SparseQwen2-7B")
tokenizer = AutoTokenizer.from_pretrained("PowerInfer/SparseQwen2-7B")

prompt = "Hello"
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs)
response = tokenizer.decode(outputs[0])

Citation

If you use this model in your research, please cite:

@article{song2024turbo,
  title={Turbo Sparse: Achieving LLM SOTA Performance with Minimal Activated Parameters},
  author={Song, Yixin and Xie, Haotong and Zhang, Zhengyan and Wen, Bo and Ma, Li and Mi, Zeyu and Chen, Haibo},
  journal={arXiv preprint arXiv:2406.05955},
  year={2024}
}
Downloads last month
52
Safetensors
Model size
7.62B params
Tensor type
BF16
·
Inference API
Unable to determine this model's library. Check the docs .

Model tree for PowerInfer/SparseQwen2-7B

Merges
1 model
Quantizations
3 models