Upload README.md with huggingface_hub
Browse files
README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: other
|
| 3 |
+
license_name: yandexgpt-5-lite-8b
|
| 4 |
+
license_link: LICENSE
|
| 5 |
+
language:
|
| 6 |
+
- ru
|
| 7 |
+
- en
|
| 8 |
+
base_model:
|
| 9 |
+
- yandex/YandexGPT-5-Lite-8B-pretrain
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
# YandexGPT-5-Lite-Instruct
|
| 13 |
+
|
| 14 |
+
Instruct-версия большой языковой модели YandexGPT 5 Lite на 8B параметров с длиной контекста 32k токенов. Также в отдельном [репозитории](https://huggingface.co/yandex/YandexGPT-5-Lite-8B-instruct-GGUF) опубликована квантизованная версия модели в формате GGUF.
|
| 15 |
+
|
| 16 |
+
Обучена на базе [YandexGPT 5 Lite Pretrain](https://huggingface.co/yandex/YandexGPT-5-Lite-8B-pretrain), без использования весов каких-либо сторонних моделей. Алайнмент Lite-версии совпадает с алайнментом YandexGPT 5 Pro и состоит из этапов SFT и RLHF (более подробно о них — в [статье](https://habr.com/ru/companies/yandex/articles/885218/) на Хабре).
|
| 17 |
+
|
| 18 |
+
Задавайте вопросы в discussions.
|
| 19 |
+
|
| 20 |
+
## Бенчмарки
|
| 21 |
+
По результатам международных бенчмарков и их адаптаций для русского языка, YandexGPT 5 Lite вплотную приблизилась к аналогам (Llama-3.1-8B-instruct и Qwen-2.5-7B-instruct) и превосходит их в ряде сценариев, в том числе — в знании русской культуры и фактов.
|
| 22 |
+
|
| 23 |
+
<img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/6b5/eb4/9ea/6b5eb49ea757bc124c938717b21f1cf7.png" alt="Таблица бенчмарков" width="100%"/>
|
| 24 |
+
|
| 25 |
+
MMLU — 5-shot, все остальные бенчмарки — 0-shot.
|
| 26 |
+
|
| 27 |
+
## Как использовать
|
| 28 |
+
|
| 29 |
+
Модель можно запустить через HF Transformers:
|
| 30 |
+
```python
|
| 31 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
MODEL_NAME = "yandex/YandexGPT-5-Lite-8B-instruct"
|
| 35 |
+
|
| 36 |
+
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
|
| 37 |
+
model = AutoModelForCausalLM.from_pretrained(
|
| 38 |
+
MODEL_NAME,
|
| 39 |
+
device_map="cuda",
|
| 40 |
+
torch_dtype="auto",
|
| 41 |
+
)
|
| 42 |
+
|
| 43 |
+
messages = [{"role": "user", "content": "Для чего нужна токенизация?"}]
|
| 44 |
+
input_ids = tokenizer.apply_chat_template(
|
| 45 |
+
messages, tokenize=True, return_tensors="pt"
|
| 46 |
+
).to("cuda")
|
| 47 |
+
|
| 48 |
+
outputs = model.generate(input_ids, max_new_tokens=1024)
|
| 49 |
+
print(tokenizer.decode(outputs[0][input_ids.size(1) :], skip_special_tokens=True))
|
| 50 |
+
```
|
| 51 |
+
|
| 52 |
+
Или через vLLM:
|
| 53 |
+
```python
|
| 54 |
+
from vllm import LLM, SamplingParams
|
| 55 |
+
from transformers import AutoTokenizer
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
MODEL_NAME = "yandex/YandexGPT-5-Lite-8B-instruct"
|
| 59 |
+
|
| 60 |
+
sampling_params = SamplingParams(
|
| 61 |
+
temperature=0.3,
|
| 62 |
+
top_p=0.9,
|
| 63 |
+
max_tokens=1024,
|
| 64 |
+
)
|
| 65 |
+
|
| 66 |
+
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
|
| 67 |
+
llm = LLM(
|
| 68 |
+
MODEL_NAME,
|
| 69 |
+
tensor_parallel_size=1,
|
| 70 |
+
)
|
| 71 |
+
|
| 72 |
+
messages = [{"role": "user", "content": "В чем смысл жизни?"}]
|
| 73 |
+
input_ids = tokenizer.apply_chat_template(
|
| 74 |
+
messages, tokenize=True, add_generation_prompt=True
|
| 75 |
+
)[1:] # remove bos
|
| 76 |
+
text = tokenizer.decode(input_ids)
|
| 77 |
+
|
| 78 |
+
outputs = llm.generate(text, use_tqdm=False, sampling_params=sampling_params)
|
| 79 |
+
|
| 80 |
+
print(tokenizer.decode(outputs[0].outputs[0].token_ids, skip_special_tokens=True))
|
| 81 |
+
|
| 82 |
+
```
|
| 83 |
+
|
| 84 |
+
Для запуска в llama.cpp и ollama можно воспользоваться нашей квантизованной моделью, которая выложена в репозитории [YandexGPT-5-Lite-8B-instruct-GGUF](https://huggingface.co/yandex/YandexGPT-5-Lite-8B-instruct-GGUF).
|
| 85 |
+
|
| 86 |
+
## Особенности токенизации
|
| 87 |
+
Для полного соответствия токенизации мы рекомендуем пользоваться оригинальным [sentencepiece](https://github.com/google/sentencepiece) — файл токенизатора лежит в папке `original_tokenizer`. В нашей инфраструктуре каждую реплику диалога мы токенизируем отдельно.
|
| 88 |
+
|
| 89 |
+
Из-за этого, в частности, появляется пробел в начале каждой реплики. Также `\n` токены мы заменяем на `[NL]`, это можно сделать с помощью `text.replace("\n", "[NL]")` перед токенизацией.
|
| 90 |
+
|
| 91 |
+
## Особенности шаблона
|
| 92 |
+
Мы используем нестандартный шаблон диалога — модель обучена генерировать только одну реплику после последовательности `Ассистент:[SEP]`, завершая её токеном `</s>`. При этом диалог в промпте может быть любой длины.
|
| 93 |
+
|
| 94 |
+
Это приводит к тому, что в интерактивном режиме модель может выдавать результаты, отличающиеся от вызова модели в режиме генерации на фиксированном диалоге. Поэтому мы рекомендуем использовать интерактивный режим только для ознакомления с моделью.
|