250 lines
43 KiB
Markdown
250 lines
43 KiB
Markdown
# Передача проекта KNP / AltAI следующему чату
|
||
|
||
**Последнее решение пользователя:** отменить мониторинг/автоматический перенос и выдать ZIP. Монитор остановлен. Дальнейшие автоматические подключения не выполняются. В архиве все доступные локальные материалы; новых полных копий удалённого runtime нет. Старые разделы о мониторе описывают историю, а не действующий процесс.
|
||
|
||
Срез: 2026-10-14, после обсуждения CPU/GPU-ускорения и преимуществ чистого Linux. Это документ состояния, а не заявление, что все начатые изменения закончены. Для восстановления прочитать этот файл, `ACCELERATION.md`, `V2.md`, `README.md` данного эксперимента и ежедневный журнал. Фактический снимок стенда — `handoff-state/remote-inventory.txt`; он фиксирует состояние на момент сохранения и со временем устареет.
|
||
|
||
**СТАТУС СОХРАНЕНИЯ:** локальная передача создана. После успешного начального осмотра стенд перестал отвечать на SSH (тайм-аут подключения). Поэтому перечисленные ниже новые remote-runtime/prior-context архивы и новые копии передачи на станции пока являются **планируемыми**, а не подтверждённо сохранёнными. Ранее существовавшие source-snapshot/trained-weights и results/results-v2 уже есть локально. Истина о новом переносе — `preservation-status.json`; автоматическое завершение после восстановления связи: `python3 /opt/neiro/experiments/cats-dogs/save_handoff.py`. До успешного статуса этого скрипта не утверждать, что новый пакет находится на станции. remote-inventory/patch/flags также создаются этим скриптом при доступном SSH.
|
||
|
||
## 1. Запросы пользователя и принятые решения
|
||
|
||
- Постоянный стенд: `int@10.9.8.230`, WSL; основная папка `/mnt/c/KNP`. Подключаться только по запросу пользователя. Этот запрос разрешает сохранение и сверку на стенде; будущие учебные вопросы сами по себе не разрешают SSH.
|
||
- Пользователь хочет обучать **именно спайковую сеть KNP/AltAI**, даже при скромной точности. Не подменять её готовой CNN или предобученным классификатором.
|
||
- Задача первого объектного опыта — кошки против собак. Это бинарная классификация маленьких изображений, не детекция объектов с координатами и не универсальное распознавание фотографий.
|
||
- Следующие требования: улучшить распознавание; использовать несколько ядер и мощную GPU; реализовать backend, если возможно, иначе объяснить ограничения в отчёте. GPU-часть пока незавершена.
|
||
- Пользователь требует вести ежедневный журнал: коротко об обсуждении, подробно об изменениях/запусках. Не записывать пароли и приватные ключи.
|
||
- Последний вопрос: даст ли чистый Linux преимущество. Ответ: больше контроля над драйвером/ядром/CUDA и меньше некоторых ограничений WSL; выигрыш скорости не измерен. ОС и драйверы не менялись.
|
||
- Не рисовать на общей доске без просьбы пользователя. Соблюдать activity_start/list/update/finish текущего T3-инстанса при долгой работе. Проверять чужие claims перед редактированием.
|
||
|
||
## 2. Быстрая карта путей
|
||
|
||
| Назначение | Путь |
|
||
| --- | --- |
|
||
| Локальная учебная библиотека | `/opt/neiro` |
|
||
| Локальные правила | `/opt/neiro/AGENTS.md` |
|
||
| Точка входа для следующего чата | `/opt/neiro/HANDOFF.md` |
|
||
| Эта передача, скрипты и артефакты | `/opt/neiro/experiments/cats-dogs` |
|
||
| Ежедневный журнал | `/opt/neiro/changes-2026-10-14.md` |
|
||
| Снимок состояния и резервные архивы | `/opt/neiro/experiments/cats-dogs/handoff-state` |
|
||
| Постоянный SSH | `int@10.9.8.230` |
|
||
| Windows-папка проекта, видимая в WSL | `/mnt/c/KNP` (обычно `C:\KNP` на Windows) |
|
||
| Передача на рабочей станции | `/mnt/c/KNP/HANDOFF-2026-10-14.md` |
|
||
| Копия всей папки эксперимента на станции | `/mnt/c/KNP/cats-dogs` |
|
||
| Исходный репозиторий KNP с прежними правками | `/mnt/c/KNP/examples` |
|
||
| Отдельная копия MNIST-примера для кошек/собак | `/mnt/c/KNP/cats-dogs/source` |
|
||
| Основная рабочая сборка KNP | `/home/int/knp-build` |
|
||
| Внешние библиотеки | `/home/int/deps/lib` |
|
||
| Все данные/прогоны объектного опыта | `/home/int/run/cats-dogs` |
|
||
| Отдельный бинарник классификатора | `/home/int/run/cats-dogs/build/cats_dogs` |
|
||
| Старые MNIST-прогоны | `/home/int/run/exp` |
|
||
| Визуализатор цифр | `/mnt/c/KNP/viz` |
|
||
| Старые отчёты | `/mnt/c/KNP/Отчёт_*.md` |
|
||
| Память предыдущего Claude Code | `/home/int/.claude/projects/-mnt-c-knp/memory` и `/home/int/.claude/projects/-mnt-c-KNP/memory` |
|
||
|
||
SSH с текущей машины работает с явным ключом:
|
||
|
||
```bash
|
||
ssh -i ~/.ssh/id_ed25519_snw -o IdentitiesOnly=yes -o BatchMode=yes int@10.9.8.230
|
||
```
|
||
|
||
Обычный SSH без `-i` прежде давал отказ. `ssh-copy-id` проверялся: публичный ключ уже был установлен, повторно добавлять не потребовалось. Ключи не входят в резервные архивы.
|
||
|
||
## 3. Окружение и состояние процессов
|
||
|
||
- KNP в `/mnt/c/KNP/examples/VERSION`: `2.0.0`. HEAD на момент передачи: `55470ed622cb29efd0c04fcad1b12e6bac9da00d`. Используется сборка с экспериментальными правками, не чистый релизный пример.
|
||
- Машина WSL `1220WS2`, Ubuntu 26.04; ядро при проверке `6.18.54.1-microsoft-standard-WSL2`.
|
||
- Intel i7-13700KF, `nproc` показывал 24 логических CPU.
|
||
- GPU: NVIDIA GeForce RTX 4070 Ti SUPER, compute capability 8.9, `nvidia-smi` показывает 16376 MiB и драйвер 610.88. Это снимок, не требование к другой машине.
|
||
- CUDA Toolkit `/home/int/cuda-12.9`; nvcc `/home/int/cuda-12.9/bin/nvcc`. Для nvcc использовался совместимый host compiler `/home/int/mamba/envs/gcc14/bin/x86_64-conda-linux-gnu-g++`. CPU-сборка использует `/usr/bin/c++`; путь для сохранения реальных флагов — `handoff-state/compiler-flags.txt`.
|
||
- Python-среда обработки изображений `/home/int/anvenv/bin/python`: Python 3.14.4, numpy 2.5.4, Pillow 12.3.0. Pip 25.1.1 установлен через ensurepip. torch/torchvision для этих опытов не требуются.
|
||
- GPU-инструмент WSL: `/usr/lib/wsl/lib/nvidia-smi`. CUDA-тест `/home/int/scratch-cu/t2` при `LD_LIBRARY_PATH=/home/int/cuda-12.9/lib64:/usr/lib/wsl/lib` выдавал `no error h=42`.
|
||
- На момент передачи **нет запущенных обучений/сборок cats_dogs**. Единственный обнаруженный процесс из этой работы — HTTP-сервер визуализатора, PID 3671; PID не считать постоянным.
|
||
- Автозапуск обучения или HTTP-сервера не создавался. Перезапуск WSL может остановить визуализатор.
|
||
|
||
## 4. Прежняя работа и визуализатор MNIST
|
||
|
||
При первом осмотре уже были изменения в шести файлах исходного KNP. Их сегодня не редактировали и не откатывали:
|
||
|
||
```text
|
||
examples/mnist-learn/models/altai/construct_network.cpp
|
||
examples/mnist-learn/models/altai/hyperparameters.h
|
||
examples/mnist-learn/models/altai/prepare_network_for_inference.cpp
|
||
examples/mnist-learn/models/blifat/prepare_network_for_inference.cpp
|
||
knp/backends/gpu/cuda-backend/CMakeLists.txt
|
||
knp/base-framework/impl/model_loader.cpp
|
||
```
|
||
|
||
После успешного save_handoff.py незакоммиченный diff и HEAD будут сохранены в `handoff-state/original-knp-changes.patch` и `original-knp-status.txt`. После восстановления связи старые отчёты и обе папки памяти Claude будут сохранены в `prior-context-and-source.tar.gz`. Они содержат предыдущий контекст и не заменяют новые проверки. Из прежних отчётов известны изменения колонок/торможения и исправление каналов ModelLoader; повторно весь старый MNIST-бенчмарк не воспроизводился. У старых `sz80_30k_s1`, `sz80_30k_s42`, `sz80_60k_s42`, `sz40_60k_s42` в `/home/int/run/exp` при первом осмотре были пустые `result.csv`; не выдавать их за успешные результаты.
|
||
|
||
По просьбе пользователя запущен визуализатор:
|
||
|
||
```bash
|
||
nohup python3 -m http.server 8080 --bind 0.0.0.0 \
|
||
--directory /mnt/c/KNP/viz \
|
||
> /tmp/knp-viz-http.log 2>&1 < /dev/null &
|
||
```
|
||
|
||
URL `http://10.9.8.230:8080/altai_viz.html`; в браузере Windows пользователь открывал `http://127.0.0.1:8080/altai_viz.html`. Перед повторным запуском проверить существующий сервер/порт, не создавать второй процесс. При передаче HTTP вернул 200.
|
||
|
||
Исправлена кириллица: добавлен `<meta charset="utf-8">` в `/mnt/c/KNP/viz/altai_viz.html` и `app.html`. Сервер отдаёт `text/html` без charset, но объявление есть в документе. Результат визуально виден на следующем скриншоте пользователя. HTML и diff включены в план резервирования; см. статус сохранения в начале файла.
|
||
|
||
Наблюдение пользователя: нарисованная 4 на шаге 9/14 давала ответ 5 с подписью «пока лидирует». Это **промежуточный результат**, финальные шаги не проверены. Скриншот локально `/opt/neiro/reports/observations/2026-10-14-drawn-4-leading-5.png`; копия для передачи — `handoff-state/observations/`. По этому наблюдению сеть цифр не переобучали. Объектный визуализатор кошек/собак не создавался.
|
||
|
||
В `viz` обнаружены также untracked `.python-version`, `README.md`, `pyproject.toml`, `uv.lock`, `s -lntp`; их происхождение в этой работе не установлено. Не приписывать их своим изменениям и не удалять. Snapshot status включён в план резервирования; архив контекста сохраняет только нужные два HTML, не всю папку `viz`.
|
||
|
||
## 5. Объектный эксперимент v1 — завершён
|
||
|
||
Скопирован MNIST-пример с прежними AltAI-изменениями в отдельный `cats-dogs/source`. В C++ для этого опыта изменены только константы `global_config.h`: классов 2 вместо 10, входов 2048 вместо 784. Лицензия Apache 2.0 сохранена. Исходный MNIST и штатные библиотеки не заменялись.
|
||
|
||
2048 входов, 20 обучаемых нейронов на класс, локальное STDP в KNP/AltAI, случайный разброс весов 20, seed 42. Подготовка входов обычная фиксированная, не нейросеть. Классы в CSV: 0=cat, 1=dog.
|
||
|
||
Данные: JPEG-зеркало `https://github.com/YoongiKim/CIFAR-10-images`, commit `d7d05618061fe37d830fb0419063d113c575ccbc`. Это преобразованные JPEG, **не оригинальные байты CIFAR-10** и не официальный CIFAR-бенчмарк. Train 800, validation 200, test 400; баланс классов. Имена файлов, seed и SHA-256 — в `data/manifest.json`, локальная копия `data-manifest.json`.
|
||
|
||
Данные и кэш на стенде `/home/int/run/cats-dogs/data`: `github-jpeg-cache`, `*-original.npz`, `.bin`, `.target`. Исходная загрузка официального архива была остановлена; `cifar-10-binary.tar.gz` и `parts` могут быть частичными. Hugging Face превью получали HTTP 429; они не использовались в финальном опыте. `download.py`, `prepare_data.py`, `prepare_preview.py`, `fetch_cache.py`, `preview-cache` сохраняют историю попыток, не являются текущим выбранным путём.
|
||
|
||
Первый яркостный ON/OFF-вход оказался слабым. Выбран контраст: серое изображение минус размытие 5×5, масштаб 4, положительный/отрицательный каналы. Порог 60 выбран из 10 фиксированных конфигураций по настоящей KNP-validation: 111/200 (55,5%). Итоговый `test`: 208/400 (52%), 183 ошибки, 9 молчаний. Интервал Уилсона 95% приблизительно 47,1–56,9%; превосходство над 50% не установлено.
|
||
|
||
`tune.py` — **неуспешный офлайн-симулятор**: расходился с KNP, его подбор не использован. Причина отдельно не исправлена, в том числе начальное состояние растра не учитывает предварительное кодирование train. Не использовать как эталон.
|
||
|
||
Артефакты: `README.md`, `results/selection.json`, `results/test-metrics.json`, `results/test-settings.json`, `results/reproducibility.json`, `source-snapshot.tar.gz`, `trained-weights.tar.gz`. На стенде прогоны `val_*`, `validation`, `test`; выбор `selection.json`, проверка `reproducibility.json`. Четыре CSV весов/порогов train между validation и test побайтно совпали.
|
||
|
||
## 6. Улучшенный эксперимент v2 — завершён
|
||
|
||
Фиксированные HOG-подобные признаки в `features.py`: sqrt RGB, выбирается цветовой канал с наибольшим градиентом, 9 направлений, ячейки 4×4, блоки 2×2, L2-Hys. 1764 признака; оставляются 256 сильнейших, дополнение до 2048. Это собственная реализация, не заявление о битовой совместимости со scikit-image. Метки не участвуют в предобработке. Обучение весов классификатора остаётся реальным KNP/STDP; извлечение признаков **не спайковое**.
|
||
|
||
Плотные HOG и HOG+цвет проверялись на старой validation как диагностика. После обычного квантования у `probe_hog_20` 65626/81920 весов нулевые. Режим `KNP_MNIST_QUANT=weights` масштабирует по весам и уменьшает потерю малых весов. Веса в ±255; пороги подбирались в другом масштабе. Переносимость порогов на физический AltAI определённого поколения не проверена.
|
||
|
||
Новые JPEG-разделения, прежний источник/commit, seed перемешивания 20261015:
|
||
|
||
- Train 4000: по 2000 cat/dog, исходный train 0000–1999.
|
||
- Новая validation 1000: по 500, исходный train 4500–4999.
|
||
- Новый test 1000: по 500, исходный test 0200–0699; старый test был 0000–0199.
|
||
- Проверены уникальность, баланс, отсутствие пересечений. Настройки выбирали по validation, не по test.
|
||
|
||
Пути: `/home/int/run/cats-dogs/data-v2` — исходные NPZ и manifest; `features-v2` — hog/hybrid/sparse_hog `.bin`/`.target` и манифесты; `pilot-features` — диагностические признаки старого пилота. Входной `*_validation.bin` содержит train, затем validation; `*_train_test.bin` содержит train, затем test. `run.py --train` и `--count` задают границу обучения и длину оценки. Не перепутать с отдельным `*_val.bin`.
|
||
|
||
8 заранее заданных конфигураций: колонки 20/60 × пороги 600/1600/4000/8000, sparse_hog, quant=weights, seed42. Выбран `v2_val_c20_t4000`: 626/1000 (62,6%). Новый `v2_test`: 618/1000 (61,8%), 382 ошибки, 0 молчаний; cats 304/500, dogs 314/500. Прежняя сеть на **том же новом test** (`v1_fresh_test`): 522/1000 (52,2%), 450 ошибок, 28 молчаний. Прирост 9,6 п.п.; интервалы 58,7–64,8% и 49,1–55,3%. Это небольшой JPEG-набор и один seed, не гарантированное распознавание любых фотографий.
|
||
|
||
Полная конфигурация новой модели: train4000, count1000, columns20, threshold4000, seed42, jitter20, quant weights; `KNP_MNIST_ADD_THR_SCALE=0`, `KNP_MNIST_INFER_INHIB=255`. Train+test новой 23,27 с, прежней 5,55 с в тех замерах. CSV весов/нейронов повторного обучения побайтно совпадают с выбранной validation. Test уже просмотрен; дальнейшие улучшения нельзя честно настраивать по нему и снова называть независимой тестовой оценкой.
|
||
|
||
Артефакты локально: `V2.md`, `results-v2/selection.json`, `comparison.json`, `test-settings.json`, `data-manifest.json`, `features-manifest.json`, `probes.json`, `trained-weights-v2.tar.gz`. Полные прогоны на стенде `v2_val_*`, `v2_test`, `v1_fresh_test`, файлы `selection-v2.json`, `comparison-v2.json`, `probes-v2.json`; также в резервном runtime-архиве. Файлы `.bin`/`.target` — входы для C++, а CSV выгрузки не являются готовой реализацией API загрузки модели.
|
||
|
||
## 7. Ускорение CPU — что проверено
|
||
|
||
### Независимые процессы: работает
|
||
|
||
`run_batch.py` запускает ограниченное число независимых C++-процессов, Python-потоки только управляют ими. Нет общей изменяемой сети и зависимости от Python GIL. В плане JSON нужны уникальное безопасное `name` и список строк `args`; обязательна отдельная сводка. Существующие прогоны защищены от перезаписи; ошибки возвращаются как неуспех.
|
||
|
||
`validate_v2.py` сейчас имеет `--jobs` (по умолчанию 4) и `--prefix`; стабильный выбор при равной accuracy идёт по заранее заданному порядку. Старые selection не перезаписывать. `benchmark_batches.py`: одна и та же группа из четырёх порогов, каждая train4000+validation1000, последовательно 91,573 с, 4 процесса 42,911 с (2,134× пропускная способность). Все четыре CSV весов/нейронов и `result.csv` совпали побайтно. Один отдельный процесс в группе стал медленнее из-за конкуренции: это ускорение группы, не одного временного ряда.
|
||
|
||
Стенд: `bench_serial_t*`, `bench_parallel_t*`, `/home/int/run/cats-dogs/acceleration/batch-benchmark.json`, планы/сводки. Локально `acceleration-results/batch-benchmark.json`.
|
||
|
||
### Многопоточность одной сети: поддержка добавлена, но медленнее
|
||
|
||
Штатный multi backend содержит BLIFAT/STDP-BLIFAT/LIF, не AltAI; прямой запуск даёт `Type is not supported`. `run.py --backend multi` теперь отвергается до создания папки.
|
||
|
||
`build_tuned_cpu.py` делает отдельную копию header/backend и добавляет AltAILIF + ResourceSTDPAltAI в поддерживаемые типы, env-параметры потоков/размеров порций. Обязательно компилирует backend.cpp **и get_network.cpp**, иначе несовместимы variants разных списков типов. Это экспериментальная сборка, не штатная поддержка релиза.
|
||
|
||
Библиотека `/home/int/run/cats-dogs/acceleration/libknp-cpu-tuned-backend.so`; headers в `acceleration/include`; `KNP_CPU_THREADS` по умолчанию2, допустимо1..256; `KNP_CPU_POPULATION_PART`64, `KNP_CPU_PROJECTION_PART`8192. Оригинальные .so не заменены.
|
||
|
||
Короткие одинаковые 800+200: single4,89 с, tuned2 15,09 с, tuned4 15,69 с. Проверена идентичность весов/ответа; масштаб проверки скрипта `benchmark_backends.py` — float_weights, quant_weights, result.csv. Полный `backend_altai_full` 4000+1000 завершён за80,77 с, результат626/1000. **Его полная побайтная сверка с `v2_val_c20_t4000` ещё не выполнена.** Не объявлять одной accuracy доказательством полной эквивалентности.
|
||
|
||
Первый `backend_bench_*` был неуспешной проверкой до добавления типов; последующие `backend_altai_*` после исправления. Локально `acceleration-results/backend-altai-benchmark.json`, `cpu-altai-multithread.patch`; на стенде исходники/логи/JSON в acceleration и корне runtime. У небольшой сети STDP ставится одной задачей на популяцию, плюс барьеры между фазами; это кандидаты горячих участков, не завершённый профиль по времени.
|
||
|
||
### Кэш подключений: собран, проверка неполная
|
||
|
||
`perf_connection_cache.h` кэширует подключённые ссылки в прежнем порядке, thread_local, ключ projection/neuron; отслеживает адрес/размер/хранилище проекций и сбрасывается при `_init`. Это только фиксированная топология. Переподключение с прежним размером/адресом не обнаруживается; нельзя автоматически переносить на динамическую сеть.
|
||
|
||
`build_fast_cpu.py` копирует **всё дерево CPU-library/include**, чтобы quoted includes взяли изменённые копии, заменяет поиск связей кэшем, использует const references вместо копий vector. Новая библиотека `/home/int/run/cats-dogs/fast-cpu/libknp-cpu-fast-backend.so`; оригинальные файлы не редактируются. `fast_smoke` 800+200 завершён за4,39 с и123/200, как эталон. **Побайтная проверка CSV и полноценный замер 4000+1000 ещё не завершены.** По умолчанию остаётся single.
|
||
|
||
## 8. GPU-бэкенд — незавершённый прототип
|
||
|
||
Штатный `/home/int/knp-build/bin/libknp-gpu-cuda-backend.so` поддерживает только BLIFATNeuron и DeltaSynapse, `plasticity_supported=false`. Не умеет AltAI/STDP. `cuobjdump` подтвердил sm89; проблема не сводится к отсутствию архитектуры RTX в бинарнике. Simple-network `/home/int/gputest/simple-network` игнорировал переданный CLI-backend и использовал библиотеку через sibling symlink; этот symlink указывал на GPU lib. В GPU-коде CUDA-векторов воспроизведён `invalid device function`. Ошибка лишь журналируется, процесс может вернуть0. Это не успешная сеть. Лог `acceleration-results/cuda-knp-probe.log` и runtime `cuda-knp-probe.log`; причина не исправлена.
|
||
|
||
Запрошено второе мнение GPT-6 Astra через skill astra-advisor: узкий перенос математически возможен; отсутствие модели в штатном backend не означает невозможность GPU на этом железе. Совет — собственные плоские CUDA Runtime буферы, точный порядок фаз/сумм, поэтапная проверка всех состояний. Маленькая сеть может не ускориться из-за host overhead. Гибридный этап допустим, но не выдавать его за полный GPU-backend.
|
||
|
||
Написаны четыре **не собранных и не проверенных** файла в папке эксперимента, теперь также сохраняемые на рабочей станции:
|
||
|
||
- `gpu_stdp_types.h`: POD-состояния нейрона/синапса и интерфейс create/step/download/destroy.
|
||
- `gpu_stdp.cu`: CUDA Runtime, свои malloc/copy/check errors; GPU-расчёт STDP, dopamine, ISI, renormalization; один thread на postsynaptic neuron, последовательный порядок его связей; ресурсы на GPU постоянные.
|
||
- `gpu_stdp_bridge.h`: контракт train(Population, Projections, SpikeMessage, Step, CPU-reference), flush, clear.
|
||
- `gpu_stdp_bridge.cpp`: thread_local контексты фиксированной топологии; packing/unpacking; last_spike_step авторитетно обновляется CPU-проекциями; веса возвращаются CPU; flush выгружает ресурсы перед экспортом сети.
|
||
|
||
Это **гибридный замысел**: нейродинамика, проекции и message bus остаются CPU; пластичность переносится на GPU. На активном шаге копируются нейроны и markers всех ~80k связей H2D, нейроны/веса D2H; копии pageable. Низкая GPU-загрузка/замедление возможны. Отсутствие активного STDP должно пропускаться, но это условие ещё надо сверить с эталоном.
|
||
|
||
`KNP_CUDA_VERIFY` в bridge проверяет CPU-reference по шагам: float tolerance1e-4 +1e-6 relative, timestamps/flags точно, на flush печатает `CUDA_STDP gpu_steps=... checked_steps=... max_state_abs_error=...`. Сейчас наличие env включает проверку, даже значение0. **Механизм проверки сам не проверен и не подключён к backend!** `run.py` пока не имеет gpu/backend или --cuda-verify. Нет `build_gpu_stdp.py`, GPU .so и результатов GPU-обучения.
|
||
|
||
Риски для проверки: точный float/double и порядок сумм additional_threshold/free_resource; unsigned time subtraction (в CPU есть непривычные выражения — не исправлять одновременно с портом); ISI-статусы forced/start/continue/not-period; отрицательный dopamine при forced; renormalization/drain; flags contributed/hebbian; задержки и несколько входных проекций; экспорт train→infer. У кэша/bridge фиксированная топология, повторное создание/уничтожение сети должно очищать stale refs.
|
||
|
||
## 9. Конкретная точка продолжения GPU
|
||
|
||
Ниже **план, ещё не выполненные действия**. Не утверждать, что эти команды уже запускались.
|
||
|
||
1. Прочитать CPU-эталон в `/mnt/c/KNP/examples/knp/backends/cpu/cpu-library/include/knp/backends/cpu-library/impl/populations/altai/altai_stdp.h` и `training/stdp.h`, соответствующие neuron/synapse traits. Сверить draft с реальным порядком вызовов.
|
||
2. Создать `build_gpu_stdp.py`, изолированное дерево `/home/int/run/cats-dogs/gpu-stdp`; скопировать целиком готовое fast-cpu/include, не менять оригиналы.
|
||
3. В копии altai_stdp.h переименовать исходное train_population_impl в train_population_cpu_reference; добавить wrapper старой сигнатуры, вызывающий bridge с reference callback. Include bridge вне namespace. Не допустить рекурсии.
|
||
4. В копии single backend `_init` добавить clear GPU-контекстов и кэша. В копии get_network.cpp перед `get_network_data()` добавить flush. Компилировать backend.cpp, get_network.cpp, bridge.cpp и CUDA-object, линковать по рабочему link.txt, но отдельным SONAME.
|
||
5. Предполагаемые CUDA-флаги: `-std=c++17 -arch=sm_89 --fmad=false --prec-div=true --prec-sqrt=true -O3 -Xcompiler=-fPIC`; host compiler gcc14 указан выше. Не включать fast-math при проверке. Link `-L/home/int/cuda-12.9/lib64 -lcudart` и rpath на этот lib64. Отдельный ожидаемый output `gpu-stdp/libknp-altai-gpu-stdp-backend.so` пока **не существует**.
|
||
6. Добавить явный experimental gpu-вариант в run.py только после успешной сборки; сделать управление verify env, не менять single default.
|
||
7. Маленький train+infer с пошага́вой CPU-reference; затем800+200 и4000+1000. Сравнить все CSV, состояния, спайки, delays, flags, метрики. Дополнить граничными фикстурами ISI/dopamine/несколько проекций. Итоговая accuracy сама по себе недостаточна.
|
||
8. Раздельно измерить без verify kernel/копии/host overhead. Если медленнее — честно сохранить результат; для большого выигрыша понадобятся device-resident нейроны/проекции/очереди и/или batching независимых сетей, а не смена драйвера вслепую.
|
||
|
||
Параллельно допустимо завершить сверку `backend_altai_full` и `fast_smoke` с эталонами. Это дешёвая проверка существующих файлов, не новое обучение. После этого изменить статус ограничений в ACCELERATION.md и журнале.
|
||
|
||
## 10. Команды проверенного пути и ограничения повторного запуска
|
||
|
||
Текущие run.py defaults — старые8000train/2000count/threshold60/data, **не** лучшая v2-конфигурация. Всегда явно задавать нужные параметры. `out.mkdir(exist_ok=False)` защищает старые результаты; взять новое имя. Повторное evaluate_v2.py с прежними именами намеренно откажет, не удалять исходные прогоны ради повторения.
|
||
|
||
Пример следующего обычного контрольного прогона v2 на validation (выполнять только когда пользователь разрешил продолжение):
|
||
|
||
```bash
|
||
python3 /mnt/c/KNP/cats-dogs/run.py resume_check_01 \
|
||
--data-dir /home/int/run/cats-dogs/features-v2 \
|
||
--dataset sparse_hog_validation --train 4000 --count 1000 \
|
||
--threshold 4000 --columns 20 --seed 42 --jitter 20 \
|
||
--quant weights --backend single
|
||
```
|
||
|
||
Новый параллельный поиск:
|
||
|
||
```bash
|
||
python3 /mnt/c/KNP/cats-dogs/validate_v2.py --jobs 4 --prefix resume_val_01
|
||
```
|
||
|
||
Он повторяет прежнюю сетку, не является новым способом обучения. Не запускать контрольный timing одновременно с поиском. Метрики `correct/wrong/unanswered` определяются по счётчикам KNP, а не по печатаемой им округлённой precision. Обучение каждый раз запускается заново; отдельный режим только загрузки готовой сети пока не реализован.
|
||
|
||
Сборка копии примера: `python3 /mnt/c/KNP/cats-dogs/build.py`. Сборки экспериментальных библиотек: `build_tuned_cpu.py`, `build_fast_cpu.py` — работают по абсолютным путям существующей сборки. Для другой машины сначала настроить исходники/библиотеки, архив runtime сам по себе не заменяет установленную KNP toolchain.
|
||
|
||
Подготовка изображений использует `/home/int/anvenv/bin/python`; orchestration/run — python3. Скрипты подготовки могут создавать/перезаписывать данные в указанной папке, не запускать их автоматически поверх исходных манифестов. Тест признаков: `/home/int/anvenv/bin/python /mnt/c/KNP/cats-dogs/test_features.py`.
|
||
|
||
## 11. Что осталось по качеству распознавания
|
||
|
||
61,8% улучшает пилот, но недостаточно. Пока только один seed. Возможные отдельные опыты: аугментации **только train** (зеркало, сдвиг), несколько seed, обучаемые локальные спайковые признаки + pooling, другое SNN-обучение с явным согласованием отличий от нынешнего STDP. Не смешивать алгоритмическое улучшение с GPU-портом — сначала воспроизвести математику. Для нового окончательного результата требуется независимый новый test/оговорённый протокол, поскольку нынешний уже просмотрен.
|
||
|
||
Физический чип AltAI не использовался; эмуляция KNP не доказывает аппаратную совместимость всех выбранных порогов. Различать поколения AltAI и версии KNP. Учебная библиотека `/opt/neiro` — публичный снимок на2026-10-05; для занятий прочитать README/INDEX и соответствующие локальные документы, не запускать скачанные установщики без запроса.
|
||
|
||
## 12. Linux, сохранение и восстановление
|
||
|
||
В WSL CUDA использует драйвер Windows; Linux NVIDIA-драйвер внутри WSL не устанавливать. Native Linux позволяет независимо выбирать совместимые драйвер/ядро/Toolkit. NVIDIA указывает ограничения managed/pinned memory в WSL; это не доказанное узкое место нашей реализации. Основной блокер — отсутствующий AltAI/STDP GPU-backend. Данные/сборки уже в `/home/int`, исходники на `/mnt/c`; Microsoft рекомендует Linux-файловую систему для Linux-инструментов. Замер WSL/native Linux не проводился. Источники: https://docs.nvidia.com/cuda/wsl-user-guide/index.html и https://learn.microsoft.com/en-us/windows/wsl/filesystems.
|
||
|
||
После успешного запуска save_handoff.py, `handoff-state/remote-runtime.tar.gz` будет полным снимком `/home/int/run/cats-dogs`, включая подготовленные данные, JPEG-кэш, все прогоны, логи, экспериментальные headers/objects/libs и частичные неиспользованные загрузки. Он не включает весь `/home/int/knp-build`, `/home/int/deps`, venv, CUDA Toolkit, SSH-ключи или весь прежний MNIST runtime. Частичные файлы внутри архива не становятся валидными данными от факта резервирования.
|
||
|
||
После успешного сохранения, `handoff-state/prior-context-and-source.tar.gz` будет отдельной копией адаптированного C++ source, двух HTML визуализатора, четырёх старых отчётов и обеих папок памяти Claude. Известные оригинальные незакоммиченные правки KNP будут в отдельном patch. Полный git checkout основного KNP остаётся на стенде; локальная учебная копия `/opt/neiro/sources/knp` может отличаться, не считать её автоматически рабочей сборкой.
|
||
|
||
Резервные архивы предназначены для восстановления в **новую** папку. Пример:
|
||
|
||
```bash
|
||
mkdir -p /home/int/restore-cats-dogs-2026-10-14
|
||
tar -xzf /mnt/c/KNP/cats-dogs/handoff-state/remote-runtime.tar.gz \
|
||
-C /home/int/restore-cats-dogs-2026-10-14
|
||
```
|
||
|
||
После распаковки абсолютные пути в settings/scripts будут указывать на оригинальный runtime; их надо осознанно адаптировать, а не запускать вслепую. `SHA256SUMS` и `preservation-manifest.json` в корне папки эксперимента проверяют локальную и сохранённую на станции копии. Манифест содержит перечень и хеши файлов; себя, SHA256SUMS и изменяемый preservation-status.json не включает. Наличие локальных контрольных сумм не доказывает выполненный перенос; см. preservation-status.json.
|
||
|
||
Сохранение по последнему запросу не меняло модель, алгоритмы или драйверы и не запускало обучение. Состояние незавершённых GPU/fast-проверок намеренно сохранено как незавершённое. Коммитов/PR этой работы не создавали. Перед продолжением проверить актуальные процессы и файлы: снимок не заменяет реального состояния машины.
|
||
|
||
## Дополнение: автоматическая доставка после восстановления SSH
|
||
|
||
По явному запросу пользователя настроен `monitor_handoff.py`. Проверки каждые30с, после доступа запускается `save_handoff.py`: имеющийся локальный пакет отправляется первым, затем полный runtime/context backup и дополненный пакет. Монитор завершается только после успешного переноса с SHA256-проверкой. Повторные экземпляры блокируются flock. Лог `/opt/neiro/.handoff-monitor/monitor.log`, состояние `status.json`, PID `pid`. Фазы waiting_for_ssh/checking/transferring ещё не означают успеха; succeeded означает успешный выход save_handoff.py. После перезагрузки локальной машины процесс сам не возобновится.
|
||
|
||
Незапущенный сетевой тест пользователя: на стенде установить iperf3 и запустить `iperf3 -c 10.9.8.1 -P 8 -t 5`. Пока не выполнен из-за тайм-аутов SSH; монитор доставки не выполняет сетевые тесты.
|