Wczytywanie i udostępnianie modeli ML
Wczytywanie modelu joblib/keras podczas uruchamiania, bezpieczna wielowątkowo inferencja, punkty końcowe predykcji wsadowej.
Wczytywanie i udostępnianie modeli ML to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Problem z wczytywaniem
Wczytywanie modelu z dysku jest powolne. Jeśli model będzie wczytywany przy każdym żądaniu, opóźnienie gwałtownie wzrośnie. Rozwiązanie: wczytać model raz podczas uruchamiania i ponownie używać go dla wszystkich żądań.
Zdarzenie startup
Hak @app.on_event("startup") jest uruchamiany raz podczas uruchamiania serwera, dlatego doskonale nadaje się do wczytania modelu przed nadejściem pierwszego żądania.
from fastapi import FastAPI
import joblib
app = FastAPI()
@app.on_event("startup")
def load_model():
app.state.model = joblib.load("model.joblib")app.state do bezpiecznego współdzielenia między wątkami
app.state to zalecane miejsce do przechowywania współdzielonych obiektów, takich jak model. Obiekt jest zapisywany raz podczas uruchamiania i tylko odczytywany podczas obsługi żądań, co pozwala uniknąć problemów ze zmiennymi globalnymi modułu.
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]}Dlaczego nie zmienna globalna?
Zwykła zmienna globalna modułu działa, ale wiąże wczytywanie z momentem importu i utrudnia testowanie lub podmianę obiektu. app.state wiąże cykl życia obiektu z aplikacją, co jest przejrzystym i zalecanym przez FastAPI rozwiązaniem.
Nowoczesne podejście lifespan
Nowsze wersje FastAPI zastępują on_event menedżerem kontekstu lifespan, który obsługuje uruchamianie i zamykanie aplikacji w jednym miejscu.
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)Rozgrzewanie modelu
Pierwsza predykcja jest często powolna, ponieważ frameworki inicjalizują się leniwie przy pierwszym wywołaniu. Proszę rozgrzać model podczas uruchamiania za pomocą przykładowej predykcji, aby pierwsze rzeczywiste żądanie użytkownika zostało obsłużone szybko.
@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-upDlaczego rozgrzewanie ma znaczenie
Bez rozgrzewania pierwsze żądanie po wdrożeniu może trwać wielokrotnie dłużej, pogarszając opóźnienie ogona i potencjalnie powodując niepowodzenie kontroli stanu. Pojedyncza przykładowa inferencja podczas uruchamiania przenosi ten koszt poza ścieżkę krytyczną.
Endpoint predykcji wsadowej
Przewidywanie wielu wierszy w jednym wywołaniu jest znacznie wydajniejsze niż wykonywanie wielu pojedynczych wywołań, ponieważ modele wektoryzują operacje na partii danych. Proszę przyjmować listę wektorów cech i zwracać listę predykcji.
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()}Pojedynczo a wsadowo
- Pojedynczo: jedno wejście, najniższe opóźnienie pojedynczego wywołania, prości klienci.
- Wsadowo: wiele wejść jednocześnie, znacznie większa przepustowość, rozwiązanie idealne do oceniania offline.
Udostępnienie obu wariantów pozwala obsłużyć przypadki użycia w czasie rzeczywistym i przetwarzanie zbiorcze.
Odczytywanie ze stanu w endpointach
Każdy endpoint odczytuje współdzielony model za pomocą request.app.state.model i nigdy nie wczytuje go ponownie, dzięki czemu wszystkie żądania korzystają z jednej instancji przechowywanej w pamięci.
Połączenie wszystkich elementów
Konfiguracja gotowa do użycia na produkcji: wczytanie i rozgrzanie modelu w lifespan/startup, zapisanie go w app.state oraz udostępnienie endpointów predykcji pojedynczej i wsadowej, które odczytują model ze stanu. Minimalizuje to opóźnienia i maksymalizuje przepustowość.
Szybki sprawdzian
Sprawdź swoją wiedzę na temat udostępniania modeli.
Podsumowanie
Model został wczytany raz za pomocą startup/lifespan i zapisany w app.state w celu bezpiecznego współdzielenia między wątkami. Dodano przykładową predykcję na rozgrzewkę oraz endpoint wsadowy zwiększający przepustowość. Następny temat: umieszczanie API w kontenerze Docker.
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 53
- Lekcje
- 225
Często zadawane pytania
Czy lekcja „Wczytywanie i udostępnianie modeli ML” jest bezpłatna?
Tak — pełny tekst „Wczytywanie i udostępnianie modeli ML” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Wczytywanie i udostępnianie modeli ML”?
Wczytywanie modelu joblib/keras podczas uruchamiania, bezpieczna wielowątkowo inferencja, punkty końcowe predykcji wsadowej. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Wczytywanie i udostępnianie modeli ML”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy FastAPI dla inżynierów ML
- Schematy Pydantic dla żądań i odpowiedzi
- Wczytywanie i udostępnianie modeli ML
- Konteneryzacja API modelu za pomocą Dockera