0Pricing
Learn AI with Python · Lekcja

Konteneryzacja modeli ML za pomocą Dockera

Wieloetapowy Dockerfile, obrazy bazowe CUDA, kopiowanie artefaktu modelu za pomocą COPY, punkty końcowe kontroli stanu.

Konteneryzacja modeli ML za pomocą Dockera to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 1 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.

Dlaczego warto konteneryzować modele ML

Modele uczenia maszynowego zależą od konkretnej wersji Pythona, bibliotek systemowych i przypiętych wersji pakietów. Docker pakuje to wszystko w jeden niezmienny obraz, dzięki czemu model działa identycznie na laptopie, w module CI i w klastrze produkcyjnym.

W przypadku ML największym problemem jest rozbieżność zależności: model wytrenowany z użyciem numpy 1.24 może działać nieprawidłowo bez wyraźnego błędu na numpy 2.0. Kontener zamraża te wersje.

Prosty obraz jednoetapowy

Pierwsza próba instaluje wszystko w jednym etapie. Działa, ale umieszcza w obrazie końcowym narzędzia do budowania (kompilatory, pamięci podręczne i nagłówki deweloperskie), przez co obraz jest duży i ma większą powierzchnię ataku.

FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "serve.py"]

Kompilacje wieloetapowe: pomysł

Kompilacja wieloetapowa wykorzystuje jeden etap do kompilowania i instalowania zależności (etap buildera), a następnie kopiuje wyłącznie gotowe artefakty do czystego etapu końcowego. Narzędzia używane tylko podczas budowania nigdy nie trafiają do środowiska produkcyjnego.

  • Etap buildera: pełny obraz bazowy, uruchamia pip install
  • Etap końcowy: odchudzony obraz bazowy, kopiuje zainstalowane pakiety

Etap budowania: pip install

Etap budowania instaluje pakiety w znanym prefiksie, dzięki czemu można je łatwo skopiować. Użycie --user umieszcza je w katalogu /root/.local, czyli w jednym katalogu, który można później pobrać.

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

Odchudzony etap końcowy

Etap końcowy rozpoczyna się od obrazu python:3.11-slim i kopiuje zainstalowane pakiety z etapu budowania. Odchudzony obraz nie zawiera łańcuchów narzędzi do budowania, zmniejszając rozmiar obrazu o setki megabajtów.

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .

Kopiowanie wag modelu

Duże wagi modelu należy kopiować jako osobną warstwę, aby Docker mógł je buforować. Jeśli zmieni się tylko kod, warstwa z wagami zostanie ponownie wykorzystana, a przebudowy będą szybkie.

COPY model/ /app/model/
COPY src/ /app/src/

EXPOSE portu serwera

Serwery wnioskowania (FastAPI, Triton, TorchServe) nasłuchują na określonym porcie. EXPOSE 8000 dokumentuje, że kontener udostępnia usługę na porcie 8000. Samo polecenie nie publikuje portu — podczas uruchamiania nadal trzeba zmapować go za pomocą -p 8000:8000.

EXPOSE 8000
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

Podstawy HEALTHCHECK

Systemy orkiestracji muszą wiedzieć, czy serwer modelu działa. Instrukcja HEALTHCHECK uruchamia polecenie w określonych odstępach czasu; kod wyjścia różny od zera oznacza kontener jako niesprawny, dzięki czemu można go ponownie uruchomić lub usunąć z modułu równoważenia obciążenia.

HEALTHCHECK z użyciem curl

Popularny wzorzec polega na odpytywaniu lekkiego endpointu /health. curl -f kończy działanie błędem (z kodem wyjścia różnym od zera) w przypadku dowolnego błędu HTTP, dokładnie tak, jak oczekuje tego HEALTHCHECK.

HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

Minimalny endpoint sprawdzający stan

Aplikacja udostępniająca model powinna udostępniać szybki endpoint, który potwierdza załadowanie modelu bez wykonywania pełnego wnioskowania.

from fastapi import FastAPI

app = FastAPI()
model = None  # loaded at startup

@app.get("/health")
def health():
    return {"status": "ok", "model_loaded": model is not None}

Kompletny Dockerfile

Po połączeniu wszystkich elementów: etap buildera instaluje zależności, odchudzony etap końcowy kopiuje je razem z modelem, udostępnia port 8000 i definiuje sprawdzanie stanu.

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY model/ /app/model/
COPY src/ /app/src/
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat budowania wieloetapowego.

Podsumowanie

Nauczyłeś się konteneryzować model ML za pomocą gotowego do użycia produkcyjnego pliku Dockerfile:

  • Budowanie wieloetapowe: builder instaluje zależności, a odchudzony etap końcowy je kopiuje
  • EXPOSE 8000 dokumentuje port serwera
  • HEALTHCHECK CMD curl pozwala systemom orkiestracji wykrywać niedziałające kontenery
  • Kopiowanie wag jako osobnej warstwy możliwej do buforowania

Następnie wdrożysz skonteneryzowany model w zarządzanej usłudze chmurowej.

Często zadawane pytania

Czy lekcja „Konteneryzacja modeli ML za pomocą Dockera” jest bezpłatna?

Tak — pełny tekst „Konteneryzacja modeli ML za pomocą Dockera” 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 „Konteneryzacja modeli ML za pomocą Dockera”?

Wieloetapowy Dockerfile, obrazy bazowe CUDA, kopiowanie artefaktu modelu za pomocą COPY, punkty końcowe kontroli stanu. Ć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 1 z 4.

Ile czasu zajmuje lekcja „Konteneryzacja modeli ML za pomocą Dockera”?

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

  1. Konteneryzacja modeli ML za pomocą Dockera
  2. Wdrażanie w chmurze: AWS SageMaker
  3. Wysokowydajne udostępnianie modeli za pomocą Triton Inference Server
  4. Skalowanie i automatyczne skalowanie punktów końcowych modeli
← Powrót do Learn AI with Python