Почему облачные голосовые ассистенты — зло, а NPU — добро
Вы когда-нибудь ждали три секунды, пока умная колонка ответит на команду «включи свет»? Я — да, и каждый раз хотелось пнуть розетку ногой. Облачные ASR (Amazon Alexa, Google Assistant, Siri) работают через интернет: задержка на запись, отправку, распознавание, выполнение. Плюс приватность — ваши разговоры улетают на серверы корпораций. В 2026 году это уже моветон.
Локальное распознавание речи — единственный адекватный путь для умного дома, если вы цените скорость и конфиденциальность. Но загвоздка: инференс моделей типа Whisper large-v3 жрёт ресурсы. CPU душит, GPU — дорого и шумно, а для always-on сценария вообще не годится (100 Ватт просто так? нет, спасибо).
Тут на сцене появляется NPU (Neural Processing Unit) в процессорах Intel Arrow Lake. В теории — низкое энергопотребление, высокая скорость на ватт. На практике — ад совместимости, кривые драйверы и почти полное отсутствие гайдов. Я прошел этот путь, наступил на все грабли и делюсь результатом.
Железо: что внутри Intel Arrow Lake и зачем нам 13 TOPS
Процессоры Intel Core Ultra 200 (Arrow Lake-S), которые вышли в конце 2024 года, получили встроенный NPU под названием Intel AI Boost. Для десктопных версий (K-серия) заявленная производительность — до 13 TOPS (INT8). Мало на фоне GPU-монстров, но с одним важным нюансом: NPU потребляет менее 10 Вт под нагрузкой. Для сравнения, мой старый GTX 1060 на Whisper ест 75 Вт, а выдает всего в 2 раза больше токенов.
Важно: в мобильных Arrow Lake-H/HX NPU те же 13 TOPS, что и в десктопах. Lunar Lake имеет до 48 TOPS, но это ноутбучный сегмент. Для умного дома чаще берут настольный ПК, поэтому фокус на Arrow Lake-S.
На момент мая 2026 года Intel выпустила драйверы NPU для Windows (версия 32.0.100.2025+) и экспериментальные биндинги для Linux (через intel-npu-acceleration-library v0.7). Однако стабильная работа с ASR возможна только под Windows (через OpenVINO). Под Linux — пока только для самых смелых.
Софт: OpenVINO 2025.3 — наш скелет в шкафу
Почему не запустить Whisper напрямую на NPU через PyTorch? Потому что NPU Intel не поддерживает CUDA, а PyTorch с Intel NPU бэкендом — это как запихнуть квадратный колышек в круглое отверстие. Единственный рабочий путь — OpenVINO. Версия 2025.3 (релиз апреля 2026) наконец-то нормально работает с NPU Arrow Lake через плагин openvino_npu.
Вот пошаговый план, который я выстрадал:
1 Установка OpenVINO и конвертация Whisper
Устанавливаем OpenVINO 2025.3 для Windows. Рекомендую pip в виртуальном окружении Python 3.11 (не выше — совместимость с optimum-intel).
pip install openvino==2025.3.0 openvino-dev optimum-intel huggingface_hubКонвертируем модель Whisper из HuggingFace в формат OpenVINO IR. Я использовал модель openai/whisper-large-v3 через библиотеку optimum-intel:
from optimum.intel import OVModelForSpeechSeq2Seq
from transformers import AutoProcessor
model_id = "openai/whisper-large-v3"
model = OVModelForSpeechSeq2Seq.from_pretrained(model_id, export=True, device="NPU")
processor = AutoProcessor.from_pretrained(model_id)
# Сохраняем в локальную папку
model.save_pretrained("./whisper-large-v3-openvino")
processor.save_pretrained("./whisper-large-v3-openvino")Ошибка, которую я совершил в первый раз: не указал device="NPU" при экспорте. Без этого модель экспортируется под CPU — потом переконвертировать нельзя, только заново. Проверяйте!
2 Запуск инференса на NPU
Загружаем сохраненную модель и делаем тестовый прогон:
import time
import soundfile as sf
from optimum.intel import OVModelForSpeechSeq2Seq
from transformers import AutoProcessor
model = OVModelForSpeechSeq2Seq.from_pretrained("./whisper-large-v3-openvino", device="NPU")
processor = AutoProcessor.from_pretrained("./whisper-large-v3-openvino")
waveform, sr = sf.read("test_10s.wav") # 10-секундная запись речи
start = time.time()
inputs = processor(waveform, sampling_rate=sr, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=128)
text = processor.decode(outputs[0], skip_special_tokens=True)
print(f"Time: {time.time()-start:.2f}s, Text: {text}")На моем тестовом стенде (Core Ultra 7 265K, 32GB DDR5) 10-секундная запись распозналась за 0.9 секунды на NPU. Для сравнения: на CPU (только ядра, без NPU) — 3.2 секунды, на iGPU (UHD 770) — 1.5 секунды. Разница в энергопотреблении: NPU — 8 Вт, CPU — 45 Вт, iGPU — 20 Вт. Для always-on сценария выбор очевиден.
| Устройство | Время инференса, с | Энергопотребление, Вт | Относительная скорость |
|---|---|---|---|
| CPU (P-cores, AVX-512) | 3.2 | 45 | 1x |
| iGPU (UHD 770, OpenVINO) | 1.5 | 20 | 2.1x |
| NPU (Intel AI Boost) | 0.9 | 8 | 3.6x |
NPU проигрывает GPU по абсолютной скорости, но энергоэффективность в 5 раз лучше. Для сервера умного дома, работающего 24/7, это киловатты в год.
3 Интеграция с Home Assistant через Wyoming
Home Assistant — де-факто стандарт умного дома. Для локального ASR есть интеграция через Wyoming Protocol (технология от Rhasspy). Запускаем кастомный сервер Whisper, который использует NPU:
# wyoming-whisper-npu.py (упрощенный вариант)
import asyncio
from wyoming.server import AsyncServer, AsyncEventHandler
from wyoming.asr import Transcribe, Transcript
from wyoming.audio import AudioStop
from .whisper_npu import WhisperNPU # наш класс из шага 2
class WhisperEventHandler(AsyncEventHandler):
async def handle_event(self, event):
if Transcribe.is_type(event.type):
audio = b''
while True:
stop = await self.wait_for_event(AudioStop)
if stop:
break
audio += event.payload.audio
text = await whisper_npu.transcribe(audio)
await self.write_event(Transcript(text=text))
whisper_npu = WhisperNPU()
async with AsyncServer.from_args() as server:
await server.run(WhisperEventHandler)В Home Assistant ставим официальный add-on wyoming-openwakeword (для wake-word) и наш сервер wyoming-whisper-npu (как внешний сервис). Настраиваем через интеграцию Wyoming Protocol, указываем хост и порт. Готово.
Более простой путь — использовать готовый Docker контейнер с OpenVIO и NPU, но, честно говоря, на Windows прокинуть NPU в Docker ещё та магия. Я остановился на bare metal.
Грабли, на которые я наступил (окровавленное FAQ)
1. «NPU не определяется в Python»
Самый частый глюк. Причины: забыли установить драйвер Intel NPU (доступен на официальном сайте, версия 32.0.100.2026 для Windows). В OpenVINO нужно явно указать device="NPU". Команда проверки:
import openvino as ov
core = ov.Core()
print(core.available_devices)
# Должен быть ['CPU', 'GPU', 'NPU']Если NPU нет — обновите драйвер и BIOS (в некоторых материнских платах NPU отключено по умолчанию).
2. «Модель выдает мусор»
Пробовал большие модели Whisper large-v3 — работает, но точность на русском языке неидеальна. Лучше дообучить? Для русского есть специализированные модели, но они редко поддерживают NPU. Я остановился на комбинации: Whisper large-v3 + постобработка через rule-based замены (слова типа «включи светильник» -> «включи свет»). Работает.
3. «OpenVINO падает с ошибкой memory allocation»
NPU имеет собственный лимит видеопамяти (для Arrow Lake — около 1-2 ГБ разделяемой памяти). Whisper large-v3 весит ~2.5 ГБ в точности FP16, но OpenVINO квантует в INT8 — получается ~1 ГБ. Влезает. Если у вас модель больше — используйте whisper-medium (769 МБ). Скорость практически не падает.
4. «Home Assistant не соединяется с Wyoming сервером»
Проверьте firewall и то, что сервер запущен на том же хосте, что и HA. Я полчаса тупил, пока не заметил, что забыл запустить скрипт — без этого add-on висит «Retrying...». Профит.
Стоит ли игра свеч?
Если у вас уже есть ПК на Intel Arrow Lake — да, однозначно. Вы получаете всегда работающее, отзывчивое голосовое управление без облаков. Задержка от слова «Включи...» до выполнения команды — около 1-1.5 секунды (включая wake-word). Сравните с 3-4 секундами у облачных ассистентов — разница на уровне «боже, как быстро».
Если нет Arrow Lake, но есть любой современный Intel с NPU (Lunar Lake, Panther Lake) — принцип тот же. Производительность будет ещё выше.
Главный недостаток — экосистема сырая. Придётся повозиться с драйверами, OpenVINO, конвертацией. Но я уверен: к концу 2026 года локальный ASR на NPU станет мейнстримом. Home Assistant уже добавил нативную поддержку OpenVINO в последний релиз — работает из коробки (без порта в кастомные серверы).
Не верьте маркетингу о «магии» — за всё нужно платить временем. Но результат того стоит.