30 pontos por xguru 2023-11-14 | 5 comentários | Compartilhar no WhatsApp
  • A stack Rust+WASM pode ser uma alternativa poderosa ao Python para inferência de IA
    • Em comparação com Python, apps em Rust+Wasm têm 1/100 do tamanho, são 100 vezes mais rápidos e podem rodar com segurança em qualquer lugar com aceleração total de hardware, sem alterar o código binário
    • Rust é a linguagem da AGI
  • Se escrevermos um programa simples em Rust para executar inferência de Llama2 em velocidade nativa
    • Após compilar para Wasm, o binário tem apenas 2 MB, mas continua totalmente portável entre aceleradores de hardware heterogêneos
    • Além disso, o runtime Wasm (WasmEdge) oferece um ambiente de execução seguro para a nuvem. Ele funciona perfeitamente com ferramentas de contêiner para orquestrar e executar aplicações portáteis em vários dispositivos

Por que não Python?

  • LLMs como o llama2 normalmente são treinados com Python (por exemplo: PyTorch, Tensorflow, JAX)
  • Mas usar Python para aplicações de inferência, que representam cerca de 95% da computação em IA, é um grande erro
  • Pacotes Python têm dependências complexas. São difíceis de configurar e usar
  • As dependências de Python são enormes. Imagens Docker para Python ou PyTorch normalmente têm vários GB ou até dezenas de GB, o que é um problema especialmente sério ao fazer inferência de IA em servidores ou dispositivos de edge
  • Python é uma linguagem muito lenta. Pode ser até 35.000 vezes mais lenta do que linguagens compiladas como C, C++ e Rust
  • Como Python é lento, a maior parte das cargas de trabalho reais precisa ser delegada a bibliotecas compartilhadas nativas por baixo do wrapper em Python
    • Por isso, apps de inferência em Python são ótimos para demos, mas muito difíceis de modificar internamente para atender requisitos específicos de negócio
    • Devido à forte dependência de bibliotecas nativas e à complexidade da gestão de dependências, é muito difícil portar programas de IA em Python para vários dispositivos ao mesmo tempo em que se aproveitam recursos de hardware específicos de cada um
  • Pacotes Python comumente usados no toolchain de LLM entram diretamente em conflito entre si
  • Chris Lattner, conhecido por LLVM, TensorFlow e a linguagem Swift, deu uma ótima entrevista esta semana em um podcast de startups, explicando por que Python é excelente para treinamento de modelos, mas uma escolha errada para aplicações de inferência

Vantagens de Rust+Wasm

  • A stack Rust+Wasm oferece uma infraestrutura unificada de computação em nuvem, cobrindo desde dispositivos até edge cloud, servidores on-premises e nuvem pública
  • É uma alternativa poderosa à stack Python para aplicações de inferência de IA, e não surpreende que Elon Musk tenha dito que Rust é a linguagem da AGI
  • Ultraleve: a aplicação de inferência tem apenas 2 MB, incluindo todas as dependências. Isso é menos de 1% do tamanho de um contêiner típico com PyTorch
  • Muito rápida: entrega velocidade nativa de C/Rust em todas as partes da aplicação de inferência, como pré-processamento, operações com tensores e pós-processamento
  • Portável: o mesmo aplicativo em bytecode Wasm pode rodar nas principais plataformas de computação com suporte a aceleração de hardware heterogênea
  • Fácil de configurar, desenvolver e implantar: chega de dependências complexas. É possível gerar um único arquivo Wasm com ferramentas padrão do notebook e implantá-lo em qualquer lugar
  • Segura e pronta para a nuvem: o runtime Wasm foi projetado para isolar código de usuário não confiável. O runtime Wasm pode ser gerenciado com ferramentas de contêiner e implantado facilmente em plataformas cloud-native

Demo de inferência em Rust

  • Escrito em 40 linhas de código Rust e compilado para Wasm
  • Depois de gerar o bytecode Wasm, ele pode ser implantado em qualquer dispositivo que suporte o runtime WasmEdge
  • O plugin WasmEdge GGML, baseado em llama.cpp, executa o modelo llama2 aproveitando automaticamente a aceleração de hardware do dispositivo

Próximos passos

  • O tooling do WasmEdge GGML já está disponível e vem sendo usado por clientes cloud-native de verdade, mas ainda está em estágio inicial
  • Se você tem interesse em contribuir com o projeto open source e ajudar a moldar a direção da futura infraestrutura de inferência para LLMs, aqui estão algumas áreas potenciais de contribuição
    • Adicionar plugins GGML para mais hardwares e plataformas de SO: TPUs em Linux e Windows, NPUs ARM e outros chips especializados de IA
    • Suportar mais configurações do llama.cpp: atualmente já há suporte para passar algumas opções de configuração do Wasm para o plugin GGML, mas a meta é cobrir todas as opções oferecidas pelo GGML
    • Suportar a API WASI NN em outras linguagens compatíveis com Wasm: especialmente Go, Zig, Kotlin, JavaScript, C e C++

5 comentários

 
gcback 2023-11-14

A abordagem mais realista que a Apple, hoje em desvantagem em IA, pode adotar parece ser algo como um motor de inferência de S/W otimizado, como o do texto principal, acelerado pela NPU do chip A do iPhone, com o arquivo do modelo foundation colocado inteiro no iPhone.

Recentemente, tanto na academia quanto na indústria, o consenso tem sido que, para desempenho em IA, dados e fine-tuning são mais importantes do que o tamanho, e há muitas avaliações de que o desempenho de fine-tuning no Llama2 é bastante bom; por isso, também me parece perfeitamente viável distribuir continuamente para dispositivos edge modelos bem treinados. Nesse sentido, uma estratégia de colocar tudo no iPhone parece bastante realista.

 
ragingwind 2023-11-14

WASM está bombando desse jeito? Mas não seria melhor comparar Python com Mojo?

 
freedomzero 2023-11-14

Concordo. O Mojo ainda deve ser considerado em fase experimental.

 
cosine20 2023-11-14

O Mojo ainda não foi lançado oficialmente, mas Rust já é uma linguagem bem madura e vem substituindo várias partes no trabalho real.

 
xguru 2023-11-14

GN⁺: Inferência de Llama2 rápida e portátil em edge heterogêneo
Consulte também o resumo do GN⁺ e os comentários do Hacker News.