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

387 deploy whisper #388

Merged
merged 58 commits into from
Apr 4, 2024
Merged

387 deploy whisper #388

merged 58 commits into from
Apr 4, 2024

Conversation

arhihihipov
Copy link
Collaborator

No description provided.

@arhihihipov arhihihipov linked an issue Nov 9, 2023 that may be closed by this pull request
@arhihihipov arhihihipov changed the title deploy whisper 387 deploy whisper Nov 9, 2023
@arhihihipov arhihihipov changed the base branch from dev_arkhipov to master November 30, 2023 16:43
url = "http://whisper:9000/asr"
params = {
'task': 'transcribe',
'language': 'ru',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

сделайте язык параметром (чтобы на будущее можно было его менять )

requirements.txt Outdated
@@ -29,3 +29,5 @@ pysndfx
python-i18n
python-pptx ==0.6.19
odfpy ==1.4.1
requests
librosa
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавьте версии для библиотек requests и librosa

docker-compose.yml Outdated Show resolved Hide resolved
docker-compose.yml Outdated Show resolved Hide resolved
docker-compose.yml Outdated Show resolved Hide resolved
app/audio_recognizer.py Show resolved Hide resolved
app/audio_recognizer.py Outdated Show resolved Hide resolved
app/audio_recognizer.py Outdated Show resolved Hide resolved
'output': 'json'
}
headers = {'accept': 'application/json'}
files = {'audio_file': (file_name, open(file_name, 'rb'), 'audio/mpeg')}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не будет ли проблем с размером файла, если кто-то наговорит на пару часов? (условная 413 client request body or request entity is too large)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не совсем понимаю, как это можно проверить в коде, и нужно ли?
Я немного переписал эту часть кода — добавил закрытие файла после прочтения, теперь посылаю не дескриптор, а буфер, в который файл был считан

Copy link
Collaborator

@HadronCollider HadronCollider Mar 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут скорее вопрос (на исследование/проверку) - какого максимального размера аудио можно отправить в asr?
И можно ли защититься от ошибок со слишком большими файлами (разбивать их на более мелкие / др) - в vosk, например, данные отправлялись кусками по сокету, поэтому теоретически происходила обработка аудио любого размера

Copy link
Collaborator Author

@arhihihipov arhihihipov Mar 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Пока что удалось установить, что верхний предел у Whisper всё же существует

  1. 2 часа 15 минут тишины весом в 309 мб удалось обработать
  2. 1 час 30 минут разговорного подкаста весом 213 мб тоже удалось обработать
  3. 2 часа 30 минут тишины весом в 344 мб обработать не удалось -- вышли за лимиты по памяти
    Аудио загружались в tiny модель с характеристиками, указанными по дефолту в docker compose

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вынесите свои исследования в https://github.com/OSLL/web_speech_trainer/wiki

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как вы предполагаете автоматизированный запуск подобного теста?

  • функции тестов для pytest не принимают каких-либо параметров - аргумент "file" передать не удастся
  • для проверки корректности транскрибация нужны две вещи 1) аудио-запись 2) верная транскрибация (для оценки результата работы)
  • у вас есть код, использующий в проекте (class WhisperAudioRecognizer) - тестировать стоит его/через него, а не какой-то код для взаимодействия с whisper (в коде этого файла может не быть проблем, а в том, что используется в системе, задействован в проверках - всё ломается и не работает, к примеру)
    • в конце концов вам необходимо проверить даже не работу самого whisper (это уже делали до вас его создатели и пользователи), а кода, который вы реализовали для взаимодействия с ним, но допустим пока обойдемся без mock

Copy link
Collaborator Author

@arhihihipov arhihihipov Mar 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Соглашусь, такой код для тестирования не подойдёт. Хотелось бы узнать, стоит ли вообще писать тест для Whisper, и если да, то что именно нужно протестировать?

Copy link
Collaborator

@HadronCollider HadronCollider Mar 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавьте тестирование своего класса WhisperAudioRecognizer (пусть даже он частично будет общаться с whisper-контейнером, и это будет уже не совсем unit-тестирование)

  • тестовые аудио есть в /tests - можно сопоставить истинные результаты с возвращаемыми классом (лучше параметризуйте через pytest входной файл и данные)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image
Возникли трудности с написанием тестов, дело в том, что на данный момент tiny модель "Добрый день, все хорошо. Я сижу дома" распознаёт так, как показано на фото. Первая строка результат распознавания после применений denoiser, перегона в wav, а на второй строке результат распознавания необработанной записи

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Давайте пока оставим тесты в том виде в котором есть (с печатью распознанных слов)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А по поводу wav и denoiser - посмотрите, насколько они нужны при работе с whisper (создал задачу - #401 ) - wav нужен был для vosk, возможно, сейчас от него можно избавиться?

Copy link
Collaborator

@HadronCollider HadronCollider left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Аналогичное замечание про ОЗУ - https://github.com/OSLL/web_speech_trainer/pull/388/files#r1515013316

  • локально у меня могло "съесть" неконтролируемо до 5+ ГБ

Плюс изучите риски подобного поведения:
image

@HadronCollider HadronCollider mentioned this pull request Mar 7, 2024
@HadronCollider
Copy link
Collaborator

Добавил/освежил Github CI для более простой проверки интеграции

К комментарию - #388 (comment), сейчас падают только ваши тесты

collected 50 items

test_app.py ..                                                           [  4%]
test_audio_conversion.py ..                                              [  8%]
test_feedback_evaluator.py ......                                        [ 20%]
test_presentations.py .                                                  [ 22%]
test_whisper.py E                                                        [ 24%]
api/test_audio.py ...                                                    [ 30%]
api/test_files.py ...............                                        [ 60%]
api/test_task_attempts.py ...                                            [ 66%]
criteria/test_criteria.py ...                                            [ 72%]
criteria/test_strict_speech_duration_criterion.py .............          [ 98%]
selenium/test_training.py .                                              [100%]

.env Outdated Show resolved Hide resolved
Copy link
Collaborator

@HadronCollider HadronCollider left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Оставил последние комментарии - остальное ок


end_time = time.time()
processing_time = end_time - start_time
logger.info(f'audio processing time: {processing_time} s')
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавьте в сообщение длительность аудио (вы её получаете выше) - так будут более полезные логи (длина записи + время её обработки)

cpuset: ${WHISPER_CPU:-0,1}
mem_limit: 5g
volumes:
- ./whisper_asr_model_cache:/root/.cache/whisper
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Чтобы не засорять хост/папку репо (и не трогать docker/gitignore) - сделайте docker volume ( https://docs.docker.com/compose/compose-file/07-volumes/ )

- ASR_ENGINE=${WHISPER_ASR_ENGINE:-openai_whisper}
restart: always
cpuset: ${WHISPER_CPU:-0,1}
mem_limit: 5g
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вынесите параметр по аналогии в env

@HadronCollider
Copy link
Collaborator

Возможно, максимально запоздалый вопрос, но тем не менее - какие есть причины, чтобы держать его в отдельном контейнере (кроме того, что так было с vosk)?

Whisper можно использовать из python - это решает часть проблем и опасений, связанных с http запросами к ASR
Screenshot_2024-03-21-10-45-54-356_com.github.android.jpg

@arhihihipov
Copy link
Collaborator Author

Используется контейнер с Whisper, поскольку так изначально посоветовал Марк Маркович. На данный момент не могу сказать, какой из подходов будет более предпочтительным в тренажере

@HadronCollider
Copy link
Collaborator

Используется контейнер с Whisper, поскольку так изначально посоветовал Марк Маркович. На данный момент не могу сказать, какой из подходов будет более предпочтительным в тренажере

Да, пока этот вопрос снимаю - обсуждаю с ММ

@HadronCollider HadronCollider merged commit fe32972 into master Apr 4, 2024
3 checks passed
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

Successfully merging this pull request may close these issues.

Добавление контейнера whisper.ai
3 participants