112 lines
2.8 KiB
Markdown
112 lines
2.8 KiB
Markdown
|
|
---
|
||
|
|
license: apache-2.0
|
||
|
|
library_name: transformers
|
||
|
|
tags:
|
||
|
|
- mamba2
|
||
|
|
- mamba
|
||
|
|
- vllm
|
||
|
|
- state-space-model
|
||
|
|
- causal-language-modeling
|
||
|
|
- slimpajama
|
||
|
|
- hpml
|
||
|
|
datasets:
|
||
|
|
- cerebras/SlimPajama-627B
|
||
|
|
pipeline_tag: text-generation
|
||
|
|
---
|
||
|
|
|
||
|
|
# Mamba2 10M SlimPajama 500M
|
||
|
|
|
||
|
|
This is the vLLM/Transformers-compatible export of the Mamba2 baseline from our HPML Simamba discretization experiments. It is the same checkpoint as `soumil1/mamba2-10m-slimpajama-500m`, converted from the training repository's `mamba_ssm` checkpoint layout to the standard Hugging Face `Mamba2ForCausalLM` layout that vLLM can identify natively.
|
||
|
|
|
||
|
|
The model is a research checkpoint, not an instruction-tuned assistant.
|
||
|
|
|
||
|
|
## Checkpoint
|
||
|
|
|
||
|
|
| Field | Value |
|
||
|
|
| --- | --- |
|
||
|
|
| Variant | Mamba2 baseline |
|
||
|
|
| Parameters | 9,472,400 unique parameters with tied input/output embeddings |
|
||
|
|
| Training data | SlimPajama subset, `data/slimpajama_500m_50m/train.bin` |
|
||
|
|
| Validation data | Held-out SlimPajama subset, `data/slimpajama_500m_50m/val.bin` |
|
||
|
|
| Tokenizer | `EleutherAI/gpt-neox-20b` tokenizer files are included |
|
||
|
|
| Context length | 128 tokens during training |
|
||
|
|
| Best checkpoint step | 122,000 |
|
||
|
|
| Best validation loss | 4.86253547668457 |
|
||
|
|
| W&B run | https://wandb.ai/ssb2234-columbia/simamba/runs/dm74y180 |
|
||
|
|
|
||
|
|
## vLLM
|
||
|
|
|
||
|
|
The repository uses:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"model_type": "mamba2",
|
||
|
|
"architectures": ["Mamba2ForCausalLM"]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
Serve with vLLM:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
vllm serve soumil1/mamba2-10m-slimpajama-500m \
|
||
|
|
--dtype float32 \
|
||
|
|
--max-model-len 128
|
||
|
|
```
|
||
|
|
|
||
|
|
For offline inference:
|
||
|
|
|
||
|
|
```python
|
||
|
|
from vllm import LLM, SamplingParams
|
||
|
|
|
||
|
|
llm = LLM(
|
||
|
|
model="soumil1/mamba2-10m-slimpajama-500m",
|
||
|
|
dtype="float32",
|
||
|
|
max_model_len=128,
|
||
|
|
)
|
||
|
|
outputs = llm.generate(
|
||
|
|
["State space models are"],
|
||
|
|
SamplingParams(max_tokens=32, temperature=0.8),
|
||
|
|
)
|
||
|
|
print(outputs[0].outputs[0].text)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Transformers
|
||
|
|
|
||
|
|
```python
|
||
|
|
import torch
|
||
|
|
from transformers import AutoTokenizer, Mamba2ForCausalLM
|
||
|
|
|
||
|
|
repo_id = "soumil1/mamba2-10m-slimpajama-500m"
|
||
|
|
|
||
|
|
tokenizer = AutoTokenizer.from_pretrained(repo_id)
|
||
|
|
model = Mamba2ForCausalLM.from_pretrained(repo_id, torch_dtype=torch.float32).cuda()
|
||
|
|
model.eval()
|
||
|
|
|
||
|
|
input_ids = tokenizer("State space models are", return_tensors="pt").input_ids.cuda()
|
||
|
|
with torch.no_grad():
|
||
|
|
logits = model(input_ids).logits
|
||
|
|
print(logits.shape)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Architecture
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"hidden_size": 160,
|
||
|
|
"num_hidden_layers": 8,
|
||
|
|
"vocab_size": 50280,
|
||
|
|
"state_size": 64,
|
||
|
|
"conv_kernel": 4,
|
||
|
|
"expand": 2,
|
||
|
|
"head_dim": 32,
|
||
|
|
"num_heads": 10,
|
||
|
|
"n_groups": 1,
|
||
|
|
"chunk_size": 16,
|
||
|
|
"tie_word_embeddings": true
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Limitations
|
||
|
|
|
||
|
|
This is a small pretraining checkpoint trained for controlled architecture comparison. It was trained on a limited SlimPajama subset with a short sequence length, so generation quality and downstream task performance should be interpreted cautiously.
|