En aquest tema, aprendrem com desplegar models PyTorch en entorns de producció. El desplegament és una part crucial del cicle de vida del desenvolupament de models de machine learning, ja que permet utilitzar els models entrenats per fer prediccions en temps real o per processar grans volums de dades.

Objectius del Tema

  • Entendre els conceptes bàsics del desplegament de models.
  • Aprendre a exportar models PyTorch.
  • Conèixer les diferents opcions de desplegament disponibles.
  • Implementar un exemple pràctic de desplegament.

Conceptes Bàsics del Desplegament de Models

Per què és important el desplegament?

El desplegament permet que els models de machine learning siguin accessibles per a aplicacions reals. Això pot incloure:

  • Prediccions en temps real en aplicacions web o mòbils.
  • Processament de dades en lots per a anàlisis posteriors.
  • Integració amb altres sistemes empresarials.

Opcions de Desplegament

Hi ha diverses maneres de desplegar models PyTorch:

  1. Exportació a TorchScript: Permet convertir models PyTorch en un format estàtic que es pot executar en entorns de producció.
  2. Servei de Models amb Flask o FastAPI: Crear una API RESTful per servir el model.
  3. Desplegament en Plataformes de Núvol: Utilitzar serveis com AWS SageMaker, Google AI Platform, o Azure Machine Learning.
  4. Contenidors Docker: Empaquetar el model i el seu entorn en un contenidor Docker per a una fàcil distribució.

Exportació de Models PyTorch

Exportació a TorchScript

TorchScript és una manera de convertir models PyTorch en un format que es pot executar en entorns de producció. Hi ha dues maneres principals de convertir un model a TorchScript: traç i script.

Exemple de Traç

import torch
import torchvision.models as models

# Carregar un model preentrenat
model = models.resnet18(pretrained=True)
model.eval()

# Crear un tensor d'exemple
example_input = torch.rand(1, 3, 224, 224)

# Convertir el model a TorchScript mitjançant traç
traced_script_module = torch.jit.trace(model, example_input)

# Guardar el model traçat
traced_script_module.save("resnet18_traced.pt")

Exemple de Script

import torch

class MyModule(torch.nn.Module):
    def __init__(self):
        super(MyModule, self).__init__()
        self.linear = torch.nn.Linear(2, 2)

    def forward(self, x):
        return self.linear(x)

# Crear una instància del model
model = MyModule()
model.eval()

# Convertir el model a TorchScript mitjançant script
scripted_module = torch.jit.script(model)

# Guardar el model escriptat
scripted_module.save("mymodule_scripted.pt")

Servei de Models amb Flask

Crear una API RESTful amb Flask

Flask és un microframework per a Python que permet crear aplicacions web de manera senzilla. A continuació, es mostra com crear una API RESTful per servir un model PyTorch.

Instal·lació de Flask

pip install Flask

Exemple de Servei de Model

from flask import Flask, request, jsonify
import torch
import torchvision.models as models
import torchvision.transforms as transforms
from PIL import Image
import io

app = Flask(__name__)

# Carregar el model
model = models.resnet18(pretrained=True)
model.eval()

# Definir les transformacions d'imatge
transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])

@app.route('/predict', methods=['POST'])
def predict():
    if 'file' not in request.files:
        return jsonify({'error': 'No file provided'}), 400

    file = request.files['file']
    img = Image.open(io.BytesIO(file.read()))
    img = transform(img).unsqueeze(0)

    with torch.no_grad():
        output = model(img)
        _, predicted = torch.max(output, 1)

    return jsonify({'prediction': predicted.item()})

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

Desplegament en Plataformes de Núvol

AWS SageMaker

AWS SageMaker és un servei complet que permet construir, entrenar i desplegar models de machine learning a escala. A continuació es mostra un exemple bàsic de com desplegar un model PyTorch a SageMaker.

Instal·lació del SDK de SageMaker

pip install sagemaker

Exemple de Desplegament

import sagemaker
from sagemaker.pytorch import PyTorchModel

# Definir el bucket S3 i el camí del model
s3_bucket = 'my-s3-bucket'
model_path = 's3://{}/model.tar.gz'.format(s3_bucket)

# Crear un objecte PyTorchModel
pytorch_model = PyTorchModel(model_data=model_path,
                             role='SageMakerRole',
                             entry_point='inference.py',
                             framework_version='1.8.0',
                             py_version='py3')

# Desplegar el model
predictor = pytorch_model.deploy(instance_type='ml.m4.xlarge', initial_instance_count=1)

# Fer una predicció
result = predictor.predict(data)
print(result)

Resum

En aquesta secció, hem après els conceptes bàsics del desplegament de models PyTorch, incloent-hi com exportar models a TorchScript, crear una API RESTful amb Flask, i desplegar models en plataformes de núvol com AWS SageMaker. El desplegament és una part essencial del cicle de vida del desenvolupament de models de machine learning, ja que permet utilitzar els models en aplicacions reals.

En el següent tema, explorarem com optimitzar el rendiment dels models PyTorch per assegurar-nos que funcionin de manera eficient en entorns de producció.

© Copyright 2024. Tots els drets reservats