|
--- |
|
language: |
|
- ru |
|
base_model: IlyaGusev/saiga_nemo_12b |
|
datasets: |
|
- IlyaGusev/saiga_scored |
|
- IlyaGusev/saiga_preferences |
|
license: apache-2.0 |
|
--- |
|
|
|
|
|
# Saiga/MistralNemo 12B, Russian fine-tune of Mistral Nemo |
|
|
|
Based on [an abliterated version](https://huggingface.co/natong19/Mistral-Nemo-Instruct-2407-abliterated) of [Mistral Nemo](https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407). |
|
|
|
Llama.cpp version: [link](https://huggingface.co/IlyaGusev/saiga_nemo_12b_gguf) |
|
|
|
Colab: [link](https://colab.research.google.com/drive/1vNzMyPqx2GB7zk3ANDtZEfvhzgYOWu0B) |
|
|
|
## Prompt format |
|
|
|
v3: Original Misral Nemo prompt format, but the system prompt is in the beginning: |
|
``` |
|
<s>Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им. |
|
|
|
[INST]Как дела?[/INST][INST]Шикарно. Как пройти в библиотеку?[/INST] |
|
``` |
|
|
|
v1, v2: Original Misral Nemo prompt format, but the system prompt is in the beginning and there are additional spaces: |
|
``` |
|
<s>Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им. |
|
|
|
[INST] Как дела? [/INST] Отлично, а у тебя? </s>[INST] Шикарно. Как пройти в библиотеку? [/INST] |
|
``` |
|
|
|
## Code example |
|
```python |
|
# Исключительно ознакомительный пример. |
|
# НЕ НАДО ТАК ИНФЕРИТЬ МОДЕЛЬ В ПРОДЕ. |
|
# См. https://github.com/vllm-project/vllm или https://github.com/huggingface/text-generation-inference |
|
|
|
import torch |
|
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig |
|
|
|
MODEL_NAME = "IlyaGusev/saiga_nemo_12b" |
|
|
|
model = AutoModelForCausalLM.from_pretrained( |
|
MODEL_NAME, |
|
load_in_8bit=True, |
|
torch_dtype=torch.bfloat16, |
|
device_map="auto" |
|
) |
|
model.eval() |
|
|
|
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) |
|
generation_config = GenerationConfig.from_pretrained(MODEL_NAME) |
|
print(generation_config) |
|
|
|
inputs = ["Почему трава зеленая?", "Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч"] |
|
for query in inputs: |
|
prompt = tokenizer.apply_chat_template([{ |
|
"role": "user", |
|
"content": query |
|
}], tokenize=False, add_generation_prompt=True) |
|
data = tokenizer(prompt, return_tensors="pt", add_special_tokens=False) |
|
data = {k: v.to(model.device) for k, v in data.items()} |
|
data.pop("token_type_ids", None) |
|
output_ids = model.generate(**data, generation_config=generation_config)[0] |
|
output_ids = output_ids[len(data["input_ids"][0]):] |
|
output = tokenizer.decode(output_ids, skip_special_tokens=True).strip() |
|
print(query) |
|
print(output) |
|
print() |
|
print("==============================") |
|
print() |
|
``` |
|
|
|
## Output examples |
|
``` |
|
User: Почему трава зеленая? |
|
Saiga: Трава зеленая из-за содержания хлорофилла. Hлорофилл — это пигмент, основной компонент системы фотосинтеза в растениях (а также водорослях и некоторых бактериях). Функционирование хлорофилла обеспечивает следующие особенности: |
|
1. **Абсорбция света**: Хлорофилл поглощает свет в определенном диапазоне спектра, в основном синий и красный цвета. Зеленый цвет отражается обратно к нашему глазу, поскольку именно этот цвет не поглощается хлорофиллом. |
|
2. **Фотосинтез**: В процессе фотосинтеза хлорофилл преобразует энергию солнечного света в химическую энергию, необходимую для синтеза органических веществ (главным образом глюкозы) из углекислого газа и воды. Этот процесс поддерживает жизнь растений и является источником пищи для многих живых существ на Земле. |
|
3. **Структурная роль**: Хлорофилл расположен в особой структуре клеток растений – хлоропластах, которые играют ключевую роль в организации клетки. |
|
Таким образом, трава зеленая потому, что хлорофилл выполняет жизненно важную функцию в растении и отражает именно тот цвет света, который он не использует в своем процессе работы. |
|
``` |
|
|
|
``` |
|
User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч |
|
Saiga: Таня и Мяч |
|
В далеком приморском городке, где ласковое солнце играло на волнах и свежий морской ветер наполнял воздух солью и свободой, жила девушка по имени Таня. Ее жизнь была полна ярких красок и незабываемых историй — и все благодаря одному простому предмету: мячу. |
|
Таня появилась в этом мире уже с мячом под мышкой. Ее отец, заядлый футбольный фанат, еще до рождения дочери решил, что она продолжит семейную спортивную традицию. И вот, когда маленькая Таня впервые сделала свои неуверенные шаги, в ее ручке оказался тот самый мяч — бледно-голубой, как небо над морем, с рисунком в виде волны, словно приглашая к приключениям. |
|
С тех пор мяч стал для Тани настоящим другом и спутником жизни. Они начинали каждое утро вместе: на песке у пляжа, где отпечатки ног смешивались с влажными линиями прилива; иногда на стадионе, где запахи травы и свежей росы сопровождали первые удары об мяч; а зимними днями — в просторном школьном коридоре, куда Таня выносила мяч, чтобы тренироваться прямо там, среди шумных перерывов и звонков. |
|
Мяч был свидетелем всех ключевых моментов ее жизни. Когда Таня в первый раз забила гол в школьной команде, он, казалось, излучал радость и гордость. Этот мяч побывал в каждом уголке города: они исследовали заброшенные склады, где Таня представляла себя героиней фильма о футболе; забрались на вершину старого маяка, откуда открывался вид на бескрайнее море; даже однажды ночью пытались пройти через весь город, запуская мяч от стены к стене, создавая свой собственный «марафон». |
|
Самый значительный эпизод их совместного пути произошел летом, когда Таня решила принять участие в региональных соревнованиях по футболу. Мяч, который уже успел потерять немного своей первоначальной гладкости и белизны, приобрел особое значение. Это был не просто мяч — это символ мечты, которую она носила внутри себя. В день финального матча Таня почувствовала, как каждый удар об этот мяч наполняет ее уверенностью и теплом воспоминаний. На последних минутах встречи, когда счет был равным, Таня ловко обвела соперниц и, сделав красивый финт, послала мяч точно в ворота противника. Зрители взорвались аплодисментами, а Таня упала на колени, крепко обнимая своего верного друга. |
|
После победы Таня поняла, что мяч стал частью её души. Его история переплеталась со всеми важными моментами её жизни. Она решила сохранить его таким, какой он есть — слегка потрепанным, но полным истории и воспоминаний. Таня повесила мяч на стену в своей комнате, рядом с фотографиями друзей, трофеев и других дорогих сердцу предметов. Теперь он смотрел на неё, напоминая о том, что путь к мечтам долгий, но каждая ступень этого пути полна смысла и радости. |
|
И хотя со временем Таня увлеклась другими аспектами жизни — путешествиями, учебой, новыми увлечениями — мяч всегда оставался напоминанием о том, как важно сохранять искренность намерений и верность своим мечтам. А иногда, поздними вечерами, когда в городе наступала тишина, Таня доставала мяч из коробки, где он хранился, и несколько минут просто крутила его в руках, возвращаясь в те золотые дни детства и юности, наполненные беззаботностью и радостью первого большого приключения. |
|
``` |
|
|
|
|
|
## Versions |
|
|
|
v3: |
|
- [d4f395741d0d363665e86533b53d5a2ec14477eb](https://huggingface.co/IlyaGusev/saiga_nemo_12b/commit/d4f395741d0d363665e86533b53d5a2ec14477eb) |
|
- Other names: saiga_nemo_12b_sft_m10_d16_simpo_m23_d38 |
|
- SFT dataset config: [sft_d16.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/sft_d16.json) |
|
- SFT model config: [saiga_nemo_12b_sft_m10.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_sft_m10.json) |
|
- SimPO dataset config: [pref_d38.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/pref_d38.json) |
|
- SimPO model config: [saiga_nemo_12b_simpo_m23.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_simpo_m23.json) |
|
- SFT wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/hzs68let) |
|
- SimPO wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/hyz52bom) |
|
|
|
v2: |
|
- [2ae4ce589c6c1c0ef3ba26521d78882ae1ae2930](https://huggingface.co/IlyaGusev/saiga_nemo_12b/commit/2ae4ce589c6c1c0ef3ba26521d78882ae1ae2930) |
|
- Other names: saiga_nemo_12b_sft_m9_d16_slerp, saiga_nemo_12b_sft_m9_d16_simpo_m21_d36_doestoevsky_orpo_m1_slerp |
|
- SFT dataset config: [sft_d16.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/sft_d16.json) |
|
- SFT model config: [saiga_nemo_12b_sft_m9.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_sft_m9.json) |
|
- SimPO dataset config: [pref_d36.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/pref_d36.json) |
|
- SimPO model config: [saiga_nemo_12b_simpo_m21.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_simpo_m21.json) |
|
- SFT wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/yod78hiq) |
|
- SimPO wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/bv5w0lxl) |
|
- Dostoevsky wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/senqj9t1) |
|
- Merge config: [link](https://huggingface.co/IlyaGusev/saiga_nemo_12b_sft_m9_d16_slerp/blob/main/mergekit_config.yml) |
|
|
|
v1: |
|
- [1c13507be4b5b5edd5586e48c902ef61c0343299](https://huggingface.co/IlyaGusev/saiga_nemo_12b/commit/1c13507be4b5b5edd5586e48c902ef61c0343299) |
|
- Other name: saiga_nemo_12b_sft_m9_d14_simpo_m19_d31 |
|
- SFT dataset config: [sft_d14.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/sft_d14.json) |
|
- SFT model config: [saiga_nemo_12b_sft_m9.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_sft_m9.json) |
|
- SimPO dataset config: [pref_d31.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/pref_d31.json) |
|
- SimPO model config: [saiga_nemo_12b_simpo_m19.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_nemo_12b_simpo_m19.json) |
|
- SFT wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/e74ozfzh) |
|
- SimPO wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/b094iiej) |
|
|
|
|
|
## Evaluation |
|
|
|
### v3: |
|
|
|
RuArenaHard: |
|
|
|
![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/tTTHRqxwrLnhj7LEeFmsU.png) |
|
|
|
PingPong: |
|
|
|
![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/4VxQJjAxw2eQMYctUvBr5.png) |
|
|
|
### v2 |
|
|
|
RuArenaHard: |
|
|
|
![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/dn5BAxdsYsMfO0oGYH2Zb.png) |
|
|
|
PingPong: |
|
|
|
![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/tlxLQORAmGQpkJa6OeLBh.png) |
|
|
|
### v1 |
|
|
|
RuArenaHard: |
|
|
|
![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/-uG--3Wu9oUi9_bC_ZFP4.png) |
|
|
|
|
|
PingPong: |
|
|
|
![image/png](https://cdn-uploads.huggingface.co/production/uploads/5fc2346dea82dd667bb0ffbc/uNmD2YhealySO6UYUH8-g.png) |
|
|
|
|