Pull to refresh

Comments 19

Спасибо, что поделились наработками! Думаю, хороший старт для многих проектов :)

Спасибо , рад был увидеть что есть С++ реализация виспера.

ТОлько я так и не понял в итоге на чем вы это хозяйство запускать хотите ?

Сейчас у меня домашний сервер, с 128гб ОЗУ, cpu 24 потока и видеокартой Nvidia 3090.

С большими моделями Whisper проблем нет, piper прекрасно и на CPU работает, а llama 30b модели целиком влезают в видео память Nvidia 3090.

Думаю дальше и 75b модели попробовать, но грузить уже не все слои в видео память.

Но на текущий момент есть 30b, модели, которые опережают ChatGPT 3.5, а в каких-то задачах лучше ChatGPT 4. Так что думаю бытовых видеокарт будет достаточно, для качественного продукта.

Видео в начале статьи без ускорения, но это не предел скорости. Есть ещё над чем поработать в плане оптимизации, но я спешил поделиться с сообществом текущими наработками.

Не слабое железо) Так в цель в итоге - просто голосовой броузинг? Или все же управление домом? У меня викуна 7 крутится на i7\16 , да не быстрая , я думал это из-за собственных "претренингов" , но смысла ее интеграции в систему управления домом я так и не прочувствовал ..

Конечно хочется не просто получать ответы на вопросы. То что на видео, это демо которого я хотел достичь за вечер, но не смог достичь по причинам описанным в статье. Хочется полноценное управление умным домом (тут не уверен, что стану писать с нуля и возможно интегрирую с Home Assistant), хочется сделать законченные устройства в "железе", пустить нейросеть в интернет (она же прекрасно умеет обобщать и сокращать результаты из нескольких источников). В общем хочется сделать "Вау", какой-то новый user experience.

Задача не простая и не быстрая, но мне это интересно, это моё хобби и я получаю от этого невероятный кайф

За полностью локальный ассистент голосую руками и ногами. Я уже упомянул - на поиграться есть викуна 7 и я с ней поигрался. ЧТо дальше - не понятно... Вот есть у меня система управления домом - состоит из почти 150 устройств, управляется с приложения под андроид. Это автомат , дополнительная автоматизация ему нужна ? Просто голосовые команды -не интересно . Интересно было бы парсить видео потоки с камер в "интеллектуальном" режиме , а не глупым мошен детектором... Больше что-то ничего не приходит умного...

Мне иногда кажется, что я решаю никому не нужную задачу, пытаясь сделать качественный голосовой ассистент работающий локально, но выпуская эту статью я очередной раз убедился в его актуальности:

Сейчас я нахожусь в туристической базе, и тут есть какое-то подобие умного дома, и прикол в том, что пропал WiFi и я ничего не могу сделать))) С ресепшен связаться тоже не могу, т.к. мобильная сеть тут ловит только в определенных местах.

локальный ассистент нужен многим. Судя по комментариям, многие как и я не хотят доверять свои сИкреты Алисе.

Всё верно, открывая свои сикретики Алисе, вы открываете их феисбе.

Вы решаете очень нужную задачу. Рад, что не пропустил Вашу статью. Постараюсь в ближайшее время разобраться с Вашим проектом поподробнее.

Таки помоему сейчас умные дома онинтируют на свой собственный протокол (или частоту, не шарю точно), чтобы она работала не через инет, а просто через роутер. Видимо там не оч настроили :)

В умном доме может использоваться масса протоколов, как опенсорсных так и проприетарных, причём одновременно, но статья не совсем про это.

Мне иногда кажется, что я решаю никому не нужную задачу, пытаясь сделать качественный голосовой ассистент работающий локально, но выпуская эту статью я очередной раз убедился в его актуальности

Задача как минимуму нужна вам. А то, что она делается изначально масштабируемой в массы — это просто великолепно! Поверьте — ещё не перевелись люди, ценящие автономность. Ваша разработка интересна как минимум пользователям таких вещей как Nextcloud и Home Assistant.

Возможно будет интересно, я собрал локальный ассистент в home assistant, есть грабли , пока в основном с gRPC через который не идеально работает LocalAI , которым надо запускать нейросеть , ибо только он дает имитацию functions в апи копируя opnAI api. Ну или подключить openai api.

Если без управления умным домом то все проще, сетап ниже, переводить не буду, думаю и так понятно, всем кто мается нейросетками приходится всю инфу получать исключительно на английском. Для продвинутых фич одной Теслы думаю вполне хватит ( 15-20к. рублей), а две позволят прям ни в чем почти не отказывать. Но это старый хлам который не улучшить, и скорость его не высока, но дешево.

I use ProxMox and KVM with 2 Tesla P40

  1. As STT i use Wyoming Protocol integration and faster-whisper service on KVM GPU node. (1GB VGPU)

  2. As assistant i use api ooboga's textgen and https://github.com/drndos/hass-openai-custom-conversation and LLM Mixtral 7bx8 from Openbuddy. (41GB VGPU), easy way - use OpenAI.

i can talk with assist, not command, because of ooboga's api can't use functions, that may enable them to also manage devices in the HA. (Although you can do this non-locally via OpenAI) https://github.com/jekalmin/extended_openai_conversation

LocalAI can use functions , but unstable works, loses messages via GRPC, I am still testing this system. I will probably get to it, but there are a lot of fixes needed.

  1. As TTS i use Silero TTS with CUDA . (2Gb VGPU) or use CPU mode.

Русский работает отлично , перекосов нет, прям уровень Алисы, микстраль квантован до q6

Решил почитать эту статью чисто из интереса, понял процентов 50(а может меньше), но этого хватило для примерного представления. Сейчас для меня это всё "выглядит" удивительно и многообещающе, так держать!

После запуска можно делать gRPC запросы по порту 9999.

А есть пример на python?
Например послать на распознавание звуковой файл созданный тем же Whisper?

Я не большой спец по python, но для всех языков программирования путь примерно один:

1) Копируете спеки https://github.com/voicedock/voicedock-specs/tree/main/proto

2) Запускаете кодогенерацию клиента (как сделать это для python написано тут: https://grpc.io/docs/languages/python/basics/#client)

3) Импортируете клиент и инстанцируете его передав IP:port

Всё. Теперь можно дёргать методы, что указаны в спеке.

Для отладки можно установить BloomRPC, добавить в импорты папку proto, и открыть файл API "*_api.proto". Теперь прям в интерфейсе можно делать запросы.

Открыть Wav-файл в python можно, например, через "scipy" и прочитать из него сырые данные. Главное, чтобы они были в формате "16-bit integer PCM" (1 канал) и их как массив байт отправить с gRPC запросом.

Думаю лучше подскажут люди с опытом разработки на python.

P.S. если не хотите мучаться с чтением WAV, то можете предварительно сконвертировать файл raw pcm 16le с помощью ffmpeg примерно так:

ffmpeg -i input.flv -f s16le -acodec pcm_s16le output.raw

Итоговый файл будет достаточно прочитать и отправить как массив байт.

Как получить ggml .bin файл из huggingface репки?

# try.py
from transformers import WhisperForConditionalGeneration
import tempfile
import torch

model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")
model.save_pretrained('./my')
torch.save(model.state_dict(), './my/file.pt')
$ python3 try.py
$ python3 models/convert-pt-to-ggml.py ./my/file.pt ~/code/whisper ./my

Traceback (most recent call last):
  File "~/code/whisper.cpp/models/convert-pt-to-ggml.py", line 210, in <module>
    hparams = checkpoint["dims"]
              ~~~~~~~~~~^^^^^^^^
KeyError: 'dims'

Sign up to leave a comment.

Articles