Допустим, вы собрали данные, выполнили проектирование функций и построили модель для своего крутого стороннего проекта. Когда дело доходит до обмена моделью с друзьями и сообществом, вы предоставляете модель как API. Без четкой документации и пользовательского интерфейса пользователи, вероятно, были бы озадачены функциональностью и параметрами API. Мы можем использовать Flasgger для решения этой конкретной проблемы.

В этой статье мы создадим 2 API машинного обучения с Flask в качестве серверной части. Затем мы будем использовать Flasgger для стандартизации и взаимодействия с API. Наконец, мы докеризуем установку и запустим ее как контейнер. В этой статье Iris Dataset использовался в демонстрационных целях.

Построение модели

Набор данных IRIS имеет Id, SepalLengthCm, SepalWidthCm, PetalLengthCm, PetalWidthCm и Species в качестве функций. Постановка задачи состоит в том, чтобы определить, принадлежит ли цветок к видам Setosa, Virginica или Versicolor. Столбец ID можно опустить, так как он не имеет отношения к проблеме. Поскольку у объекта вида есть категориальные переменные, мы выполняем кодирование меток, чтобы преобразовать их в числа.

После этого мы выполняем обычное разделение теста обучения и обучаем модель с помощью классификатора. В этом случае я использовал Random Forest. После обучения модели мы упаковываем ее в файл рассола и сохраняем. Поскольку эта статья является демонстрацией для Flasgger, мы не собираемся вдаваться в подробности выбора функций, выбора модели и точности. Полный код вы можете найти здесь.

Вывод модели

После того, как мы обучили модель, следующим шагом будет предоставление ее как API. Для этого мы создаем приложение Flask с двумя API. Одним из них будет метод GET, который принимает функции в качестве параметров, а другим будет метод POST, который принимает файл CSV в качестве входных данных. Эти методы будут обрабатывать данные и возвращать вывод из модели в качестве ответа.

На данный момент логика нашего приложения машинного обучения не содержит пользовательского интерфейса. Мы просто отправляем запрос через Postman и получаем ответ. Это хорошо для целей тестирования, но мы бы не хотели, чтобы пользователи нашего приложения машинного обучения продолжали использовать Postman для вывода. Не в обиду Почтальону, я просто выступаю против отсутствия простого пользовательского интерфейса.

Из-за отсутствия простого UI мы проигрываем по двум фронтам. Первый — это отсутствие подсказки при вводе недопустимых значений. Второй — отсутствие документации по доступным API. Подсказки были бы хорошей функцией, чтобы предупредить нас о несоответствии типа данных или отсутствии определенной функции. Точно так же пользователю необходимо знать доступные API и функцию каждого API, чтобы сделать обоснованный запрос. Итак, как упоминалось в начале, мы создадим интерфейс с Flasgger и свяжем его с нашим приложением ML на базе Flask.

Flasgger — это расширение Flask для извлечения спецификаций OpenAPI из всех представлений Flask, зарегистрированных в вашем API. Flasgger также поставляется со встроенным интерфейсом SwaggerUI, поэтому вы можете получить доступ к http://localhost:5000/apidocs, а также визуализировать и взаимодействовать с вашими ресурсами API.

Несмотря на то, что Flasgger можно использовать по-разному, в данном случае мы используем его в качестве внешнего интерфейса для нашего приложения машинного обучения. Flasgger имеет 3 основных компонента Описание, параметры и ответы.

Описание

Как следует из названия, этот раздел содержит описание API. Мы можем включить в этот раздел такие детали, как ожидаемые входные параметры и функции этого конкретного API.

Параметры

Этот раздел содержит имя, вход, тип и необходимые метки. Имя будет именем используемого параметра. «In» может быть запросом, который мы вводим в пользовательском интерфейсе, или это может быть formData, который является файлом, который мы загружаем. Метка «тип» может использоваться для стандартизации типа данных параметра. Это может быть номер, файл и так далее. Наконец, у нас есть метка «требуется», которая указывает, является ли обязательным предоставление значения для конкретного параметра или нет.

Ответы

В этом разделе рассматриваются коды ответов и описание, которое мы хотели бы отображать вместе с кодом ответа.

Чтобы увидеть пользовательский интерфейс в действии, нужно всего 2 простых шага. Первым шагом будет запуск приложения Flask. Второй шаг — зайти в браузер и ввести 127.0.0.1:8000/apidocs. 8000 — это номер порта, который мы указали в приложении Flask, и apidocs перенесет нас в раздел swagger. Как мы видим, Flasgger предоставляет информацию о методах, доступных в приложении Flask, вместе с их описанием.

В разделе API присутствует флаг «обязательный» для каждого параметра. Если значение не заполнено или введен недопустимый тип данных, будет показано приглашение с подробным сообщением об ошибке. Поскольку все параметры легко доступны в пользовательском интерфейсе, нам не нужно беспокоиться о том, что в запросе будет указан неверный параметр.

После выполнения метода GET мы достигаем раздела ответа. Здесь у нас есть запрошенный URL, Curl и тело ответа вместе с кодом ответа. Мы получим тот же пользовательский интерфейс для нашего метода POST, где мы можем загрузить файл CSV для пакетного прогнозирования.

Подведем итоги

У нас есть

Скачал набор данных Iris с Kaggle.

Выполнена разработка функций и обучение модели.

Сохранил обученную модель как файл рассола.

Создал приложение Flask, чтобы представить нашу модель как API.

Интегрированный Flasgger с нашим приложением Flask.

Давайте Dockerize

Поздравляем, теперь в вашем распоряжении не просто модель машинного обучения. Теперь пришло время поделиться им с друзьями и коллегами. Вы можете упаковать код, файлы зависимостей и файлы данных и создать образ докера. Этот образ докера можно использовать совместно и запускать на любом компьютере без каких-либо проблем с зависимостями.

Чтобы узнать об установке и развертывании докера, вы можете взглянуть на этот удивительный ресурс. Первым шагом в создании образа Docker будет создание Dockerfile. В этом файле есть вся необходимая информация для запуска нашего приложения в качестве контейнера. Он содержит информацию о базовом образе, номере порта и зависимостях. После завершения установки вы можете запустить приведенную ниже команду, чтобы запустить контейнер.

docker build -t iris_image .

docker run — имя iris_container -p 8000:8000 iris_image

Заключение

Flasgger можно использовать для стандартизации API-интерфейсов машинного обучения, что помогает разработчикам и конечным пользователям быть на одной странице. Flasgger также обеспечивает проверку входящих данных, сравнивая их с базовой схемой. Кроме того, его также можно использовать в качестве простого интерфейса для наших приложений машинного обучения.

Ресурсы

  1. Учебник по Docker 1. Почему и что такое Docker, контейнеры Dockers, виртуализация в машинном обучении — YouTube
  2. (7079) Учебное пособие по Docker для начинающих — Что такое Docker? Введение в контейнеры — YouTube

Хотите подключиться?

Если вам понравилась эта статья, подпишитесь на меня здесь, на Medium, чтобы узнать больше о машинном обучении и информатике.

Linked In — Притиви Рамалингам | LinkedIn

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Больше контента в публикации Level Up Coding.
Подписывайтесь: Twitter, LinkedIn, Информационный бюллетень
Level Up меняет рекрутинг в сфере технологий ➡️ Присоединяйтесь к нашему коллективу талантов