CoreNet : une bibliothèque pour l’entraînement de réseaux neuronaux profonds
(github.com/apple)- 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.registeret la valeurmodels.<task_name>.namedans 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
- CoreNet 0.1.1 inclut le projet KV Prediction
- La liste des recherches Apple associées inclut KV Prediction for Improved Time to First Token
Recherches Apple et recettes de projets
- Plusieurs travaux de recherche publics d’Apple utilisent CoreNet
- Le dossier
projects/fournit des recettes d’entraînement et d’évaluation ainsi que des liens vers des modèles préentraînés - La liste des travaux mentionnés dans le README est la suivante
- KV Prediction for Improved Time to First Token
- OpenELM: An Efficient Language Model Family with Open Training and Inference Framework
- CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data
- FastVit: A Fast Hybrid Vision Transformer using Structural Reparameterization
- Bytes Are All You Need: Transformers Operating Directly on File Bytes
- MobileOne: An Improved One millisecond Mobile Backbone
- MobileViT, MobileViTv2, CVNets, etc.
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
- Linux :
- 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.mdde chaque projet fournit la documentation, des liens vers les poids préentraînés et les informations de citation <task_name>/<model_name>.yamlfournit 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.
- Le
mlx_examples/fournit des exemples MLX pour exécuter efficacement des modèles CoreNet sur Apple Silicon- Les exemples inclus sont
clipetopen_elm
- Les exemples inclus sont
Modèles, datasets et composants
- Les implémentations de modèles sont organisées par tâche sous
corenet/modeling/modelsaudio_classificationclassificationdetectionlanguage_modelingmulti_modal_img_textsegmentation
- 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,schedulertrain_eval_pipelinescollate_fns,sampler,text_tokenizer,transforms,video_readerlayers,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
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 torchLe 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...
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...
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 ?
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
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 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 DataJe n’avais jamais entendu parler de CatLIP, et le lien semble cassé
Je me demande à quel point CatLIP est rapide. L’exemple ci-dessus basé sur OpenAI CLIP est déjà rapide
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_examples/open_elm, “MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”Je me demande quel est l’avantage d’utiliser ceci par rapport au fait de brancher le backend MPS à Huggingface Transformers
mlx_example/clipest un exemple qui convertit l’implémentation du modèle CLIP de CoreNet en exemple CLIP de MLX et y ajoute quelques ajustements personnalisésVariante FP16 Base : 60 % plus rapide que PyTorch
Variante FP16 Huge : 12 % plus rapide
mlx_example/open_elmest 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 SiliconL’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
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
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
À moins d’avoir ses propres serveurs privés basés sur Apple Silicon pour l’entraînement
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.blocksCô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