Contenido del curso

Redes neuronales con PyTorch

Inferencia con torch.compile en PyTorch 2.0

Resumen

Hacer inferencia con un modelo entrenado en PyTorch se vuelve mucho más rápido cuando aprovechas torch.compile, una función introducida en PyTorch 2.0 que optimiza la ejecución del modelo. Aquí verás cómo aplicarla en un clasificador de texto entrenado con DBpedia y cómo traducir las predicciones a etiquetas legibles.

¿Cómo se mapean las etiquetas numéricas a texto legible?

Antes de predecir, necesitas convertir los números que devuelve el modelo en palabras que puedas interpretar.

Para eso se construye un diccionario llamado dbpedia_label que mapea los enteros del 1 al 14 hacia categorías como company, artist o athlete. Estas etiquetas las puedes encontrar en la página oficial del dataset o en repositorios públicos que reutilicen el modelo [01:00].

¿Por qué se suma 1 al índice de la predicción? Porque internamente las clases se manejan del 0 al 13, pero las etiquetas oficiales del dataset van del 1 al 14. Sumar 1 alinea ambos formatos.

¿Qué hace el text pipeline en la inferencia?

El text pipeline recibe una oración y devuelve un tensor de enteros que representa el mapeo de cada token al vocabulario. Sin este paso, el modelo no puede leer texto crudo, solo tensores numéricos.

¿Cómo construir la función predict para inferencia?

La función predict recibe dos argumentos: el texto a clasificar y el text pipeline que lo transforma en tensor.

Dentro de la función, el flujo es así:

  • Desactivas el cálculo del gradiente, porque ya no estás entrenando.
  • Conviertes el texto procesado por el pipeline en un tensor de PyTorch.
  • Pasas ese tensor al modelo optimizado para obtener la salida.
  • Aplicas argmax sobre las filas para quedarte con la clase de mayor probabilidad.
  • Extraes el valor con .item() para sacarlo del formato tensor y le sumas 1.

Esa salida final es un número entero que usas como llave en el diccionario dbpedia_label.

¿Qué es opt_mode y por qué se usa esa convención?

opt_mode significa optimized model. Es una convención de nombre que se usa cuando aplicas torch.compile para acelerar entrenamiento o inferencia [02:30]. Mantener esta nomenclatura ayuda a distinguir el modelo original del modelo compilado dentro del mismo script.

¿Qué modos de torch.compile conviene elegir?

La función torch.compile recibe el modelo y un argumento mode que define la estrategia de optimización. Cada modo tiene un balance distinto entre tiempo de compilación, velocidad de ejecución y uso de memoria.

Estos son los dos modos relevantes para este flujo:

  • reduce-overhead: recomendado para modelos relativamente pequeños. Reduce los costos computacionales y acelera la inferencia, aunque incrementa ligeramente el uso de memoria. La compilación es rápida.
  • max-autotune: busca la configuración más eficiente posible, lo que da una ejecución más veloz, pero la compilación tarda más. Es la opción para modelos más grandes y no consume memoria extra.

En este caso se usa reduce-overhead porque el clasificador es ligero y conviene priorizar una compilación ágil.

¿Qué es torch.compile? Es una función de PyTorch 2.0 que toma un modelo y lo recompila para ejecutarse más rápido. Aplica optimizaciones automáticas según el modo que elijas, sin que tengas que reescribir tu arquitectura.

¿Por qué pasar el modelo a CPU para inferencia?

Entrenar exige GPU por el costo computacional, pero predecir un solo ejemplo no lo necesita. Mover el modelo a CPU con model.to('cpu') reduce el costo de infraestructura sin afectar el resultado [05:40]. No es obligatorio, pero sí recomendado.

¿Cómo se ejecuta una predicción real con el modelo optimizado?

Dentro de predict, la salida se calcula así: opt_mode(text, torch.tensor([0])). Ese segundo argumento es el offset, que en clasificación de un solo texto siempre arranca en cero.

El resultado se procesa con output.argmax(1).item() + 1 para obtener la etiqueta numérica, y luego se consulta dbpedia_label[indice] para imprimir la categoría en inglés.

Al probar con un ejemplo que describe un pueblo llamado Nizari en la India, el modelo devuelve la etiqueta número 9, que corresponde a village [07:20]. La predicción coincide con el contenido real del texto, lo que confirma que el clasificador generaliza correctamente.

¿Qué hacer si aparece un error con el nombre del modo?

Un error común al usar torch.compile es escribir reduce_overhead con guion bajo en lugar de reduce-overhead con guion intermedio. PyTorch no reconoce el modo y lanza una excepción. Revisa siempre la sintaxis exacta de los modos disponibles.

¿Cómo mejorar los resultados del modelo?

Si notas que las predicciones fallan en ciertos casos, tienes varias palancas para experimentar:

  • Aumenta el número de epochs durante el entrenamiento.
  • Incrementa el volumen de ejemplos del dataset.
  • Modifica la arquitectura cambiando el número de capas del modelo.
  • Prueba con textos de distintas categorías para detectar dónde falla.

Cuéntame en los comentarios qué ajustes vas a probar primero y qué resultados obtienes con tu propio clasificador.