2 Punkte von GN⁺ 2024-04-25 | 1 Kommentare | Auf WhatsApp teilen
  • 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.register sowie den YAML-Konfigurationswert models.<task_name>.name mit 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

Apple-Forschung und Projektrezepte

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
  • 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 ls angezeigt 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.md jedes Projekts enthält Dokumentation, Links zu vortrainierten Gewichten und Zitationsinformationen
    • <task_name>/<model_name>.yaml liefert Konfigurationen zur Reproduktion von Training und Evaluierung
    • Projektbeispiele sind kv-prediction, byteformer, catlip, clip, fastvit, mobileone, mobilevit, openelm, resnet, vit usw.
  • mlx_examples/ bietet MLX-Beispiele zum effizienten Ausführen von CoreNet-Modellen auf Apple Silicon
    • Enthaltene Beispiele sind clip, open_elm

Modelle, Datensätze und Komponenten

  • Modellimplementierungen sind nach Aufgaben unter corenet/modeling/models organisiert
    • audio_classification
    • classification
    • detection
    • language_modeling
    • multi_modal_img_text
    • segmentation
  • 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, scheduler
    • train_eval_pipelines
    • collate_fns, sampler, text_tokenizer, transforms, video_reader
    • layers, 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

 
GN⁺ 2024-04-25
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 kann
    Die 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...

    • Auch das Interface wirkt ziemlich Apple-typisch. Es scheint so aufgebaut zu sein, dass man eine Konfigurationsdatei erstellt, ein bereits ins Auge gefasstes Modell und die Hyperparameter einträgt und dann ein einfaches Interface bekommt
      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...
    • Was das Projekt betrifft, stimmt das, aber PyTorch läuft auf Mace, und TensorFlow wurde ebenfalls von Apple auf den Mac portiert
    • Zu der Aussage, es wirke wie eine Zwischenschicht-Implementierung für Training und Inferenz: Ich kenne mich in diesem Bereich nicht gut aus und frage mich, wie moderne Trainingsimplementierungen tatsächlich aussehen
      Die meisten Modelle veröffentlichen weder Trainingsquellcode noch Datensätze, Preprocessing- oder Evaluationscode. Ist also überhaupt bekannt, wie eine High-Level-Implementierung aussieht?
    • Das lässt sich schwer als Eigenimplementierung bezeichnen; die Optimizer erben einfach von PyTorch-Optimizern
    • Die Entscheidung, das von Grund auf zu bauen, statt mit bestehenden Frameworks zusammenzuarbeiten und First-Class-Support einzubauen, wirkt ein wenig so, als sei sie mit Blick auf die WWDC etwas hastig vorbereitet worden
      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

    • In einem Großunternehmen wie Apple ist so etwas ziemlich üblich. Koordinationskosten sind tatsächlich hoch
      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
    • Ich habe dort nicht selbst gearbeitet, aber ich habe immer wieder gehört, dass Apple weniger eine einheitliche Organisation wie Meta ist, sondern eher ein Verbund mehrerer Unternehmen oder Startups
      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 Data
    CatLIP höre ich zum ersten Mal, und der Link scheint kaputt zu sein

  • 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 scheint ebenfalls Teil dieses Plans zu sein. https://github.com/apple/corenet listet MLX examples als eine der im April veröffentlichten Komponenten auf
    • Wie in mlx_examples/open_elm steht: „MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.“
    • Beim Überfliegen des README wirkt es wie eine Schicht über MLX. Es scheint eher eine Framework-Schicht zu sein, die Machine Learning einfacher macht
  • Ich frage mich, welchen Vorteil es hat, das hier zu verwenden, verglichen damit, das MPS-Backend an Hugging Face Transformers anzubinden.

    • „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 ist 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_elm ist 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.
    • Die Implementierung hier wirkt ziemlich sauber und modularisiert; Transformers und Diffusers sind das nicht, sofern man nicht einzelne Module separat herauslöst.
      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 gibt nichts Besonderes; im Grunde ist es PyTorch mit Apple-Logo.
  • 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.

    • Ich weiß nicht, ob so eine Trainingsfunktion über kleine Experimente hinaus nützlich wäre. Apple stellt keine Serverprodukte mehr her, und selbst als sie das noch taten, waren sie teuer.
      Es sei denn, man hat für eigenes Training private Server auf Basis von Apple Silicon.
    • Die MLX-Beispiele scheinen das möglich zu machen. Es wirkt eher wie ein allgemeines Framework als etwas nur für den Mac.
  • 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.

    • Als Ausgangspunkt würde ich PyTorch nehmen. Das Metal-Backend ist auf Apple Silicon ziemlich schnell, und es ist die am weitesten verbreitete Bibliothek – von Hobbyentwicklern bis hin zu Entwicklern von Foundation Models.