|
--- |
|
language: |
|
- ru |
|
datasets: |
|
- IlyaGusev/saiga_scored |
|
- IlyaGusev/saiga_preferences |
|
license: gemma |
|
base_model: mlabonne/gemma-3-12b-it-abliterated |
|
--- |
|
|
|
|
|
# Saiga/Gemma3 12B, fine-tune of Gemma3 12B |
|
|
|
Based on [mlabonne/gemma-3-12b-it-abliterated](https://huggingface.co/mlabonne/gemma-3-12b-it-abliterated). |
|
|
|
GGUF: [link](https://huggingface.co/IlyaGusev/saiga_gemma3_12b_gguf) |
|
|
|
GPTQ 8-bit: TBA |
|
|
|
Colab: [link](https://colab.research.google.com/drive/1Av6V_rpFRWDilqROqwtidY5gAOsK8BmX) |
|
|
|
## Prompt format |
|
|
|
v1: Gemma3 format with custom system messages ("\<bos\>" token is usually prepended automatically): |
|
``` |
|
<start_of_turn>system |
|
Ты — Сайга, русскоязычный автоматический ассистент. Ты разговариваешь с людьми и помогаешь им.<end_of_turn> |
|
<start_of_turn>user |
|
Как дела?<end_of_turn> |
|
<start_of_turn>model |
|
Отлично, а у тебя?<end_of_turn> |
|
<start_of_turn>user |
|
Шикарно. Как пройти в библиотеку?<end_of_turn> |
|
<start_of_turn>model |
|
``` |
|
|
|
## 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_gemma3_12b" |
|
|
|
model = AutoModelForCausalLM.from_pretrained( |
|
MODEL_NAME, |
|
load_in_4bit=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: |
|
Трава зеленая из-за процесса, называемого фотосинтезом. Этот процесс является основой жизни растений и происходит в органеллах, называемых хлоропластами, внутри клеток растений. |
|
Хлоропласты содержат зеленый пигмент, называемый хлорофиллом. Хлорофилл играет ключевую роль в фотосинтезе, поскольку он способен поглощать красную и синюю части спектра солнечного света, но отражает зеленый цвет. Именно поэтому трава кажется нам зеленой. |
|
Этот процесс включает в себя использование энергии солнечного света для преобразования углекислого газа (CO2) и воды (H2O) в глюкозу (сахар) и кислород (O2). Зеленый свет, который не поглощается хлорофиллом, отражается и рассеивается, придавая траве характерный зеленый оттенок. |
|
Кроме того, хлорофилл важен для растений, поскольку он обеспечивает им основную часть энергии, необходимой для роста и развития. Таким образом, зеленый цвет травы является результатом уникального сочетания биологических процессов и физических свойств света. |
|
``` |
|
|
|
``` |
|
User: Сочини длинный рассказ, обязательно упоминая следующие объекты. Дано: Таня, мяч |
|
Saiga: |
|
Таня и мяч: Загадка летнего дня |
|
Летний день был в самом разгаре. Солнце заливало золотом улицы, и воздух пах свежестью после ночного дождя и цветущими липами. Таня, двенадцатилетняя девочка с косичками цвета спелой пшеницы, стояла на пороге своего старого деревянного дома, держа в руках мяч. Это был не простой мяч — яркий, разноцветный, с изображениями космонавтов и звезд, он был подарком ее дедушки, профессора астрономии. Дедушка рассказывал, что мяч обладает особыми свойствами: если его бросить в определенном месте и времени, он может показать Тане будущее или прошлое, но только если она задаст правильный вопрос. |
|
Таня всегда считала эти истории дедушки сказками, но сегодня, в этот особенный день, решила проверить. Она решила отправиться в парк, где когда-то играла с дедушкой, и именно там бросить мяч, задав вопрос: "Что ждет меня впереди?". |
|
Парк встретил ее пением птиц и шелестом листьев. Таня несла мяч, словно сокровище, осторожно пробираясь сквозь зеленые заросли. Дедушка всегда говорил, что парк — это место, где время замедляется и открываются тайны, если слушать сердце. Найдя подходящее место под огромной старой липой, Таня остановилась. |
|
"Дедушка," — тихо прошептала она, — "покажи мне, что ждет меня впереди." |
|
Закрыв глаза, Таня бросила мяч вверх. Он взмыл, как маленький спутник, и на мгновение застыл в воздухе, прежде чем медленно начать вращаться. В этот момент Таня почувствовала легкое покалывание в пальцах. Когда мяч приземлился, она открыла глаза и увидела нечто невероятное. |
|
На траве перед ней проявился маленький, мерцающий экран, на котором были показаны картины из ее будущего. Первой была сцена, где она, уже в студенческой форме, стоит на сцене, получая награду за исследовательскую работу по астрономии. Затем последовал кадр, где Таня, окруженная друзьями, смеется над шуткой одного из них, сидя в уютной кафешке. Но самым запоминающимся был момент, когда она, уже взрослая, держит на руках маленького ребенка, смотря на него с любовью и гордостью. |
|
Однако, один из кадров вызвал у Тани тревогу. Она увидела себя, стоящую на краю обрыва, мяч лежал рядом, разбитый на части. Вокруг царила гроза, и Таня казалась растерянной и одинокой. |
|
"Что это значит?" — прошептала Таня, осознавая, что ее путешествие в будущее не только радужное и светлое. |
|
Внезапно мяч снова засветился, и Таня услышала голос дедушки, который казался ей эхом из прошлого: "Всегда помни, Таня, даже в самые темные времена ты не одинока. Мяч показывает не только будущее, но и напоминает о силе, которая живет внутри тебя. Твои решения определят, каким будет этот момент. И не забывай, что каждый мяч, который ты бросаешь, может изменить траекторию жизни." |
|
Слова дедушки заставили Таню задуматься. Она подняла мяч, рассматривая его со всех сторон. В этот момент к ней подошел ее лучший друг, Максим, с которым они часто играли в мяч в этом самом парке. |
|
"Что ты тут делаешь?" — спросил Максим, улыбаясь. "Покажешь мне свою новую игрушку?" |
|
Таня решила поделиться с Максимом своими открытиями и своими страхами. Вместе они решили, что неважно, какие трудности ждут их впереди, главное — быть готовыми встретить их вместе. Максим предложил новую игру: каждый раз, когда кто-то из них чувствует, что сбивается с пути, они будут бросать мяч друг другу, напоминая о поддержке и дружбе. |
|
Так начался их новый этап в жизни, наполненный не только мечтами и планами, но и осознанием важности каждого момента. Таня и Максим стали неразлучными, их дружба крепла, как старая липа в парке, под которой когда-то началась их история с волшебным мячом. А когда Таня однажды действительно оказалась на краю обрыва, как показал ей мяч, она вспомнила слова дедушки и слова Максима. Вместо того чтобы позволить страху поглотить ее, она сделала шаг назад, подняла мяч и бросила его в Максима, который стоял на безопасном расстоянии, готовый подхватить ее. Этот момент стал началом новой главы в их жизни, символом их готовности преодолевать любые трудности, держась за руки. |
|
И каждый раз, когда Таня смотрела на свой мяч, она видела не только отражение звездного неба, но и напоминание о силе дружбы, мудрости дедушки и вере в себя. Она поняла, что самые важные уроки и открытия приходят именно тогда, когда мы позволяем себе быть открытыми к чудесам, которые нас окружают, и готовы делиться ими с близкими людьми. |
|
``` |
|
|
|
|
|
## Versions |
|
|
|
v1: |
|
- [4bed65f8e15ff51b2e5148787aa1a5cf29e98d9e](https://huggingface.co/IlyaGusev/saiga_gemma3_12b/commit/4bed65f8e15ff51b2e5148787aa1a5cf29e98d9e) |
|
- Other names: saiga_gemma3_12b_sft_m2_d19_smpo_m3_d39 |
|
- SFT dataset config: [sft_d19.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/sft_d19.json) |
|
- SFT model config: [saiga_gemma3_12b_sft_m2.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_gemma3_12b_sft_m2.json) |
|
- SMPO dataset config: [pref_d39.json](https://github.com/IlyaGusev/saiga/blob/main/configs/datasets/pref_d39.json) |
|
- SMPO model config: [saiga_gemma3_12b_smpo_m3.json](https://github.com/IlyaGusev/saiga/blob/main/configs/models/saiga_gemma3_12b_smpo_m3.json) |
|
- SFT wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/80lgw0lt) |
|
- SMPO wandb: [link](https://wandb.ai/ilyagusev/rulm_self_instruct/runs/9z5xmp85) |
|
|
|
|
|
## Evaluation |
|
|
|
### v1: |
|
|
|
PingPong: |
|
|
|
|
|
 |
|
|
|
|
|
RuArenaHard vs gpt-4o: |
|
|
|
 |
|
|
|
|