Все статьи цикла:

1. DeepPavlov для разработчиков: #1 инструменты NLP и создания чат-ботов
2. DeepPavlov для разработчиков: #2 настройка и деплоймент

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

Договоримся, что все скрипты запуска библиотеки выполняются в environment Python с установленной библиотекой DeepPavlov (про установку см. первую статью, про virtualenv можно прочитать здесь). Примеры из этой статьи не требуют знания синтаксиса Python.



Режимы взаимодействия с NLP моделями DeepPavlov


На данный момент DeepPavlov поддерживает 4 способа взаимодействия с NLP моделями (как предобученными, так и созданными пользователями):

  • REST сервер (режим riseapi) — основной инструмент интеграции моделей, о нём подробно рассказывалось в предыдущей статье (документация).
  • TCP или UNIX сокет сервер (режим risesocket) — если необходима низкоуровневая интеграция (документация).
  • Бот в Telegram (режим telegram) — демонстрационный режим, позволяет взаимодействовать с моделью через Telegram (документация).
  • Командная строка (режим interact) — демонстрационный и отладочный режим, позволяет взаимодействовать с моделью через командную строку. Модель в режиме взаимодействия через командную строку инициализируется следующей командой:
    python -m deeppavlov interact


Параметр <config_path> (обязательный во всех четырёх режимах) в качестве значения может принимать либо полный путь к файлу конфига модели, либо имя файла конфига без расширения. В последнем случае, конфиг модели должен быть зарегистрирован в библиотеке.

Конфиги всех поставляемых с DeepPavlov моделей зарегистрированы в библиотеке. Перечень поставляемых моделей можно найти в разделе MODELS документации DeepPavlov, их конфиги можно найти тут.

Использование GPU


В любом из вышеперечисленных режимов инициализируются NLP модели, в основе которых лежат нейронные сети. Это делает их достаточно требовательными к вычислительным ресурсам. Повысить производительность работы моделей можно за счёт использования GPU. Для этого вам понадобится графическая карта nVidia с достаточным объёмом видеопамяти (зависит от запускаемой модели) и поддерживаемая версия фреймворка CUDA. Всю необходимую информацию по запуску моделей DeepPavlov на GPU вы сможете найти здесь.

Файлы настроек библиотеки


Все настройки библиотеки содержатся в трёх файлах:

  • server_config.json — настройки REST и socket серверов, а так же коннектора к Telegram
  • dialog_logger_config.json — настройки логирования запросов к моделям
  • log_config.json — настройки логирования библиотеки

По умолчанию файлы настроек находятся в <deep_pavlov_root>/utils/settings, где <deep_pavlov_root> — это директория установки DeepPavlov (обычно это lib/python<X.X>/site-packages/deeppavlov в virtual environment). С помощью команды

python -m deeppavlov.settings

вы можете узнать точный путь к директории с файлами настроек. Также вы можете задать путь к удобной вам директории, указав его в переменной окружения DP_SETTINGS_PATH. После первого запуска вышеуказанной команды (сервера с любой обученной моделью DeepPavlov) файлы из директории по умолчанию будут скопированы в директорию из DP_SETTINGS_PATH. Команда

python -m deeppavlov.settings -d

сбрасывает настройки путём копирования файлов настройки из директории по умолчанию поверх файлов в DP_SETTINGS_PATH.

Из настроек DeepPavlov следует обратить внимание на:

  • server_config.json, параметр model_args_names:
    Из прошлой статьи мы помним:
    — аргументы REST API DeepPavlov именованные;
    — любая модель в DeepPavlov идентифицируется именем её конфига.
    Так вот, имена аргументов каждой модели по умолчанию берутся из её конфига.

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

    model_args_names: [“arg_1_name”, ..., “arg_n_name”]

    Последовательность имён аргументов соответствует последовательности, в которой аргументы определены в конфиге модели, пустая строка в качестве значения параметра model_args_names соответствует именам по умолчанию.
  • log_config.json:
    Обратите внимание на то, что для логирования uvicorn используется логгер, который настраивается отдельно. Про структуру конфига модуля logging Python можно прочитать здесь.

Запуск предобученных моделей в Docker


Любую предобученную модель DeepPavlov можно запустить в контейнере Docker в режиме REST сервиса. Подробные инструкции находятся в наших репозиториях на DockerHub: для CPU — здесь, для GPU — здесь. API моделей в контейнерах полностью соответствуют описанию из предыдущей статьи.

DeepPavlov Cloud


Чтобы упростить работу с предобученными NLP моделями из DeepPavlov, мы начали предоставлять их в режиме SaaS. Для использования моделей необходимо зарегистрироваться в нашем сервисе и получить токен в разделе Tokens личного кабинета. Документация по API находится в разделе Info. Под одним токеном можно отправить до 1000 запросов к модели.

На текущий момент сервис запущен в Альфа версии и его использование предоставляется бесплатно. Далее набор и формат предоставления моделей будет расширяться в соответствии с запросами пользователей. Форму для запросов можно найти внизу страницы Demo.

Сейчас в DeepPavlov Cloud доступны следующие модели:

  • Named Entity Recognition (multilingual) — распознавание именованных сущностей;
  • Sentiment (RU) — классификация тональности текста;
  • SQuAD (multilingual) — ответ на вопрос к тексту фрагментом данного текста.

Заключение


В этой статье мы познакомились с особенностями конфигурирования и деплоя моделей DeepPavlov, узнали о Docker образах DP и возможности свободного доступа к моделям DP как к SaaS.

В следующей статье мы обучим простую модель DeepPavlov на своём датасете. И не забывайте, что у DeepPavlov есть форум – задавайте свои вопросы относительно библиотеки и моделей. Спасибо за внимание!

Комментарии (8)


  1. jetnet
    13.12.2019 21:34

    SQuAD сервис в облаке отличается от riseapi: в последнем можно сразу несколько текстов загрузить — [context_raw], а в облаке text — только одно значение. Можно ли в облачный сервис сразу несколько текстов передать в одном запросе? Спасибо!


    1. Moryshka Автор
      16.12.2019 15:07

      к сожалению, нельзя.


      1. jetnet
        18.12.2019 19:15

        а можно будет?


        1. Moryshka Автор
          18.12.2019 19:20

          да, думаю можно будет докрутить. Я передам запрос коллегам, но не могу соориентировать по срокам)


          1. jetnet
            18.12.2019 19:38

            было бы здорово сэкономить на запросах и посылать всё в одном пакете ))
            А если серьезно, то у меня на самом деле с одного сервиса приходит несколько текстов, и было бы классно их сразу все скопом проанализировать.


  1. ksotar
    25.12.2020 20:45

    Проект очень интересный.
    Но, выходит, третей части про обучение так и не было?


    1. Moryshka Автор
      28.12.2020 11:41

      Вы можете найти больше туториалов у нас блоге на медиум.


      1. ksotar
        28.12.2020 18:30

        Спасибо, попробую.