Skip to content

Latest commit

 

History

History
123 lines (84 loc) · 3.3 KB

File metadata and controls

123 lines (84 loc) · 3.3 KB

Pistachio MLOps

Clasificador de pistachos (Kirmizi vs Siirt) usando Deep Learning con PyTorch Lightning y MLOps.

Dataset

Pistachio Image Dataset - 2 clases (Kirmizi_Pistachio, Siirt_Pistachio). Se descarga automaticamente via kagglehub.

Configuracion

Editar config/configuracion.yaml (solo hiperparametros del modelo):

  • model_type: cnn_batchnorm o cnn_dropout
  • semilla: semilla para reproducibilidad
  • learning_rate, batch_size, max_epochs, patience
  • dropout_rate
  • wandb_project: nombre del proyecto en W&B

Ejecucion local

pip install -r requirements.txt

# Antes de usar W&B, hacer login una vez (o pasar --no-wandb)
wandb login

# Entrenamiento simple
python src/main.py configuracion.yaml

# Sin W&B (offline)
python src/main.py configuracion.yaml --no-wandb

# Smoke test (10% datos)
python src/main.py configuracion.yaml --no-wandb --data-fraction 0.1

# W&B Sweep (grid search)
python src/main.py configuracion.yaml --sweep

# Reanudar un sweep existente
python src/main.py configuracion.yaml --sweep-id <ID>

# Limitar ejecuciones del sweep
python src/main.py configuracion.yaml --sweep --count 5

# API de inferencia (desde la raiz del proyecto)
uvicorn src.api_inferencia:app --host 0.0.0.0 --port 8000

# Tests
pytest tests/ -v

Docker

docker build -t pistachio-mlops .

# Entrenamiento (auto --no-wandb si no hay WANDB_API_KEY)
docker run --rm --gpus all pistachio-mlops

# Entrenamiento sin GPU
docker run --rm pistachio-mlops

# Entrenamiento con W&B
docker run --rm -e WANDB_API_KEY=tu_key pistachio-mlops

# Smoke test (10% datos)
docker run --rm pistachio-mlops --data-fraction 0.1

# API de inferencia (el modelo debe estar en models/ al hacer build)
# El puerto interno se puede cambiar con -e PORT=9000
docker run --rm -p 8000:8000 -e MODE=api pistachio-mlops

API Endpoints

  • GET / - Health check
  • POST /predict - Clasifica una imagen de pistacho (multipart/form-data, campo file)

Ejemplo:

curl -X POST http://localhost:8000/predict -F "file=@pistacho.jpg"

Respuesta:

{
  "class": "Kirmizi_Pistachio",
  "confidence": 0.92,
  "probabilities": { "Kirmizi_Pistachio": 0.92, "Siirt_Pistachio": 0.08 }
}

W&B Report

Mejor run individual

Modelo LR Batch Test Acc Test F1
cnn_batchnorm 0.001 64 0.9317 0.9294

Resultados del sweep

LR Batch Modelo Test Acc Test F1
0.001 32 cnn_batchnorm 0.931 0.929
0.001 32 cnn_dropout 0.891 0.888
0.01 32 cnn_batchnorm 0.929 0.926
0.01 32 cnn_dropout 0.599 0.375
0.001 64 cnn_batchnorm 0.922 0.920
0.001 64 cnn_dropout 0.916 0.914
0.01 64 cnn_batchnorm 0.925 0.923
0.01 64 cnn_dropout 0.599 0.375

Conclusion: BatchNorm supera significativamente a Dropout. LR=0.01 con Dropout colapsa (predice solo una clase).

Autor

Adrià Farrés