¿Qué es PyTorch?

Autores

Dave Bergmann

Senior Staff Writer, AI Models

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

¿Qué es PyTorch?

PyTorch es un marco de deep learning de código abierto basado en software que se utiliza para crear redes neuronales, combinando la biblioteca de machine learning (ML) de Torch con una API de alto nivel basada en Python. Su flexibilidad y facilidad de uso, entre otros beneficios, lo han convertido en el marco de ML líder para las comunidades académicas y de investigación.

PyTorch admite una amplia variedad de arquitecturas de red neuronal, desde algoritmos de regresión lineal simple hasta redes neuronales convolucionales complejas y modelos de transformadores generativos utilizados para tareas como visión artificial y procesamiento del lenguaje natural (PLN). Basado en el lenguaje de programación Python, ampliamente conocido, y ofreciendo amplias bibliotecas de modelos preconfigurados (e incluso preentrenados), PyTorch permite a los científicos de datos crear y ejecutar sofisticadas redes de deep learning, al tiempo que minimiza el tiempo y la mano de obra dedicados al código y la estructura matemática.

PyTorch también permite a los científicos de datos ejecutar y probar partes del código en tiempo real, en lugar de esperar a que se implemente todo el código, lo que, para grandes modelos de deep learning, puede llevar mucho tiempo. Esto hace que PyTorch sea una excelente plataforma para la creación rápida de prototipos y también agiliza enormemente el proceso de depuración.

Originalmente desarrollado por Facebook AI Research (ahora Meta), PyTorch se convirtió en código abierto en 2017 y ha estado bajo la administración de la PyTorch Foundation (que forma parte de la Fundación Linux más grande) desde 2022. La fundación sirve como un espacio neutral para que la comunidad de deep learning colabore en un mayor desarrollo del ecosistema de PyTorch.

En 2023, IBM se convirtió en miembro principal de la PyTorch Foundation, habiendo colaborado ya en dos proyectos principales: permitiendo una formación más eficiente de modelos fundacionales de IA flexibles con miles de millones de parámetros y haciendo que la formación de IA sea considerablemente más rentable. El portfolio de IBM watsonx utiliza PyTorch para proporcionar una pila de software de nivel empresarial para los modelos fundacionales de inteligencia artificial, desde la formación integral hasta el ajuste fino de los modelos.

Las últimas tendencias en IA, presentadas por expertos

Obtenga conocimientos organizados sobre las noticias más importantes e intrigantes de la IA. Suscríbase a nuestro boletín semanal Think. Consulte la Declaración de privacidad de IBM.

¡Gracias! Está suscrito.

Su suscripción se enviará en inglés. Encontrará un enlace para darse de baja en cada boletín. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.

¿Cómo funciona PyTorch?

La estructura matemática y de programación de PyTorch simplifica y agiliza los flujos de trabajo de aprendizaje automático, sin limitar la complejidad o el rendimiento de las redes neuronales profundas.

Python

Python es un lenguaje de programación de propósito general y alto nivel ampliamente utilizado en la ciencia de datos, lo que lo convierte en una opción intuitiva para los científicos de datos que amplían su trabajo al modelado activo de redes de deep learning. La sencilla sintaxis de Python es fácil de leer, se tarda relativamente poco tiempo en aprenderla y puede ejecutarse en cualquier sistema operativo, incluidos Windows, macOS, Linux o Unix. Python ha sido el segundo lenguaje de programación más utilizado en GitHub durante más de tres años, habiendo superado a Java en 2019. Sigue creciendo en popularidad, con un aumento del 22,5 por ciento en 20221.

 Esta flexibilidad y sencillez han ayudado a fomentar una sólida comunidad en línea de desarrolladores de Python, que colaboran en una amplia gama de bibliotecas y API de Python, como Numerical Python (NumPy) para operaciones matemáticas, Pandas para la manipulación de datos o matplotlib para la visualización de datos, y recursos educativos. Esta comunidad también ha producido un gran volumen de bibliotecas de Pytorch que reducen la monotonía y las conjeturas de codificación para el machine learning, liberando a desarrolladores y científicos de datos que se centren en la innovación en lugar de rotar la escritura de tareas.

Tensores

En cualquier algoritmo de aprendizaje automático, incluso en los que se aplican a información aparentemente no numérica, como sonidos o imágenes, los datos deben representarse numéricamente. En PyTorch, esto se logra a través de tensores, que sirven como unidades fundamentales de datos utilizadas para el cálculo en la plataforma.

En el contexto del aprendizaje automático, un tensor es una matriz multidimensional de números que funciona como un dispositivo de contabilidad matemático. Lingüísticamente hablando, "tensor" funciona como un término genérico que incluye algunas entidades matemáticas más conocidas:

  • Un escalar es un tensor de dimensión cero, que contiene un solo número.

  • Un vector es un tensor unidimensional que contiene varios escalares del mismo tipo. Una tupla es un tensor unidimensional que contiene diferentes tipos de datos.

  • Una matriz es un tensor bidimensional que contiene varios vectores del mismo tipo.

  • Los sensores con tres o más dimensiones, como los tensores tridimensionales utilizados para representar imágenes RGB en algoritmos de visión artificial, se denominan colectivamente tensores N-dimensionales.

Los tensores de PyTorch funcionan de manera similar a los ndarrays que se usan en NumPy, pero a diferencia de los ndarrays, que solo se pueden ejecutar en unidades centrales de procesamiento (CPU), los tensores también se pueden ejecutar en unidades de procesamiento de gráficos (GPU). Las GPU permiten un cálculo mucho más rápido que las CPU, lo que supone una gran ventaja dado que los volúmenes masivos de datos y el procesamiento paralelo son típicos del deep learning.

Además de codificar las entradas y salidas de un modelo, los tensores PyTorch también codifican los parámetros del modelo: los pesos, sesgos y gradientes que se "aprenden" en el aprendizaje automático. Esta propiedad de los tensores permite la diferenciación automática, que es una de las características más importantes de PyTorch.

Módulos

PyTorch utiliza módulos como bloques de construcción de modelos de aprendizaje profundo, lo que permite la construcción rápida y sencilla de redes neuronales sin el tedioso trabajo de codificar manualmente cada algoritmo.

 Los módulos pueden contener y, a menudo contienen, otros módulos anidados. Además de permitir la creación de redes neuronales multicapa más elaboradas, esto también permite que estos complejos modelos de deep learning se guarden fácilmente como un único módulo con nombre y se transfieran entre diferentes máquinas, CPU o GPU. Los modelos PyTorch incluso se pueden ejecutar en entornos que no sean Python, como C++, utilizando Torchscript, lo que ayuda a cerrar la brecha entre los prototipos de investigación y la implementación de producción.

 En términos generales, hay tres clases principales de módulos que se utilizan para crear y optimizar modelos de deep learning en PyTorch:

  • Los módulos nn se implementan como capas de una red neuronal. El paquete torch.nn contiene una gran biblioteca de módulos que realizan operaciones comunes como convoluciones, agrupación y regresión. Por ejemplo, torch.nn.Linear(n,m) llama a un algoritmo de regresión lineal con n entradas y m salidas (cuyas entradas y parámetros iniciales se establecen en las siguientes líneas de código).
     

  • El módulo autograd proporciona una forma sencilla de calcular automáticamente los gradientes, utilizado para optimizar los parámetros del modelo a través del descenso del gradiente, para cualquier función operada dentro de una red neuronal. Añadir cualquier tensor con requires_grad=True indica a autograd que cada operación en ese tensor debe ser rastreada, lo que permite la diferenciación automática.
     

  • Los módulos optim aplican algoritmos de optimización a esos gradientes. Torch.optim proporciona módulos para varios métodos de optimización, como el descenso estocástico del gradiente (SGD) o la propagación cuadrática media (RMSprop), para adaptarse a necesidades de optimización específicas.

Gráficos de cálculo dinámico

Los gráficos de cálculo dinámico (DCG) son la forma en que se representan los modelos de deep learning en PyTorch. En términos abstractos, los gráficos de computación mapean el flujo de datos entre las diferentes operaciones en un sistema matemático: en el contexto del deep learning, esencialmente traducen el código de una red neuronal en un diagrama de flujo que indica las operaciones realizadas en cada nodo y las dependencias entre las diferentes capas de la red, la disposición de pasos y secuencias que transforman los datos de entrada en datos de salida.

Lo que diferencia a los gráficos de cálculo dinámico (como los que se usan en PyTorch) de los gráficos de cálculo estáticos (como los que se usan en TensorFlow) es que los DCG aplazan la especificación exacta de los cálculos y las relaciones entre ellos hasta el tiempo de ejecución. En otras palabras, mientras que un gráfico de cálculo estático requiere que la arquitectura de toda la red neuronal esté completamente determinada y compilada para poder ejecutarse, los DCG se pueden iterar y modificar sobre la marcha.

Esto hace que los DCG sean particularmente útiles para la depuración y la creación de prototipos, ya que partes específicas del código de un modelo se pueden modificar o ejecutar de forma aislada sin tener que restablecer todo el modelo, lo que, para los modelos de deep learning muy grandes utilizados para tareas sofisticadas de visión por ordenador y NLP, puede ser una pérdida de tiempo y recursos computacionales. Las ventajas de esta flexibilidad se extienden al entrenamiento de modelos, ya que los gráficos de cálculo dinámico se generan fácilmente a la inversa durante la retropropagación.

Aunque su estructura fija puede permitir una mayor eficiencia computacional, los gráficos computacionales estáticos tienen una flexibilidad limitada: por ejemplo, crear un modelo que utilice un número variable de capas según los datos de entrada, como una red neuronal convolucional (CNN) que puede procesar imágenes de diferentes tamaños, es prohibitivamente difícil con los gráficos estáticos.

Diferenciación automática

Un método muy utilizado para entrenar redes neuronales, especialmente en el aprendizaje supervisado, es la retropropagación. En primer lugar, en un paso hacia adelante, un modelo recibe algunas entradas (x) y predice algunas salidas (y); si se trabaja hacia atrás a partir de esa salida, se utiliza una función de pérdida para medir el error de las predicciones del modelo en diferentes valores de x. Al diferenciar esa función de pérdida para encontrar su derivada, se puede utilizar el descenso del gradiente para ajustar los pesos en la red neuronal, una capa a la vez.

El módulo de autograd de PyTorch potencia su técnica de diferenciación automática mediante una fórmula de cálculo llamada regla de la cadena, que calcula derivadas complejas dividiéndolas en derivadas más simples y combinándolas posteriormente. Autograd calcula y registra automáticamente los gradientes de todas las operaciones ejecutadas en un gráfico computacional, lo que reduce considerablemente el trabajo preliminar de la retropropagación.

Al ejecutar un modelo que ya se ha entrenado, el autograd se convierte en un uso innecesario de los recursos computacionales. Agregar cualquier operación de tensor con requires_grad=False indicará a PyTorch que deje de rastrear los gradientes.

Conjuntos de datos y cargadores de datos

Trabajar con los grandes conjuntos de datos necesarios para entrenar modelos de deep learning puede ser complejo y exigente computacionalmente. PyTorch proporciona dos primitivas de datos, datasets y dataloaders, para facilitar la carga de datos y hacer que el código sea más fácil de leer.

  • torch.utils.data.Dataset almacena muestras de datos y sus etiquetas correspondientes
  • torch.utils.data.Dataloader encapsula un iterable (un objeto sobre el que se puede operar) alrededor del conjunto de datos para permitir un fácil acceso a las muestras
Mixture of Experts | 12 de diciembre, episodio 85

Descifrar la IA: resumen semanal de noticias

Únase a nuestro panel de ingenieros, investigadores, responsables de producto y otros profesionales de talla mundial que se abren paso entre el bullicio de la IA para ofrecerle las últimas noticias y conocimientos al respecto.

Ecosistema de PyTorch

Las características principales de PyTorch se complementan con un sólido ecosistema de herramientas, bibliotecas y extensiones desarrollado por miembros de la comunidad de PyTorch. Para complementar la biblioteca torch preinstalada, existen muchas bibliotecas adicionales de código abierto que contienen módulos específicos, redes neuronales preconfiguradas e incluso modelos preentrenados.

Torchvision

Torchvision es un kit de herramientas que contiene módulos, arquitecturas de red y datasets para diversas tareas de clasificación de imágenes, detección de objetos y segmentación de imágenes.

Explore Torchvision
TorchText

TorchText proporciona recursos como datasets, transformaciones básicas de procesamiento de texto y modelos preentrenados para su uso en NLP.

Explore TorchText
Intercambio de redes neuronales abiertas

El Open Neural Network Exchange (ONNX) garantiza la interoperabilidad entre los marcos de IA, lo que permite a los usuarios realizar fácilmente la transición de sus modelos de PyTorch a otras plataformas.

Explore ONNX
Tutoriales

Hay muchos tutoriales útiles disponibles en PyTorch.org. Por ejemplo, este tutorial intermedio enseña los fundamentos del aprendizaje profundo por refuerzo entrenando a una IA para que juegue a un videojuego.

Explore tutoriales de PyTorch

Instalación y ejecución de PyTorch

PyTorch se puede instalar y ejecutar en diferentes configuraciones, tanto en sistemas locales como en plataformas en la nube.

Para ejecutar PyTorch localmente es necesario instalar Python, utilizando el administrador de paquetes Anaconda, Homebrew o el sitio web de Python.

PyTorch se puede instalar localmente a través de Anaconda utilizando el comando conda install pytorch torchvision -c pytorch, o a través de pip utilizando el comando pip3 install torch torchvision. Se recomienda Anaconda, ya que proporciona todas las dependencias PyTorch (incluyendo Python) en una instalación en entorno aislado2.

PyTorch también se puede ejecutar en plataformas en la nube, incluidos Amazon Web Services, Google Cloud y Microsoft Azure.

Se recomienda (pero no es obligatorio) trabajar con GPU NVIDIA para aprovechar el soporte de PyTorch para CUDA (Compute Unified Device Architecture), que ofrece entrenamiento y rendimiento dramáticamente más rápidos que los que pueden ofrecer las CPU.

Soluciones relacionadas
IBM watsonx.ai

Entrene, valide, ajuste e implemente IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de nueva generación para desarrolladores de IA. Cree aplicaciones de IA en menos tiempo y con menos datos.

Descubra watsonx.ai
Soluciones de inteligencia artificial

Ponga la IA a trabajar en su negocio con la experiencia líder en IA del sector de IBM y junto a su cartera de soluciones.

Explore las soluciones de IA
Consultoría y servicios de IA

Reinvente las operaciones y flujos de trabajo críticos añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.

Explore los servicios de IA
Dé el siguiente paso

Obtenga acceso único a capacidades que abarcan el ciclo de vida de desarrollo de la IA. Produzca potentes soluciones de IA con interfaces intuitivas, flujos de trabajo y acceso a API y SDK estándar del sector.

Explore watsonx.ai Solicite una demostración en directo
Notas a pie de página