Развертывание моделей машинного обучения стало проще!

Создание моделей машинного обучения — это одно, а развертывание их, чтобы сделать их действительно полезными для кого-то, — это совсем другое. Доступность модели имеет существенное значение; иначе, как бы оно ни было хорошо, оно бесполезно. Среди всех других методов один из самых используемых и простых — это обернуть модели машинного обучения внутри REST API, чем мы сегодня и займемся — с помощью FastAPI.

Что такое FastAPI? Ну, это современный интерактивный фреймворк, который позволяет очень удобно создавать API, используя Python 3.6+. Он не только прост в использовании, но и обеспечивает исключительную производительность, которую можно сравнить с такими инструментами, как NodeJS и Go.

Итак, сегодня в этой статье мы обсудим, как мы можем развернуть модель с помощью FastAPI и использовать ее единственную в своем роде автоматическую интерактивную документацию. Сначала мы напишем полную модель с помощью Python, а затем воспользуемся API для прогнозирования.

Вот повестка дня на сегодня:

· Установка FastAPI

· Документация по FastAPI

· Обучение модели машинного обучения

· Создание REST API

· Тестирование модели

· Заворачивать

Примечание. Репозиторий GitHub для этого проекта можно найти здесь

Установка FastAPI

Прежде всего, давайте установим библиотеку вместе с сервером ASGI. Просто откройте окно терминала и установите fastapi с uvicorn — сервером ASGI.

pip install fastapi uvicorn

Теперь создадим папку для нашего проекта. Внутри папки мы создадим приложение с именем app.py, которое будет содержать код API. Чтобы закодировать этот файл, нам нужно сделать следующие вещи:

1. Импортируйте необходимые библиотеки — FastAPI и Uvicorn.

2. Создайте экземпляр класса FastAPI.

3. Объявите маршрут для возврата простого объекта JSON (http://127.0.0.1:8000).

4. Объявите еще один маршрут для возврата персонализированного объекта JSON с параметром, исходящим из URL-адреса (например, http://127.0.0.1:8000/Muneeb).

5. Запустите API с помощью Uvicorn.

Вот как мы можем все это закодировать:

Вот и все. Теперь все, что нам нужно сделать, чтобы запустить API, — это открыть терминал, где находится app.py, и ввести следующую команду:

приложение uvicorn:app -reload

Но как работает эта команда? Давайте посмотрим. Первая команда приложения относится к имени вашего файла Python, но вам не нужно включать в него расширение. Второе приложение указывает на экземпляр FastAPI, который мы создали в нашем файле app.py. Таким образом, FastAPI знает, какой файл искать в экземпляре FastAPI, а затем получить его, используя его имя. Наконец, параметр –reload сообщает нам, что мы хотим, чтобы наш API перезагружался каждый раз, когда мы вносим изменения в наши исходные файлы, без необходимости перезапуска.

После запуска команды вам нужно перейти по указанному нами URL-адресу локального хоста. Вот что вы увидите после открытия веб-страницы.

Это простой объект JSON по умолчанию, который мы вернули. Теперь давайте попробуем использовать персонализированный JSON, передав объект имени в URL-адрес. Перейдите по адресу http://127.0.0.1:8000/Muneeb; вот результат:

Большой. Вы можете ввести любое имя в URL-адресе, и он будет работать так же.

Примерно так работает API. Теперь, прежде чем мы углубимся во все, что связано с машинным обучением, давайте изучим интерактивную документацию FastAPI и посмотрим, о чем идет речь.

Документация по FastAPI

Документация — это то, что отличает FastAPI от остальных. Со встроенной интерактивной документацией это, безусловно, единственное в своем роде. Просто перейдите на http://127.0.0.1:8000/docsto, чтобы начать изучение.

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

Двигаясь дальше, если вам не нравится пользовательский интерфейс, есть еще одна функция, которая позволяет вам изменить обзор. Вы можете перейти по адресу http://127.0.0.1:8000/redoc.

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

Обучение модели машинного обучения

Поскольку мы строим модель машинного обучения только для демонстрации FastAPI, мы не будем заниматься очень сложными моделями. Я подобрал простой набор данных для обучения случайного леса, доступ к которому вы можете получить через мой GitHub. Однако независимо от того, насколько сложна модель, которую вы разработали, вы можете развернуть ее на FastAPI точно так же, как мы развернем ее сегодня.

Мы будем использовать набор данных банкнот для обучения модели ML, которая будет предсказывать, является ли конкретная банкнота поддельной или нет. Итак, выполним следующие шаги:

Обучите нашу модель с помощью классификатора случайного леса в блокноте Jupyter с именем ModelTraining.ipynb. Вы можете посмотреть блокнот здесь.

Теперь сериализуйте модель с помощью pickle. Однако я уже добавил файл pkl в репозиторий проекта, так что вы можете пропустить этот шаг, если хотите.

Создайте класс BankNotes.py, наследуемый от BaseModel. Это будет использоваться для хранения полей, используемых для предсказания банкноты. Вот как это выглядит:

Создание REST API

Давайте снова напишем app.py, как мы делали это в начале статьи. Однако, в отличие от предыдущего, у нас будет только один маршрут для объявления под названием «/evaluate». Этот маршрут будет использоваться для прогнозирования с использованием модели, которую мы обучили на предыдущем шаге. Еще одно важное изменение заключается в том, что на этот раз мы будем использовать метод POST, так как это рекомендуемый способ отправки параметров при работе с моделями ML.

Давайте посмотрим, что нужно сделать, чтобы закодировать файл app.py:

1. Импорт необходимых библиотек — FastAPI, uvircorn, pickle, BankNotes и т.д.

2. Создайте экземпляры классов FastAPI и BankNotes.

3. Определите функцию для обработки запроса POST и возврата прогнозов.

4. Запустите app.py с помощью uvicorn.

Вот и все. Давайте посмотрим, как это закодировать на Python:

Как и раньше, мы можем запустить это с помощью команды uvicorn app:app –reload. Выполнив команду, перейдите на страницу документации. Вот как это будет выглядеть:

Разверните конечную точку POST и нажмите кнопку "Попробовать", чтобы начать делать прогнозы, как показано ниже:

После того, как вы ввели параметры, просто нажмите «Выполнить», чтобы получить ответ от модели. Вот что вы получите взамен с вашими параметрами:

Как видите, наша модель предсказала, что банкнота фальшивая. Вы можете протестировать разные значения и проверить, как изменится ответ. Кроме того, вы можете прокрутить вниз, чтобы увидеть более подробную информацию о возвращенном объекте ответа.

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

Заворачивать

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

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

На сегодня все, надеюсь, вам было интересно читать!