Допустим, вы собрали данные, выполнили проектирование функций и построили модель для своего крутого стороннего проекта. Когда дело доходит до обмена моделью с друзьями и сообществом, вы предоставляете модель как 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 также обеспечивает проверку входящих данных, сравнивая их с базовой схемой. Кроме того, его также можно использовать в качестве простого интерфейса для наших приложений машинного обучения.
Ресурсы
- Учебник по Docker 1. Почему и что такое Docker, контейнеры Dockers, виртуализация в машинном обучении — YouTube
- (7079) Учебное пособие по Docker для начинающих — Что такое Docker? Введение в контейнеры — YouTube
Хотите подключиться?
Если вам понравилась эта статья, подпишитесь на меня здесь, на Medium, чтобы узнать больше о машинном обучении и информатике.
Linked In — Притиви Рамалингам | LinkedIn
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Больше контента в публикации Level Up Coding.
Подписывайтесь: Twitter, LinkedIn, Информационный бюллетень
Level Up меняет рекрутинг в сфере технологий ➡️ Присоединяйтесь к нашему коллективу талантов