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:
- Exportació a TorchScript: Permet convertir models PyTorch en un format estàtic que es pot executar en entorns de producció.
- Servei de Models amb Flask o FastAPI: Crear una API RESTful per servir el model.
- Desplegament en Plataformes de Núvol: Utilitzar serveis com AWS SageMaker, Google AI Platform, o Azure Machine Learning.
- 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
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
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ó.
PyTorch: De Principiant a Avançat
Mòdul 1: Introducció a PyTorch
- Què és PyTorch?
- Configuració de l'Entorn
- Operacions Bàsiques amb Tensor
- Autograd: Diferenciació Automàtica
Mòdul 2: Construcció de Xarxes Neuronals
- Introducció a les Xarxes Neuronals
- Creació d'una Xarxa Neuronal Simple
- Funcions d'Activació
- Funcions de Pèrdua i Optimització
Mòdul 3: Entrenament de Xarxes Neuronals
- Càrrega i Preprocessament de Dades
- Bucle d'Entrenament
- Validació i Prova
- Desament i Càrrega de Models
Mòdul 4: Xarxes Neuronals Convolucionals (CNNs)
- Introducció a les CNNs
- Construcció d'una CNN des de Zero
- Aprenentatge per Transferència amb Models Preentrenats
- Ajust Fi de les CNNs
Mòdul 5: Xarxes Neuronals Recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN des de Zero
- Xarxes de Memòria a Llarg i Curt Termini (LSTM)
- Unitats Recurrents Gated (GRUs)
Mòdul 6: Temes Avançats
- Xarxes Generatives Adversàries (GANs)
- Aprenentatge per Reforç amb PyTorch
- Desplegament de Models PyTorch
- Optimització del Rendiment