File size: 6,753 Bytes
7c2bc52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
---
license: mit
base_model:
- ai-sage/GigaChat-20B-A3B-base
language:
- ru
- en
---
# GigaChat-20B-A3B-instruct

Диалоговая модель из семейства моделей GigaChat, основная на [GigaChat-20B-A3B-base](https://huggingface.co/ai-sage/GigaChat-20B-A3B-base). Поддерживает контекст в 131 тысячу токенов.

Больше подробностей в [хабр статье](https://habr.com/en/companies/sberdevices/articles/865996/).


## Бенчмарки

|                | T-lite-instruct-0.1<br>(llama 3.1 8B based) | gemma-2-9b-it | GigaChat-20B-A3B-instruct |
|----------------|---------------------|---------------|---------------------------|
| MERA           | 0.335               | 0.392         | 0.513                     |
| ru-MMLU 5-shot | 0.555               | 0.625         | 0.598                     |
| Shlepa         | 0.36                | 0.388         | 0.482                     |


### Семейство GigaChat
|                                | GigaChat-20B-A3B-instruct | GigaChat-Pro v26.20 | GigaChat-Max v26.20 |
|--------------------------------|---------------------------|---------------------|---------------------|
| **Математические задачи**                                                                              |
| GSM8K 5-shot                   | 0,763                     | 0,782               | 0,929               |
| MATH 4-shot                    | 0,426                     | 0,446               | 0,53                |
| **Написание кода**             |                           |                     |                     |
| HumanEval 0-shot               | 0,329                     | 0,439               | 0,64                |
| MBPP 0-shot                    | 0,385                     | 0,487               | 0,667               |
| **Общие знания**                                                                                 |
| MMLU EN 5-shot                 | 0,648                     | 0,687               | 0,804               |
| MMLU RU 5-shot<br>Переведенные данные из MMLU EN 5-shot | 0,598 | 0,645               | 0,75              |
| MMLU RU 1-shot                 | —                         | 0,617               | 0,718               |
| MMLU PRO EN 5-shot             | 0,348                     | 0,431               | 0,589               |
| RUBQ 0-shot                    | 0,675                     | 0,724               | 0,73                |
| WINOGRANDE 4-shot              | 0,75                      | 0,796               | 0,832               |
| CyberMetric 0-shot             | 0,798                     | 0,827               | 0,864               |
| **Следование инструкциям**                       |
| IFEval 0-shot                  | 0,411                     | 0,566               | 0,721               |

<details>
<summary>Особенности замеров</summary>
GSM8k — это тест, который проверяет, как хорошо модели могут решать задачи с числами. В нашем исследовании мы использовали 5 шотов, чтобы оценить модель, и смотрели на последнее число в ответе. В оригинальное тесте ответ ищется по шаблону: ‘### число’.
 
Тест Math тоже имеет разные версии, которые проверяют математические способности моделей. В нашем исследовании мы давали 4 примера и смотрели на последнее выражение в формате '\boxed{expression}'. Затем оценивали результаты на совпадение с помощью библиотеки sympy.

</details>


## Requirements

* ```transformers>=4.47```




## Пример использования через transformers



```python
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig

model_name = "ai-sage/GigaChat-20B-A3B-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="auto")
model.generation_config = GenerationConfig.from_pretrained(model_name)

messages = [
    {"role": "user", "content": "Докажи теорему о неподвижной точке"}
]
input_tensor = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")
outputs = model.generate(input_tensor.to(model.device))

result = tokenizer.decode(outputs[0][input_tensor.shape[1]:], skip_special_tokens=False)
print(result)
```


## Пример использования через vLLM

```python
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams

model_name = "ai-sage/GigaChat-20B-A3B-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
llm = LLM(model=model_name, trust_remote_code=True)
sampling_params = SamplingParams(temperature=0.3, max_tokens=8192)

messages_list = [
    [{"role": "user", "content": "Докажи теорему о неподвижной точке"}],
]

prompt_token_ids = [tokenizer.apply_chat_template(messages, add_generation_prompt=True) for messages in messages_list]

outputs = llm.generate(prompt_token_ids=prompt_token_ids, sampling_params=sampling_params)

generated_text = [output.outputs[0].text for output in outputs]
print(generated_text)
```


В GigaChat-20B-A3B-instruct используется особый способ токенизации текста, поэтому **не рекомендуется** следующий сценарий 

```python
input_string = tokenizer.apply_chat_template(messages,tokenize=False, add_generation_prompt=True)
input_tensor = tokenizer(input_string, return_tensors="pt")
```


## Пример использования vLLM server


Запуск сервера

```bash
vllm serve ai-sage/GigaChat-20B-A3B-instruct  \
  --disable-log-requests \
  --trust_remote_code \
  --dtype bfloat16 \
  --max-seq-len 8192
```

Пример запроса
```bash
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "ai-sage/GigaChat-20B-A3B-instruct" ,
        "messages": [
            {"role": "system", "content": "Ты ОЧЕНЬ умный математик"},
            {"role": "user", "content": "Докажи теорему о неподвижной точке"}
        ]
    }'
```