El despliegue de modelos es una etapa crucial en el ciclo de vida de un modelo de aprendizaje automático. Una vez que has entrenado y validado tu modelo, necesitas ponerlo en producción para que pueda ser utilizado en aplicaciones del mundo real. En esta sección, aprenderás cómo preparar y desplegar modelos PyTorch.

Contenido

Exportación del Modelo

Antes de desplegar un modelo, es necesario exportarlo. PyTorch ofrece varias formas de exportar modelos, siendo TorchScript una de las más comunes.

Guardar el Modelo

Primero, guardemos el modelo entrenado. Supongamos que tienes un modelo entrenado llamado model.

import torch

# Guardar el modelo
torch.save(model.state_dict(), 'model.pth')

Cargar el Modelo

Para cargar el modelo guardado, necesitas definir la arquitectura del modelo y luego cargar los pesos.

# Definir la arquitectura del modelo
model = MyModel()
model.load_state_dict(torch.load('model.pth'))
model.eval()

Despliegue con TorchScript

TorchScript es una forma de convertir modelos PyTorch en un formato que puede ser ejecutado en un entorno de producción independiente de Python.

Convertir el Modelo a TorchScript

Puedes convertir tu modelo a TorchScript usando torch.jit.script o torch.jit.trace.

# Usar torch.jit.trace para convertir el modelo
example_input = torch.rand(1, 3, 224, 224)  # Ejemplo de entrada
traced_script_module = torch.jit.trace(model, example_input)

# Guardar el modelo TorchScript
traced_script_module.save("model_scripted.pt")

Cargar y Ejecutar el Modelo TorchScript

# Cargar el modelo TorchScript
scripted_model = torch.jit.load("model_scripted.pt")

# Ejecutar el modelo
output = scripted_model(example_input)

Despliegue en Servidores Web

Para desplegar un modelo en un servidor web, puedes usar frameworks como Flask o FastAPI.

Despliegue con Flask

from flask import Flask, request, jsonify
import torch

app = Flask(__name__)

# Cargar el modelo TorchScript
model = torch.jit.load("model_scripted.pt")
model.eval()

@app.route('/predict', methods=['POST'])
def predict():
    data = request.json
    input_tensor = torch.tensor(data['input'])
    with torch.no_grad():
        output = model(input_tensor)
    return jsonify(output.tolist())

if __name__ == '__main__':
    app.run()

Despliegue en Dispositivos Móviles

PyTorch Mobile permite desplegar modelos en dispositivos móviles. Aquí hay un resumen del proceso:

  1. Convertir el modelo a TorchScript (ya lo hicimos anteriormente).
  2. Optimizar el modelo para móviles.
import torch.utils.mobile_optimizer as mobile_optimizer

# Optimizar el modelo
optimized_model = mobile_optimizer.optimize_for_mobile(traced_script_module)
optimized_model.save("model_optimized.pt")
  1. Integrar el modelo en una aplicación móvil usando PyTorch Mobile en Android o iOS.

Ejercicio Práctico

Ejercicio: Desplegar un Modelo en un Servidor Web

  1. Entrena un modelo simple (puedes usar cualquier dataset y arquitectura).
  2. Convierte el modelo a TorchScript.
  3. Despliega el modelo en un servidor web usando Flask.
  4. Envía una solicitud POST al servidor con datos de entrada y recibe la predicción.

Solución

# Paso 1: Entrenar un modelo simple (omitir por brevedad)

# Paso 2: Convertir el modelo a TorchScript
example_input = torch.rand(1, 3, 224, 224)
traced_script_module = torch.jit.trace(model, example_input)
traced_script_module.save("model_scripted.pt")

# Paso 3: Desplegar el modelo en un servidor web usando Flask
from flask import Flask, request, jsonify
import torch

app = Flask(__name__)
model = torch.jit.load("model_scripted.pt")
model.eval()

@app.route('/predict', methods=['POST'])
def predict():
    data = request.json
    input_tensor = torch.tensor(data['input'])
    with torch.no_grad():
        output = model(input_tensor)
    return jsonify(output.tolist())

if __name__ == '__main__':
    app.run()

# Paso 4: Enviar una solicitud POST al servidor
# Puedes usar herramientas como Postman o curl para enviar la solicitud.

Conclusión

En esta sección, aprendiste cómo exportar y desplegar modelos PyTorch utilizando TorchScript, así como desplegarlos en servidores web y dispositivos móviles. El despliegue es una etapa crucial que permite que los modelos de aprendizaje automático sean utilizados en aplicaciones del mundo real. Con estos conocimientos, estás preparado para llevar tus modelos desde el desarrollo hasta la producción.

© Copyright 2024. Todos los derechos reservados