Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
7.0 KiB
Обучение на Windows с GPU (RTX 5070 Ti)
Почему cu128
RTX 5070 Ti — архитектура Blackwell (compute capability sm_120). Колёса
PyTorch с PyPI для Windows по умолчанию CPU-only, а старые CUDA-сборки не
знают sm_120. Нужны колёса с индекса cu128 (torch >= 2.7; проверено на
torch 2.11.0+cu128).
Установка (один раз)
cd C:\Users\shats\Dev\grabber-ai
python -m venv .venv
.venv\Scripts\python -m pip install --upgrade pip
:: torch с GPU-поддержкой (Blackwell)
.venv\Scripts\python -m pip install torch --index-url https://download.pytorch.org/whl/cu128
:: остальное
.venv\Scripts\python -m pip install -r requirements.txt
Проверка (ожидаемый вывод — True и имя карты):
.venv\Scripts\python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"
:: True NVIDIA GeForce RTX 5070 Ti
Обучение
.venv\Scripts\python -m src.prepare_data :: данные -> data/processed
.venv\Scripts\python -m src.train :: обе модели: 5-fold CV + финальные
.venv\Scripts\python -m src.train --models base :: только ruBert-base
.venv\Scripts\python -m src.train --epochs-override 5 --folds 3 :: быстрый прогон
Время на RTX 5070 Ti (3742 строки, max_len=128): rubert-tiny2 — ~2 мин
полный цикл; ruBert-base — ~7 мин. Автоматически: bf16 autocast на
CUDA, GroupKFold-сплиты, ранний stopping (patience 3), метрики и графики в
reports/, чекпоинты в models/, лучшая модель — models/best.
Гиперпараметры — в MODEL_CONFIGS (src/train.py): tiny2 — lr 1e-4, batch
64, до 20 эпох; base — lr 3e-5, batch 32, до 10 эпох; AdamW, weight_decay
0.01, linear warmup 10%, grad clip 1.0, seed 42.
Выбор основы и сравнение моделей (меню, пункты 2 и 7)
python tools/collect.py → «2 Переобучить»: после вопроса «сегментатор + основные модели» предлагается
список основ. Каждая обучается отдельным запуском в models/runs/<время>_<профиль>/ (python -m src.train --runs), models/best, reports/final_* и summary.md при этом не меняются.
| профиль | основа | замечания |
|---|---|---|
tiny2 |
rubert-tiny2, 30M | самая быстрая, подходит для ONNX/CPU |
base |
ruBert-base, 178M | текущий рабочий выбор |
large |
ruBert-large, 427M | помещается в 16 ГБ (bf16, batch 16); обучение ~3× дольше base, инференс на CPU медленнее |
modern |
RuModernBERT-base, 149M | новая архитектура; ONNX-экспорт проекта (token_type_ids) её не принимает |
Кросс-валидация (5 прогонов) на итоговую модель не влияет, нужна только для оценки устойчивости; без неё
обучение примерно в 6 раз короче. Флаги CLI: --folds 0, --lr, --batch, --epochs-override, --tag.
Пункт «7 Модели» (и конец пункта 2) сравнивает все модели (models/best, запуски, best_backup_*,
models/tiny2) на одной и той же текущей тестовой выборке: каждая оценивается заново, в своём входном
формате (без «[RUS AC3 …]» для моделей, обученных без аудио-контекста). Цифры кэшируются в
<модель>/eval.json под отпечатком выборки. Таблица показывает joint exact с 95% интервалом и парное
сравнение с models/best: сколько строк новая модель починила и сколько сломала, значима ли разница
(знаковый критерий). Разница в пределах шума так и помечается. Звёздочка у модели означает, что она обучена
на другом разбиении и часть текущих тестовых строк могла видеть — её цифры завышены. Выбранная модель
копируется в models/best (прежняя уходит в models/best_backup_*, откат — тем же пунктом); перед заменой
выводятся предупреждения (другая основа нужна в кэше Hugging Face на машине сервиса, вес, ONNX).
Запуски и архивные копии можно удалять из того же меню (каждая 0.1–1.4 ГБ).
Переобучение на свежем датасете
Сборщик (deepseek-harness/default-workspace/dataset.py) дописывает
labels.csv. Когда появится новый снимок:
copy /Y <путь>\labels.csv data\labels.csv
.venv\Scripts\python -m src.prepare_data
.venv\Scripts\python -m src.train
Troubleshooting
| Симптом | Причина | Решение |
|---|---|---|
torch.cuda.is_available() = False |
установлен CPU-torch | переустановить с --index-url .../whl/cu128 |
CUDA error: no kernel image is available |
колёса без sm_120 (старый cu126 и т.п.) | то же — нужны именно cu128 |
CUDA driver version is insufficient |
старый драйвер NVIDIA | обновить драйвер (нужен 5xx+) |
| Память GPU занята другими приложениями (WDDM) | Windows держит ~4 ГБ VRAM под систему | batch уже мал (32-64 на коротких seq хватает); при нехватке уменьшить batch в MODEL_CONFIGS |
| Хочется обучить без GPU | — | base медленно, но tiny2 обучаема на CPU за десятки минут: тот же запуск, torch можно ставить CPU-версией |
Что сохраняется после обучения
models/<имя>/model.pt— веса;dub_config.json— конфигурация;label_maps.json— классы; файлы токенизатора;train_config.json— гиперпараметры и финальные метрики.models/best/— копия лучшей модели (используется инференсом по умолчанию).reports/summary.md— таблица сравнения;final_<имя>.json— метрики;history_<имя>.png— кривые;confusion_<имя>.png— матрица ошибок.