Prefacio

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

Comencé mi carrera profesional como ingeniero de software. En el transcurso de mi tiempo en ese puesto, me interesé e involucré profundamente en la ejecución de software y sistemas a escala. Aprendí mucho sobre sistemas distribuidos, rendimiento, optimizaciones y ejecución fiable a escala. Posteriormente, pasé a desempeñar muchas otras funciones, desde la creación de sistemas en la intersección del software y las operaciones (DevOps) y sistemas auxiliares para permitir el software inteligente (MLOps), hasta la ejecución de inferencia de aprendizaje profundo a escala y el desarrollo de motores de datos para el aprendizaje profundo (ingeniería de aprendizaje automático), pasando por el desarrollo de modelos multitarea y multiobjetivo para funciones críticas como la asistencia sanitaria y los flujos de trabajo de toma de decisiones empresariales como científico de datos y especialista en aprendizaje automático.

Desde que me dedico a construir sistemas inteligentes, el aprendizaje profundo es una parte importante de lo que hago actualmente. La amplia adopción de sistemas inteligentes (IA) basados en el aprendizaje profundo está motivada por su capacidad para resolver problemas a escala con eficiencia. Sin embargo, construir tales sistemas es complejo, porque el aprendizaje profundo no consiste sólo en algoritmos y matemáticas. Gran parte de la complejidad reside en la intersección del hardware, el software, los datos y el aprendizaje profundo (los algoritmos y las técnicas, concretamente). Me considero afortunado por haber adquirido experiencia en una serie de funciones que me obligaron a desarrollar rápidamente una comprensión detallada de la construcción y gestión de sistemas de IA basados en el aprendizaje profundo a escala. Los conocimientos que he adquirido gracias a las oportunidades que se me han presentado no están disponibles ni se consumen tan fácilmente, porque cada uno de estos dominios -hardware, software y datos- es tan complejo como el propio aprendizaje profundo.

La principal motivación de este libro es democratizar este conocimiento para que todos los profesionales del aprendizaje automático, ingenieros o no, puedan navegar por el panorama del aprendizaje profundo. Siempre he tenido la sensación de que estos conocimientos estaban algo fragmentados, y vi la oportunidad de reunirlos para crear una base de conocimientos coherente. Esta base de conocimientos unificada proporcionará orientación teórica y práctica para desarrollar conocimientos de ingeniería de aprendizaje profundo, de modo que puedas escalar fácilmente tus cargas de trabajo de aprendizaje profundo sin necesidad de pasar por tantas exploraciones como hice yo.

Por qué es importante la ampliación

El aprendizaje profundo y el escalado están correlacionados. El aprendizaje profundo es capaz de escalar sus objetivos de una sola tarea a multitarea, de una modalidad a multimodalidad, de una clase a miles de clases. Todo es posible, siempre que dispongas de un hardware escalable y un gran volumen de datos y escribas un software que pueda escalar eficientemente para utilizar todos los recursos de que dispongas.

La ampliación de es compleja, y por tanto no es gratuita. Desarrollar un sistema basado en el aprendizaje profundo requiere un gran número de capas, un gran volumen de datos y un hardware capaz de manejar cargas de trabajo computacionalmente intensivas. El escalado requiere comprender la elasticidad de todo tu sistema -no sólo de tu modelo, sino de toda tu pila de aprendizaje profundo- y adaptarse a situaciones en las que la elasticidad se acerca a un punto de ruptura. Ahí reside la motivación secundaria de este libro: permitirte comprender mejor tu sistema y cuándo puede romperse, y cómo puedes evitar roturas innecesarias.

A quién va dirigido este libro

Este libro de pretende ayudarte a desarrollar un conocimiento más profundo de la pila del aprendizaje profundo -específicamente, cómo el aprendizaje profundo interactúa con el hardware, el software y los datos-. Te servirá como valioso recurso cuando quieras escalar tu modelo de aprendizaje profundo, ya sea ampliando los recursos de hardware o añadiendo mayores volúmenes de datos o aumentando la capacidad del propio modelo. La eficiencia es una parte clave de cualquier operación de escalado. Por esta razón, la consideración de la eficiencia se entreteje a lo largo de todo el libro, para proporcionarte los conocimientos y recursos que necesitas para escalar con eficacia.

Este libro está escrito para profesionales del aprendizaje automático de todos los ámbitos: ingenieros, ingenieros de datos, MLOps, científicos del aprendizaje profundo, ingenieros de aprendizaje automático y otras personas interesadas en aprender sobre el desarrollo de modelos a escala. Asume que el lector ya tiene un conocimiento fundamental de conceptos de aprendizaje profundo como optimizadores, objetivos de aprendizaje y funciones de pérdida, y ensamblaje y compilación de modelos, así como cierta experiencia en el desarrollo de modelos. La familiaridad con Python y PyTorch también es esencial para las secciones prácticas del libro.

Dada su complejidad y alcance, este libro se centra principalmente en el escalado del desarrollo y entrenamiento de modelos, con un amplio enfoque en el entrenamiento distribuido. Aunque los primeros capítulos pueden ser útiles para la implementación y los casos de uso de la inferencia, el escalado de la inferencia está fuera del alcance de este libro. Los temas que trataremos en incluyen:

  • Cómo se descompone tu modelo en un grafo de cálculo y cómo fluyen tus datos a través de este grafo durante el proceso de entrenamiento.

  • La menos contada pero hermosa historia de los números en coma flotante y de cómo estos bosones de Higgs del aprendizaje profundo pueden utilizarse para lograr la eficiencia de la memoria.

  • Cómo la informática acelerada acelera tu formación y cómo puedes utilizar mejor los recursos de hardware a tu disposición.

  • Cómo entrenar tu modelo utilizando paradigmas de entrenamiento distribuido (es decir, datos, modelo, canalización y paralelismo multidimensional híbrido). También aprenderás sobre el aprendizaje federado y sus retos.

  • Cómo aprovechar el ecosistema PyTorch junto con las librerías NVIDIA y Triton para escalar el entrenamiento de tus modelos.

  • Depurar, monitorizar e investigar los cuellos de botella que ralentizan indeseablemente el escalado del entrenamiento de modelos.

  • Cómo acelerar el ciclo de vida de la formación y agilizar el bucle de retroalimentación para iterar el desarrollo del modelo y las buenas prácticas relacionadas.

  • Un conjunto de trucos y técnicas de datos y cómo aplicarlos para ampliar tu formación con recursos limitados.

  • Cómo seleccionar las herramientas y técnicas adecuadas para tu proyecto de aprendizaje profundo.

  • Opciones para gestionar la infraestructura informática cuando se ejecuta a escala.

Cómo está organizado este libro

Este libro de consta de un capítulo introductorio seguido de una docena de capítulos divididos en tres partes que abarcan conceptos fundamentales, entrenamiento distribuido y escalado extremo. Cada capítulo se basa en los conceptos, fundamentos y principios de los capítulos precedentes para proporcionar un conocimiento holístico del aprendizaje profundo que permita un escalado eficiente y eficaz de las cargas de trabajo de entrenamiento.

Introducción

El capítulo 1, "Lo que la naturaleza y la historia nos han enseñado sobre el escalado", establece el marco teórico para decidir cuándo escalar y explora los retos de alto nivel que implica el escalado. En este capítulo, también leerás sobre la historia del aprendizaje profundo y cómo el escalado ha sido un motor clave de su éxito.

Parte I: Conceptos Fundamentales del Aprendizaje Profundo

El capítulo 2, "Aprendizaje profundo", introduce el aprendizaje profundo a través de la lente de los gráficos computacionales y el flujo de datos. Los profesionales del aprendizaje automático en sus primeras etapas pueden encontrar útil este capítulo, ya que explica el funcionamiento interno del aprendizaje profundo a través de Python puro, sin florituras. Los profesionales del aprendizaje profundo más experimentados pueden optar por saltarse este capítulo.

El capítulo 3, "El lado computacional del aprendizaje profundo", se sumerge en el funcionamiento interno de los cálculos electrónicos y el hardware, explorando cómo se consiguen y escalan las capacidades de cálculo. También proporciona una visión detallada de la variedad de hardware acelerado disponible hoy en día, para dotarte de los conocimientos necesarios para elegir el hardware más adecuado para tu proyecto.

El capítulo 4, "Ponerlo todo junto: Aprendizaje profundo eficiente", reúne los conocimientos fundamentales del aprendizaje profundo para proporcionar una orientación más práctica sobre cómo construir un sistema inteligente eficiente y eficaz para tu tarea y cómo medirlo y monitorearlo. En este capítulo, también aprenderás sobre la compilación de grafos y una serie de trucos de memoria que te proporcionarán los conocimientos necesarios para construir una pila eficiente.

Parte II: Formación distribuida

El capítulo 5, "Sistemas distribuidos y comunicaciones", presenta los fundamentos de los sistemas distribuidos y ofrece una visión detallada de los distintos tipos y de los retos asociados a cada uno de ellos. La comunicación es un aspecto crítico de los sistemas distribuidos que se explica en este capítulo a través de la lente del aprendizaje profundo. Este capítulo también proporciona información sobre las opciones y herramientas que se pueden utilizar para escalar tus recursos de hardware con el fin de lograr la computación distribuida, junto con lo que esto significa para el hardware con aceleración.

El capítulo 6, "Fundamentos teóricos del aprendizaje profundo distribuido", amplía el capítulo 5 para proporcionar conocimientos teóricos y fundamentales del aprendizaje profundo distribuido. En este capítulo, conocerás diversas técnicas de entrenamiento del aprendizaje profundo distribuido y un marco para elegir una.

El capítulo 7, "Paralelismo de datos", se sumerge en los detalles del paralelismo de datos distribuidos y proporciona una serie de ejercicios prácticos que demuestran estas técnicas.

El capítulo 8, "Escalar más allá del paralelismo de datos: Modelo, Canalización, Tensor y Paralelismo Híbrido", proporciona conocimientos básicos y prácticos sobre el escalado del entrenamiento de modelos más allá del paralelismo de datos. En este capítulo, aprenderás sobre el paralelismo de modelos, de tuberías e híbrido multidimensional, y experimentarás los retos y limitaciones de cada una de estas técnicas mediante ejercicios prácticos.

El capítulo 9, "Adquirir experiencia práctica con el escalado en todas las dimensiones", reúne todo lo aprendido en la Parte II para proporcionar conocimientos y perspectivas sobre cómo realizar el paralelismo multidimensional de forma más eficaz.

Parte III: Escalado extremo

El capítulo 10, "Escalado centrado en los datos", proporciona una perspectiva centrada en los datos y ofrece información valiosa sobre diversas técnicas para maximizar la ganancia de tus datos. Este capítulo también proporciona ideas útiles sobre cómo lograr eficiencia en tus conductos de datos mediante técnicas de muestreo y selección.

El capítulo 11, "Ampliación de experimentos: Planificación y gestión eficaces", se centra en el escalado de experimentos y proporciona ideas sobre la planificación y gestión de experimentos. Este capítulo proporciona información útil para cuando realices varios experimentos y quieras maximizar tus posibilidades de encontrar el modelo de mejor rendimiento; abarca técnicas como el ajuste fino, la mezcla de expertos (ME), el aprendizaje contrastivo, etc.

El capítulo 12, "Ajuste fino eficiente de grandes modelos", explora el ajuste fino de bajo rango de grandes modelos con un ejemplo práctico.

El Capítulo 13, "Modelos de cimentación", expone el marco conceptual de los modelos de cimentación y ofrece un resumen de este panorama en evolución.

Qué necesitas para utilizar este libro

Para ejecutar en los ejemplos de código de este libro, necesitarás un dispositivo en funcionamiento con al menos una CPU de 16 núcleos y 16 GB (idealmente 32 GB) de RAM. La mayoría de los ejercicios de la Parte II utilizan hardware acelerado, por lo que se necesitará acceso a un sistema con más de una GPU -idealmente NVIDIA- para algunos de los ejercicios. La mayoría de los ejercicios están escritos de forma agnóstica a la plataforma, y se proporciona un Dockerfile con una lista de dependencias de ejecución necesarias para ejecutar los ejercicios.

Cómo configurar tu entorno para los ejercicios prácticos

Las instrucciones para configurar tu entorno para los ejercicios prácticos de este libro se incluyen en el repositorio GitHub complementario. Esta página incluye directrices específicas para configurar un entorno nativo basado en Python o un entorno Docker emulado. También se proporcionan instrucciones para configurar los controladores NVIDIA y el tiempo de ejecución CUDA, junto con instrucciones para actualizar las versiones y ejecutar los ejercicios.

Algunos ejercicios de la Parte II vendrán con instrucciones especiales que se explicarán en el contexto de esos ejercicios.

Utilizar ejemplos de código

El material complementario (ejemplos de código, ejercicios, etc.) está disponible para su descarga en https://github.com/suneeta-mall/deep_learning_at_scale.

Si tienes una pregunta técnica o un problema al utilizar los ejemplos de código, envía un correo electrónico a bookquestions@oreilly.com.

Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.

Agradecemos, pero generalmente no exigimos, la atribución. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Aprendizaje profundo a escala por Suneeta Mall (O'Reilly). Copyright 2024 Suneeta Mall, 978-1-098-14528-6".

Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en permissions@oreilly.com.

Convenciones utilizadas en este libro

En este libro se utilizan las siguientes convenciones tipográficas:

Cursiva

Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.

Constant width

Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.

Constant width bold

Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.

Constant width italic

Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.

Consejo

Este elemento significa un consejo o sugerencia.

Nota

Este elemento significa una nota general.

Advertencia

Este elemento indica una advertencia o precaución.

Aprendizaje en línea O'Reilly

Nota

Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.

Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita https://oreilly.com.

Cómo contactar con nosotros

Dirige tus comentarios y preguntas sobre este libro a la editorial:

Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en https://oreil.ly/DLAS.

Para noticias e información sobre nuestros libros y cursos, visita https://oreilly.com.

Encuéntranos en LinkedIn: https://linkedin.com/company/oreilly-media.

Míranos en YouTube: https://youtube.com/oreillymedia.

Agradecimientos

A mi querida familia: Vuestro apoyo y comprensión inquebrantables durante la creación de este libro han sido enormes. Mi más sincero agradecimiento a mi marido, cuya paciencia y ánimo me han hecho seguir adelante. A mis increíbles hijos, vuestra curiosidad y entusiasmo por aprender me inspiran cada día. Este libro es tanto vuestro como mío.

Mamá, papá y suegros, vuestro amor, sabiduría, fe inquebrantable en mis capacidades e inagotable ánimo han sido una luz que me ha guiado a lo largo de este viaje. A mi hermano, tu perseverancia no conoce límites y me mantiene inspirada. Este libro está dedicado a todos vosotros.

A la comunidad de aprendizaje profundo de código abierto: Estoy profundamente agradecido a las comunidades de código abierto de todo el mundo que han aportado sus conocimientos y su trabajo para mejorar de forma colectiva y colaborativa la postura de los sistemas de IA en producción. Vuestro compromiso con la innovación y la accesibilidad en el campo del aprendizaje profundo ha sido revolucionario.

Los conocimientos, herramientas y recursos que estas comunidades han construido juntas no sólo han dado forma a este libro, sino que también han transformado el panorama del aprendizaje automático. Estoy profundamente agradecido por vuestras contribuciones. Este trabajo no habría sido posible sin vosotros. Es para mí un gran placer dedicaros este libro.

A mis dedicados revisores técnicos y al equipo editorial: Estoy en deuda con sus valiosas aportaciones y su dedicación a la excelencia. Me gustaría reconocer y expresar mi más profunda gratitud a los revisores técnicos, Tim Hauke Langer, Giovanni Alzetta, Satyarth Praveen y Vishwesh Ravi Shrimali, y a mi editora, Sara Hunter, cuya orientación y consejos han mejorado enormemente este libro. También quiero expresar mi gratitud a Nicole Butterfield, mi editora de adquisiciones, por su apoyo y orientación a la hora de dar forma a la dirección del libro.

Get Aprendizaje profundo a escala now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.