File size: 4,165 Bytes
a9cf19c
8575357
a9cf19c
8575357
a9cf19c
8575357
a9cf19c
8575357
a9cf19c
 
8575357
 
a9cf19c
8575357
 
 
a9cf19c
8575357
a9cf19c
8575357
a9cf19c
8575357
 
 
a9cf19c
 
8575357
 
 
a9cf19c
8575357
 
 
a9cf19c
8575357
 
 
a9cf19c
 
8575357
a9cf19c
8575357
a9cf19c
8575357
a9cf19c
8575357
a9cf19c
8575357
 
 
 
a9cf19c
8575357
a9cf19c
8575357
 
 
 
 
a9cf19c
8575357
a9cf19c
8575357
 
 
a9cf19c
8575357
 
a9cf19c
8575357
 
 
 
a9cf19c
8575357
a9cf19c
8575357
 
 
 
 
a9cf19c
8575357
 
 
 
 
 
a9cf19c
8575357
 
 
 
 
 
 
 
 
 
 
a9cf19c
8575357
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
---
{}
---
# Hymba: A Hybrid-head Architecture for Small Language Models

[[Slide](https://docs.google.com/presentation/d/1uidqBfDy8a149yE1-AKtNnPm1qwa01hp8sOj3_KAoMI/edit#slide=id.g2f73b22dcb8_0_1017)][Technical Report]  **!!! This huggingface repo is still under development.**

Developed by Deep Learning Efficiency Research (DLER) team at NVIDIA Research.


## Hymba: A Novel LM Architecture
- Fuse attention heads and SSM heads within the same layer, offering parallel and complementary processing of the same inputs

<div align="center">
<img src="https://huggingface.co./nvidia/Hymba-1.5B/resolve/main/images/module.png" alt="Hymba Module" width="600">
</div>

- Introduce meta tokens that are prepended to the input sequences and interact with all subsequent tokens, thus storing important information and alleviating the burden of "forced-to-attend" in attention

- Integrate with cross-layer KV sharing and global-local attention to further boost memory and computation efficiency

<div align="center">
<img src="https://huggingface.co./nvidia/Hymba-1.5B/resolve/main/images/macro_arch.png" alt="Hymba Model" width="600">
</div>


## Hymba: Performance Highlights
- Our Hymba-1.5B-Base outperforms all sub-2B public models, e.g., matching Llama 3.2 3B’s commonsense reasoning accuracy, being 3.49× faster, and reducing cache size by 11.7×
- More comparisons can be found in our [Technical Report].

<div align="center">
<img src="https://huggingface.co./nvidia/Hymba-1.5B/resolve/main/images/performance1.png" alt="Compare with SoTA Small LMs" width="600">
</div>

<div align="center">
<img src="https://huggingface.co./nvidia/Hymba-1.5B/resolve/main/images/performance2.png" alt="Compare with SoTA Small LMs" width="600">
</div>


## Hymba-1.5B: Model Usage

We release our Hymba-1.5B-Base model and offer the instructions to use our model as follows.

### Step 1: Environment Setup

Since our model employs [FlexAttention](https://pytorch.org/blog/flexattention/), which relies on Pytorch2.5 and other related dependencies, we provide three ways to set up the environment:

- **[Pip]** Install the related packages using our provided `requirement.txt`:
```
pip install -r https://huggingface.co./nvidia/Hymba-1.5B/resolve/main/requirements.txt
```

- **[Docker]** We have prepared a docker image with all of Hymba's dependencies installed. You can download our docker image and start a container using the following commands:

```
wget http://10.137.9.244:8000/hymba_docker.tar
docker load -i hymba.tar
docker run --security-opt seccomp=unconfined --gpus all -v /home/$USER:/home/$USER -it hymba:v1 bash
```

- **[Internal Only]** If you are an internal user from NVIDIA and are using the ORD cluster, you can use our prepared `sqsh` file to apply for an interactive node:

   ```
   srun -A nvr_lpr_llm --partition interactive --time 4:00:00 --gpus 8 --container-image /lustre/fsw/portfolios/nvr/users/yongganf/docker/megatron_py25.sqsh --container-mounts=$HOME:/home,/lustre:/lustre  --pty bash
   ```

### Step 2: Chat with Hymba
After setting up the environment, you can use the following script to chat with our Model

```
from transformers import LlamaTokenizer, AutoModelForCausalLM, AutoTokenizer, AutoModel
from huggingface_hub import login
import torch

login()

# Load LLaMA2's tokenizer
tokenizer = LlamaTokenizer.from_pretrained("meta-llama/Llama-2-7b")
        
# Load Hymba-1.5B
model = AutoModelForCausalLM.from_pretrained("nvidia/Hymba-1.5B", trust_remote_code=True).cuda().to(torch.bfloat16)

# Chat with our model
def chat_with_model(prompt, model, tokenizer, max_length=64):
    inputs = tokenizer(prompt, return_tensors="pt").to('cuda')
    outputs = model.generate(inputs.input_ids, max_length=max_length, do_sample=False, temperature=0.7, use_cache=True)
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return response

print("Chat with the model (type 'exit' to quit):")
while True:
    print("User:")
    prompt = input()
    if prompt.lower() == "exit":
        break
    
    # Get the model's response
    response = chat_with_model(prompt, model, tokenizer)
    
    print(f"Model: {response}")

```