Size: a a a

Natural Language Processing

2020 April 13

DL

Dmitry Legchikov in Natural Language Processing
вопрос назрел потому что не знаю стоит ли в них погружаться и разбираться, т.к кажется это уже устаревшие вещи и там достаточно хардкорная математика
источник
2020 April 14

YZ

Yura Zaytsev in Natural Language Processing
Сеточки хороши когда много данных, а если датасет не очень большой, вручают генеративные модели
источник

DL

Dmitry Legchikov in Natural Language Processing
интересно вот если данных мало, в качестве бейзлайна вы бы пробовали что то простое и классическое или что то большое и предобученное?
источник

DL

Dmitry Legchikov in Natural Language Processing
даже скажем не для самого первого бейзлайна, а для "бейзлайна" номер два
источник

V

Vanya in Natural Language Processing
Всем привет! Вопрос по ярги-парсеру. У кого-нибудь есть опыт его использования в чат-ботах? Я заметил, что инстанс класса Parser или Extractor создается достаточно долго. Это особенно ощутимо, когда пользователей много и нужно искать несколько типов сущностей. Как вы смотрите на идею создать парсеры заранее, а в случае многопоточной обработки запросов использовать мьютексы? Сериализации ярги-парсер не поддается, и я не уверен, что чтение с диска будет быстрее создания экземпляра
источник

V

Vanya in Natural Language Processing
Я использую flask
источник

V

Vlad in Natural Language Processing
Я сделал примерно так: при старте сервера все нужные экстракторы создаём в одном экземпляре (я использую наташу), потом запускаем сам сервер с rest api (например, на базе flask). Это всё заворачиваем в докер и дальше тестируем

У меня вышло примерно 150-200RPS с временем ответа до 0.17 сек на intel xeon каком-то, модель не знаю)

А дальше просто поднимаем нужное количество контейнеров и вешаем балансировщик нагрузки на nginx)
источник

V

Vlad in Natural Language Processing
В случае flask очень советую использовать greenlets в gevent, более удобная альтернатива стандартным потокам и умеет разделять доступ между одним экземпляром класса
источник

V

Vlad in Natural Language Processing
Причём полученный сервер будет жить только на 1 ядре процессора, что довольно удобно
источник

V

Vanya in Natural Language Processing
Vlad
Я сделал примерно так: при старте сервера все нужные экстракторы создаём в одном экземпляре (я использую наташу), потом запускаем сам сервер с rest api (например, на базе flask). Это всё заворачиваем в докер и дальше тестируем

У меня вышло примерно 150-200RPS с временем ответа до 0.17 сек на intel xeon каком-то, модель не знаю)

А дальше просто поднимаем нужное количество контейнеров и вешаем балансировщик нагрузки на nginx)
То есть идея заключается в том, чтобы обрабатывать запросы на одном процессе с одним потоком, а распараллеливать обработку с помощью nginx? Интересно. Но если хочется еще и в несколько потоков? Про gevent почитаю. Спасибо
источник

V

Vlad in Natural Language Processing
Несколько псведопотоков обеспечивает как раз gevent со своими гринлетами)
источник

YB

Yuri Baburov in Natural Language Processing
Vlad
Я сделал примерно так: при старте сервера все нужные экстракторы создаём в одном экземпляре (я использую наташу), потом запускаем сам сервер с rest api (например, на базе flask). Это всё заворачиваем в докер и дальше тестируем

У меня вышло примерно 150-200RPS с временем ответа до 0.17 сек на intel xeon каком-то, модель не знаю)

А дальше просто поднимаем нужное количество контейнеров и вешаем балансировщик нагрузки на nginx)
а делать один flask на ядро CPU , и верхнеуровнево какой-нибудь wsgi многопроцессный для них?
или там внутри бывают ситуации, когда не на CPU нагрузка во время обработки запроса? не должно быть же такого? баз нет, только память и процессор задействованы
источник

V

Vlad in Natural Language Processing
Но я не уверен, что это прям супер решение. В контексте работы с обученными нейронками это довольно удобно, не надо запариваться с tensorflow/pytorch при создании нескольких моделей в одном месте, а масштабируемость обеспечивается ядрами процессора и докером)

Такое решение сделать проще и быстрее, чем качественное с потоками (хотя в случае потоков всё равно работает только 1 процесс, ибо это питон, а если переходить на процессы - это боль)
источник

V

Vlad in Natural Language Processing
Yuri Baburov
а делать один flask на ядро CPU , и верхнеуровнево какой-нибудь wsgi многопроцессный для них?
или там внутри бывают ситуации, когда не на CPU нагрузка во время обработки запроса? не должно быть же такого? баз нет, только память и процессор задействованы
Да, вместо wsgi как раз используется nginx
источник

V

Vanya in Natural Language Processing
Vlad
Но я не уверен, что это прям супер решение. В контексте работы с обученными нейронками это довольно удобно, не надо запариваться с tensorflow/pytorch при создании нескольких моделей в одном месте, а масштабируемость обеспечивается ядрами процессора и докером)

Такое решение сделать проще и быстрее, чем качественное с потоками (хотя в случае потоков всё равно работает только 1 процесс, ибо это питон, а если переходить на процессы - это боль)
Почему переходить на процессы - боль? У меня wsgi-сервер создает процесс под запрос
источник

V

Vlad in Natural Language Processing
Можно ещё попробовать через rpc работать с моделями (или ярги парсером) через один общий сервер, будет примерный аналог того, что я описал. Но лично не проверял производительность такого решения, было только в универе одна лаба на тему rpc)
источник

V

Vanya in Natural Language Processing
Vanya
Почему переходить на процессы - боль? У меня wsgi-сервер создает процесс под запрос
nginx с одним воркером работает
источник

YB

Yuri Baburov in Natural Language Processing
Vanya
Почему переходить на процессы - боль? У меня wsgi-сервер создает процесс под запрос
ну вот надо теперь чтобы было несколько заранее созданных под клиентов, или чтобы они переиспользовались.
источник

YB

Yuri Baburov in Natural Language Processing
Yuri Baburov
ну вот надо теперь чтобы было несколько заранее созданных под клиентов, или чтобы они переиспользовались.
чтобы минимизировать время загрузки/подготовки перед запросом
источник

V

Vlad in Natural Language Processing
Создавать процессы долго и затратно при получении запроса от клиента, плюс у меня не получалось перекидывать объекты, сложнее словаря, в создаваемый процесс. Только если в этом подпроцессе грузить модель заново, но это очень долго
источник