CoreNet: biblioteca para entrenar redes neuronales profundas
(github.com/apple)- 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.registery el valormodels.<task_name>.nameen 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
- CoreNet 0.1.1 incluye el proyecto KV Prediction
- La lista de investigaciones relacionadas de Apple incluye KV Prediction for Improved Time to First Token
Investigación de Apple y recetas de proyectos
- Varios trabajos públicos de investigación de Apple usan CoreNet
- La carpeta
projects/ofrece recetas de entrenamiento y evaluación, además de enlaces a modelos preentrenados - La lista de investigaciones incluida en el README es la siguiente:
- 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, entre otros
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
- Linux:
- 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.mdde cada proyecto ofrece documentación, enlaces a pesos preentrenados e información de citación <task_name>/<model_name>.yamlproporciona 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
- El
mlx_examples/ofrece ejemplos de MLX para ejecutar modelos de CoreNet de forma eficiente en Apple Silicon- Los ejemplos incluidos son
clipyopen_elm
- Los ejemplos incluidos son
Modelos, datasets y componentes
- Las implementaciones de modelos se organizan por tarea bajo
corenet/modeling/modelsaudio_classificationclassificationdetectionlanguage_modelingmulti_modal_img_textsegmentation
- 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,schedulertrain_eval_pipelinescollate_fns,sampler,text_tokenizer,transforms,video_readerlayers,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
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...
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...
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?
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.
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.
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 DataEs la primera vez que escucho de CatLIP, y parece que el enlace está roto.
Me pregunto qué tan rápido es CatLIP. El ejemplo basado en OpenAI CLIP de arriba ya es rápido.
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_examples/open_elm: “MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”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_example/clipes un ejemplo que convierte la implementación del modelo CLIP de CoreNet al ejemplo de CLIP de MLX y le agrega algunas modificaciones personalizadasVariante FP16 Base: 60% más rápida que PyTorch
Variante FP16 Huge: 12% más rápida
mlx_example/open_elmes 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 SiliconLa 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
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
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
A menos que tengan servidores privados basados en Apple Silicon para entrenamiento interno
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.blocksEn 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