Определить способы ускорить embedding-инференс на разных x86 CPU #32

Closed
opened 2026-08-30 13:28:46 +03:00 by ddmitry · 2 comments
Owner

Часть карты: Спроектировать следующее ускорение CPU-диаризации (#31)

Question

Какие способы ускорения извлечения эмбеддингов технически доступны для WeSpeaker, CAMPPlus и TitaNet в sherpa-onnx/ONNX Runtime: настоящий batch, несколько stream/session или статическая INT8-квантизация? Нужно проверить формы ONNX-графов и публичные API, последовательность текущей реализации sherpa-onnx, риск oversubscription и роста RSS, а также различия старого AVX2 CPU и современного x86 с VNNI/AVX-512. Итог должен рекомендовать только кандидаты, достойные прототипа, и минимальную матрицу CPU/ISA; production-код и приватный корпус не трогать.

Часть карты: [Спроектировать следующее ускорение CPU-диаризации](https://git.dementev.space/ddmitry/local-transcriber/issues/31) (#31) ## Question Какие способы ускорения извлечения эмбеддингов технически доступны для WeSpeaker, CAMPPlus и TitaNet в sherpa-onnx/ONNX Runtime: настоящий batch, несколько stream/session или статическая INT8-квантизация? Нужно проверить формы ONNX-графов и публичные API, последовательность текущей реализации sherpa-onnx, риск oversubscription и роста RSS, а также различия старого AVX2 CPU и современного x86 с VNNI/AVX-512. Итог должен рекомендовать только кандидаты, достойные прототипа, и минимальную матрицу CPU/ISA; production-код и приватный корпус не трогать.
ddmitry added the wayfinder:research label 2026-08-30 13:28:46 +03:00
Author
Owner

Исследовательский контекст: ветка research/issue-32-embedding-inference. Итоговый артефакт: docs/research/2026-08-30-diarization-embedding-inference.md. Ветка временная; решение будет зафиксировано в тикете после отдельной сессии.

Исследовательский контекст: [ветка `research/issue-32-embedding-inference`](https://git.dementev.space/ddmitry/local-transcriber/src/branch/research/issue-32-embedding-inference). Итоговый артефакт: `docs/research/2026-08-30-diarization-embedding-inference.md`. Ветка временная; решение будет зафиксировано в тикете после отдельной сессии.
ddmitry self-assigned this 2026-08-30 13:30:50 +03:00
Author
Owner

Перепроверил выводы по исходникам sherpa-onnx/ORT и реальным release ONNX assets. Исходная записка пропустила проверку самих файлов; это исправлено в коммите 82dbfcb. Обновленная исследовательская записка.

Выводы для карты:

  • sherpa-onnx 1.13.5 последовательно выполняет один embedding Run на stream и не предоставляет batch API. Release-графы WeSpeaker и CAMPPlus при этом поддерживают batch равной длины; TitaNet принимает batch и вектор длин. Smoke-test с batch size 2 подтвердил формы всех трех графов. Для TitaNet дополненный элемент разошелся с отдельным вызовом, поэтому допустимый порог эквивалентности должен задать прототип.
  • Для действующего WeSpeaker в следующий эксперимент стоит взять два кандидата: статический S8S8 QDQ и конкурентные независимые stream поверх одной ORT session с ограниченным общим числом потоков. Shared-session требует изолированного стенда или малой upstream-поправки, поскольку готовый диаризатор промежуточные stream не отдает.
  • Несколько session оставить одной отрицательной контрольной ячейкой: по умолчанию каждая получает собственный intra-op pool и CPU arena. Batch TitaNet остается условным кандидатом для режима с известным числом говорящих.
  • Минимальная CPU-матрица - Core i7-6820HQ с AVX2 без VNNI и доступный Zen 4 с VNNI/AVX-512. На обеих машинах нужно фиксировать CPUID, время embedding-стадии, CPU time и peak RSS; коэффициент между ними нельзя переносить на весь x86.

Production-код и приватный корпус не менялись.

Перепроверил выводы по исходникам sherpa-onnx/ORT и реальным release ONNX assets. Исходная записка пропустила проверку самих файлов; это исправлено в коммите [82dbfcb](https://git.dementev.space/ddmitry/local-transcriber/commit/82dbfcb33202af15faf3d6c033cfb2eb5451a819). [Обновленная исследовательская записка](https://git.dementev.space/ddmitry/local-transcriber/src/branch/research/issue-32-embedding-inference/docs/research/2026-08-30-diarization-embedding-inference.md). Выводы для карты: - sherpa-onnx 1.13.5 последовательно выполняет один embedding `Run` на stream и не предоставляет batch API. Release-графы WeSpeaker и CAMPPlus при этом поддерживают batch равной длины; TitaNet принимает batch и вектор длин. Smoke-test с batch size 2 подтвердил формы всех трех графов. Для TitaNet дополненный элемент разошелся с отдельным вызовом, поэтому допустимый порог эквивалентности должен задать прототип. - Для действующего WeSpeaker в следующий эксперимент стоит взять два кандидата: статический S8S8 QDQ и конкурентные независимые stream поверх одной ORT session с ограниченным общим числом потоков. Shared-session требует изолированного стенда или малой upstream-поправки, поскольку готовый диаризатор промежуточные stream не отдает. - Несколько session оставить одной отрицательной контрольной ячейкой: по умолчанию каждая получает собственный intra-op pool и CPU arena. Batch TitaNet остается условным кандидатом для режима с известным числом говорящих. - Минимальная CPU-матрица - Core i7-6820HQ с AVX2 без VNNI и доступный Zen 4 с VNNI/AVX-512. На обеих машинах нужно фиксировать CPUID, время embedding-стадии, CPU time и peak RSS; коэффициент между ними нельзя переносить на весь x86. Production-код и приватный корпус не менялись.
Sign in to join this conversation.