# Две Nemotron: состояние реализации и проверки

Поставка завершена 8 ноября. Обе Nemotron выбираются и выполняются в production Monitor и Compare. Все пять прежних backend завершили контрольное распознавание в обновлённом Compare.

## Исходники

- Chat Agent: [MR !67](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/merge_requests/67>), доставка через [MR !68](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/merge_requests/68>), main `430dcb8d`.
- ASR: [MR !10](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/merge_requests/10>), main `54a49e78`.
- Rag Stack: адресный ASR в [MR !2](<https://git.giscloud.ru/ai-assistant/deployments/rag-stack/-/merge_requests/2>), закреплённый Docker CLI в [!3](<https://git.giscloud.ru/ai-assistant/deployments/rag-stack/-/merge_requests/3>), явный тег в [!4](<https://git.giscloud.ru/ai-assistant/deployments/rag-stack/-/merge_requests/4>), main `2dc32e03`.
- Расширение, GPU/MIG и модель голосового чата GigaAM Large не менялись.

Добавлены два адаптера в существующий worker, пункты Compare/Monitor, проверка фактической модели, диагностический срок 120 секунд и отдельное время загрузки/прогрева. Сохраняются NATS subjects, очередь, приоритет живой речи, контроль входа и защита от повторного вызова.

Lite использует извлечённые encoder/CTC, без 30B LLM и Core ML. Ревизии, хеши и лицензии закреплены; runtime не скачивает веса. Для NVIDIA 0.6B фактическая закреплённая конфигурация поддерживает `[56,13]`, а не исходно предложенные `[70,13]`. Язык — ru-RU.

С разрешения владельца обновлены Torch/torchaudio 2.10.0+cu126, Triton 3.6, NCCL 2.27.5, NVSHMEM 3.4.5 и связанный TorchCodec 0.10.0. Исправлены блокеры apt/Lightning/fsspec/PyArrow. Проверки безопасности не ослаблялись.

Дополнительно исправлены:

- необратимое округление mel-коэффициентов при общем переводе модели в FP16; preprocessor сохраняет FP32;
- ложный WER 100% до завершения распознавания и после ошибки/отмены;
- смешение неподдерживаемых и несохранённых confidence-оценок;
- устаревшее указание Core вместо фактического Audio Ingress в наблюдении результата bridge.

## Проверки

- 606 frontend-тестов и типизация — CI 5807; остальные четыре группы в этом точечном прогоне штатно пропущены как незатронутые. Базовый набор пяти групп выполнен ранее на общей реализации в CI 5789.
- 59 адресных тестов сравнения/повтора. На итоговом main пять групп CI прошли; опубликованы образы Gateway, Audio Ingress и Front.
- ASR: 49 bridge/NATS и 13 worker/adapter checks в полном кандидате; отдельные настоящие NATS-сценарии проверяют очередь, приоритет, отмену во время загрузки, недоступность и потерю ответа без повторного вызова.
- Полный кандидат 65f82dad ранее прошёл Trivy для восьми образов. Повтор 7 ноября с новой базой уязвимостей нашёл две исправляемые HIGH в zlib1g; исправление 8630eeca прошло штатный CI 5808: шесть затронутых образов проверены Trivy и опубликованы. Использован прежний порог HIGH/CRITICAL с ignore-unfixed; проверки не ослаблялись.
- Обе Nemotron и обе GigaAM распознали по 50 записей на Torch 2.8 и 2.10: тексты и входные хеши совпали. CPU GigaAM явно использовал FP32 только в одноразовом тесте; GPU-адаптер не менялся.
- Pyannote/TorchCodec прочитал контрольный WAV; образы диаризации прошли свои проверки импортов. Их новое GPU-поведение пока не подтверждено.

## Предварительное сравнение CPU

Фиксированная выборка Fleurs: 40 RU / 10 EN, одинаковые PCM16 и float32 SHA-256 для всех пяти моделей. Это небольшая выборка, не полноценный benchmark. CPU INT8 Whisper и FP32 остальных нельзя использовать для вывода о сравнительной скорости на H100.

| Модель | CPU precision | WER RU | CER RU | Среднее распознавание RU, мс |
|---|---|---:|---:|---:|
| Whisper Turbo | int8 | 5.80% | 1.42% | 7876.1 |
| GigaAM RNNT | float32 | 5.43% | 1.52% | 533.3 |
| GigaAM Large | float32 | 7.53% | 3.45% | 1058.4 |
| Nemotron ASR 0.6B | float32 | 12.72% | 4.45% | 1734.0 |
| Nemotron Transcribe Lite | float32 | 26.67% | 8.01% | 1007.8 |

На этих русских примерах новые модели уступили действующим. Lite остаётся экспериментальной. Модель чата по умолчанию сохраняется.

Английские результаты лежат в JSON, но Turbo и официальная Nemotron также на EN использовали принудительный русский; эти цифры не оценивают их английский режим. Полные записи/тексты/времена — в `benchmark-*.json`; сводка — `benchmark-summary.json`.

На максимальном CPU-входе 33 секунды обе модели обработали тишину, шум и повторённую речь без исключений. Lite успешно прошёл границу 30-секундных блоков, но на шуме вернул ложный текст «Сем. С.»; официальный ASR вернул пустую строку. GPU/FP16 этим тестом не подтверждены.

## Реальный production baseline до обновления

Все пять прежних backend завершили одну публичную фразу в HTTPS Compare: текст совпал с эталоном, WER/CER 0, по одному вызову. Вход модели совпал по SHA-256 у четырёх H100 backend; LinTO этот хеш не сообщает, для него подтверждены исходная запись и диапазон.

| Backend | Чистое распознавание, мс |
|---|---:|
| Whisper Turbo | 174.46 |
| GigaAM Large | 195.26 |
| Whisper Russian | 370.53 |
| GigaAM RNNT | 206.98 |
| LinTO | 184.27 |

Это единичные вызовы, не p95 и не приёмка нового runtime. Физический микрофон не использовался. Временная подстановка публичного звука в тестовой вкладке удалена, настройки восстановлены.

## Поставка 8 ноября

- [ASR pipeline 5817](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/pipelines/5817>): 49 bridge/NATS и 13 worker-тестов, Trivy, публикация worker и bridge 3.2.379. Registry Explorer подтвердил worker `f9d8d321…`, bridge `ceeb2cfe…`.
- [Chat pipeline 5818](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/pipelines/5818>): пять проверок, сборка и preflight. Registry Explorer подтвердил три образа версии 1.0.1203 для точного SHA.
- [Rag Stack pipeline 5825](<https://git.giscloud.ru/ai-assistant/deployments/rag-stack/-/pipelines/5825>) применил только ASR-композицию без prune. Фактический контейнер на H100 запустился с `f9d8d321…`, источник `54a49e78`. Спецификация использует `main:latest`.
- Worker здоров: `ready=true`, `accepts_requests=true`, `nemotron_residency=resident`. Подтверждены обе Nemotron и четыре прежних H100 backend. Listener проверил `main:latest` и получил тот же `f9d8d321…`; образы всех 23 соседних GPU-сервисов совпадают с исходными.
- [Bridge pipeline 5826](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/pipelines/5826>) применил подготовленный образ и подтвердил readiness на `54a49e78` / `ceeb2cfe…`.
- [Chat backend job 30661](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/jobs/30661>) прошла. Фактические digest: Gateway `f8be1acc…`, Audio Ingress `c3c92c1d…`.
- [Chat Front job 30662](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/jobs/30662>) завершилась в 12:47:09 МСК, приём возобновлён. Фактический digest Front `6b61519fa1605de4dae2a221c2eeecee9a7f1589f32526d83b0f541a294d92c8`.
- В промежуточной проверке listener получал старую ссылку с digest и не мог видеть новый тег. Dry Stack нормализует `:latest`, Docker сохраняет прежний digest при совпадении исходного имени. Адресное дополнение Compose позволило заменить эту ссылку. Для новой публикации по этому тегу повторять миграцию не требуется.
- GPU-проверка на изолированном worker: одновременно обе Nemotron и действующие модели, минимально 6,0 ГиБ свободно. Тесты на 90 мс, 1 с и до 33 с, включая тишину, шум и речь. На одном коротком публичном отрывке FP16 и FP32 вернули одинаковый текст; прогретое распознавание 29,24/92,07 мс (0.6B/Lite). Полная выборка сравнения проверялась на CPU.

## Проверка production после поставки

| Где | Вход | Nemotron 0.6B | Nemotron Lite |
|---|---|---:|---:|
| Monitor | Одна сохранённая фраза; оба повтора совпали с исходным входом по SHA-256 | 197,87 мс | 109,47 мс |
| Compare | Один публичный отрывок, те же пакеты и границы; входы A/B совпали по хешам | 175,3 мс | 106,9 мс |

Таблица показывает время работы модели. В Compare — по одной фразе, по одному вызову и 0 мс загрузки обеих моделей. Первый запуск ждал браузерную подготовку Silero 68,26 с; следующий переиспользовал готовые границы и Opus-пакеты. От границы до показа прошло 333/244 мс. Это один прогон, не оценка p95.

Monitor завершил оба повтора с подтверждением «Команда чата не создавалась», сохранив исходный столбец GigaAM Large. Список проверен в светлой и тёмной темах, исходная тема восстановлена. В Compare Whisper Turbo, Whisper Russian, GigaAM RNNT, GigaAM Large и LinTO также вернули по одному результату без ошибки. Физический микрофон не использовался; тестовая вкладка с публичным звуком закрыта.

## История попыток 7 ноября (до восстановления доступа)

ASR [pipeline 5808](<https://git.giscloud.ru/voice-chat/py_faster_whisper/-/pipelines/5808>), SHA 8630eeca: SUCCESS. Build job 30551 завершилась 7 ноября в 19:26:41 МСК за 29 минут 53 секунды. Существующий отбор влияния собрал шесть затронутых образов; 49 bridge/NATS-тестов, проверки импортов Pyannote/Sortformer и Trivy прошли. Все шесть образов опубликованы под `3.2-deploy` и `latest-deploy`; проверенные config digest и refs сохранены в `ci-5808-build-summary.json`. ASR worker и LinTO этой трёхстрочной правкой не затронуты и повторно не собирались.

Deploy job 30552 также SUCCESS, завершение 19:27:46 МСК. Её точный результат: `[deploy] skipped outside the default branch`. 32 теста deployment-образа (100 assertions) прошли, но runtime не изменялся; это успешная проверка кандидата, а не production-поставка.

Предыдущий полный pipeline 5805 не был успешен: job 30533 и первый повтор 30542 завершились часовым тайм-аутом при публикации. Второй повтор 30550 завершился 7 ноября 15:55 UTC с Trivy exit 1: новые CVE-2026-76844/CVE-2026-85091 в zlib1g. Commit 8630eeca обновляет zlib1g штатным APT в трёх Dockerfile. Исправленная версия Debian Trixie — `1:1.3.dfsg+really1.3.1-1+deb13u1`; установка подтверждена trace нового CI. Root CI не изменён.

Registry уже отдал manifest полного кандидата:

`sha256:9e7bbdc192f9dd55c6a74f596e234e4ca6455cab8c915251d97e040f1889f4da`

35 layers, linux/amd64; config `sha256:e1ca893412045feb3c589a2afa2e1ad6c85943cdeb57501c94dec5cad1a3fa19`. Config digest совпадает с image ID, экспортированным и проверенным Trivy в job 30542; build labels этого образа содержат revision 65f82dad50233b7dfc6a632001595f28158323cf. Runtime ещё не запускался.

H100 не смог скачать этот digest: `proxyconnect tcp: dial tcp 72.56.73.217:1195: i/o timeout`. Свежая проверка 7 ноября 19:12 МСК снова дала TCP timeout и к настроенному proxy, и к registry:443. Требуется восстановление штатного доступа Docker к registry; сеть, proxy и daemon не изменялись. Тестовый GPU-контейнер не создан.

Предыдущий рабочий digest, сохранённый для отката:

`sha256:d2718c893a87add423e68d5e506147cd0f69b27f9173fa4052fe9893cd5697ed`

## Размер первоначальных изменений

| Группа | Chat Agent | ASR | Всего |
|---|---:|---:|---:|
| Рабочий код и конфигурация, net | +43 | +372 | +415 |
| Тесты, net | +66 | +197 | +263 |
| Документация и лицензии, net | +12 | +96 | +108 |

Подробный журнал проверки — `verification-progress.md`; точные added/removed — `source-line-counts.json`.

Итоговые diff относительно исходных main, включая исправления поставки: Chat Agent +174/−51, ASR +730/−42, Rag Stack +25/−4.
