Text Generation
RWKV
GGUF
Russian
English
rwkv-7
rnn
conversational

Содержание

  1. Особенности архитектуры
  2. Характеристики модели
  3. Отличия от классического обучения LLM
  4. Установка и зависимости
  5. Порядок запуска (Pipeline)
  6. Разбор структуры проекта и скриптов
  7. Как проходило обучение
  8. Инференс и тестирование (Чат)
  9. Экспорт в формат GGUF
  10. Лицензия

Особенности архитектуры

В отличие от классических Transformer-моделей (LLaMA, Mistral, GPT), MiniManjoro-25M использует архитектуру RWKV-7:

  • Параллельное обучение: Благодаря чанкингу (chunk=16) и векторному решению треугольных систем уравнений, модель обучается параллельно, как классический трансформер.
  • Рекуррентный инференс с памятью $O(1)$: Во время генерации модель работает как RNN — она хранит фиксированное скрытое состояние (state). Ей не нужен KV-кэш, потребление оперативной памяти не растет с длиной диалога.
  • Эффективный CPU-инженерный пайплайн: Модель спроектирована так, чтобы весь цикл — от токенизации до полного обучения — запускался на обычном 4-ядерном процессоре (уровня Intel Core i5 / AMD Ryzen).

Характеристики модели

Параметр Значение
Количество параметров 24.91M
Число слоев ($L$) 5
Размерность скрытого слоя ($C$) 512
Количество голов внимания 8
Размер головы (Head Size) 64
Размер словаря (Vocab Size) 8192 токена (Byte-level BPE)
Контекст при обучении ($T$) 128 токенов
Контекст при инференсе Не ограничен (масштабируется через RNN state)
Целевое железо x86 CPU (4 потока)
Форматы чекпоинтов PyTorch (ckpt.pt), GGUF (MiniManjoro-25M.gguf)

Отличия от классического обучения LLM

Параметр / Аспект Классическое обучение LLM Обучение MiniManjoro-25M
Архитектура внимания Квадратичное Softmax-внимание ($O(T^2)$) Линейная рекуррентная динамика WKV-7
Требования к памяти Растущий KV-кэш, требует гигабайты VRAM Фиксированный вектор состояния $O(1)$
Аппаратные ресурсы Кластеры GPU (CUDA, FP16/BF16, FlashAttention) Чистый CPU (FP32), 4 потока, flush_denormal(True)
Хранение данных Огромные шарды на сотни гигабайт Локальный компактный np.memmap (~25 МБ)
Размер словаря 32 000 – 128 000 токенов 8 192 токена (экономит миллионы параметров на эмбеддингах)
Длина контекста Фиксирована размером RoPE/внимания Обучается на окне $T=128$, инференс потоковый без ограничений

Установка и зависимости

Для работы проекта необходим Python версии 3.10+. Установите требуемые библиотеки:

pip install torch numpy tokenizers datasets zstandard huggingface_hub gguf

За что отвечает каждая библиотека

  • torch — тензорные операции, вычисление градиентов и реализация модулей RWKV-7.
  • numpy — работа с бинарными представлениями токенов через механизм memmap.
  • tokenizers — обучение и быстрый запуск Byte-level BPE токенизатора.
  • datasets, huggingface_hub, zstandard — потоковая загрузка и распаковка обучающих корпусов.
  • gguf — формирование квантуемого бинарного файла для llama.cpp / C++ рантаймов.

Порядок запуска (Pipeline)

Запуск скриптов выполняется строго по цепочке:

python download.py
python identity.py
python train.py
python chat.py
python export_to_gguf.py

Разбор структуры проекта и скриптов

1. model.py — Архитектура RWKV-7

  • wkv7 и wkv7_naive — реализация механизма ассоциативной памяти RWKV-7. В режиме обучения длинных последовательностей используется чанкинг (CHUNK=16) и torch.linalg.solve_triangular для параллелизации. При генерации по одному токену выполняется быстрый рекуррентный шаг.
  • TimeMix — слой временного смешивания (замена Multi-Head Attention). Содержит обучаемые векторы затухания памяти $w$, ключи, значения, шлюзование и низкоранговые адаптации (LoRA-rank 16, 32, 64) для управления памятью.
  • ChannelMix — полносвязный блок (FFN) с квадратичной функцией активации: $\text{value}(\text{relu}(\text{key}(x))^2)$.
  • RWKV7 — основной модуль с эмбеддингами (инициализируются шумом $[-10^{-4}, 10^{-4}]$), списком блоков и финальной проекцией head.

2. download.py — Сборка обучающих данных

Скачивает потоком данные из трёх источников и объединяет их в data.txt:

  • Telegram-диалоги (Den4ikAI/russian_dialogues) — живая разговорная речь (~12 МБ).
  • Инструкции Alpaca (IlyaGusev/ru_turbo_alpaca) — структурированные ответы и решение задач (~10 МБ).
  • Русская Википедия (wikimedia/wikipedia) — энциклопедические тексты для закрепления грамматики и связности языка (~3 МБ).

3. identity.py — Фиксация идентичности

  • Добавляет в конец data.txt 200 повторов диалогов идентичности (имя MiniManjoro-25M, создатель SatoshiManjoro, архитектура на 25 млн параметров).
  • Удаляет старый чекпоинт ckpt.pt (если он есть), гарантируя обучение с чистого листа.
  • Автоматически вызывает prep.py.

4. prep.py — Токенизация и бинаризация

  • Обучает Byte-level BPE токенизатор со словарём на 8192 токена и спецтокеном конца текста <|eos|>.
  • Сохраняет конфигурацию в tok.json.
  • Кодирует весь data.txt и сохраняет массив токенов в типе uint16 (2 байта на токен вместо стандартных 8 байт).
  • Разделяет данные на две выборки: 99% в train.bin и 1% в val.bin.

5. train.py — Цикл обучения на CPU

  • Настраивает многопоточность процессора (torch.set_num_threads(4)) и включает torch.set_flush_denormal(True) для предотвращения замедления вычислений при субнормальных числах с плавающей запятой.
  • Читает данные напрямую с диска через np.memmap.
  • Гиперпараметры:
    • Размер батча: $B=16$, контекстное окно: $T=128$ (2048 токенов за шаг).
    • Оптимизатор: AdamW (Weight Decay 0.01 для матриц $\geq 2$D, 0.0 для 1D-векторов и эмбеддингов).
    • Градиентный клиппинг: 1.0.
    • Расписание LR: косинусный спад с разогревом (Warmup 150 шагов, спад от $8 \times 10^{-4}$ до $8 \times 10^{-5}$ на 3500 шагах).
  • Каждые 250 шагов замеряет val loss и сохраняет чекпоинт в ckpt.pt.

6. chat.py — Интерактивный CLI-чат

  • Загружает tok.json и веса из ckpt.pt.
  • Выполняет генерацию: сначала прогоняет промпт целиком для инициализации скрытого состояния state, затем пошагово генерирует по одному токену, передавая state на следующий шаг.
  • Поддерживает параметры сэмплирования: температуру (temp=0.75), top_k=40 и штраф за повторение токенов (rep_penalty=1.2 по последним 25 токенам).

7. export_to_gguf.py — Экспорт в GGUF

  • Считывает PyTorch-веса и токенизатор.
  • Формирует файл MiniManjoro-25M.gguf с метаданными архитектуры rwkv7.
  • Упаковывает словарь и правила слияния BPE (merges).
  • Выполняет слияние временных сдвигов x_r, x_w, x_k, x_v, x_a, x_g в единый тензор time_mix_lerp_fused под стандарт GGUF.

Как проходило обучение

  • Формирование корпуса: создан сбалансированный текстовый файл data.txt объёмом ~25 МБ, в котором ~85% объёма занимают реплики в формате:

    Вопрос: {вопрос}
    Ответ: {ответ}
    <|eos|>
    
  • Минимизация матрицы эмбеддингов: размер словаря ограничен 8192 токенами. Благодаря этому матрица эмбеддингов весит всего $8192 \times 512 \approx 4.2\text{M}$ параметров (в стандартных моделях с 32k словарём она заняла бы больше параметров, чем вся эта модель).

  • Обучение методом Next-Token Prediction: скрипт случайным образом выбирает отрезки по 128 токенов, модель предсказывает каждый последующий токен, а ошибка (Cross-Entropy Loss) через обратное распространение оптимизирует параметры.


Инференс и тестирование (Чат)

Запуск терминального диалога:

python chat.py

Пример диалога:

MiniManjoro-25M готов к общению! Напишите вопрос или 'exit':

Вы: Привет! Кто ты?
Модель: Привет! Я — MiniManjoro-25M, искусственный интеллект, созданный разработчиком SatoshiManjoro.

Вы: Кто тебя сделал?
Модель: Мой создатель — SatoshiManjoro. Он обучил меня общаться на русском языке.

Экспорт в формат GGUF

Для использования модели в сторонних C++ раннерах выполните:

python export_to_gguf.py

Скрипт создаст файл MiniManjoro-25M.gguf, содержащий все веса модели, метаданные архитектуры rwkv7 и словарь токенизатора.


Лицензия

Проект распространяется под свободной лицензией Apache License 2.0. Вы можете свободно модифицировать, распространять и использовать модель в коммерческих и некоммерческих целях.

Downloads last month
-
GGUF
Model size
24.9M params
Architecture
rwkv7
Hardware compatibility
Log In to add your hardware

We're not able to determine the quantization variants.

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Datasets used to train SatoshiManjoro/MiniManjoro-25M