¿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 aprendizaje profundo de código abierto basado en software que se emplea 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 convirtieron en el marco de ML líder para las comunidades académicas y de investigación.

PyTorch admite una amplia variedad de estructuras de redes neuronales, desde simples algoritmos de regresión lineal hasta complejas redes neuronales convolucionales y modelos transformadores generativos utilizados para tareas, como la visión artificial y el procesamiento de lenguaje natural (PLN). PyTorch, que se basa en el lenguaje de programación Python y ofrece amplias bibliotecas de modelos preconfigurados (e incluso preentrenados), permite a los científicos de datos crear y ejecutar sofisticadas redes de aprendizaje profundo, minimizando el tiempo y el trabajo 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 los grandes modelos de aprendizaje profundo, puede llevar mucho tiempo. Esto convierte a PyTorch en una plataforma excelente para el desarrollo rápido de prototipos, y también agiliza enormemente el proceso de depuración.

Desarrollado originalmente 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 más amplia Linux Foundation) desde 2022. La fundación sirve de espacio neutral para que la comunidad de aprendizaje profundo colabore en el desarrollo del ecosistema de PyTorch.

En 2023, IBM se convirtió en miembro principal de PyTorch Foundation, habiendo ya colaborado en dos grandes proyectos: permitir un entrenamiento más eficiente de los modelos fundacionales flexibles de IA con miles de millones de parámetros, y hacer que el punto de control para el entrenamiento de IA sea considerablemente más rentable. La cartera de IBM watsonx emplea PyTorch para proporcionar una pila de software de nivel empresarial para los modelos fundacionales de inteligencia artificial, desde el entrenamiento integral hasta el ajuste de los modelos.

Las últimas tendencias de IA presentadas por expertos

Obtenga insights curados 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! Ya está suscrito.

Su suscripción se entregará en inglés. En cada boletín, encontrará un enlace para darse de baja. 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 ni 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 aprendizaje profundo. La sencilla sintaxis de Python es fácil de leer, lleva relativamente poco tiempo 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 al superar a Java en 2019. Su popularidad sigue creciendo, con un aumento del 22.5 % en 2022.1

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

Tensores

En cualquier algoritmo de aprendizaje automático, incluso los aplicados a información aparentemente no numérica como sonidos o imágenes, los datos deben representarse numéricamente. En PyTorch, esto se consigue 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ática. Lingüísticamente, “tensor” funciona como un término genérico que incluye algunas entidades matemáticas más familiares:

  • Un escalar es un tensor cero dimensional que contiene un solo número.

  • Un vector es un tensor unidimensional que contiene diversos 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 tensores 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 las matrices utilizadas en Numpy, pero a diferencia de las matrices, que solo pueden ejecutarse en unidades centrales de procesamiento (CPU), los tensores también pueden ejecutarse en unidades de procesamiento gráfico (GPU). Las GPU permiten realizar cálculos mucho más rápidos que las CPU, lo que supone una gran ventaja dados los enormes volúmenes de datos y el procesamiento paralelo típicos del aprendizaje profundo.

Además de codificar las entradas y salidas de un modelo, los tensores de 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 los modelos de aprendizaje profundo, lo que permite la construcción rápida y directa 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, también permite guardar fácilmente los complejos modelos de aprendizaje profundo como un único módulo con nombre, y transferirlos entre diferentes máquinas, CPU o GPU. Los modelos PyTorch pueden incluso ejecutarse en entornos que no sean Python, como C++, utilizando Torchscript, lo que ayuda a salvar la distancia entre los prototipos de investigación y la implementación en la producción.

En términos generales, hay tres clases principales de módulos utilizados para construir y optimizar modelos de aprendizaje profundo en PyTorch:

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

  • El módulo autograd proporciona una forma sencilla de calcular automáticamente los gradientes, utilizados para optimizar los parámetros del modelo mediante el descenso del gradiente, para cualquier función gestionada dentro de una red neuronal. Agregar cualquier tensor con require_grad=True indica a autograd que cada operación en ese tensor debe rastrearse, 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 del gradiente estocástico (SGD) o la propagación de la raíz cuadrada media (RMSprop), para adaptarse a necesidades específicas de optimización.

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 aprendizaje profundo en PyTorch. En términos abstractos, los gráficos de cálculo mapean el flujo de datos entre las diferentes operaciones de un sistema matemático: en el contexto del aprendizaje profundo, 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 los diferentes niveles de la red (la disposición de los 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 utilizados en PyTorch) de los gráficos de cálculo estáticos (como los utilizados en TensorFlow) es que los DCG aplazan la especificación exacta de los cálculos y las relaciones entre ellos hasta el momento de la ejecución. En otras palabras, mientras que un gráfico de cálculo estático requiere que la estructura de toda la red neuronal esté completamente determinada y compilada para poder ejecutarse, los DCG pueden repetirse y modificarse sobre la marcha.

Esto hace que los DCG sean especialmente útiles para la depuración y el desarrollo de prototipos, ya que partes específicas del código de un modelo pueden modificarse o ejecutarse de forma aislada sin tener que reiniciar todo el modelo, lo que, en el caso de los modelos de aprendizaje profundo de gran tamaño utilizados para tareas sofisticadas de visión artificial y procesamiento de lenguaje natural (NLP), puede suponer una pérdida tanto de tiempo como de recursos informáticos. 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 potenciar una mayor eficiencia en los cálculos, los gráficos de cálculos estáticos tienen una flexibilidad limitada: por ejemplo, construir un modelo que utilice una cantidad variable de niveles en función de los datos de entrada, como una red neuronal convolucional (CNN) que pueda procesar imágenes de distintos tamaños, resulta extremadamente difícil con gráficos estáticos.

Diferenciación automática

Un método muy utilizado para entrenar redes neuronales, sobre todo en el aprendizaje supervisado, es la retropropagación. En primer lugar, en un paso hacia delante, se alimenta a un modelo con algunas entradas (x) y se predicen 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 derivado, se puede usar descenso del gradiente para ajustar los pesos en la red neural, un nivel a la vez.

El módulo autograd de PyTorch potencia su técnica de diferenciación automática mediante una fórmula de cálculo denominada regla de la cadena, en la cual se calcula los derivados complejos, los divide en derivados más simples y luego los combina. Autograd calcula y registra automáticamente los gradientes de todas las operaciones ejecutadas en un gráfico de cálculo, lo que reduce enormemente el trabajo de la retropropagación.

Cuando se ejecuta un modelo que ya se ha entrenado, el autograd se convierte en un uso innecesario de recursos de cálculo. Agregar cualquier operación tensorial con requires_grad=Falso indicará a PyTorch que deje de rastrear gradientes.

Conjuntos de datos y cargadores de datos

Trabajar con los grandes conjuntos de datos necesarios para entrenar modelos de aprendizaje profundo puede ser complejo y exigente desde el punto de vista de los cálculos. PyTorch proporciona dos primitivos de datos, conjuntos de datos y cargadores de datos para facilitar su carga 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 facilitar el acceso a las muestras.
Mixture of Experts | 12 de diciembre, episodio 85

Decodificación de 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 revuelo de la IA para ofrecerle las últimas noticias e insights al respecto.

Ecosistema de PyTorch

Las características principales de PyTorch se complementan con un sólido ecosistema de herramientas, bibliotecas y extensiones desarrolladas 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 conjunto de herramientas que contiene módulos, estructuras de red y conjuntos de datos para diversas tareas de clasificación de imágenes, detección de objetos y segmentación de imágenes.

Explorar Torchvision
TorchText

TorchText proporciona recursos como conjuntos de datos, transformaciones básicas de procesamiento de textos y modelos preentrenados para su uso en el procesamiento de lenguaje natural (NLP).

Explorar TorchText
Intercambio de redes neuronales abiertas

El Intercambio de redes neuronales abiertas (ONNX) garantiza la interoperabilidad entre marcos de IA, lo que permite a los usuarios trasladar fácilmente sus modelos de PyTorch a otras plataformas.

Explorar ONNX
Tutoriales

En PyTorch.org encontrará muchos tutoriales útiles. Por ejemplo, este tutorial intermedio enseña los fundamentos del aprendizaje profundo por refuerzo entrenando una IA para jugar un juego de video.

Explorar los tutoriales de PyTorch

Instalar y ejecutar PyTorch

PyTorch puede instalarse y ejecutarse en diferentes configuraciones tanto en sistemas locales como en plataformas en la nube.

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

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

PyTorch también puede ejecutarse en plataformas en la nube, como Amazon Web Services, Google Cloud y Microsoft Azure.

Se recomienda (aunque no es obligatorio) trabajar con las GPU de NVIDIA para aprovechar el soporte de PyTorch para la Arquitectura unificada de dispositivos informáticos (CUDA), que ofrece un entrenamiento y un rendimiento mucho más rápidos que los que pueden proporcionar las CPU.

Soluciones relacionadas
IBM watsonx.ai

Entrene, valide, ajuste y despliegue IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de próxima generación para creadores de IA. Diseñe 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 en IA líder en la industria y la cartera de soluciones de IBM a su lado.

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

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

Conozca los servicios de IA
Dé el siguiente paso

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

Explore watsonx.ai Reserve una demostración en vivo
Notas de pie de página