Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
Omirax opened this issue Dec 29, 2022 · 23 comments
Closed

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

Omirax opened this issue Dec 29, 2022 · 23 comments

Comments

@Omirax
Copy link

Omirax commented Dec 29, 2022

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

Несколько дней работает контейнер без особого использования. 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
Copy link
Owner

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

@Navatusein
Copy link
Owner

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

@Omirax
Copy link
Author

Omirax commented Dec 30, 2022

В том то и дело, что я видел 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
Copy link
Owner

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

@Navatusein
Copy link
Owner

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

@Omirax
Copy link
Author

Omirax commented Dec 30, 2022

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

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

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

@Navatusein
Copy link
Owner

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

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

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

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

@Omirax
Copy link
Author

Omirax commented Dec 30, 2022

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

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
Copy link
Author

Omirax commented Jan 1, 2023

Проблема с памятью по-прежнему актуальна после еще 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
Copy link
Owner

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

@Navatusein
Copy link
Owner

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

@Omirax
Copy link
Author

Omirax commented Jan 5, 2023

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

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

              timeout: 00:00:20
              continue_on_timeout: true   

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

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

@Navatusein Navatusein reopened this Jan 5, 2023
@Navatusein
Copy link
Owner

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

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

              timeout: 00:00:20
              continue_on_timeout: true   

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

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

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

@Navatusein
Copy link
Owner

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

@Omirax
Copy link
Author

Omirax commented Jan 5, 2023

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

@Navatusein
Copy link
Owner

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

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

@Omirax
Copy link
Author

Omirax commented Jan 5, 2023

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

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

@Navatusein
Copy link
Owner

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

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
Copy link
Owner

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

@Navatusein
Copy link
Owner

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

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

@Omirax
Copy link
Author

Omirax commented Jan 7, 2023

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

@Navatusein
Copy link
Owner

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

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

@Omirax
Copy link
Author

Omirax commented Jan 7, 2023

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants