2 puntos por GN⁺ 2024-04-25 | 1 comentarios | Compartir por WhatsApp
  • CoreNet es un toolkit que permite a investigadores e ingenieros entrenar modelos de redes neuronales para una amplia variedad de tareas, desde modelos fundacionales como CLIP y LLM hasta clasificación de objetos, detección de objetos y segmentación semántica
  • En octubre de 2024, CoreNet 0.1.1 incorporó KV Prediction como nuevo proyecto; la investigación relacionada busca mejorar el Time to First Token
  • Varios trabajos de investigación de Apple usan CoreNet, y la carpeta projects/ incluye recetas de entrenamiento y evaluación junto con enlaces a modelos preentrenados
  • Los modelos y datasets están organizados en directorios por tarea, y las clases de modelo se conectan al entrenamiento y la evaluación mediante el decorador @MODEL_REGISTRY.register y el valor models.<task_name>.name en la configuración YAML
  • CoreNet evolucionó a partir de CVNets para incluir aplicaciones más amplias fuera de la visión por computadora, y amplía su alcance hasta el entrenamiento de modelos fundacionales, incluidos LLM

Propósito y alcance de CoreNet

  • CoreNet es un toolkit de redes neuronales profundas para entrenar modelos estándar y nuevos modelos pequeños y grandes
  • El rango de tareas admitidas incluye:
    • Modelos fundacionales: CLIP, LLM
    • Clasificación de objetos
    • Detección de objetos
    • Segmentación semántica

Actualización de octubre de 2024

Investigación de Apple y recetas de proyectos

Instalación y requisitos de ejecución

  • Para ejecutar pruebas y notebooks de Jupyter, y para contribuir, es necesario instalar y activar Git LFS
  • En Linux se recomienda Python 3.10+ y PyTorch v2.1.0 o superior
  • En macOS se indica que basta con el Python 3.9+ del sistema
  • Las dependencias opcionales para procesamiento de audio y video son las siguientes:
    • Linux: libsox-dev, ffmpeg
    • macOS: sox, ffmpeg
  • Como el sistema de archivos de macOS no distingue entre mayúsculas y minúsculas, pueden surgir problemas con Git; por eso, se debe acceder al repositorio usando una ruta con las mismas mayúsculas y minúsculas que se ven en ls

Estructura del repositorio y flujo de uso

  • tutorials/ ofrece ejemplos para empezar con CoreNet
    • Entrenar un modelo nuevo con un dataset nuevo
    • Guía de entrenamiento con Slurm y múltiples nodos
    • Notebooks de CLIP, segmentación semántica y detección de objetos
  • projects/ ofrece recetas de entrenamiento reproducibles por paper, junto con pesos preentrenados y checkpoints
    • El README.md de cada proyecto ofrece documentación, enlaces a pesos preentrenados e información de citación
    • <task_name>/<model_name>.yaml proporciona la configuración para reproducir el entrenamiento y la evaluación
    • Algunos ejemplos de proyectos son kv-prediction, byteformer, catlip, clip, fastvit, mobileone, mobilevit, openelm, resnet, vit, entre otros
  • mlx_examples/ ofrece ejemplos de MLX para ejecutar modelos de CoreNet de forma eficiente en Apple Silicon
    • Los ejemplos incluidos son clip y open_elm

Modelos, datasets y componentes

  • Las implementaciones de modelos se organizan por tarea bajo corenet/modeling/models
    • audio_classification
    • classification
    • detection
    • language_modeling
    • multi_modal_img_text
    • segmentation
  • Cada clase de modelo se registra con el decorador @MODEL_REGISTRY.register(name="<model_name>", type="<task_name>")
  • Para usar un modelo en el entrenamiento o la evaluación de CoreNet, se especifica models.<task_name>.name = <model_name> en la configuración YAML
  • Los datasets, al igual que los modelos, se clasifican en directorios por tarea
  • Los principales componentes internos incluyen:
    • loss_fn, metrics, optims, scheduler
    • train_eval_pipelines
    • collate_fns, sampler, text_tokenizer, transforms, video_reader
    • layers, modules, neural_augmentor, text_encoders

Relación con CVNets

  • CoreNet es un proyecto que evolucionó a partir de CVNets
  • Su alcance ampliado incluye aplicaciones más allá de la visión por computadora
  • Esta expansión permite entrenar modelos fundacionales, incluidos LLM
  • Si se usa CoreNet, el README solicita citar el paper CVNets: High Performance Library for Computer Vision

1 comentarios

 
GN⁺ 2024-04-25
Opiniones de Hacker News
  • CoreNet parece haber evolucionado a partir de CVNets para cubrir usos más amplios más allá de la visión por computadora, e incluso permitir el entrenamiento de modelos fundacionales como los LLM.
    El punto de partida probablemente fue este: https://apple.github.io/ml-cvnets/index.html
    Parece una implementación de capa intermedia para entrenamiento e inferencia, y si uno ve default_trainer.py[1], el motor usa Tensores de torch, pero la forma de entrenamiento está implementada por ellos mismos. También implementaron directamente el scheduler de tasa de aprendizaje y el optimizador, y quien lo llama puede usar opcionalmente Adam de torch.
    Es interesante que hayan elegido construir desde cero en vez de colaborar con frameworks existentes e incorporar soporte de primera clase; quizá sea una decisión muy al estilo Apple.
    Por ahora, el ejemplo de MLX parece ser solo para inferencia. Aun así, también parece que podría ser el punto de aterrizaje para futuras implementaciones específicas de MLX: https://github.com/apple/corenet/blob/5b50eca42bc97f6146b812...
    Si además pensamos en las adquisiciones recientes de Datakalab https://news.ycombinator.com/item?id=40114350 y DarwinAI https://news.ycombinator.com/item?id=39709835, será interesante ver cómo seguirle la pista durante el próximo año.
    1: https://github.com/apple/corenet/blob/main/corenet/engine/de...

    • La interfaz también se ve bastante al estilo Apple. Parece una estructura donde creas un archivo de configuración, ingresas el modelo y los hiperparámetros que ya tenías en mente, y te ofrece una interfaz simple.
      Me pregunto qué tan útil será para investigadores que quieren modificar a fondo distintas arquitecturas de modelos.
      Ej.: https://github.com/apple/corenet/tree/main/projects/clip#tra...
    • Tienes razón sobre el proyecto, pero PyTorch funciona en Mace y Apple también portó TensorFlow a Mac.
    • Sobre eso de que parece una implementación de capa intermedia entre entrenamiento e inferencia: no conozco bien este campo, pero me pregunto cómo se ve en la práctica una implementación moderna de entrenamiento.
      La mayoría de los modelos no publican el código fuente de entrenamiento, el dataset, el preprocesamiento ni el código de evaluación. Entonces, ¿se sabe siquiera qué forma tiene una implementación de alto nivel?
    • Es difícil verlo como una implementación propia; los optimizadores simplemente heredan de los optimizadores de PyTorch.
    • La decisión de construir desde cero en vez de colaborar con frameworks existentes e incorporar soporte de primera clase huele un poco a algo preparado con prisa antes de la WWDC.
      Apple está muy rezagada en IA y ahora parece estar intentando ponerse al día.
  • Es interesante que Apple también desarrolle activamente https://github.com/apple/axlearn, una librería sobre Jax.
    Parece que la mitad del equipo de machine learning de Apple usa PyTorch y la otra mitad usa Jax. Tal vez estén divididos entre Google Cloud y AWS.

    • En una gran empresa como Apple, esto es bastante común. El costo de coordinación es realmente alto.
      Si no hay una buena razón para estandarizar en una sola herramienta, normalmente es más fácil que cada equipo elija la herramienta que encaja con el problema que está resolviendo y con su experiencia.
    • No he trabajado ahí directamente, pero siempre he oído que Apple, más que una organización única y coherente como Meta, se parece más a un conjunto de varias empresas o startups.
      Entiendo que cada organización tiene bastante autonomía.
  • En el README también aparece esto:
    CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data
    Es la primera vez que escucho de CatLIP, y parece que el enlace está roto.

  • Está construido sobre PyTorch.

  • Me pregunto cómo se compara esto con MLX. Según entiendo, MLX equivale a PyTorch, pero optimizado para Apple Silicon.
    ¿Esto es para entrenar modelos MLX de forma distribuida? ¿O cuál es su propósito?

    • MLX también parece ser parte de este plan. En https://github.com/apple/corenet listan MLX examples como uno de los componentes publicados en abril.
    • Como dice en mlx_examples/open_elm: “MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”
    • Al hojear el README, parece una capa sobre MLX. Se ve más como una capa de framework que facilita el machine learning.
  • Me da curiosidad saber cuál es la ventaja de usar esto en comparación con usar Hugging Face Transformers con el backend MPS

    • “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 es un ejemplo que convierte la implementación del modelo CLIP de CoreNet al ejemplo de CLIP de MLX y le agrega algunas modificaciones personalizadas
      Variante FP16 Base: 60% más rápida que PyTorch
      Variante FP16 Huge: 12% más rápida
      mlx_example/open_elm es un port a MLX del modelo OpenELM entrenado con CoreNet. MLX es un framework de deep learning de Apple, de naturaleza similar a PyTorch, y está optimizado para hardware basado en Apple Silicon
      La ventaja parece ser que hay una mejora adicional de velocidad gracias a la especialización para Apple Silicon. Para modelos pequeños, quizá sea el framework de entrenamiento de redes neuronales profundas más eficiente en consumo, pero habrá que esperar benchmarks reales para saberlo
    • La implementación aquí se ve bastante limpia y modular, mientras que Transformers y Diffusers no lo son tanto salvo que uses los módulos por separado
      Este repositorio tiene muchas utilidades prácticas, y también varias implementaciones limpias de modelos comunes y métricas de evaluación, entre otras cosas
      En otras palabras, parece más adecuado para escribir modelos nuevos que para inferencia
    • No tiene nada especial; básicamente es PyTorch con el logo de Apple
  • Estaría bueno que existiera un agente LLM que generara de forma confiable pequeños ejemplos de API para varios modelos y modos de uso en repositorios como este

  • Me pregunto si soporta entrenamiento en Apple Silicon. Si no se me pasó algo en el README, no queda muy claro

    • No sé si esa funcionalidad de entrenamiento sería útil más allá de experimentos pequeños. Apple ya no fabrica productos de servidor, y cuando los fabricaba eran caros
      A menos que tengan servidores privados basados en Apple Silicon para entrenamiento interno
    • Los ejemplos de MLX parecen hacerlo posible. Se ve más como un framework de propósito general que algo exclusivo para Mac
  • Al revisar las carpetas, parece que muchas clases solo heredan de PyTorch y torchvision y no hacen nada nuevo
    Todos los optimizadores, schedulers y la mayoría de las capas son así. Sin embargo, sí hay bastantes bloques que combinan capas de varios papers, algo parecido a monai.networks.blocks
    En cuanto a “componentes”, también hay algunas funciones de pérdida y métricas de evaluación implementadas desde cero

  • Me pregunto qué biblioteca recomendarían para entrenamiento e inferencia de redes neuronales en Apple M1. Me gustaría usarla desde C++ o Rust, y la red neuronal probablemente tendrá como máximo unos 5 millones de parámetros

    • Como punto de partida usaría PyTorch. En Apple Silicon el backend Metal es bastante rápido, y es la biblioteca más usada, desde desarrolladores aficionados hasta desarrolladores de modelos fundacionales