1.0vDumbSetAI 56M Ru
DumbSetAI 56M экспериментальная модель с характером. Эта страница написана в том же стиле, что и генерирует сама модель: абсурдный юмор и мемность часть ИИ, а не случайность. Ответы местами нелогичны и странны - это фича, не баг: модель специально обучена на плотном срезе регионального интернет-юмора и сленга. Техническая часть при этом полностью серьёзная: кастомная архитектура, обучение с нуля, честные метрики ниже. Это первая версия, остальные будут умнее.
Описание проекта
DumbSetAI — это сверхлегкая русская модель на 56 миллионов параметров. Она умеет.. Просто умеет писать текст, это всё, только русский и всё! Обучена на 750млн токенов. В процессе обучения ни одна психика не пострадала.
Loss отслеживался в реальном времени через консольный вывод во время обучения, но не сохранялся в отдельный лог-файл - финальные графики недоступны постфактум.
Характеристики:
- Размер: ~56M параметров.
- Архитектура: Кастомный Transformer (14 слоев, 8 голов внимания).
- Контекст: 512 токенов.
- Стиль: Полный абсурд.
В коде используются токены <usertext>Текст</usertext><context>почти никогда не используется</context><answer>Ответ</answer>
Правильные настройки для инференса (Важно!)
Чтобы модель не уходила в бесконечные петли типа да, да, да, используйте repetition penalty и повышенную температуру в своем скрипте генерации:
- Temperature:
0.8 (для дерзости)
- Repetition Penalty:
1.2 (чтобы душить зацикливания)
- Top-K:
50 (чтобы отсекать совсем лютый бред)
Пример запуска
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4REPO = "DumbestSetEver/1.0vDumbSetAI_56M_ru"
5
6tokenizer = AutoTokenizer.from_pretrained(REPO, trust_remote_code=True)
7model = AutoModelForCausalLM.from_pretrained(REPO, trust_remote_code=True, dtype=torch.float32)
8model.eval()
9
10answer = model.generate_dumbset(
11 tokenizer,
12 "Привет, как дела?",
13 max_context_tokens=100,
14 max_answer_tokens=100,
15 temperature=0.8,
16 top_k=50,
17 repetition_penalty=1.2,
18 verbose=True,
19)
20print(answer)
Важно: не запускайте скрипт через IDLE (Python Shell на Windows).
Загрузка модели идёт по сети (from_pretrained обращается к Hugging Face Hub), а IDLE использует отдельный поток для связи со своим Shell-окном через сокеты. На Windows это может конфликтовать с сетевыми вызовами внутри того же процесса и приводить к падению Windows fatal exception: access violation без traceback - окно просто перезапускается (RESTART: Shell).
Это не баг модели и не ошибка кода — запускайте скрипт через обычную консоль/терминал:
или из VS Code / PyCharm / любой другой IDE с нормальным терминалом.
Если модель уже была скачана один раз (файлы в кэше ~/.cache/huggingface), можно запускать полностью офлайн и без сетевого вызова, добавив в начало скрипта:
1import os
2os.environ["HF_HUB_OFFLINE"] = "1"
3os.environ["TRANSFORMERS_OFFLINE"] = "1"
В этом случае IDLE тоже должен отработать стабильно.
Примеры ответов:
Вы: Привет как дела?
Бот: ничего, просто нет.
Вы: Кто такой юрий гагарин?
Бот: а он у меня на работе, может быть и шторм.
Вы: А гагарин летал в космос?
Бот: а гагарин? А не дробь, а у меня просто чудо!
Вы: В стране бензоколонке закончился бензин
Бот: С бензоколонке можно сказать, что нужно бензин путь выше, а дизель - меньше.
Пример: В городе производят литров 60 бензина (примерно 20-30 км от города Персидского залива). Это движение равно нулю.
Марина Сидоренко - один из самых популярных и популярных среди жителей города. Он также имеет более широкую историю страны с 1920-х годов - когда в стране произошло много серьезного недовольства населения.
Архитектура (modeling_dumbset.py)
Модель использует кастомную реализацию Transformer'а, написанную с нуля (attention, feed-forward и блоки - без готовых слоёв вроде nn.MultiheadAttention или сторонних библиотек аттеншена). Архитектура классическая decoder-only, в духе GPT: causal self-attention + FFN в каждом блоке, LayerNorm (pre-norm), обучение с нуля без использования предобученных весов других моделей.
Основные компоненты:
Head / MultiHeadAttention - attention считается вручную (Q, K, V как отдельные линейные слои), без Flash Attention и RoPE обычный sinusoidal-free подход с learned position embeddings.
FeedForward - стандартный MLP-блок с расширением в 4 раза (GELU-активация).
Block - pre-norm residual блок (LayerNorm -> Attention -> residual, LayerNorm -> FFN -> residual).
DumbSetLanguageModel - обёртка над PreTrainedModel из transformers для совместимости с AutoModelForCausalLM и .generate().
Известные особенности реализации (не баги, а осознанные детали):
Scaling factor в attention считается как n_embd**-0.5, а не стандартный head_size**-0.5 - это часть архитектуры, с которой модель обучалась, и менять его без переобучения нельзя (веса под него подстроены).
Веса token_embedding и lm_head не связаны (no weight tying).
Генерация не использует KV-cache - при размере модели и контексте в 512 токенов это не влияет на практическую скорость инференса.