Navatusein / Silero-TTS-Service

Silero TTS backend service. Can be used with Home Assistant and Rhasspy.
MIT License
28 stars 6 forks source link

Использование памяти #12

Closed Omirax closed 1 year ago

Omirax commented 1 year ago

Здравствуйте!

Несколько дней работает контейнер без особого использования. 1.3GB не слишком ли много?

$ docker stats
CONTAINER ID   NAME                 CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
b92407531c1d   silero-tts-service   0.42%     1.301GiB / 3.681GiB   35.34%    62.9MB / 11.5MB   199MB / 184MB     11
...
9909ca915b28   rhasspy              27.89%    622.7MiB / 3.681GiB   16.52%    24.8GB / 1.48GB   1.21GB / 1.29GB   55
Navatusein commented 1 year ago

Всё сгенерированные ответы кэшируются. Чтобы почистить кэш просто в браузере перейдите на адрес сервера/clear_cache.

Navatusein commented 1 year ago

До авто очистки пока руки не дошли.

Omirax commented 1 year ago

В том то и дело, что я видел GET /clear_cache - Очищает кэш уже синтезированных сообщений. и выполнил сразу. Получил ответ Success Но в результате

CONTAINER ID   NAME                 CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
b92407531c1d   silero-tts-service   0.43%     1.264GiB / 3.681GiB   34.34%    63MB / 17.4MB     210MB / 438MB     11

1.264GiB - это после очистки кэша. Поэтому и написал.

Navatusein commented 1 year ago

Тогда мне сложно сказать сейчас.

Navatusein commented 1 year ago

Я без понятия где память утекает.

Omirax commented 1 year ago

Это не критично. Как будет возможность, посмотрите. Я готов помогать искать проблемы с утечкой, если будет нужна моя помощь.

Я перевёл контейнер в фазу активного использования. И в принципе 1.2-1.3GB +/- пока постоянно. В день - примерно 30-40 обращений к Rhasspy и 5-6 HA TTS.

В любом случае - работа Вами проделана великолепная! Это лучшее из того, что я встречал для локального голосового управления!

Navatusein commented 1 year ago

Это не критично. Как будет возможность, посмотрите. Я готов помогать искать проблемы с утечкой, если будет нужна моя помощь.

Я перевёл контейнер в фазу активного использования. И в принципе 1.2-1.3GB +/- пока постоянно. В день - примерно 30-40 обращений к Rhasspy и 5-6 HA TTS.

В любом случае - работа Вами проделана великолепная! Это лучшее из того, что я встречал для локального голосового управления!

Вот тут странно, у меня в среднем 5 уникальных запросов в день от НА и при этом контейнер ест 250 мегабайт.

Omirax commented 1 year ago

Ну как бы вот что мы имеем:

root@b92407531c1d:/usr/app# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
    PID    PPID CMD                         %MEM %CPU
      1       0 python3 -u ./main.py        34.2  0.5
    126       0 bash                         0.0  0.3
    132     126 ps -eo pid,ppid,cmd,%mem,%c  0.0  0.0
    133     126 head                         0.0  0.0
root@b92407531c1d:/usr/app# ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n
0 MB            COMMAND
0.59375 MB              sort
0.996094 MB             awk
3.15625 MB              ps
3.73047 MB              bash
1290.14 MB              python3

И мы тут как не пытались загрузить нашу "Милану" TTS или голосовыми командами - получили вот так:

root@b92407531c1d:/usr/app# ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n
0 MB            COMMAND
0.527344 MB             sort
0.996094 MB             awk
3.07812 MB              ps
3.54297 MB              bash
1288.71 MB              python3
Omirax commented 1 year ago

Проблема с памятью по-прежнему актуальна после еще 2-х дней эксплуатации (всего 5 суток после рестарта контейнера):

CONTAINER ID   NAME                 CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
b92407531c1d   silero-tts-service   0.43%     1.54GiB / 3.681GiB    41.84%    63MB / 26.3MB     247MB / 552MB     11
...
9909ca915b28   rhasspy              29.10%    574.9MiB / 3.681GiB   15.25%    35.6GB / 2.04GB   1.34GB / 1.4GB    55

Ниже список по использованию памяти в системе:

    PID    PPID CMD                         %MEM %CPU
1264200 1264180 python3 -u ./main.py        41.4  0.5
1163836 1163809 python3 -m rhasspyasr_kaldi 11.6  5.2
 429030  428965 mariadbd                     7.9  0.3
1689210  625579 python3 -m homeassistant --  7.8  5.3
1249151 1249103 node index.js                1.8  0.7
 428255       1 /usr/bin/dockerd -H fd:// -  1.3  1.6
1163837 1163810 python3 -m rhasspywake_rave  0.8 10.4
    426       1 /sbin/multipathd -d -s       0.7  0.0
1248885 1248854 /portainer                   0.6  0.0

После рестарта контейнера:

CONTAINER ID   NAME                 CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
b92407531c1d   silero-tts-service   0.44%     232.3MiB / 3.681GiB   6.16%     936B / 0B         303kB / 0B        7
...
9909ca915b28   rhasspy              28.18%    529.8MiB / 3.681GiB   14.05%    35.7GB / 2.04GB   1.34GB / 1.42GB   55

После первого запроса через rhasspy с ответом "температуры за окном" (примерно 100 знаков)

CONTAINER ID   NAME                 CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
b92407531c1d   silero-tts-service   0.42%     649.7MiB / 3.681GiB   17.23%    3.83kB / 586kB    24.3MB / 586kB    11

После следующего уникального запроса из 100 знаков:

CONTAINER ID   NAME                 CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
b92407531c1d   silero-tts-service   0.45%     809.7MiB / 3.681GiB   21.48%    7kB / 1.22MB      40.8MB / 1.22MB   11

Повторение первого запроса с ответом "температуры за окном" приводят к увеличению занятости памяти на 1.5-2MB

Navatusein commented 1 year ago

К сожалению течь памяти у моделей Silero. Я пока не знаю удастся ли вообще эту проблему починить. Пока ничего не помогает.

Navatusein commented 1 year ago

Всё проблема исправлена, правда костылём. Из-за чего запросы могут выполняться чуть дольше.

Omirax commented 1 year ago

Здравствуйте!

А не могли бы Вы залить на докерхаб под другим тэгом образ без внесенных изменений? Дело в том, что у меня много у кого сделаны автоматизации с таймаутами.

              timeout: 00:00:20
              continue_on_timeout: true   

И у меня стали "выпадать" голосовые оповещения. То есть за 20 секунд не успевает отработать.

P.S. Возможно, что я не правильно понял, но вроде модели Silero помешают в память транскрипцию отдельных слов. А потом пользуются ими при комплектации текста. Если это так, то это объясняет то, что повторное сообщение о погоде, но с другими цифрами отрабатывает в 5-6 раз быстрее, чем первое. Сейчас же получается, что 2 одинаковых сообщений о погоде отрабатывает одинаково долго.

Navatusein commented 1 year ago

Здравствуйте!

А не могли бы Вы залить на докерхаб под другим тэгом образ без внесенных изменений? Дело в том, что у меня много у кого сделаны автоматизации с таймаутами.

              timeout: 00:00:20
              continue_on_timeout: true   

И у меня стали "выпадать" голосовые оповещения. То есть за 20 секунд не успевает отработать.

P.S. Возможно, что я не правильно понял, но вроде модели Silero помешают в память транскрипцию отдельных слов. А потом пользуются ими при комплектации текста. Если это так, то это объясняет то, что повторное сообщение о погоде, но с другими цифрами отрабатывает в 5-6 раз быстрее, чем первое. Сейчас же получается, что 2 одинаковых сообщений о погоде отрабатывает одинаково долго.

Да, поведение вы поняли правильно. Просто есть проблема что память которую они заняли не как не получается освободить. Так что я вынес синтез речи в отдельный процесс, который запускается каждый раз когда нужно что-то синтезировать. Но это плохое решение. Тут получается закономерность. Либо модели жрут много памяти и работают +- быстро или жрут мало памяти и работают долго.

Navatusein commented 1 year ago

У меня в тестах, получилось добиться жора в 4.5 гб памяти. Что есть много так как у меня на сервере всего 6.

Omirax commented 1 year ago

Я хочу попробовать ограничить память контейнеру.

Navatusein commented 1 year ago

Я хочу попробовать ограничить память контейнеру.

Хорошо, я как домой дойду, выложу в хаб образ з отдельным лейблом, со старой генерацией речи.

Omirax commented 1 year ago

Не знаю, относится ли это к проблеме, но:

Important Information for VAD Python Users ⚠️

If you are using the VAD in a:

    multi-threaded or
    a multi-process application

**Do not forget to disable gradients in EACH process and / or thread.
Otherwise memory may leak noticeably.**

Ну и вот еще https://github.com/snakers4/silero-models/discussions/43

Navatusein commented 1 year ago

Не знаю, относится ли это к проблеме, но:

Important Information for VAD Python Users ⚠️

If you are using the VAD in a:

    multi-threaded or
    a multi-process application

**Do not forget to disable gradients in EACH process and / or thread.
Otherwise memory may leak noticeably.**

Ну и вот еще snakers4/silero-models#43

VAD Это их система для обнаружения речи, для захвата её микрофоном. Silero также имеют модель stt.

Navatusein commented 1 year ago

А проблема которую вы нашли, также касается stt моделей.

Navatusein commented 1 year ago

Я хочу попробовать ограничить память контейнеру.

Ограничение памяти помогло. Но по тестам скорость все рано не много но упала.

Omirax commented 1 year ago

Ну хоть так. А то сейчас - перебор! Будем тестить, как зальете на докхаб!

Navatusein commented 1 year ago

Ну хоть так. А то сейчас - перебор! Будем тестить, как зальете на докхаб!

Всё новая версия в хабе.

Omirax commented 1 year ago

Отлично! Уже в работе!