Publicado: 23 de noviembre de 2023
Colaboradores: Dave Bergmann, Cole Stryker
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 por ordenador y procesamiento del lenguaje natural (NLP). 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 Fundación PyTorch, ya colaboró 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. La plataforma watsonx de IBM utiliza PyTorch para proporcionar una pila de software de nivel empresarial para modelos fundacionales de inteligencia artificial, desde la formación integral hasta el ajuste de modelos.
Explore el libro electrónico gratuito de O'Reilly para aprender a dar los primeros pasos con Presto, el motor SQL de código abierto para el análisis de datos.
Regístrese para obtener el libro electrónico sobre almacenes de datos de IA
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 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 simplicidad ha ayudado a fomentar una sólida comunidad en línea de desarrolladores de Python, colaborando en una amplia gama de bibliotecas y API de Pythoncomo Numerical Python (NumPy) para operaciones matemáticas, Pandas para manipulación de datos o matplotlib para visualizaciones 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 aprendizaje automático, liberando a desarrolladores y científicos de datos que se centren en la innovación en lugar de rotar la escritura de tareas.
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:
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.
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, 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 guardar fácilmente estos complejos modelos de deep learning como un único módulo con nombre y transferirlos entre diferentes máquinas, CPU o GPU. Los modelos PyTorch incluso se pueden ejecutar en entornos que no sean Python, como C++, utilizando Torchscript (enlace externo a ibm.com), 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:
nn módulos 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.
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.
Si bien 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.
Un método muy utilizado para entrenar redes neuronales, especialmente en el aprendizaje supervisado, es la retropropagación. En primer lugar, en una pasada hacia adelante, un modelo recibe algunas entradas (x) y predice algunas salidas (y); trabajando hacia atrás desde 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.
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.
Las características principales de PyTorch se complementan con un sólido ecosistema de herramientas, bibliotecas y extensiones (enlace externo a ibm.com) 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 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.
TorchText proporciona recursos como datasets, transformaciones básicas de procesamiento de texto y modelos preentrenados para su uso en NLP.
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.
Hay muchos tutoriales útiles disponibles en PyTorch.org. Por ejemplo, este tutorial intermedio (enlace externo a ibm.com) enseña los fundamentos del aprendizaje profundo por refuerzo entrenando a una IA para que juegue a un videojuego.
PyTorch se puede instalar y ejecutar en diferentes configuraciones, tanto en sistemas locales como en plataformas en la nube.
La ejecución local de PyTorch requiere la instalación de Python, utilizando el administrador de paquetes de Anaconda, Homebrew (enlace externo a ibm.com) o el sitio web de Python (enlace externo a ibm.com).
PyTorch se puede instalar localmente a través de Anaconda (enlace externo a ibm.com) mediante el comando conda install pytorch torchvision -c pytorch, o mediante pip (enlace externo a ibm.com) 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 aislado.2
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.
Entrenar, validar, ajustar e implementar IA generativa, modelos fundacionales y capacidades de aprendizaje automático con facilidad y crear aplicaciones de IA en una fracción del tiempo con una fracción de los datos.
Reimagine su forma de trabajar con la IA: nuestro equipo diverso y global de más de 20 000 expertos en IA puede ayudarle a diseñar y escalar la IA y la automatización de forma rápida y segura en toda su empresa, trabajando con nuestra propia tecnología IBM watsonx y un ecosistema abierto de socios para ofrecer cualquier modelo de IA, en cualquier nube, guiado por la ética y la confianza.
Escale las cargas de trabajo analíticas y de IA para todos sus datos, en cualquier lugar, con watsonx.data, el único almacén de datos del sector que es abierto, híbrido y con gobierno.
Esta ruta de aprendizaje está diseñada para cualquier persona interesada en ponerse al día rápidamente con el aprendizaje automático, con tutoriales paso a paso con demostraciones prácticas en las que creará modelos y los utilizará en aplicaciones.
Presentaremos los conceptos básicos que necesita saber para comenzar con este lenguaje de programación sencillo, desde ejecutar cálculos algebraico hasta generar resultados gráficos de sus datos.
Explore artículos, investigaciones, publicaciones de blog, tutoriales y vídeos para ampliar sus conocimientos sobre el ecosistema de PyTorch.
1 Octoverse 2022: Los principales lenguajes de programación (enlace externo a ibm.com), Github, 17 de noviembre de 2022
2 PyTorch. Comenzar: comience de forma local (enlace externo a ibm.com)