Sergei Vorobev commited on
Commit
a885561
·
1 Parent(s): 8fc1784

update readme and tokenizer config

Browse files
Files changed (2) hide show
  1. README.md +56 -6
  2. tokenizer_config.json +2 -0
README.md CHANGED
@@ -9,10 +9,22 @@ Pretrain-версия большой языковой модели YandexGPT 5 L
9
 
10
  На первом этапе модель обучалась преимущественно на русскоязычных и англоязычных текстах общим объёмом 15T токенов с длиной контекста до 8k токенов. Состав датасета: 60% — веб-страницы, 15% — код, 10% — математика, остальное — другие специфичные данные, в том числе сгенерированная с помощью наших моделей синтетика и датасеты наших сервисов, например Яндекс Переводчика и база фактов Поиска.
11
 
12
- На втором этапе, который мы назвали Powerup, модель обучалась на высококачественных данных объёмом 320B токенов. Состав Powerup-датасета: 25% — веб-страницы, 19% — математика, 18% — код, 18% — образовательные данные, остальное — синтетика, датасеты сервисов и прочие качественные тексты. На этом этапе мы увеличили длину контекста до 32k токенов. Более подробно — в нашей статье на Хабре.
 
 
 
 
 
 
13
 
14
  ## Бенчмарки
15
- В своей категории pretrain-версия YandexGPT 5 Lite достигает паритета с мировыми SOTA по ряду ключевых бенчмарков для pretrain-моделей.
 
 
 
 
 
 
16
 
17
  ## Как использовать
18
 
@@ -32,7 +44,7 @@ model = AutoModelForCausalLM.from_pretrained(
32
  input_text = "Кто сказал тебе, что нет на свете настоящей,"
33
  input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
34
 
35
- outputs = model.generate(**input_ids, max_new_tokens=19)
36
  print(tokenizer.decode(outputs[0], skip_special_tokens=True))
37
  ```
38
 
@@ -41,8 +53,7 @@ print(tokenizer.decode(outputs[0], skip_special_tokens=True))
41
  from vllm import LLM, SamplingParams
42
 
43
 
44
- # MODEL_NAME = "yandex/YandexGPT5-8B-base"
45
- MODEL_NAME = "/home/serv01/repos/YandexGPT-5-Lite-8B-pretrain"
46
 
47
  sampling_params = SamplingParams(
48
  temperature=0.3,
@@ -60,6 +71,45 @@ for i in range(len(input_texts)):
60
  print(input_texts[i] + outputs[i].outputs[0].text)
61
  ```
62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  ## Ка�� дообучить под свои задачи
64
 
65
- Будет дополнено.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  На первом этапе модель обучалась преимущественно на русскоязычных и англоязычных текстах общим объёмом 15T токенов с длиной контекста до 8k токенов. Состав датасета: 60% — веб-страницы, 15% — код, 10% — математика, остальное — другие специфичные данные, в том числе сгенерированная с помощью наших моделей синтетика и датасеты наших сервисов, например Яндекс Переводчика и база фактов Поиска.
11
 
12
+ На втором этапе, который мы назвали Powerup, модель обучалась на высококачественных данных объёмом 320B токенов. Состав Powerup-датасета: 25% — веб-страницы, 19% — математика, 18% — код, 18% — образовательные данные, остальное — синтетика, датасеты сервисов и прочие качественные тексты. На этом этапе мы увеличили длину контекста до 32k токенов.
13
+
14
+ Кроме того, наш токенизатор хорошо оптимизирован для русского языка. Например, 32k токенов нашей модели в среднем соответствует 48k токенам Qwen-2.5.
15
+
16
+ Более подробно — в нашей [статье на Хабре](https://habr.com/ru/companies/yandex/articles/885218/).
17
+
18
+ Задавайте вопросы в discussions.
19
 
20
  ## Бенчмарки
21
+ В своей категории модель достигает паритета с мировыми SOTA по ряду ключевых бенчмарков для pretrain-моделей, а по многим другим — превосходит их:
22
+
23
+ Бенчмарки опубликованы в [статье на Хабре](https://habr.com/ru/companies/yandex/articles/885218/).
24
+
25
+ \* по данным репорта разработчиков модели. <br>
26
+ BBH — 3-shot, HUMAN_EVAL и MPBB — 0-shot, все остальные бенчмарки — 5-shot. <br>
27
+ Все замеры мы производили в HF transformers.
28
 
29
  ## Как использовать
30
 
 
44
  input_text = "Кто сказал тебе, что нет на свете настоящей,"
45
  input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
46
 
47
+ outputs = model.generate(**input_ids, max_new_tokens=18)
48
  print(tokenizer.decode(outputs[0], skip_special_tokens=True))
49
  ```
50
 
 
53
  from vllm import LLM, SamplingParams
54
 
55
 
56
+ MODEL_NAME = "yandex/YandexGPT-5-Lite-8B-pretrain"
 
57
 
58
  sampling_params = SamplingParams(
59
  temperature=0.3,
 
71
  print(input_texts[i] + outputs[i].outputs[0].text)
72
  ```
73
 
74
+ Для полного соответствия токенизации мы рекомендуем пользоваться оригинальным [sentencepiece](https://github.com/google/sentencepiece):
75
+ ```python
76
+ import sentencepiece as spm
77
+ import torch
78
+ # git clone https://huggingface.co/yandex/YandexGPT-5-Lite-8B-pretrain
79
+ tokenizer = spm.SentencePieceProcessor(
80
+ model_file="<path_to_local_repo>/tokenizer.model"
81
+ )
82
+ input_ids = tokenizer.encode(input_text, add_bos=True)
83
+ input_ids = torch.Tensor([input_ids]).to(model.device).to(torch.long)
84
+ outputs = model.generate(
85
+ input_ids=input_ids,
86
+ attention_mask=torch.ones_like(input_ids),
87
+ max_new_tokens=18
88
+ )
89
+ print(tokenizer.decode(outputs[0].tolist()))
90
+ ```
91
+
92
  ## Ка�� дообучить под свои задачи
93
 
94
+ У нашей модели llama-like архитектура, это означает, что она совместима с большинством существующих фреймворков по дообучению LLM. Приведем короткий пример, как можно обучить нашу модель в torchtune:
95
+
96
+ Скачиваем репозиторий:
97
+ ```bash
98
+ tune download yandex/YandexGPT-5-Lite-8B-pretrain \
99
+ --output-dir YandexGPT-5-Lite-8B-pretrain \
100
+ ```
101
+
102
+ Смотрим список конфигов и копируем подходящий под задачу:
103
+ ```bash
104
+ tune ls
105
+ tune cp llama3_1/8B_lora training_config.yaml
106
+ ```
107
+
108
+ Изменяем конфиг, адаптируем его под нашу модель и делаем подходящим нашу задачу. Например, [такой](https://huggingface.co/yandex/YandexGPT-5-Lite-8B-pretrain/discussions/1#67bc4e6472499ce2ba3659a7) вариант подойдет для lora обучения на открытом инстракт датасете `alpaca-cleaned`.
109
+
110
+ Запускаем обучение:
111
+ ```bash
112
+ tune run lora_finetune_single_device --config training_config.yaml
113
+ ```
114
+
115
+ Подробности можно найти в официальной [документации](https://pytorch.org/torchtune/stable/overview.html) torchtune.
tokenizer_config.json CHANGED
@@ -1,4 +1,6 @@
1
  {
 
 
2
  "bos_token": "<s>",
3
  "eos_token": "</s>",
4
  "legacy": false,
 
1
  {
2
+ "add_bos_token": true,
3
+ "add_eos_token": false,
4
  "bos_token": "<s>",
5
  "eos_token": "</s>",
6
  "legacy": false,