8. Skip to content

8. Aprender a programar con PyTorch: estudio de la librería con la que programar los modelos neuronales#

La librería PyTorch es junto a TensorFlow y JAX una de las librerías más populares para programar modelos neuronales a bajo nivel. Dado que nuestro objetivo es comprender y modificar el código del transformer, es necesario que aprendas a usar PyTorch. Como la librería está escrita en Python, es necesario que aprendas también este lenguaje de programación.

Nota

Esta página es parte de la serie "Un recorrido peso a peso por el transformer", donde se presenta una guía para aprender cómo funcionan las redes neuronales que procesan textos y cómo se programan. Es también posible que hayas llegado a ella desde otra fuente (por ejemplo, una asignatura específica) que plantee otra forma diferente de utilizar estos contenidos. En ese caso, usa las recomendaciones y la planificación que te ofrezca esa fuente.

8.1 Python#

Python es a día de hoy el lenguaje de programación más usado en el mundo del procesamiento del lenguaje natural. Para usar PyTorch necesitarás conocer los elementos fundamentales del lenguaje Python. Se trata de un lenguaje dinámico, pero probablemente no se parecerá mucho a otros lenguajes de este tipo que conozcas. Pese a ello, no tiene sentido que aprendas Python desde cero, ya que muchos elementos básicos del lenguaje (bucles, funciones, clases, etc.) no se alejan mucho de los que ya conoces para otros lenguajes.

Los cursos de aprendizaje automático suelen incluir una introducción a Python para programadores experimentados en otros lenguajes. En este área es también muy frecuente usar librerías para cálculo científico como NumPy. Aunque nosotros usaremos librerías más específicas como PyTorch, esta comparte muchos principios de diseño con NumPy, por lo que es recomendable que aprendas algo de NumPy también.

Sigue estos tutoriales. Usa más de una fuente para así aprender más:

  • El tutorial "Python Numpy Tutorial (with Jupyter and Colab)" del curso "CS231n: Deep Learning for Computer Vision" de Stanford University. Observa que en la parte superior aparece una insignia que dice "Open in Colab". Clicando en ella puedes abrir un entorno de ejecución basado en Python en la nube desde la que ejecutar el código de ejemplo como un cuaderno de Python.
  • Las diapositivas "Python Review Session" del curso "CS224n: Natural Language Processing with Deep Learning" de Stanford University. También tienes un cuaderno de Python que puedes descargar y subir a Google Colab.

Cuando necesites profundizar o entender ciertas estructuras de Python, puedes consultar la documentación oficial de Python.

8.2 Cuadernos#

El uso de los cuadernos de Jupyter y de Google Colab se explica en los apartados 20.1 ("Using Jupyter Notebooks" ) y 20.4 ("Using Google Colab" ) del libro de "Dive into Deep Learning".

8.3 PyTorch#

PyTorch no es en principio una librería sencilla de entender. Al estudiar de primeras el código de un modelo neuronal programado en PyTorch, es posible que no entiendas ciertas partes o que no seas capaz de deducir todo el comportamiento implícito subyacente. Es por ello que un esfuerzo inicial de estudio de la librería es necesario.

Puedes hacerte una idea somera de los fundamentos de PyTorch siguiendo la breve introducción a PyTorch que se incluye como parte del libro "Dive into Deep Learning"; observa que puedes ver los ejemplos de PyTorch en la página web, pero también abrir un cuaderno en Colab o en SageMaker Studio Lab. Sin embargo, como se ha mencionado, necesitarás ahondar más en los entresijos de la librería: sigue para ello el tutorial en vídeo de más de 2 horas de esta playlist oficial de PyTorch. Mírate al menos los 4 primeros vídeos ("Introduction to PyTorch", "Introduction to PyTorch Tensors", "The Fundamentals of Autograd" y "Building Models with PyTorch").

Como complemento a lo anterior, puedes consultar también el tutorial oficial de PyTorch. Asegúrate de seleccionar tu versión de PyTorch en la esquina superior izquierda. Es especialmente didáctico este corto tutorial con ejemplos sencillos de ajuste de la función \(a +bx + cx^2 + dx^3\). Finalmente, cuando necesites profundizar en algún elemento particular de PyTorch, puedes recurrir a la documentación oficial de PyTorch.

8.4 Depuración#

Depurar es una de las mejores maneras de comprender todos los secretos del código que estás estudiando. Es importante que te sientas cómodo con el proceso de depuración. A continuación, se dan algunos consejos para depurar código en Python usando el entorno de VS Code, pero instrucciones similares son válidas para otros entornos de desarrollo.

Para depurar el fichero actual, coloca uno o más puntos de interrupción en el código clicando en la pequeña columna que hay a la izquierda de los números de línea hasta que aparezca una marca roja. Luego, asegúrate de que tienes el entorno de ejecución de Python adecuado seleccionado en la barra inferior y ejecuta Run/Start Debugging (F5) en el menú. El código se ejecutará hasta que se alcance el punto de interrupción. Puedes hacer que el código se ejecute paso a paso usando Run/Step Over o Run/Step Into, pero ganarás mucho tiempo si te aprendes los atajos de teclado correspondientes (F10y F11, respectivamente). Además de inspeccionar las variables desde la interfaz, te será muy útil acceder a la paleta de órdenes (Help/Show All Commandso bien Ctrl+Shift+P) y mostrar el terminal de depuración tecleando Debug Console. En este terminal puedes ejecutar cualquier código en Python para, por ejemplo:

  • ver el tipo de una variable: type(learning_rate)
  • ver el contenido de un tensor: x
  • ver la forma de un tensor: x.shape
  • ver la salida de una función ya definida escribiendo líneas como sigmoid(torch.tensor([-10.2,0.1,10.2])) o torch.logical_not(mask[:10])

Si el tensor es grande, suele ser suficiente para nuestros propósitos ver solo unos cuantos de sus elementos, lo que puedes hacer mediante indexación como en x[:10]. Para que sistemáticamente PyTorch muestre solo los primeros elementos de cada dimensión y use una cantidad limitada de decimales puedes hacer una sola vez:

torch.set_printoptions(precision=4, edgeitems= 4, threshold=30)

8.5 Más detalles sobre PyTorch#

La página de apuntes sobre PyTorch recoge algunos detalles adicionales sobre la librería necesarios para entender las implementaciones de modelos que vamos a estudiar.