CoreNet: Eine Bibliothek zum Training tiefer neuronaler Netze
(github.com/apple)- CoreNet ist ein Toolkit, mit dem Forschende und Ingenieur:innen neuronale Netzmodelle für verschiedenste Aufgaben trainieren können – von Foundation-Modellen wie CLIP und LLMs bis hin zu Objektklassifizierung, Objekterkennung und semantischer Segmentierung
- In CoreNet 0.1.1 vom Oktober 2024 wurde als neues Projekt KV Prediction aufgenommen; die zugehörige Forschung zielt auf eine Verbesserung der Time to First Token ab
- Mehrere Forschungsarbeiten von Apple nutzen CoreNet, und im Ordner
projects/werden Trainings-/Evaluierungsrezepte zusammen mit Links zu vortrainierten Modellen bereitgestellt - Modelle und Datensätze sind in aufgabenspezifischen Verzeichnissen organisiert, und Modellklassen werden über den Decorator
@MODEL_REGISTRY.registersowie den YAML-Konfigurationswertmodels.<task_name>.namemit Training und Evaluierung verknüpft - CoreNet ist aus CVNets hervorgegangen, umfasst inzwischen breitere Anwendungsfälle über Computer Vision hinaus und erweitert den Umfang bis zum Training von Foundation-Modellen einschließlich LLMs
Zweck und Umfang von CoreNet
- CoreNet ist ein Toolkit für tiefe neuronale Netze zum Trainieren standardisierter Modelle sowie neuer kleiner und großer Modelle
- Der unterstützte Aufgabenbereich umfasst unter anderem
- Foundation-Modelle: CLIP, LLMs
- Objektklassifizierung
- Objekterkennung
- semantische Segmentierung
Update vom Oktober 2024
- CoreNet 0.1.1 enthält das Projekt KV Prediction
- Zur Liste der zugehörigen Apple-Forschungsarbeiten gehört KV Prediction for Improved Time to First Token
Apple-Forschung und Projektrezepte
- Mehrere veröffentlichte Forschungsarbeiten von Apple verwenden CoreNet
- Im Ordner
projects/werden Trainings-/Evaluierungsrezepte und Links zu vortrainierten Modellen bereitgestellt - Die im README aufgeführte Forschungsliste umfasst
- 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 usw.
Installations- und Laufzeitvoraussetzungen
- Für Tests, das Ausführen von Jupyter-Notebooks und Beiträge müssen Git LFS installiert und aktiviert sein
- Unter Linux werden Python 3.10+ und PyTorch v2.1.0 oder höher empfohlen
- Unter macOS wird darauf hingewiesen, dass das System-Python 3.9+ ausreicht
- Optionale Abhängigkeiten für Audio- und Videoverarbeitung sind
- Linux:
libsox-dev,ffmpeg - macOS:
sox,ffmpeg
- Linux:
- Da das macOS-Dateisystem Groß-/Kleinschreibung nicht unterscheidet, kann es in Git zu Problemen kommen; daher sollte auf das Repository mit derselben Schreibweise im Pfad zugegriffen werden, wie sie in
lsangezeigt wird
Repository-Struktur und Nutzungsablauf
tutorials/bietet Beispiele für den Einstieg in CoreNet- Training eines neuen Modells auf einem neuen Datensatz
- Leitfaden für Slurm- und Multi-Node-Training
- Notebooks zu CLIP, semantischer Segmentierung und Objekterkennung
projects/bietet reproduzierbare Trainingsrezepte pro Paper sowie vortrainierte Gewichte und Checkpoints- Die
README.mdjedes Projekts enthält Dokumentation, Links zu vortrainierten Gewichten und Zitationsinformationen <task_name>/<model_name>.yamlliefert Konfigurationen zur Reproduktion von Training und Evaluierung- Projektbeispiele sind
kv-prediction,byteformer,catlip,clip,fastvit,mobileone,mobilevit,openelm,resnet,vitusw.
- Die
mlx_examples/bietet MLX-Beispiele zum effizienten Ausführen von CoreNet-Modellen auf Apple Silicon- Enthaltene Beispiele sind
clip,open_elm
- Enthaltene Beispiele sind
Modelle, Datensätze und Komponenten
- Modellimplementierungen sind nach Aufgaben unter
corenet/modeling/modelsorganisiertaudio_classificationclassificationdetectionlanguage_modelingmulti_modal_img_textsegmentation
- Jede Modellklasse wird mit dem Decorator
@MODEL_REGISTRY.register(name="<model_name>", type="<task_name>")registriert - Um ein Modell im CoreNet-Training oder bei der Evaluierung zu verwenden, wird in der YAML-Konfiguration
models.<task_name>.name = <model_name>festgelegt - Datensätze werden ebenso wie Modelle in aufgabenspezifische Verzeichnisse einsortiert
- Zu den wichtigsten internen Komponenten gehören
loss_fn,metrics,optims,schedulertrain_eval_pipelinescollate_fns,sampler,text_tokenizer,transforms,video_readerlayers,modules,neural_augmentor,text_encoders
Beziehung zu CVNets
- CoreNet ist ein aus CVNets hervorgegangenes Projekt
- Der erweiterte Umfang schließt breitere Anwendungen über Computer Vision hinaus ein
- Diese Erweiterung ermöglicht das Training von Foundation-Modellen einschließlich LLMs
- Bei der Nutzung von CoreNet bittet das README um Zitierung des Papers
CVNets: High Performance Library for Computer Vision
1 Kommentare
Hacker-News-Kommentare
CoreNet scheint sich aus CVNets weiterentwickelt zu haben und nun breitere Einsatzbereiche außerhalb von Computer Vision abzudecken; offenbar ist damit auch das Training von Foundation Models wie LLMs möglich
Der Ausgangspunkt dürfte hier gewesen sein: https://apple.github.io/ml-cvnets/index.html
Es wirkt wie eine Implementierung einer Zwischenschicht für Training und Inferenz; wenn man sich
default_trainer.py[1] ansieht, nutzt die Engine zwar Torch-Tensoren, implementiert die Trainingslogik aber selbst. Auch Learning-Rate-Scheduler und Optimizer sind selbst implementiert, wobei der Aufrufer optional Adam von Torch verwenden kannDie Entscheidung, das von Grund auf aufzubauen, statt mit bestehenden Frameworks zusammenzuarbeiten und First-Class-Support einzubauen, ist interessant – und vielleicht sehr typisch Apple
Die MLX-Beispiele wirken derzeit eher inference-only. Sie könnten aber auch ein Landeplatz für künftige MLX-spezifische Implementierungen sein: https://github.com/apple/corenet/blob/5b50eca42bc97f6146b812...
Wenn man die jüngsten Übernahmen von Datakalab https://news.ycombinator.com/item?id=40114350 und DarwinAI https://news.ycombinator.com/item?id=39709835 mitbedenkt, wird es spannend zu verfolgen, wie sich das im nächsten Jahr entwickelt
1: https://github.com/apple/corenet/blob/main/corenet/engine/de...
Ich frage mich, wie nützlich das für Forschende ist, die an der Modellarchitektur herumexperimentieren wollen
Beispiel: https://github.com/apple/corenet/tree/main/projects/clip#tra...
Die meisten Modelle veröffentlichen weder Trainingsquellcode noch Datensätze, Preprocessing- oder Evaluationscode. Ist also überhaupt bekannt, wie eine High-Level-Implementierung aussieht?
Apple ist bei AI deutlich zurückgefallen und scheint nun aufholen zu wollen
Interessant ist, dass Apple auch https://github.com/apple/axlearn aktiv entwickelt, eine Bibliothek auf Basis von Jax
Es wirkt, als würde die Hälfte von Apples Machine-Learning-Teams PyTorch nutzen und die andere Hälfte Jax. Vielleicht sind sie auch zwischen Google Cloud und AWS aufgeteilt
Wenn es keinen guten Grund gibt, sich auf ein einzelnes Tool zu standardisieren, ist es meist einfacher, das Tool zu wählen, das zum Problem des jeweiligen Teams und zu dessen Erfahrung passt
Soweit ich weiß, haben die einzelnen Organisationen beträchtliche Autonomie
Im README steht auch das hier:
CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text DataCatLIP höre ich zum ersten Mal, und der Link scheint kaputt zu sein
Ich frage mich, wie schnell CatLIP ist. Das obige Beispiel auf Basis von OpenAI CLIP ist bereits schnell
Es wurde auf PyTorch aufgebaut
Ich frage mich, wie sich das mit MLX vergleicht. So wie ich es verstehe, entspricht MLX PyTorch, ist aber für Apple Silicon optimiert
Ist das hier dafür gedacht, MLX-Modelle verteilt zu trainieren? Oder was ist der Zweck?
mlx_examples/open_elmsteht: „MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.“Ich frage mich, welchen Vorteil es hat, das hier zu verwenden, verglichen damit, das MPS-Backend an Hugging Face Transformers anzubinden.
mlx_example/clipist ein Beispiel, das die CLIP-Modellimplementierung von CoreNet in das CLIP-Beispiel von MLX überführt und einige individuelle Anpassungen einfügt.FP16-Base-Variante: 60 % schneller als PyTorch
FP16-Huge-Variante: 12 % schneller
mlx_example/open_elmist ein MLX-Port des mit CoreNet trainierten OpenELM-Modells. MLX ist ein Apple-Deep-Learning-Framework mit ähnlicher Ausrichtung wie PyTorch und für Hardware auf Basis von Apple Silicon optimiert.Der Vorteil scheint zu sein, dass es durch die Spezialisierung auf Apple Silicon zusätzliche Geschwindigkeitsgewinne gibt. Bei kleinen Modellen könnte es das energieeffizienteste Framework für das Training tiefer neuronaler Netze sein, aber das wird man erst wissen, wenn echte Benchmarks vorliegen.
In diesem Repository gibt es viele praktische Utilities sowie einige recht saubere Implementierungen gängiger Modelle und Metriken.
Mit anderen Worten: Es wirkt eher dafür geeignet, neue Modelle zu schreiben, als für Inferenz.
Es wäre schön, wenn es für solche Repositories einen LLM-Agenten gäbe, der zuverlässig kleine API-Beispiele für verschiedene Modelle und Nutzungsarten erzeugt.
Ich frage mich, ob Training auf Apple Silicon unterstützt wird. Wenn ich es im README nicht übersehen habe, ist das nicht besonders klar.
Es sei denn, man hat für eigenes Training private Server auf Basis von Apple Silicon.
Beim Durchsehen der Ordner sieht es so aus, als gäbe es viele Klassen, die nur von PyTorch- und torchvision-Klassen erben und nichts Neues tun.
Bei allen Optimierern, Schedulern und den meisten Layers ist das so. Allerdings gibt es ziemlich viele Blöcke, die Layer-Kombinationen aus verschiedenen Papers sind, ähnlich wie
monai.networks.blocks.Auf der Ebene der „Bausteine“ gibt es auch einige neu implementierte Loss-Funktionen und Metriken.
Ich frage mich, welche Bibliothek für Training und Inferenz neuronaler Netze auf dem Apple M1 empfohlen wird. Ich möchte sie aus C++ oder Rust verwenden, und das neuronale Netz wird voraussichtlich höchstens etwa 5 Millionen Parameter haben.