Contenerización de modelos de ML con Docker
Dockerfile multietapa, imágenes base con CUDA, COPY de artefactos del modelo y endpoints de comprobación de estado.
Contenerización de modelos de ML con Docker es una lección gratuita de Learn AI with Python en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn AI with Python, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn AI with Python incluye 4 lecciones en total.
Por qué contenerizar modelos de ML
Los modelos de aprendizaje automático dependen de una versión específica de Python, de bibliotecas del sistema y de versiones fijadas de los paquetes. Docker empaqueta todo esto en una única imagen inmutable, para que el modelo se ejecute de forma idéntica en un portátil, un ejecutor de CI y un clúster de producción.
En ML, el mayor problema es la deriva de dependencias: un modelo entrenado con numpy 1.24 puede comportarse de forma incorrecta sin avisar al ejecutarse con numpy 2.0. Un contenedor congela esas versiones.
La imagen ingenua de una sola etapa
El primer intento instala todo en una sola etapa. Funciona, pero incluye herramientas de compilación (compiladores, cachés y encabezados de desarrollo) en la imagen final, lo que la hace más grande y amplía su superficie de ataque.
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "serve.py"]Compilaciones de varias etapas: la idea
Una compilación de varias etapas utiliza una etapa para compilar e instalar las dependencias (el builder) y después copia únicamente los artefactos terminados a una etapa final limpia. Las herramientas exclusivas de compilación nunca llegan a producción.
- Etapa builder: imagen base completa, ejecuta
pip install - Etapa final: imagen base ligera, copia los paquetes instalados
Etapa builder: pip install
El builder instala los paquetes en un prefijo conocido para que sea fácil copiarlos. Usar --user los coloca en /root/.local, un único directorio que podemos copiar más adelante.
FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txtEtapa final ligera
La etapa final parte de python:3.11-slim y copia los paquetes instalados desde el builder. La imagen ligera omite las cadenas de herramientas de compilación, lo que reduce el tamaño de la imagen en cientos de megabytes.
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .Copiar los pesos del modelo
Los pesos de modelos grandes deben copiarse en su propia capa para que Docker pueda almacenarlos en la caché. Si solo cambia el código, la capa de pesos se reutiliza y las compilaciones son rápidas.
COPY model/ /app/model/
COPY src/ /app/src/EXPOSE del puerto de servicio
Los servidores de inferencia (FastAPI, Triton, TorchServe) escuchan en un puerto. EXPOSE 8000 documenta que el contenedor ofrece el servicio en el puerto 8000. No publica el puerto por sí solo; aún debe asignarlo con -p 8000:8000 al ejecutar el contenedor.
EXPOSE 8000
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]Conceptos básicos de HEALTHCHECK
Los orquestadores necesitan saber si el servidor del modelo está activo. Una instrucción HEALTHCHECK ejecuta un comando a intervalos; una salida distinta de cero marca el contenedor como no saludable para que pueda reiniciarse o retirarse del balanceador de carga.
HEALTHCHECK con curl
Un patrón habitual consiste en consultar un endpoint ligero como /health. curl -f falla (con una salida distinta de cero) ante cualquier error HTTP, que es exactamente lo que espera HEALTHCHECK.
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1Un endpoint de salud mínimo
La aplicación que ofrece el servicio debe exponer un endpoint rápido que confirme que el modelo está cargado, sin ejecutar una inferencia 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}El Dockerfile completo
Al unir todos los elementos: una etapa de compilación instala las dependencias, una etapa final ligera las copia junto con el modelo, expone el puerto 8000 y declara una comprobación de salud.
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"]Comprobación rápida
Compruebe cuánto entiende de las compilaciones de varias etapas.
Resumen
Ha aprendido a contenerizar un modelo de ML con un Dockerfile listo para producción:
- Compilación de varias etapas: la etapa de compilación instala las dependencias y la etapa final ligera las copia
- EXPOSE 8000 documenta el puerto de servicio
- HEALTHCHECK CMD curl permite a los orquestadores detectar contenedores inactivos
- Copiar los pesos en su propia capa almacenable en caché
A continuación, implementará un modelo contenerizado en un servicio de nube administrado.
Aprende Python con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 53
- Lecciones
- 225
Preguntas frecuentes
¿La lección «Contenerización de modelos de ML con Docker» es gratis?
Sí — el texto completo de «Contenerización de modelos de ML con Docker» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn AI with Python, actualiza a CoddyKit PRO. El curso de Learn AI with Python incluye 4 lecciones en total.
¿Qué aprenderé en «Contenerización de modelos de ML con Docker»?
Dockerfile multietapa, imágenes base con CUDA, COPY de artefactos del modelo y endpoints de comprobación de estado. Practicas Learn AI with Python con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn AI with Python?
No se requiere experiencia previa. Learn AI with Python en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Contenerización de modelos de ML con Docker»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn AI with Python?
Sí. Cada lección de Learn AI with Python incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Contenerización de modelos de ML con Docker
- Despliegue en la nube: AWS SageMaker
- Servicio de alto rendimiento con Triton Inference Server
- Escalado y autoescalado de endpoints de modelos