Однократная загрузка модели при запуске
Используйте события lifespan, чтобы загрузка выполнялась только один раз
«Однократная загрузка модели при запуске» — бесплатный урок MLOps Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения MLOps Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс MLOps Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
The Slow-Endpoint Trap
If you call joblib.load inside /predict, the model reloads on every request. That is slow and wasteful for large models. 🐢
Load It Just Once
The fix: load the model a single time when the service starts, keep it in memory, and reuse it for every prediction.
The Lifespan Hook
FastAPI gives you a lifespan function to run setup before serving and cleanup after. It is the right home for model loading.
Write an Async Context Manager
You decorate an async function with asynccontextmanager. Code before yield runs at startup; code after runs at shutdown.
from contextlib import asynccontextmanagerStash the Model in State
Load the model at startup and save it on app.state, a shared place every request handler can reach later.
@asynccontextmanager
async def lifespan(app):
app.state.model = joblib.load("model.joblib")
yieldWire It to the App
Pass your lifespan function when you create the app. Now FastAPI runs your loading code once as the server boots.
app = FastAPI(lifespan=lifespan)Read It in the Route
Inside /predict you grab the already-loaded model from app.state. No disk read, just a fast in-memory lookup.
@app.post("/predict")
def predict(req: Request):
model = req.app.state.modelClean Up at Shutdown
Anything after the yield runs when the app stops, perfect for closing files or freeing GPU memory the model held.
yield
app.state.model = NoneFaster First Request
Because loading finished at startup, even the very first user gets a fast response, not a cold-load penalty. ⚡
Watch the Worker Count
Each uvicorn worker is its own process with its own copy of the model. More workers means more memory, so size them deliberately.
Why It Matters
Loading once is a core serving optimization: it cuts latency, lowers disk I/O, and keeps memory predictable under real traffic. 📈
Quick Check
You want your model loaded exactly once when the service boots. Where should that happen?
Recap
You moved loading into a lifespan hook, stored the model on app.state, and read it per request. One load, fast responses, clean shutdown. 🙌
Часто задаваемые вопросы
Урок «Однократная загрузка модели при запуске» бесплатный?
Да — полный текст урока «Однократная загрузка модели при запуске» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс MLOps Academy, подпишись на CoddyKit PRO. Курс MLOps Academy содержит 4 уроков всего.
Чему я научусь в уроке «Однократная загрузка модели при запуске»?
Используйте события lifespan, чтобы загрузка выполнялась только один раз Ты практикуешь MLOps Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать MLOps Academy?
Предыдущий опыт не требуется. MLOps Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Однократная загрузка модели при запуске»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке MLOps Academy?
Да. Каждый урок MLOps Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Первая конечная точка /predict
- Проверка запросов с помощью Pydantic
- Однократная загрузка модели при запуске
- Добавление проверки готовности /health