0Pricing
Learn AI with Python · Урок

Загрузка и предоставление моделей машинного обучения

Загрузка модели joblib/keras при запуске, потокобезопасный вывод, конечные точки пакетного прогнозирования

«Загрузка и предоставление моделей машинного обучения» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Проблема загрузки

Загрузка модели с диска занимает много времени. Если загружать её при каждом запросе, задержка резко возрастает. Решение: загрузить модель один раз при запуске и повторно использовать её для всех запросов.

Событие запуска

Обработчик @app.on_event("startup") выполняется один раз при запуске сервера, поэтому это идеальное место для загрузки модели до поступления первого запроса.

from fastapi import FastAPI
import joblib

app = FastAPI()

@app.on_event("startup")
def load_model():
    app.state.model = joblib.load("model.joblib")

app.state для потокобезопасного хранения

app.state — рекомендуемое место для хранения общих объектов, например модели. Объект сохраняется один раз при запуске и только считывается во время обработки запросов, что позволяет избежать проблем с изменяемыми глобальными переменными уровня модуля.

from fastapi import Request

@app.post("/predict")
def predict(req: PredictRequest, request: Request):
    model = request.app.state.model
    return {"prediction": model.predict([req.features])[0]}

Почему не глобальная переменная?

Обычная глобальная переменная модуля работает, но связывает загрузку с моментом импорта и усложняет проверку и замену объекта. app.state связывает жизненный цикл объекта с приложением; это более чистый и рекомендуемый FastAPI подход.

Современный подход lifespan

В новых версиях FastAPI обработчик lifespan заменяет on_event: контекстный менеджер обрабатывает запуск и завершение работы в одном месте.

from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app):
    app.state.model = joblib.load("model.joblib")  # startup
    yield
    app.state.model = None                          # shutdown

app = FastAPI(lifespan=lifespan)

Прогрев модели

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

@app.on_event("startup")
def load_and_warm():
    app.state.model = joblib.load("model.joblib")
    app.state.model.predict([[0.0, 0.0, 0.0, 0.0]])  # warm-up

Зачем нужен прогрев

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

Конечная точка пакетных предсказаний

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

class BatchRequest(BaseModel):
    items: list[list[float]]

@app.post("/predict/batch")
def predict_batch(req: BatchRequest, request: Request):
    model = request.app.state.model
    preds = model.predict(req.items)
    return {"predictions": preds.tolist()}

Одиночный запрос против пакетного

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

Поддержка обоих вариантов охватывает сценарии работы в реальном времени и массовой обработки.

Чтение состояния в конечных точках

Каждая конечная точка получает общую модель через request.app.state.model и никогда не загружает её повторно, поэтому все запросы используют один экземпляр в памяти.

Объединение всех частей

Готовая к эксплуатации конфигурация: загрузить и прогреть модель в lifespan/запуске, сохранить её в app.state и предоставить конечные точки для одиночных и пакетных предсказаний, считывающие модель из состояния. Это уменьшает задержку и повышает пропускную способность.

Быстрая проверка

Проверьте свои знания об обслуживании моделей.

Повторение

Вы загрузили модель один раз через запуск/lifespan, сохранили её в app.state для потокобезопасного повторного использования, добавили фиктивное предсказание для прогрева и предоставили пакетную конечную точку для повышения пропускной способности. Далее: упаковка API в Docker.

Часто задаваемые вопросы

Урок «Загрузка и предоставление моделей машинного обучения» бесплатный?

Да — полный текст урока «Загрузка и предоставление моделей машинного обучения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Загрузка и предоставление моделей машинного обучения»?

Загрузка модели joblib/keras при запуске, потокобезопасный вывод, конечные точки пакетного прогнозирования Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Загрузка и предоставление моделей машинного обучения»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы FastAPI для инженеров машинного обучения
  2. Схемы Pydantic для запросов и ответов
  3. Загрузка и предоставление моделей машинного обучения
  4. Контейнеризация API модели с Docker
← Назад к Learn AI with Python