CoreNet: biblioteca para treinamento de redes neurais profundas
(github.com/apple)- CoreNet é um toolkit que permite a pesquisadores e engenheiros treinar modelos de redes neurais para diversas tarefas, de modelos de fundação como CLIP e LLMs a classificação de objetos, detecção de objetos e segmentação semântica
- Em outubro de 2024, o CoreNet 0.1.1 passou a incluir o novo projeto KV Prediction, cuja pesquisa relacionada tem como objetivo melhorar o Time to First Token
- Várias pesquisas da Apple usam o CoreNet, e a pasta
projects/oferece receitas de treinamento e avaliação junto com links para modelos pré-treinados - Modelos e datasets são organizados em diretórios por tarefa, e as classes de modelo são conectadas ao treinamento e à avaliação pelo decorador
@MODEL_REGISTRY.registere pelo valormodels.<task_name>.namena configuração YAML - O CoreNet evoluiu a partir do CVNets, passando a incluir aplicações mais amplas além de visão computacional e expandindo seu escopo até o treinamento de modelos de fundação, incluindo LLMs
Objetivo e escopo do CoreNet
- CoreNet é um toolkit de redes neurais profundas para treinar modelos padrão e novos modelos pequenos e grandes
- O conjunto de tarefas suportadas inclui:
- Modelos de fundação: CLIP, LLMs
- Classificação de objetos
- Detecção de objetos
- Segmentação semântica
Atualização de outubro de 2024
- O CoreNet 0.1.1 inclui o projeto KV Prediction
- A lista de pesquisas relacionadas da Apple inclui KV Prediction for Improved Time to First Token
Pesquisas da Apple e receitas de projetos
- Várias pesquisas públicas da Apple usam o CoreNet
- A pasta
projects/oferece receitas de treinamento e avaliação, além de links para modelos pré-treinados - A lista de pesquisas incluída no README é a seguinte:
- 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.
Instalação e requisitos de execução
- Para executar testes e notebooks Jupyter, além de contribuir, é necessário instalar e ativar o Git LFS
- No Linux, recomenda-se Python 3.10+ e PyTorch v2.1.0 ou superior
- No macOS, a orientação é que o Python 3.9+ do sistema é suficiente
- As dependências opcionais para processamento de áudio e vídeo são:
- Linux:
libsox-dev,ffmpeg - macOS:
sox,ffmpeg
- Linux:
- Como o sistema de arquivos do macOS não diferencia maiúsculas de minúsculas, isso pode causar problemas no Git; por isso, é preciso acessar o repositório usando o caminho com a mesma capitalização exibida por
ls
Estrutura do repositório e fluxo de uso
tutorials/fornece exemplos para começar com o CoreNet- Treinamento de um novo modelo em um novo dataset
- Guia de treinamento com Slurm e múltiplos nós
- Notebooks de CLIP, segmentação semântica e detecção de objetos
projects/fornece receitas de treinamento reproduzíveis por artigo, além de pesos pré-treinados e checkpoints- O
README.mdde cada projeto fornece documentação, links para pesos pré-treinados e informações de citação <task_name>/<model_name>.yamlfornece configurações para reproduzir treinamento e avaliação- Exemplos de projetos incluem
kv-prediction,byteformer,catlip,clip,fastvit,mobileone,mobilevit,openelm,resnet,vitetc.
- O
mlx_examples/fornece exemplos em MLX para executar modelos do CoreNet com eficiência no Apple Silicon- Os exemplos incluídos são
clipeopen_elm
- Os exemplos incluídos são
Modelos, datasets e componentes
- As implementações de modelos são organizadas por tarefa em
corenet/modeling/modelsaudio_classificationclassificationdetectionlanguage_modelingmulti_modal_img_textsegmentation
- Cada classe de modelo é registrada com o decorador
@MODEL_REGISTRY.register(name="<model_name>", type="<task_name>") - Para usar um modelo no treinamento ou na avaliação do CoreNet, especifique
models.<task_name>.name = <model_name>na configuração YAML - Datasets também são classificados em diretórios por tarefa, assim como os modelos
- Os principais componentes internos incluem:
loss_fn,metrics,optims,schedulertrain_eval_pipelinescollate_fns,sampler,text_tokenizer,transforms,video_readerlayers,modules,neural_augmentor,text_encoders
Relação com o CVNets
- O CoreNet é um projeto que evoluiu a partir do CVNets
- Seu escopo ampliado inclui aplicações mais amplas além de visão computacional
- Essa expansão permite o treinamento de modelos de fundação, incluindo LLMs
- Ao usar o CoreNet, o README solicita a citação do artigo
CVNets: High Performance Library for Computer Vision
1 comentários
Opiniões do Hacker News
O CoreNet parece ter evoluído a partir do CVNets para cobrir usos mais amplos fora da visão computacional, e também parece ter passado a permitir o treinamento de modelos de base, como LLMs
O ponto de partida provavelmente foi este: https://apple.github.io/ml-cvnets/index.html
Parece uma implementação de uma camada intermediária para treinamento e inferência e, olhando o
default_trainer.py[1], o motor usa Tensor do torch, mas o método de treinamento é uma implementação própria. O scheduler de taxa de aprendizado e o otimizador também foram implementados diretamente, e o chamador pode optar por usar o Adam do torchA escolha de construir tudo do zero, em vez de colaborar com frameworks existentes e adicionar suporte de primeira classe, é interessante e talvez muito típica da Apple
Por enquanto, os exemplos de MLX parecem ser apenas para inferência. Ainda assim, também parecem poder ser um ponto de aterrissagem para uma futura implementação dedicada a MLX: https://github.com/apple/corenet/blob/5b50eca42bc97f6146b812...
Considerando também as aquisições recentes da Datakalab https://news.ycombinator.com/item?id=40114350 e da DarwinAI https://news.ycombinator.com/item?id=39709835, vai ser interessante acompanhar como isso evolui ao longo do próximo ano
1: https://github.com/apple/corenet/blob/main/corenet/engine/de...
Fico curioso sobre o quanto isso será útil para pesquisadores que querem mexer bastante na arquitetura dos modelos
Ex.: https://github.com/apple/corenet/tree/main/projects/clip#tra...
A maioria dos modelos não publica o código-fonte de treinamento, dataset, pré-processamento e código de avaliação. Então, sabe-se mesmo qual é o formato de uma implementação de alto nível?
A Apple ficou bem para trás em IA e agora parece estar tentando correr atrás
É interessante que a Apple também desenvolva ativamente o https://github.com/apple/axlearn, uma biblioteca sobre Jax
Parece que metade da equipe de machine learning da Apple usa PyTorch e a outra metade usa Jax. Talvez estejam divididos entre Google Cloud e AWS
Se não houver um bom motivo para padronizar em uma única ferramenta, normalmente é mais fácil escolher a ferramenta que combina com o problema que a equipe está resolvendo e com a experiência da equipe
Pelo que sei, cada organização tem bastante autonomia
O README também traz isto:
CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text DataNunca tinha ouvido falar do CatLIP, e o link parece estar quebrado
Fico curioso sobre o quão rápido o CatLIP é. O exemplo acima baseado no OpenAI CLIP já é rápido
Foi construído sobre o PyTorch
Fico curioso sobre como isso se compara ao MLX. Pelo que entendi, o MLX corresponde ao PyTorch, mas é otimizado para Apple Silicon
Isso serve para treinar modelos MLX de forma distribuída? Ou qual é o objetivo?
mlx_examples/open_elm, “MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”Fico curioso para saber qual é a vantagem de usar isto em comparação com usar o Hugging Face Transformers com o backend MPS
mlx_example/clipé um exemplo que converte a implementação do modelo CLIP do CoreNet para o exemplo de CLIP do MLX e aplica algumas customizaçõesVariante FP16 Base: 60% mais rápida em relação ao PyTorch
Variante FP16 Huge: 12% mais rápida
mlx_example/open_elmé um port para MLX do modelo OpenELM treinado com o CoreNet. O MLX é um framework de deep learning da Apple com características semelhantes às do PyTorch e é otimizado para hardware baseado em Apple SiliconA vantagem parece ser que há ganho adicional de velocidade por ser especializado para Apple Silicon. Para modelos pequenos, talvez seja o framework mais eficiente em consumo de energia para treinar redes neurais profundas, mas só será possível saber quando houver benchmarks reais
Este repositório tem muitos utilitários convenientes e também várias implementações limpas de modelos comuns e métricas de avaliação
Em outras palavras, parece mais adequado para escrever novos modelos do que para inferência
Seria bom ter um agente LLM que gerasse de forma confiável pequenos exemplos de API para vários modelos e modos de uso em repositórios como este
Fico curioso se ele oferece suporte a treinamento no Apple Silicon. Se eu não deixei passar algo no README, isso não está muito claro
A menos que ela tenha servidores privados baseados em Apple Silicon para treinamento próprio
Olhando as pastas, há muitas classes que parecem apenas herdar classes do PyTorch e do torchvision sem fazer nada novo
Todos os otimizadores, schedulers e a maioria das camadas seguem esse padrão. Por outro lado, há vários blocos que combinam camadas de diferentes artigos, de forma parecida com
monai.networks.blocksEm termos de “componentes”, também há algumas funções de perda e métricas de avaliação implementadas do zero
Fico curioso sobre qual biblioteca recomendariam para treinamento e inferência de redes neurais no Apple M1. Quero usá-la em C++ ou Rust, e a rede neural deve ter no máximo cerca de 5 milhões de parâmetros