4 points par GN⁺ 2024-01-25 | 1 commentaires | Partager sur WhatsApp
  • Machine Learning Engineering Open Book est une ressource ouverte qui rassemble des méthodologies, des outils et des commandes pas à pas pour mener à bien l’entraînement, le fine-tuning et l’inférence de modèles LLM, VLM et RAG
  • Le public visé est celui des ingénieurs et opérateurs en entraînement LLM/VLM, et l’ouvrage inclut de nombreux scripts et commandes copiables-exécutables pour résoudre rapidement les problèmes
  • Le contenu s’appuie sur un savoir-faire accumulé à partir des expériences d’entraînement de BLOOM-176B en 2022, IDEFICS-80B en 2023, puis des modèles RAG chez Contextual.AI en 2024
  • Le périmètre couvre le choix du cloud, les accélérateurs, le stockage, le réseau, l’orchestration, l’entraînement, l’inférence, le débogage, les tests et diverses ressources, avec des versions ebook en PDF et EPUB
  • Il s’agit d’un dépôt public de connaissances permettant aux communautés qui ont du mal à manipuler directement de grands clusters de calcul ML d’apprendre indirectement un savoir opérationnel issu d’expériences réelles d’entraînement à grande échelle

Objectif du livre et public visé

  • Machine Learning Engineering Open Book est une collection ouverte de connaissances consacrée à l’entraînement, au fine-tuning et à l’inférence des grands modèles de langage et des modèles multimodaux
  • Son caractère est fortement technique, avec des scripts et des commandes prêtes à copier-coller afin que les ingénieurs et opérateurs en entraînement LLM/VLM puissent l’appliquer rapidement
  • Le contenu du dépôt provient à l’origine de notes personnelles destinées à retrouver rapidement des solutions déjà étudiées et testées en pratique, puis a été partagé avec l’ensemble de la communauté ML

Un périmètre fondé sur l’expérience

  • Une grande partie du savoir-faire a été accumulée lors d’expériences réelles d’entraînement de modèles à grande échelle
    • Entraînement du modèle open source BLOOM-176B en 2022
    • Entraînement du modèle multimodal IDEFICS-80B en 2023
    • Entraînement de modèles RAG chez Contextual.AI en 2024
  • L’accent est mis sur la transmission à la communauté de connaissances indirectes dans un domaine difficile à expérimenter directement en raison du coût élevé de location des grands clusters de calcul ML

Thèmes couverts

  • Insights

    • AI Battlefield Engineering
    • Comment choisir un fournisseur cloud
  • Hardware

    • Compute : accélérateurs, CPU, mémoire CPU
    • Storage : systèmes de fichiers locaux, distribués et partagés
    • Network : réseau intra-nœud et inter-nœuds
  • Orchestration

    • Systèmes d’orchestration pour gérer les conteneurs et les ressources
    • SLURM : Simple Linux Utility for Resource Management
  • Training / Inference

    • Guides liés à l’entraînement des modèles
    • Enseignements liés à l’inférence des modèles
  • Development

    • Débogage et résolution de problèmes, des plus simples aux plus complexes
    • The Art of Debugging Open book, qui rassemble des recettes et des méthodologies associées
    • Conseils et outils pour aider à écrire des tests
  • Miscellaneous

    • Ressources chronologiques sur les LLM/VLM

Tableaux comparatifs et outils pour aller vite

  • Les tableaux comparatifs des accélérateurs haute performance couvrent les TFLOPS théoriques ainsi que la taille et la vitesse de la mémoire des accélérateurs
  • Les tableaux comparatifs réseau couvrent les vitesses théoriques du réseau inter-nœuds et du réseau intra-nœud
  • Des raccourcis distincts sont proposés vers les outils les plus utilisés
    • all_reduce_bench.py : outil pour benchmarker le débit réseau plus facilement que nccl-tests
    • torch-distributed-gpu-test.py : outil pour tester rapidement la connectivité inter-nœuds
    • mamf-finder.py : outil pour trouver les mesures de TFLOPS réellement obtenables sur des accélérateurs
  • Des raccourcis distincts sont aussi proposés vers les guides les plus utilisés
    • Solutions de débogage rapidement applicables quand une application PyTorch se bloque ou se casse
    • Cheat sheet et astuces pour les utilisateurs de SLURM
    • Comment créer de petits modèles, jeux de données et tokenizers
    • Collection de logbooks publics d’entraînement LLM/VLM

Formats de distribution et participation

  • L’ebook est disponible sur le Hugging Face Hub
  • L’ebook devrait être reconstruit toutes les quelques semaines, et des instructions sont également fournies pour générer soi-même la version la plus récente
  • Les discussions autour de l’ingénierie ML peuvent avoir lieu dans les community discussions du dépôt
  • Les bugs, fautes de frappe et propositions d’amélioration peuvent être soumis via les Issues ou par PR
  • La licence du contenu est Attribution-ShareAlike 4.0 International
  • Les informations de citation incluent Machine Learning Engineering Open Book, l’année 2023-2026 et l’URL du dépôt GitHub

1 commentaires

 
GN⁺ 2024-01-25
Commentaires Hacker News
  • Je fais tous les jours du débogage de configurations d’entraînement de LLM dans le cadre d’un travail de support à la recherche, et je me dis que j’aurais vraiment aimé avoir ce genre de notes quand j’ai commencé.

    • En tant que développeur de jeux, j’essaie de me lancer dans le machine learning/deep learning, et mon plus grand défi a été de trouver un problème suffisamment accessible pour apprendre en pratiquant, tout en ayant une vraie valeur. Je pense en avoir trouvé un, et j’aimerais avoir des avis.
      Aujourd’hui, pour collecter des données de capture de mouvement destinées à l’animation de jeux/films, il existe deux systèmes : inertiel et optique. L’inertiel est plus simple et moins coûteux, mais il génère beaucoup d’erreurs de capture et d’imprécisions qui nécessitent des corrections manuelles ; l’optique est plus précis et demande moins de nettoyage, mais le matériel et l’espace coûtent cher.
      L’idée serait de porter une combinaison de motion capture inertielle tout en enregistrant simultanément une session optique, puis d’entraîner un modèle de machine learning à la correction automatique des données de capture de mouvement. En théorie, il devrait être possible de faire passer les enregistrements inertiels dans un modèle de machine learning pour obtenir une précision de niveau optique.
      Je me demande si c’est un bon sujet pour un premier projet, comment l’aborder, et s’il existe des projets existants à consulter.
  • J’aide des scientifiques appliqués sur des tâches liées à l’entraînement et au déploiement de modèles, et je me demande comment je pourrais être exposé à des travaux d’ingénierie plus bas niveau comme l’optimisation et la performance.
    Il existe bien une équipe d’infra ML dans l’entreprise, mais son objectif est plutôt de construire des outils autour de la plateforme, pas de se concentrer sur l’exécution optimale des workloads.

    • À mon avis, l’optimisation est impossible sans profiling. Se familiariser avec les outils permettant de comprendre les performances d’un modèle peut être une première étape.
      Exemple : https://pytorch.org/tutorials/recipes/recipes/profiler_recip...
    • Les ressources de Brendan Gregg sur les performances système et le profiling sont un bon point de départ. Une bonne partie des problèmes de performance en ML finit par se ramener à Linux perf, ou à comprendre ce qui se passe vraiment dans des systèmes de planification de calcul haute performance comme SLURM.
      https://www.brendangregg.com/linuxperf.html
  • J’ai particulièrement aimé la partie Unsolicited Advice de la section AI Battlefield. Elle aborde de façon très réaliste la réalité où tout avance à une vitesse folle, et la charge émotionnelle de se sentir constamment submergé par les progrès acharnés et radicaux du développement de l’IA.
    https://github.com/stas00/ml-engineering/blob/master/insight...

  • À quel point Slurm est-il répandu ?

    • Slurm est pratiquement omniprésent dans la communauté du calcul haute performance (HPC). Côté HPC, les concurrents comparables sont, à mon avis, surtout les ordonnanceurs de ressources SGE [1] et Torque/PBS [2].
      Je ne connais pas les chiffres exacts, mais je suppose que l’écrasante majorité des supercalculateurs du Top 500 [3] tournent avec Slurm. Comme d’autres l’ont dit, la plupart des centres de calcul de recherche universitaires utilisent aussi Slurm, et il domine également dans les laboratoires nationaux du DoE américain.
      Et fait amusant, peut-être légendaire : le nom « Simple Linux Utility for Resource Management (SLURM) » serait un rétroacronyme inspiré de la boisson 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
    • Selon Wikipédia, « Slurm est utilisé comme gestionnaire de workloads sur environ 60 % des supercalculateurs du TOP500 ». Je l’ai utilisé comme frontend de gestion des jobs sur la plupart des clusters de calcul depuis une dizaine d’années.
    • Les modèles Llama 2 ont aussi été entraînés avec Slurm.
    • À ce sujet, je me demande si quelqu’un a réussi une migration de Slurm vers Kubernetes sur un cluster physique principalement consacré à l’entraînement de grands modèles avec de nombreux GPU.
    • Il est utilisé dans la plupart des clusters de calcul haute performance. Les sites encore sous Torque sont plutôt l’exception.
  • J’ai cliqué au hasard sur la section reproductibilité, et je me demande toujours comment obtenir la reproductibilité en entraînement distribué. Une synchronisation déterministe ne ralentit-elle pas les choses ? Pourtant, j’ai entendu dire qu’au moins dans quelques grandes entreprises, les entraînements sont reproductibles.

    • On cherche probablement à rendre les mises à jour d’entraînement aussi commutatives que possible. Ainsi, l’ordre dans lequel les mises à jour sont appliquées n’a plus d’importance.
  • Comment peut-on acquérir de l’expérience sur ce genre de choses sans avoir de travail ?

    • Il suffit de lire des ressources comme le livre proposé, puis de faire soi-même de petits projets.
      Ce n’est pas très différent d’apprendre à programmer quand on n’a pas déjà un emploi de développeur.
      Bien sûr, cela ne veut pas dire que l’un ou l’autre est facile : il faut un engagement important.
    • Si l’objectif est de trouver un emploi, il faut avoir des attentes réalistes.
      Comparé à des domaines comme le développement web, le marché de l’emploi ici est très réduit, et les projets exigent des spécialistes ayant des connaissances très approfondies. Ce n’est pas le genre de travail où ChatGPT ou Stack Overflow aident énormément.
    • On peut faire un side project ou rejoindre celui de quelqu’un d’autre. Le plus important est de se connecter à la communauté et d’apprendre le langage technique permettant de discuter avec elle.
      Cette communauté est relativement petite, et il faut plusieurs choses pour y entrer : un certain niveau en machine learning, de solides compétences en code, une compréhension du fonctionnement des accélérateurs modernes, et la capacité à lire et comprendre les articles de recherche dans ce domaine.
    • D’après mon expérience, la meilleure méthode est le side project. Ne vous contentez pas d’apprendre des technologies : choisissez un projet réalisable qui utilise une nouvelle compétence que vous voulez acquérir, puis creusez-le.
      Choisir quelque chose de « réalisable » est souvent délicat, donc n’ayez pas peur de réévaluer au bout de quelques semaines et d’ajuster vos attentes si nécessaire.
      L’important est de continuer à avancer.
    • Suivez le cours fast.ai. Avec un peu d’effort et de créativité, même si cela prend plus de deux semaines, vous devriez pouvoir fine-tuner un modèle et obtenir des résultats à l’état de l’art.
  • J’aimerais expérimenter ça, mais je n’ai pas de GPU correct. Je me demande comment les autres font tourner ça en pratique.

  • Quels comptes Twitter vaut-il mieux suivre pour rester à jour ?

  • Y a-t-il un PDF quelque part ? Je vois les instructions de build, mais pas le fichier lui-même.

    • Le PDF est maintenant disponible : https://github.com/stas00/ml-engineering#pdf-version
    • Il devrait être prêt dans quelques semaines. Le workflow de build est prêt, mais il reste à finaliser la feuille de style et la réorganisation de la structure des chapitres.