
Развертывание модели с использованием FastAPI, Azure и Docker
Развертывание моделей машинного обучения с FastAPI, Azure и Docker: безбашенный гайд
Итак, вы решили задействовать свои навыки в области машинного обучения и хотите, чтобы ваша модель облетела мир. Но тут на вас сваливается непростая задача — развертывание. Не пугайтесь! В этом путеводителе я расскажу, как сделать вашу модель доступной с помощью FastAPI, Azure и Docker. Пристегните ремни, будет интересно!
Знакомьтесь: FastAPI
FastAPI — это фреймворк для создания API на Python 3.7 и выше. Почему, спрашиваете? Потому что он шустрый, масштабируемый и чертовски удобный в использовании. У FastAPI просто переполнен карман полезностей, а типизация на уровне Python делает его лишь еще более патиотично настроенным для разработки.
Готовим почву
Перед тем как погрузиться в бездну развертывания, проверьте, что у вас есть весь этот набор инструментов:
- Python: берем последнюю версию, а не старую, как дедушкин ноутбук.
- Docker: нужен для контейнеризации вашего приложения. Львиная доля разработчиков сегодня без него просто никуда.
- Аккаунт Azure: чтобы ваше приложение не висело в воздухе, как неправильно приклеенная обоина.
- FastAPI и Uvicorn: Проще простого —
pip install fastapi uvicorn
.
Сбираем FastAPI-приложение
Что ж, переходим к делу. Настало время собрать ваше FastAPI-приложение, чтобы оно радовало глаз непосвященным.
Создаем модель машинного обучения
Для наглядности возьмем простую модель линейной регрессии. Не волнуйтесь, дальше сложностей не будет.
from fastapi import FastAPI
from pydantic import BaseModel
import numpy as np
from sklearn.linear_model import LinearRegression
app = FastAPI()
# Модель данных для входных данных
class InputData(BaseModel):
X1: float
X2: float
# Загружаем вашу обученную модель
model = LinearRegression()
model.coef_ = [1.0, 2.0] # Пример коэффициентов
model.intercept_ = 0.5 # Пример свободного члена
@app.post("/predict/")
def predict(data: InputData):
input_data = np.array([[data.X1, data.X2]])
prediction = model.predict(input_data)
return {"prediction": prediction.tolist()}
Контейнеризируем приложение с помощью Docker
Тут важно: чтобы ваше приложение не носилось по свету без обязательной заботы, вам нужно создать Dockerfile
. И он будет выглядеть вот так:
FROM python:3.9-slim
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем файл зависимостей
COPY requirements.txt .
# Устанавливаем зависимости
RUN pip install -r requirements.txt
# Копируем код приложения
COPY . .
# Открываем порт
EXPOSE 8000
# Команда для запуска приложения
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Строим Docker-образ
Перейдем к практическим шагам: в терминале вашего проекта вбиваете команду:
docker build -t my-fastapi-app .
Не бойтесь, образ строится не дольше, чем жена выбирает платье.
Запускаем Docker-контейнер
И, наконец, вот команда для запуска вашего контейнера погружающего в ожидание новых пользователей и их данных:
docker run -p 8000:8000 my-fastapi-app
Выводим все в Azure
Теперь, когда контейнер в руках, мы готовы отправить ваше приложение в облака Azure.
Настройка Azure Container Registry
Сначала залогиньтесь в Azure и создайте экземпляр Azure Container Registry (ACR). Пушим наш Docker-образ, как будто это последняя веснушка на лице пятилетней девочки:
az acr login --name <ваша-acr-имя>
docker tag my-fastapi-app <ваша-acr-имя>.azurecr.io/my-fastapi-app
docker push <ваша-acr-имя>.azurecr.io/my-fastapi-app
Разворачиваем в App Service Azure
Круто, что вы дошли до этого момента. Теперь создайте App Service и подключите контейнер:
az appservice plan create --name <ваш-план-имя> --resource-group <ваша-ресурсная-группа> --sku S1
az webapp create --name <ваше-приложение-имя> --resource-group <ваша-ресурсная-группа> --plan <ваш-план-имя> --deployment-container-image-name <ваша-acr-имя>.azurecr.io/my-fastapi-app
Маленькие, но важные детали
CI/CD
Хотите автоматизировать процесс развертывания? Настройте CI/CD, например, с GitHub Actions или Azure DevOps, и пусть ваш код улетает в фид каждый раз, когда вы его меняете.
Безопасность и аутентификация
Не забывайте про безопасность. Ваш API должен быть защищён. FastAPI поддерживает кучу методов аутентификации, не экономьте на этом.
Выводы
Вот так, с помощью FastAPI, Azure и Docker, вы можете развернуть свое приложение и сделать его доступным для всех, кто жаждет ваших предсказаний. Убежден: вам уже не терпится протестировать вашу модель.
Ресурсы
- [Развертывание моделей с FastAPI и Docker]
- [Работа с FastAPI в Azure]
- [Углубляемся в внедрение ML моделей с FastAPI]
Пожалуй, вот что дальше
- Поэкспериментируйте с другими моделями.
- Оптимизируйте производительность вашего приложения, играя с Dockerfile и настройками Azure.
Подписывайтесь и будьте в теме
Хотите быть в курсе последних новостей о нейросетях и автоматизации? Подпишитесь на наш Telegram-канал: @neuroko.