- 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
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-tuningsão mais importantes do que o tamanho, e há muitas avaliações de que o desempenho define-tuningno 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.WASM está bombando desse jeito? Mas não seria melhor comparar Python com Mojo?
Concordo. O Mojo ainda deve ser considerado em fase experimental.
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.
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.