0Pricing
Learn AI with Python · Lezione

Containerizzazione dei modelli ML con Docker

Dockerfile multi-stage, immagini base CUDA, COPY degli artifact del modello, endpoint di health check

Containerizzazione dei modelli ML con Docker è una lezione Learn AI with Python gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn AI with Python, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn AI with Python include 4 lezioni in totale.

Perché containerizzare i modelli ML

I modelli di machine learning dipendono da una versione specifica di Python, dalle librerie di sistema e da versioni bloccate dei pacchetti. Docker racchiude tutto in un'unica immagine immutabile, così il modello viene eseguito nello stesso modo su un laptop, un runner CI e un cluster di produzione.

Per l'ML, il problema più grande è la deriva delle dipendenze: un modello addestrato con numpy 1.24 può comportarsi in modo anomalo senza preavviso con numpy 2.0. Un container blocca queste versioni.

L'immagine ingenua a singolo stage

Un primo tentativo installa tutto in un unico stage. Funziona, ma include nell'immagine finale gli strumenti di build (compilatori, cache e header per lo sviluppo), rendendola più grande e aumentando la superficie di attacco.

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

Build multi-stage: l'idea

Una build multi-stage usa uno stage per compilare e installare le dipendenze (il builder), quindi copia solo gli artefatti finali in uno stage finale pulito. Gli strumenti necessari solo durante la build non arrivano mai in produzione.

  • Stage builder: immagine base completa, esegue pip install
  • Stage finale: immagine base slim, copia i pacchetti installati

Stage builder: pip install

Il builder installa i pacchetti in un prefisso noto, così è facile copiarli all'esterno. Usare --user li colloca in /root/.local, un'unica directory che possiamo recuperare in seguito.

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

Stage finale slim

Lo stage finale parte da python:3.11-slim e copia i pacchetti installati dal builder. L'immagine slim non include le toolchain di build e riduce le dimensioni dell'immagine di centinaia di megabyte.

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

Copia dei pesi del modello

I pesi di un modello di grandi dimensioni devono essere copiati in un livello separato, così Docker può memorizzarli nella cache. Se cambia solo il codice, il livello dei pesi viene riutilizzato e le ricostruzioni sono rapide.

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

EXPOSE della porta di serving

I server di inferenza (FastAPI, Triton, TorchServe) ascoltano su una porta. EXPOSE 8000 documenta che il container fornisce il servizio sulla porta 8000. Da solo non pubblica la porta: è comunque necessario mapparla con -p 8000:8000 in fase di esecuzione.

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

Nozioni di base su HEALTHCHECK

Gli orchestratori devono sapere se il server del modello è attivo. Un'istruzione HEALTHCHECK esegue un comando a intervalli regolari; un codice di uscita diverso da zero contrassegna il container come non integro, in modo che possa essere riavviato o rimosso dal bilanciatore di carico.

HEALTHCHECK con curl

Un approccio comune consiste nel chiamare un endpoint /health leggero. curl -f restituisce un codice di uscita diverso da zero in caso di errore HTTP, esattamente ciò che HEALTHCHECK si aspetta.

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

Un endpoint di controllo minimale

L'applicazione di serving dovrebbe esporre un endpoint rapido che confermi che il modello è stato caricato, senza eseguire un'inferenza completa.

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}

Il Dockerfile completo

Riassumendo: una fase builder installa le dipendenze, una fase finale minimale le copia insieme al modello, espone la porta 8000 e dichiara un controllo dello stato di salute.

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"]

Verifica rapida

Verifichi la Sua comprensione delle build multi-stage.

Riepilogo

Ha imparato a creare un container per un modello di ML con un Dockerfile adatto alla produzione:

  • Build multi-stage: il builder installa le dipendenze e la fase finale minimale le copia
  • EXPOSE 8000 documenta la porta di serving
  • HEALTHCHECK CMD curl consente agli orchestratori di rilevare i container non attivi
  • Copiare i pesi in un livello separato memorizzabile nella cache

Ora distribuirà un modello containerizzato su un servizio cloud gestito.

Domande Frequenti

La lezione «Containerizzazione dei modelli ML con Docker» è gratuita?

Sì — il testo completo di «Containerizzazione dei modelli ML con Docker» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn AI with Python, passa a CoddyKit PRO. Il corso Learn AI with Python include 4 lezioni in totale.

Cosa imparerò in «Containerizzazione dei modelli ML con Docker»?

Dockerfile multi-stage, immagini base CUDA, COPY degli artifact del modello, endpoint di health check Eserciti Learn AI with Python con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Learn AI with Python?

Non è richiesta alcuna esperienza precedente. Learn AI with Python su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Containerizzazione dei modelli ML con Docker»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Learn AI with Python?

Sì. Ogni lezione Learn AI with Python include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Containerizzazione dei modelli ML con Docker
  2. Deployment nel cloud: AWS SageMaker
  3. Serving ad alte prestazioni con Triton Inference Server
  4. Scalabilità e auto-scaling degli endpoint dei modelli
← Torna a Learn AI with Python