2 pontos por GN⁺ 2023-09-18 | 1 comentários | Compartilhar no WhatsApp
  • Petals permite gerar texto e fazer fine-tuning executando apenas uma parte de um grande modelo de linguagem em uma GPU doméstica ou no Google Colab, sem carregar o modelo inteiro em um único dispositivo
  • Com suporte a modelos de até Llama 3.1 405B, Mixtral 8x22B, Falcon 40B+ e BLOOM 176B, torna possível trabalhar com modelos grandes mesmo em equipamentos pessoais
  • Funciona em uma estrutura ao estilo BitTorrent: o usuário carrega o fragmento do modelo pelo qual é responsável e se conecta a uma rede de participantes que fornecem os demais fragmentos
  • A inferência em lote único chega a até 6 tokens/sec no Llama 2 70B e até 4 tokens/sec no Falcon 180B, desempenho suficiente para chatbots e apps interativos
  • Oferece mais opções que APIs comuns de LLM para escolher métodos de fine-tuning e amostragem, além de permitir lidar com caminhos internos do modelo e hidden states

Execução de grandes modelos de forma distribuída

  • Petals tem como objetivo executar grandes modelos de linguagem em casa e funciona, como o BitTorrent, com vários usuários fornecendo partes diferentes do modelo
  • O usuário não carrega o modelo inteiro: sobe apenas uma parte do modelo e participa da rede que fornece as demais partes
  • Modelos compatíveis:
    • Llama 3.1: até 405B
    • Mixtral: 8x22B
    • Falcon: 40B+
    • BLOOM: 176B
  • É possível gerar texto e fazer fine-tuning por tarefa com uma GPU doméstica ou com o Google Colab
  • Desempenho de inferência em lote único:
    • Llama 2 70B: até 6 tokens/sec
    • Falcon 180B: até 4 tokens/sec
  • Essa velocidade é suficiente para chatbots e apps interativos

Mais controle que uma API

  • Petals permite ir além das APIs tradicionais de LLM, escolhendo diretamente métodos de fine-tuning e de amostragem
  • É possível executar caminhos customizados pelo modelo ou inspecionar hidden states
  • Combina a conveniência de uma API com a flexibilidade do PyTorch e do 🤗 Transformers
  • Há um notebook no Colab e documentação no GitHub para testar imediatamente
  • Também há uma forma de participar fornecendo GPU para aumentar a capacidade do Petals, e as novidades de desenvolvimento podem ser acompanhadas no Discord
  • O projeto faz parte do workshop de pesquisa BigScience

1 comentários

 
GN⁺ 2023-09-18
Opiniões no Hacker News
  • Interessante. Parece ser uma arquitetura em que os pesos do modelo são divididos por camadas e distribuídos por várias máquinas; quando cada máquina está pronta, ela se registra em uma grande tabela de hash e realiza inferência ou ajuste fino “em equipe” para as camadas pelas quais é responsável.
    Ainda está em estágio inicial, mas tenho trabalhado em hospedar pesos de modelos para https://github.com/jmorganca/ollama em um registro Docker. O principal motivo é a endereçabilidade por conteúdo: o Ollama consegue verificar sempre se os pesos corretos foram baixados e, no fim, passa a poder buscar os pesos pelo próprio conteúdo, em vez de por um nome ou uma URL que pode mudar.
    Como próximo passo, parece possível dividir o modelo por camadas e armazenar cada camada de forma independente para usos como esse, ou aproveitar isso para baixar e executar modelos maiores em várias máquinas “locais”.

    • Será que dá para reduzir um pouco a autopromoção? Tenho visto comentários sobre ollama com frequência em praticamente todo post relacionado a LLM.
      As diretrizes do HN também dizem: “Não use o HN principalmente para promoção; tudo bem publicar seu próprio trabalho ocasionalmente, mas o principal objetivo de uso do site deve ser a curiosidade”.
      Neste caso também, teria sido suficiente falar sobre o trabalho do OP sem incluir um backlink gratuito para o projeto.
  • A parte de que “é possível fazer ajuste fino para a tarefa” me fez levantar a sobrancelha.
    Fazer ajuste fino em um 70B não é apenas difícil; mesmo que você possa esperar indefinidamente, é literalmente impossível sem alugar instâncias de nuvem muito caras ou comprar um PC que custa o preço de uma casa.
    Se existir uma “horda de treinamento de llama”, eu participaria com prazer.

    • Isso é verdade para o ajuste fino tradicional, mas não sei se vale também para ajuste fino eficiente em parâmetros ou qLORA.
      Pelo que entendo, um modelo com N bilhões de parâmetros pode ser ajustado em uma GPU com um pouco menos de N gigabytes de VRAM.
      Para um modelo de 70B parâmetros, seria algo como uma A100?
    • Acho que uma H100 não custa tanto quanto uma casa; está mais perto do preço de um carro.
    • Fazer ajuste fino de forma distribuída em uma rede não confiável pode ser muito pior em eficiência energética e de custo do que em um único nó ou em um cluster bem conectado.
      Além disso, na Lambda Cloud é possível ajustar um modelo de 70B por US$ 2 por milhão de tokens, e na Replicate por menos de US$ 10.
    • O que impede paralelizar o treinamento de LLMs? Se você ler o livro 1 antes do livro 2, ou o contrário, o resultado da atualização de conhecimento deveria ser o mesmo.
      Se considerarmos que um LLM aprende cada livro de forma independente, parece que bastaria somar os dois deltas dos pesos do LLM.
    • Com a tecnologia de otimização de compilador da CentML, dá para fazer ajuste fino do Falcon 40B em 4×A10 sem alterar o modelo.
  • Um LLM treinado é componível de alguma forma? Por exemplo, se dois modelos confiam nos mesmos 99% dos dados, mas diferem em apenas 1%, será que precisamos de dois modelos totalmente separados, ou seria possível compartilhar a computação com outras pessoas que têm a mesma opinião sobre os 99% e criar modelos derivados que corrijam as diferenças de confiança de cada um?
    Meu entendimento de redes neurais é básico, mas manipular os pesos dessa forma mantendo a utilidade do modelo não parece algo absurdo.
    Pergunto porque parece útil saber em quais afirmações dois LLMs de mesmo desempenho concordam e em quais há disagreement. Assim, seria possível mapear essa diferença de volta para a diferença nos dados de treinamento. Isso provavelmente só funcionaria quando a diferença fosse pequena.
    Por outro lado, se dois LLMs de mesmo desempenho forem mais parecidos com uma oportunidade perdida de criar um modelo mais forte, e a análise de disagreement também for cara demais, então o mundo é bem diferente.

  • Como impedir que um participante malicioso altere a saída da parte dele em uma computação maior? Mesmo que não haja um método para produzir uma saída de rede escolhida pelo atacante, parece que, se muitos nós entrarem e simplesmente retornarem lixo, o sistema pode sofrer, na prática, um ataque de negação de serviço.

    • Sou desenvolvedor do Petals. Estamos desenvolvendo validadores que varrem periodicamente todos os servidores e bloqueiam aqueles que retornam resultados incorretos.
      Além disso, os clientes podem enviar dados por vários caminhos não sobrepostos na rede e verificar se os resultados coincidem.
      Isso detecta atacantes frequentes, mas não oferece 100% de proteção; portanto, se for necessária uma garantia completa de correção, imagino que as pessoas montem swarms privados. Por exemplo, se você não tem GPUs suficientes para rodar um LLM sozinho, mas conhece proprietários de hardware confiável, pode montar um swarm privado do Petals para executar LLMs em conjunto em hardware geograficamente distribuído e processar dados.
  • A primeira pergunta que me veio foi: “e a viabilidade econômica?”. Segundo o FAQ:
    Os incentivos do Petals são baseados em criptomoedas, blockchain etc.? Não. O Petals é um sistema totalmente descentralizado em todos os outros aspectos, mas, para os incentivos, estão trabalhando em um sistema centralizado semelhante aos kudos do AI Horde. Não há planos de oferecer um serviço para trocar esses pontos por dinheiro; pense neles como pontos de “jogo” usados dentro do sistema.
    O Petals é um projeto centrado em machine learning para pesquisadores e engenheiros de machine learning, e não tem relação com finanças. O motivo de terem decidido centralizar o sistema de incentivos é que ele é muito mais fácil de desenvolver e manter, permitindo focar no desenvolvimento de recursos úteis para pesquisadores de machine learning.
    https://github.com/bigscience-workshop/petals/wiki/FAQ:-Freq...

    • Os kudos do AI Horde mencionados aqui são realmente muito legais e, pessoalmente, acho que são seriamente subutilizados:
      https://lite.koboldai.net/
      https://tinybots.net/artbot
      https://aihorde.net/
      Na verdade, se alguém no HN quiser testar algum modelo específico de fine-tuning de 13B a 70B, posso hospedá-lo à tarde:
      https://huggingface.co/models?sort=modified&search=70B+gguf
    • Na área de design gráfico, render farms distribuídas existem há muito tempo. Não há nenhum incentivo separado além de uma prioridade maior para os jobs quando se tem mais pontos.
      https://www.sheepit-renderfarm.com/home
    • Pela resposta à pergunta “qual é o incentivo para hospedar camadas do modelo em um swarm público?”, quem executa inferência e fine-tuning por conta própria consegue algum ganho de velocidade ao hospedar parte do modelo localmente. Também pode haver a motivação de retribuir à comunidade que ajudou você a executar o modelo, assim como usuários de BitTorrent compartilham dados que já baixaram para ajudar outras pessoas.
      Como isso pode não ser suficiente para todos, também estão introduzindo os “bloom points”, um incentivo explícito para quem doa tempo de GPU ao swarm público. Quando o sistema estiver pronto, o site mostrará os maiores contribuidores, e quem ganhar pontos poderá usá-los para inferência e fine-tuning com prioridade maior ou garantias de segurança reforçadas, ou talvez trocá-los por outras recompensas.
      Ainda assim, parece que eles querem algum tipo de token centralizado.
    • É uma pena que agora todo projeto descentralizado tenha que ser comparado a criptomoedas.
    • A conclusão lógica é que, no fim, os modelos acabarão sendo conectados a pagamentos em criptomoedas. É aí que a Lightning se torna importante.
      Só para deixar claro, não quero dizer que o “token” do Petals deva ser conectado a um sistema de pagamento. Quero dizer que, em geral, independentemente de ser descentralizado ou não, chamadas a clusters de modelos de machine learning provavelmente usarão pagamentos em criptomoedas, que fornecem ao mesmo tempo autenticação e meio de pagamento.
      O Petals é uma boa implementação de computação descentralizada para uso de modelos e parece ter valor no longo prazo.
  • Eu queria compartilhar minha 3080 Ti, mas, ao executar o comando do guia de início, parece haver um problema de versão nas dependências: https://github.com/bigscience-workshop/petals/wiki/Run-Petal...
    ImportError: cannot import name 'get_full_repo_name' from 'huggingface_hub' (~/.local/lib/python3.8/site-packages/huggingface_hub/__init__.py)

  • Parece que dá para hospedar seu próprio swarm de servidores [0].
    Fico curioso para saber mais ou menos qual seria o desempenho de fine-tuning de um cluster Petals “privado”.
    [0] https://github.com/bigscience-workshop/petals/wiki/Launch-yo...

    • Se você for rodar um cluster em um ambiente confiável, acho que usar Ray ou algo parecido seria mais eficiente.
  • Muito legal. Espero que isso torne essa área acessível a milhares, talvez milhões, de desenvolvedores a mais.

  • Sempre achei que crowdsourcing era o futuro. Vale tanto para informação quanto para computação.
    Na verdade, os “recursos” já existem; é só uma questão de alocação.

  • Já usei o Petals em um projeto antigo. Também compartilhei minha GPU e escrevi código para o projeto.
    A parte do Petals ficava abstraída para mim, e a experiência de escrever código foi comum.
    Não publiquei esse projeto em lugar nenhum e também não sei bem o que aconteceu com ele depois. No geral, era algo tocado por umas cinco pessoas.