--- language: - ru 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: ``` Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им. [INST]Как дела?[/INST][INST]Шикарно. Как пройти в библиотеку?[/INST] ``` v1, v2: Original Misral Nemo prompt format, but the system prompt is in the beginning and there are additional spaces: ``` Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им. [INST] Как дела? [/INST] Отлично, а у тебя? [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)