2 points par GN⁺ 2024-04-25 | 1 commentaires | Partager sur WhatsApp
  • CoreNet est une boîte à outils qui permet aux chercheurs et aux ingénieurs d’entraîner des modèles de réseaux neuronaux pour une grande variété de tâches, depuis les modèles de fondation comme CLIP et les LLM jusqu’à la classification d’objets, la détection d’objets et la segmentation sémantique
  • En octobre 2024, CoreNet 0.1.1 a intégré KV Prediction comme nouveau projet ; les recherches associées visent à améliorer le Time to First Token
  • Plusieurs travaux de recherche d’Apple utilisent CoreNet, et le dossier projects/ fournit des recettes d’entraînement et d’évaluation ainsi que des liens vers des modèles préentraînés
  • Les modèles et les datasets sont organisés dans des répertoires par tâche, et les classes de modèles sont reliées à l’entraînement et à l’évaluation via le décorateur @MODEL_REGISTRY.register et la valeur models.<task_name>.name dans la configuration YAML
  • CoreNet a évolué à partir de CVNets pour couvrir des applications plus larges que la vision par ordinateur, et étend son périmètre jusqu’à l’entraînement de modèles de fondation, y compris les LLM

Objectif et périmètre de CoreNet

  • CoreNet est une boîte à outils de réseaux neuronaux profonds destinée à entraîner des modèles standards ainsi que de nouveaux modèles de petite et grande taille
  • Les tâches prises en charge incluent notamment
    • Modèles de fondation : CLIP, LLM
    • Classification d’objets
    • Détection d’objets
    • Segmentation sémantique

Mise à jour d’octobre 2024

Recherches Apple et recettes de projets

Installation et conditions d’exécution

  • Pour exécuter les tests et les notebooks Jupyter, ainsi que pour contribuer, l’installation et l’activation de Git LFS sont nécessaires
  • Sous Linux, Python 3.10+ et PyTorch v2.1.0 ou version ultérieure sont recommandés
  • Sous macOS, le Python 3.9+ du système est indiqué comme suffisant
  • Les dépendances optionnelles pour le traitement audio et vidéo sont les suivantes
    • Linux : libsox-dev, ffmpeg
    • macOS : sox, ffmpeg
  • Le système de fichiers de macOS n’étant pas sensible à la casse, cela peut provoquer des problèmes avec Git ; il faut donc accéder au dépôt avec un chemin respectant la casse visible dans ls

Structure du dépôt et flux d’utilisation

  • tutorials/ fournit des exemples pour démarrer avec CoreNet
    • Entraînement d’un nouveau modèle sur un nouveau dataset
    • Guide pour Slurm et l’entraînement multi-nœuds
    • Notebooks sur CLIP, la segmentation sémantique et la détection d’objets
  • projects/ fournit, pour chaque article, des recettes d’entraînement reproductibles ainsi que des poids préentraînés et des checkpoints
    • Le README.md de chaque projet fournit la documentation, des liens vers les poids préentraînés et les informations de citation
    • <task_name>/<model_name>.yaml fournit la configuration permettant de reproduire l’entraînement et l’évaluation
    • Parmi les exemples de projets figurent kv-prediction, byteformer, catlip, clip, fastvit, mobileone, mobilevit, openelm, resnet, vit, etc.
  • mlx_examples/ fournit des exemples MLX pour exécuter efficacement des modèles CoreNet sur Apple Silicon
    • Les exemples inclus sont clip et open_elm

Modèles, datasets et composants

  • Les implémentations de modèles sont organisées par tâche sous corenet/modeling/models
    • audio_classification
    • classification
    • detection
    • language_modeling
    • multi_modal_img_text
    • segmentation
  • Chaque classe de modèle est enregistrée avec le décorateur @MODEL_REGISTRY.register(name="<model_name>", type="<task_name>")
  • Pour utiliser un modèle dans l’entraînement ou l’évaluation avec CoreNet, il faut définir models.<task_name>.name = <model_name> dans la configuration YAML
  • Les datasets sont eux aussi classés dans des répertoires par tâche, comme les modèles
  • Les principaux composants internes incluent notamment
    • loss_fn, metrics, optims, scheduler
    • train_eval_pipelines
    • collate_fns, sampler, text_tokenizer, transforms, video_reader
    • layers, modules, neural_augmentor, text_encoders

Relation avec CVNets

  • CoreNet est un projet issu de CVNets
  • Son périmètre élargi couvre des applications plus larges que la vision par ordinateur
  • Cette extension rend possible l’entraînement de modèles de fondation, y compris les LLM
  • En cas d’utilisation de CoreNet, le README demande de citer l’article CVNets: High Performance Library for Computer Vision

1 commentaires

 
GN⁺ 2024-04-25
Avis Hacker News
  • CoreNet semble avoir évolué à partir de CVNets pour couvrir des usages plus larges que la vision par ordinateur, et permettre aussi l’entraînement de modèles de base comme les LLM
    Le point de départ était sans doute ici : https://apple.github.io/ml-cvnets/index.html
    Cela ressemble à une implémentation de couche intermédiaire pour l’entraînement et l’inférence, et si on regarde default_trainer.py[1], le moteur utilise les tenseurs de torch mais la méthode d’entraînement est implémentée en interne. Le scheduler de taux d’apprentissage et les optimiseurs sont aussi implémentés directement, et l’appelant peut utiliser éventuellement Adam de torch
    Le choix de construire cela depuis la base plutôt que de collaborer avec les frameworks existants pour y ajouter un support de premier plan est intéressant, et peut-être très typique d’Apple
    Les exemples MLX semblent pour l’instant réservés à l’inférence. Mais cela pourrait aussi être le point d’atterrissage d’une future implémentation dédiée à MLX : https://github.com/apple/corenet/blob/5b50eca42bc97f6146b812...
    En tenant compte aussi des acquisitions récentes de Datakalab https://news.ycombinator.com/item?id=40114350 et DarwinAI https://news.ycombinator.com/item?id=39709835, il sera intéressant de voir comment Apple évoluera au cours de l’année à venir
    1: https://github.com/apple/corenet/blob/main/corenet/engine/de...

    • L’interface aussi paraît assez typique d’Apple. On dirait une structure où l’on crée un fichier de configuration, y met le modèle et les hyperparamètres déjà envisagés, puis on obtient une interface simple
      Je me demande dans quelle mesure cela sera utile aux chercheurs qui veulent modifier la structure du modèle dans tous les sens
      Ex. : https://github.com/apple/corenet/tree/main/projects/clip#tra...
    • Ce qui est dit sur le projet est juste, mais PyTorch fonctionne sur Mac et TensorFlow aussi a été porté sur Mac par Apple
    • À propos de l’idée que cela ressemble à une implémentation de couche intermédiaire entre entraînement et inférence, je connais mal ce domaine mais je me demande à quoi ressemble réellement une implémentation d’entraînement moderne
      La plupart des modèles ne publient ni le code source de l’entraînement, ni les jeux de données, ni le prétraitement, ni le code d’évaluation. Dans ce cas, sait-on vraiment à quoi ressemble une implémentation de haut niveau ?
    • Il est difficile de parler d’implémentation maison, les optimiseurs héritent simplement des optimiseurs PyTorch
    • Le choix de repartir de zéro au lieu de collaborer avec les frameworks existants pour ajouter un support de premier plan donne l’impression d’une préparation un peu précipitée avant la WWDC
      Apple est très en retard sur l’IA et semble maintenant essayer de rattraper son retard
  • Il est intéressant qu’Apple développe aussi activement https://github.com/apple/axlearn, une bibliothèque au-dessus de Jax
    On dirait que la moitié de l’équipe machine learning d’Apple utilise PyTorch, et l’autre moitié Jax. Peut-être aussi une séparation entre Google Cloud et AWS

    • Dans une grande entreprise comme Apple, ce genre de chose est assez courant. Le coût de coordination est réellement élevé
      S’il n’y a pas de bonne raison de standardiser sur un seul outil, il est souvent plus simple de laisser les équipes choisir l’outil adapté aux problèmes qu’elles résolvent et à leur expérience
    • Je n’y ai jamais travaillé directement, mais j’ai toujours entendu dire qu’Apple ressemblait moins à une organisation unique et cohérente comme Meta qu’à un ensemble de plusieurs entreprises ou startups
      Je comprends que chaque organisation dispose d’une autonomie importante
  • Il y a aussi ceci dans le README :
    CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data
    Je n’avais jamais entendu parler de CatLIP, et le lien semble cassé

  • C’est construit au-dessus de PyTorch

  • Je me demande comment cela se compare à MLX. Si j’ai bien compris, MLX correspond à PyTorch mais optimisé pour Apple Silicon
    Est-ce que c’est fait pour entraîner des modèles MLX de manière distribuée ? Ou quel est exactement l’objectif ?

    • MLX semble aussi faire partie de ce plan. https://github.com/apple/corenet liste les exemples MLX comme l’un des composants publiés en avril
    • Comme indiqué dans mlx_examples/open_elm, “MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”
    • En parcourant le README, cela ressemble à une couche au-dessus de MLX. Cela paraît plus proche d’une couche de framework qui simplifie le machine learning
  • Je me demande quel est l’avantage d’utiliser ceci par rapport au fait de brancher le backend MPS à Huggingface Transformers

    • « MLX examples demonstrate how to run CoreNet models efficiently on Apple Silicon. Please find further information in the README.md file within the corresponding example directory. »
      mlx_example/clip est un exemple qui convertit l’implémentation du modèle CLIP de CoreNet en exemple CLIP de MLX et y ajoute quelques ajustements personnalisés
      Variante FP16 Base : 60 % plus rapide que PyTorch
      Variante FP16 Huge : 12 % plus rapide
      mlx_example/open_elm est un port MLX du modèle OpenELM entraîné avec CoreNet. MLX est un framework Apple de deep learning, comparable à PyTorch, et optimisé pour le matériel basé sur Apple Silicon
      L’avantage semble être un gain de vitesse supplémentaire grâce à l’optimisation spécifique à Apple Silicon. Pour les petits modèles, c’est peut-être même le framework d’apprentissage profond le plus efficace énergétiquement, mais il faudra de vrais benchmarks pour le savoir
    • L’implémentation ici semble assez propre et modulaire, alors que Transformers et Diffusers ne le sont pas vraiment sauf si on n’en extrait que certains modules
      Ce dépôt contient beaucoup d’utilitaires pratiques, ainsi que des implémentations assez propres de modèles courants et de métriques d’évaluation, entre autres
      Autrement dit, cela semble plus adapté à l’écriture de nouveaux modèles qu’à l’inférence
    • Rien de particulièrement spécial, c’est essentiellement un PyTorch avec un logo Apple
  • Ce serait bien d’avoir, pour ce genre de dépôt, un agent LLM capable de générer de façon fiable de petits exemples d’API pour différents modèles et usages

  • Je me demande si l’entraînement est pris en charge sur Apple Silicon. À moins que je l’aie raté dans le README, ce n’est pas très clair

    • Je ne sais pas si ce genre de fonction d’entraînement serait utile au-delà de petites expérimentations. Apple ne fabrique plus de produits serveur, et même à l’époque où c’était le cas, ils étaient chers
      À moins d’avoir ses propres serveurs privés basés sur Apple Silicon pour l’entraînement
    • Les exemples MLX semblent rendre cela possible. Cela ressemble davantage à un framework généraliste qu’à quelque chose réservé au Mac
  • En parcourant les dossiers, j’ai vu beaucoup de classes qui semblent simplement hériter de classes PyTorch et torchvision sans rien apporter de nouveau
    C’est le cas de tous les optimiseurs, des ordonnanceurs et de la plupart des couches. En revanche, il y a pas mal de blocs qui combinent des couches issues de plusieurs articles, un peu comme monai.networks.blocks
    Côté « composants », il y a aussi quelques nouvelles implémentations de fonctions de perte et de métriques d’évaluation

  • Je me demande ce que vous recommanderiez comme bibliothèque pour l’entraînement et l’inférence de réseaux de neurones sur Apple M1. J’aimerais l’utiliser en C++ ou en Rust, et les réseaux devraient faire au maximum 5 millions de paramètres

    • Comme point de départ, j’utiliserais PyTorch. Sur Apple Silicon, le backend Metal est assez rapide, et c’est la bibliothèque la plus largement utilisée, du développeur amateur jusqu’au créateur de modèles de base