|
--- |
|
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/). |
|
|
|
**Для данной модели также доступны веса в [bf16](https://huggingface.co/ai-sage/GigaChat-20B-A3B-instruct-bf16) и [int8](https://huggingface.co/ai-sage/GigaChat-20B-A3B-instruct-int8)** |
|
|
|
Upd. Перезалили веса в `.safetensors` |
|
|
|
## Бенчмарки |
|
|
|
| | T-lite-instruct-0.1<br>(llama 3.0 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": "Докажи теорему о неподвижной точке"} |
|
] |
|
}' |
|
``` |
|
|
|
|