# Galactic 2.5 Mini — SpaceModel **В архиве находятся реальные веса после короткого обучения с нуля, а не только код или случайная инициализация. Это технический эксперимент, не готовый русско-английский помощник.** ## Что это - Название: **Galactic 2.5 Mini**. - Разработчик / бренд по вашему указанию: **SpaceModel**. - 49 999 872 уникальных обучаемых параметра (~50 млн). - GPT-2-совместимый decoder-only Transformer: 12 слоёв, размерность 512, 8 голов, FFN 2048. - Собственный byte-level BPE, 23 258 токенов; русский и английский входят в обучающие данные. - Случайная инициализация: чужие предобученные веса не использовались. - 300 шагов AdamW на CPU, batch 2 × 128 токенов: 76 800 предъявлений входных токенов, 76 200 целевых предсказаний. Фрагменты выбирались с возвращением, это не число уникальных токенов. - Конфигурация контекста — 512 токенов; в этом запуске обучались последовательности только по 128. Длинный контекст не обучен и не проверен. - Веса FP16, около 100 МБ (95,4 MiB); для работы на CPU пример загружает FP32. ## Важное ограничение Такой объём обучения крайне мал. Не ожидайте связных ответов, следования инструкциям, достоверных знаний, устойчивой грамматики или полноценного владения обоими языками. Название «2.5» — заданное вами имя, а не указание на существовавшие предыдущие версии или уровень качества. Модель не проходила instruction tuning, safety tuning или внешние бенчмарки. ## Файлы - `model/` — **готовое содержимое репозитория модели на Hugging Face**. - `model/model.safetensors` — веса. - `model/config.json`, `generation_config.json` — конфигурация. - `model/tokenizer.json`, `tokenizer_config.json`, `special_tokens_map.json`, `vocab.json`, `merges.txt` — токенизатор. - `model/README.md` — карточка модели с фактическими результатами. - `model/training_report.json`, `training_log.jsonl` — отчёт и журнал реального запуска. - `model/verification.json` — проверка загрузки и некорректированные примеры генерации. - `data_sources.json` — источники, размеры и SHA-256 исходных текстов. - `prepare_data.py`, `train.py`, `infer.py`, `upload.py`, `requirements.txt` — код; копия включена в `model/training/` для публикации. - `SHA256SUMS.txt` — контрольные суммы остальных файлов архива. ## Запуск локально Рекомендуется Python 3.11–3.13. После распаковки откройте терминал в папке `Galactic-2.5-Mini`: ```bash python -m venv .venv # Linux/macOS: source .venv/bin/activate # Windows PowerShell вместо предыдущей команды: # .venv\Scripts\Activate.ps1 pip install -r requirements.txt python infer.py --prompt "Однажды вечером" --max-new-tokens 64 python infer.py --prompt "Once upon a time" --max-new-tokens 64 ``` Если нужен CPU-only PyTorch, установите его перед остальными зависимостями: ```bash pip install torch==2.5.1 --index-url https://download.pytorch.org/whl/cpu pip install -r requirements.txt ``` Не используйте `apply_chat_template`: эта модель предназначена для продолжения текста, шаблона чата нет. ## Загрузка на Hugging Face Публикация автоматически **не выполнялась**. Доступ к аккаунту не запрашивался. Не отправляйте токены доступа в чат. ### Через сайт 1. Создайте репозиторий модели `Galactic-2.5-Mini` в вашем аккаунте или организации. 2. Если хотите адрес `SpaceModel/Galactic-2.5-Mini`, вам нужны права на организацию `SpaceModel`. Её существование и доступность имени не проверялись. 3. Загрузите **содержимое** папки `model/` в корень репозитория. Саму внешнюю папку `model` загружать как вложенную не нужно. ZIP не заменяет распакованные файлы модели. 4. Сохраните предупреждение о коротком пробном обучении в карточке. ### Через командную строку ```bash hf auth login python upload.py --repo YOUR_NAMESPACE/Galactic-2.5-Mini ``` Скрипт создаёт **приватный** репозиторий по умолчанию. Проверьте файлы, карточку и лицензию, затем измените видимость в Settings. Для создания сразу публичного репозитория: ```bash python upload.py --repo YOUR_NAMESPACE/Galactic-2.5-Mini --public ``` У уже существующего репозитория скрипт не меняет видимость. В `YOUR_NAMESPACE` подставьте настоящий логин или организацию с правами записи. ## Воспроизведение и продолжение обучения В исходные данные входят пять старых произведений Project Gutenberg. Исходные тексты не вложены в архив; загрузчик получает их по открытым URL. Источники помечены Gutenberg как public domain в США; перед повторным использованием проверяйте применимые правила вашей юрисдикции. Это маленький разнородный корпус: поэзия, задачи, исторический текст и английская проза; часть русских текстов имеет старую орфографию. `prepare_data.py` удаляет внешнюю Gutenberg-шапку и лицензионный хвост; дополнительная очистка редакторских вставок/оглавлений не выполнялась. Последние 5% каждого произведения отложены для валидации и не участвуют в обучении токенизатора. Валидация оценивается на небольшом фиксированном наборе окон, а не на внешнем тесте. ```bash # Загружает данные и заново обучает токенизатор в model/. # Сначала сделайте копию model/: не перезаписывайте опубликованный токенизатор! python prepare_data.py # Полный повтор короткого запуска, со случайной инициализацией: python train.py --steps 300 --batch-size 2 --seq-len 128 --device cpu --output reproduced # Продолжить с экспортированных весов; оптимизатор будет НОВЫЙ: python train.py --resume model --output continued --steps 1000 --batch-size 2 --seq-len 128 ``` Изменение источников или версии токенизатора может изменить ID токенов. При продолжении обучения сохраняйте исходный токенизатор; если подготовили другой корпус, кодируйте его именно исходным токенизатором в `.cache/train_ru.npy`, `.cache/train_en.npy`, `.cache/valid_ru.npy`, `.cache/valid_en.npy` (одномерные массивы NumPy int32). **Нельзя заново обучить токенизатор на новых данных и использовать его со старыми весами.** Состояния оптимизатора/RNG не включены ради размера: точное продолжение с того же шага невозможно. Для полезной модели нужны значительно больше подходящих данных и вычислений; простое повторение этих же текстов не заменит полноценное предобучение. При длительном обучении добавьте регулярное сохранение чекпойнтов — текущий минимальный скрипт экспортирует веса только после завершения всех шагов.