4 puntos por GN⁺ 2024-01-25 | 1 comentarios | Compartir por WhatsApp
  • Machine Learning Engineering Open Book es un recurso abierto que reúne metodologías, herramientas y comandos paso a paso para realizar con éxito el entrenamiento, el ajuste fino y la inferencia de modelos LLM, VLM y RAG
  • Está dirigido a ingenieros y operadores de entrenamiento de LLM/VLM, e incluye muchos scripts y comandos listos para copiar y ejecutar para resolver problemas rápidamente
  • El contenido se basa en conocimientos acumulados a partir de experiencias de entrenamiento del BLOOM-176B en 2022, IDEFICS-80B en 2023 y modelos RAG en Contextual.AI en 2024
  • Su alcance incluye elección de nube, aceleradores, almacenamiento, red, orquestación, entrenamiento, inferencia, depuración, pruebas y recursos, y también ofrece ebooks en PDF y EPUB
  • Es un repositorio público de conocimiento que permite a comunidades a las que les resulta difícil operar directamente clústeres de cómputo ML a gran escala aprender indirectamente conocimiento operativo surgido de experiencias reales de entrenamiento a gran escala

Propósito del libro y público objetivo

  • Machine Learning Engineering Open Book es una colección abierta de conocimiento para el entrenamiento, ajuste fino e inferencia de modelos de lenguaje grandes y modelos multimodales
  • Tiene un fuerte carácter técnico e incluye scripts y comandos listos para copiar y ejecutar para que ingenieros y operadores de entrenamiento de LLM/VLM puedan aplicarlos rápidamente
  • El contenido del repositorio surgió a partir de notas personales para reencontrar rápido soluciones investigadas en el pasado y que realmente funcionaron, y luego se compartió con la comunidad de ML en general

Alcance basado en la experiencia

  • Gran parte del conocimiento práctico se acumuló a partir de experiencias reales de entrenamiento de modelos a gran escala
  • Se enfoca en permitir que la comunidad aprenda de forma indirecta conocimientos de áreas difíciles de experimentar directamente debido al alto costo de alquilar clústeres de cómputo ML a gran escala

Temas organizados

  • Insights

    • AI Battlefield Engineering
    • Cómo elegir un proveedor de nube
  • Hardware

    • Compute: aceleradores, CPU, memoria de CPU
    • Storage: sistemas de archivos locales, distribuidos y compartidos
    • Network: redes dentro del nodo y entre nodos
  • Orchestration

    • Sistemas de orquestación para gestionar contenedores y recursos
    • SLURM: Simple Linux Utility for Resource Management
  • Training / Inference

    • Guías relacionadas con el entrenamiento de modelos
    • Insights sobre inferencia de modelos
  • Development

    • Depuración y troubleshooting para problemas fáciles y difíciles
    • The Art of Debugging Open book, con recetas y metodologías relacionadas
    • Consejos y herramientas para ayudar a escribir pruebas
  • Miscellaneous

    • Recursos cronológicos de LLM/VLM

Tablas comparativas y herramientas para encontrar rápido

  • Las tablas comparativas de aceleradores de alto rendimiento cubren los TFLOPS teóricos y el tamaño y la velocidad de la memoria del acelerador
  • Las tablas comparativas de red cubren la velocidad teórica de las redes entre nodos y dentro del nodo
  • Las herramientas de uso frecuente se ofrecen con accesos directos separados
    • all_reduce_bench.py: herramienta para medir throughput de red más fácilmente que nccl-tests
    • torch-distributed-gpu-test.py: herramienta para probar rápidamente la conectividad entre nodos
    • mamf-finder.py: herramienta para encontrar mediciones de TFLOPS realmente obtenibles en aceleradores
  • También se ofrecen guías de uso frecuente con accesos directos separados
    • Soluciones de depuración para aplicar rápidamente cuando una aplicación de PyTorch se cuelga o falla
    • Cheatsheet y trucos para usuarios de SLURM
    • Cómo crear modelos, datasets y tokenizers pequeños
    • Colección de cuadernos de bitácora públicos de entrenamiento de LLM/VLM

Formatos de distribución y participación

  • El ebook está disponible en Hugging Face Hub
  • Está previsto que el ebook se reconstruya aproximadamente cada pocas semanas, y también se ofrecen instrucciones para compilar directamente la versión más reciente
  • Las discusiones relacionadas con ingeniería de ML pueden hacerse en las community discussions del repositorio
  • Los bugs, errores tipográficos y sugerencias de mejora pueden enviarse mediante Issue o PR
  • La licencia del contenido es Attribution-ShareAlike 4.0 International
  • La información de cita incluye Machine Learning Engineering Open Book, el año 2023-2026 y la URL del repositorio de GitHub

1 comentarios

 
GN⁺ 2024-01-25
Opiniones en Hacker News
  • En mi trabajo de apoyo a investigación hago depuración de configuraciones de entrenamiento de LLM todos los días, y siento que me habría encantado tener notas como estas cuando empecé.

    • Como desarrollador de juegos, estoy intentando entrar en machine learning/deep learning, y el mayor desafío ha sido encontrar un problema que tenga valor real pero que no sea demasiado difícil como para poder abordarlo mientras aprendo. Creo que encontré uno y me gustaría saber qué opinan.
      Actualmente, para recopilar datos de motion capture para animación de juegos/películas hay dos sistemas: inercial y óptico. El inercial es más fácil y barato, pero tiene muchos errores de captura e imprecisiones, por lo que requiere corrección manual; el óptico es más preciso y necesita menos limpieza, pero el hardware y el espacio son costosos.
      La idea es usar un traje de motion capture inercial y, al mismo tiempo, grabar una sesión óptica, para luego entrenar con machine learning la corrección automática de datos de motion capture. En teoría, parecería posible pasar los datos grabados con el sistema inercial por machine learning y obtener una precisión comparable a la del sistema óptico.
      Me gustaría saber si es un buen primer proyecto, cómo convendría abordarlo y si existen proyectos previos que sirvan de referencia.
  • Trabajo ayudando a científicos aplicados con tareas relacionadas con entrenamiento y despliegue de modelos, y me pregunto cómo podría exponerme a trabajos de ingeniería de más bajo nivel, como optimización y rendimiento.
    En la empresa hay un equipo de infraestructura de ML, pero su objetivo es construir herramientas alrededor de la plataforma, no enfocarse en ejecutar las cargas de trabajo de la manera más óptima.

    • Creo que la optimización es imposible sin profiling. Familiarizarse con herramientas para entender el rendimiento de los modelos podría ser un primer paso.
      Ej.: https://pytorch.org/tutorials/recipes/recipes/profiler_recip...
    • Los materiales de Brendan Gregg sobre rendimiento de sistemas y profiling son un buen punto de partida. Una buena parte de los problemas de rendimiento en ML termina reduciéndose a Linux perf, o a entender qué demonios está pasando en sistemas de scheduling de cómputo de alto rendimiento como SLURM.
      https://www.brendangregg.com/linuxperf.html
  • Me gustó especialmente la parte Unsolicited Advice de la sección AI Battlefield. Trata de forma muy realista la realidad de que todo se mueve a una velocidad vertiginosa y la carga emocional de sentirse siempre como si uno se estuviera ahogando ante el avance radical e implacable del desarrollo de IA.
    https://github.com/stas00/ml-engineering/blob/master/insight...

  • ¿Qué tan ampliamente se usa Slurm?

    • Slurm está prácticamente en todas partes en la comunidad de cómputo de alto rendimiento (HPC). En HPC, diría que sus competidores similares son los schedulers de recursos SGE [1] y Torque/PBS [2].
      No conozco las cifras exactas, pero estimo que la enorme mayoría de las supercomputadoras del Top 500 [3] ejecutan Slurm. Como otros dijeron, la mayoría de los centros de cómputo de investigación académica también usan Slurm, y en los laboratorios nacionales del DoE de EE. UU. Slurm también domina.
      Y como dato curioso, quizá incluso una leyenda, se dice que el nombre “Simple Linux Utility for Resource Management (SLURM)” es un retroacrónimo inspirado en la bebida Slurm de Futurama [4].
      [1] https://en.wikipedia.org/wiki/Oracle_Grid_Engine
      [2] https://github.com/adaptivecomputing/torque
      [3] https://www.top500.org/
      [4] https://futurama.fandom.com/wiki/Slurm
    • Según Wikipedia, “Slurm se usa como gestor de cargas de trabajo en aproximadamente el 60% de las supercomputadoras del TOP500”. Durante la última década, más o menos, lo he usado como frontend de gestión de jobs en la mayoría de los clústeres de cómputo.
    • Los modelos Llama 2 también se entrenaron en Slurm.
    • Relacionado con esto, me pregunto si alguien ha logrado migrar con éxito de Slurm a Kubernetes en clústeres físicos dedicados principalmente al entrenamiento de modelos grandes con muchas GPU.
    • Se usa en la mayoría de los clústeres de cómputo de alto rendimiento. Los lugares que siguen con Torque serían la excepción.
  • Hice clic al azar en la sección de reproducibilidad y todavía me pregunto cómo se logra la reproducibilidad en entrenamiento distribuido. ¿No se vuelve lento si se hace sincronización determinista? Aun así, escuché que al menos en algunas grandes empresas el entrenamiento sí es reproducible.

    • Querrías hacer que las actualizaciones de entrenamiento sean lo más conmutativas posible. Así no importa en qué orden se apliquen las actualizaciones.
  • ¿Cómo se puede obtener experiencia con estas cosas sin tener un trabajo?

    • Puedes leer materiales como el libro enviado y hacer pequeños proyectos por tu cuenta.
      No es muy distinto de aprender programación sin tener ya un trabajo de programación.
      Claro que eso no significa que ninguna de las dos cosas sea fácil; requiere bastante dedicación.
    • Si el objetivo es conseguir empleo, hay que tener expectativas realistas.
      Comparado con áreas como desarrollo web, el mercado laboral aquí es muy pequeño, y los proyectos requieren especialistas con conocimiento muy profundo. No es el tipo de trabajo en el que ChatGPT o Stack Overflow ayuden demasiado.
    • Haz proyectos paralelos o participa en los proyectos paralelos de otras personas. Lo más importante es conectarte con la comunidad y aprender el lenguaje técnico necesario para hablar con ellos.
      Esta comunidad es relativamente pequeña, y para empezar se necesitan varias cosas: cierto nivel de machine learning, buena capacidad de programación, conocimiento de cómo funcionan los aceleradores modernos y la capacidad de leer y entender papers en esta línea.
    • En mi experiencia, la mejor forma son los proyectos paralelos. No te limites a aprender la tecnología: elige un proyecto viable que use la tecnología nueva que quieres aprender y métete de lleno.
      Elegir algo “viable” suele ser complicado, así que no tengas miedo de reevaluar después de unas semanas y ajustar las expectativas si hace falta.
      Lo importante es seguir avanzando.
    • Puedes hacer el curso de fast.ai. Con algo de esfuerzo y creatividad, aunque te lleve más de dos semanas, deberías poder hacer fine-tuning de un modelo y lograr resultados de nivel estado del arte.
  • Quiero experimentar con esto, pero no tengo una GPU decente. Me pregunto cómo lo ejecuta la gente en la práctica.

  • Para mantenerse al día, ¿qué cuentas de Twitter conviene seguir?

  • ¿Hay un PDF en algún lado? Veo las instrucciones de build, pero no veo el archivo real.