2 pontos por GN⁺ 2024-04-25 | 1 comentários | Compartilhar no WhatsApp
  • 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.register e pelo valor models.<task_name>.name na 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

Pesquisas da Apple e receitas de projetos

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
  • 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.md de cada projeto fornece documentação, links para pesos pré-treinados e informações de citação
    • <task_name>/<model_name>.yaml fornece configurações para reproduzir treinamento e avaliação
    • Exemplos de projetos incluem kv-prediction, byteformer, catlip, clip, fastvit, mobileone, mobilevit, openelm, resnet, vit etc.
  • mlx_examples/ fornece exemplos em MLX para executar modelos do CoreNet com eficiência no Apple Silicon
    • Os exemplos incluídos são clip e open_elm

Modelos, datasets e componentes

  • As implementações de modelos são organizadas por tarefa em corenet/modeling/models
    • audio_classification
    • classification
    • detection
    • language_modeling
    • multi_modal_img_text
    • segmentation
  • 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, scheduler
    • train_eval_pipelines
    • collate_fns, sampler, text_tokenizer, transforms, video_reader
    • layers, 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

 
GN⁺ 2024-04-25
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 torch
    A 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...

    • A interface também parece bem típica da Apple. Parece uma estrutura em que você cria um arquivo de configuração, coloca o modelo e os hiperparâmetros que já tinha em mente e recebe uma interface simples
      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...
    • O que você disse sobre o projeto está certo, mas o PyTorch roda no Mace e o TensorFlow também foi portado pela Apple para o Mac
    • Sobre a afirmação de que parece uma implementação de camada intermediária para treinamento e inferência: não conheço bem essa área, mas fico curioso sobre como são, na prática, as implementações modernas de treinamento
      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?
    • É difícil chamar de implementação própria; os otimizadores simplesmente herdam dos otimizadores do PyTorch
    • A escolha de criar do zero, em vez de colaborar com frameworks existentes e adicionar suporte de primeira classe, dá a impressão de ter sido preparada com certa pressa antes da WWDC
      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

    • Em uma grande empresa como a Apple, isso é bastante comum. O custo de coordenação é realmente alto
      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
    • Nunca trabalhei lá, mas sempre ouvi dizer que a Apple é mais parecida com um conjunto de várias empresas ou startups do que com uma organização única e coerente como a Meta
      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 Data
    Nunca tinha ouvido falar do CatLIP, e o link parece estar quebrado

  • 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?

    • O MLX também parece fazer parte desse plano. Em https://github.com/apple/corenet, os exemplos de MLX são listados como um dos componentes lançados em abril
    • Como está escrito em mlx_examples/open_elm, “MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”
    • Passando os olhos pelo README, parece uma camada sobre o MLX. Parece mais uma camada de framework para facilitar machine learning
  • Fico curioso para saber qual é a vantagem de usar isto em comparação com usar o Hugging Face Transformers com o backend MPS

    • “Os exemplos de MLX demonstram como executar modelos do CoreNet de forma eficiente no Apple Silicon. Encontre mais informações no arquivo README.md dentro do diretório do exemplo correspondente.”
      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ções
      Variante 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 Silicon
      A 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
    • Esta implementação parece bem limpa e modularizada, enquanto Transformers e Diffusers não são assim, a menos que você use apenas módulos isolados
      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
    • Não há nada de especial; basicamente é PyTorch com o logo da Apple
  • 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

    • Não sei se esse recurso de treinamento seria útil além de experimentos de pequena escala. A Apple não fabrica mais produtos de servidor e, mesmo na época em que fabricava, eram caros
      A menos que ela tenha servidores privados baseados em Apple Silicon para treinamento próprio
    • Os exemplos de MLX parecem tornar isso possível. Parece mais um framework de uso geral do que algo exclusivo para Mac
  • 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.blocks
    Em 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

    • Como ponto de partida, eu usaria PyTorch. O backend Metal no Apple Silicon é bastante rápido, e é a biblioteca mais usada, de desenvolvedores hobbyistas a desenvolvedores de modelos de base