our_knp/reports/imported-neiro-2026-10-15/experiments/cats-dogs/HANDOFF.md

43 KiB
Raw Permalink Blame History

Передача проекта 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 с текущей машины работает с явным ключом:

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. Их сегодня не редактировали и не откатывали:

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; не выдавать их за успешные результаты.

По просьбе пользователя запущен визуализатор:

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_PART64, KNP_CPU_PROJECTION_PART8192. Оригинальные .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 (выполнять только когда пользователь разрешил продолжение):

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

Новый параллельный поиск:

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 может отличаться, не считать её автоматически рабочей сборкой.

Резервные архивы предназначены для восстановления в новую папку. Пример:

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; монитор доставки не выполняет сетевые тесты.