스크립트
00:00:00O Google acabou de lançar uma nova biblioteca de runtime que permite executar modelos de aprendizado de máquina e IA
00:00:05dentro do navegador com velocidades quase nativas. Chama-se LiteRT.js e é impressionante. Então,
00:00:12neste vídeo vamos dar uma olhada no LiteRT.js, ver como funciona e vamos testá-lo
00:00:18construindo um aplicativo de captura de movimento 3D em tempo real que roda inteiramente no navegador. Vai ser
00:00:24muito divertido, então vamos lá. Mas o que exatamente é o LiteRT.js? Bem, é um binding JavaScript para
00:00:36o LiteRT, o runtime de inferência on-device deles, que executa modelos no Android, iOS e hardware
00:00:42embarcado há anos. Mas o LiteRT.js traz o mesmo runtime para o navegador via WebAssembly usando
00:00:50o pacote npm principal do LiteRT.js. E aqui está o que torna o LiteRT.js diferente. O Google já tem uma
00:00:58biblioteca de aprendizado de máquina para navegadores, chamada TensorFlow.js, que existe há anos. Mas
00:01:04o TensorFlow.js roda em kernels baseados em JavaScript, e esse é um grande gargalo. Sabe, kernels JavaScript
00:01:11não conseguem explorar totalmente a CPU ou GPU como um runtime nativo. Por isso, o TensorFlow.js sempre ficou atrás
00:01:19do desempenho de aplicativos nativos. Mas o LiteRT.js usa WebAssembly e vem com seu próprio kernel otimizado.
00:01:27Portanto, o mesmo runtime nativo que impulsiona a inferência no Android e iOS é compilado para WASM e exposto para
00:01:34o LiteRT.js. Então você não tem mais uma camada de abstração com sabor web, você realmente obtém
00:01:40um mecanismo de runtime verdadeiramente otimizado. E isso também aparece na arquitetura de back-end deles. O LiteRT.js tem
00:01:47três níveis diferentes que permitem um bom desempenho em CPUs, GPUs e até NPUs. No lado da CPU,
00:01:55ele usa o XNNPack, a biblioteca de kernel de CPU otimizada do Google, que é multithread com suporte a SIMD relaxado.
00:02:04E esse é o seu fallback universal que rodará em qualquer lugar, sem necessidade de GPU. Mas para GPUs,
00:02:11ele usa ML drift sobre web GPU, e é aqui que reside o verdadeiro desempenho. Ele utiliza kernels de GPU
00:02:18nativos, então shaders não são mais renderizados usando algum tipo de orquestração JavaScript. E para
00:02:24NPUs, ele tem o WebNN, que ainda é experimental no Chrome e Edge, e visa hardware de processamento
00:02:31neural dedicado para uma inferência com eficiência energética. E de acordo com os próprios benchmarks do Google,
00:02:37conduzidos em um MacBook Pro de 2024 com chip M4, parece ter uma inferência três vezes mais rápida do que
00:02:45outros runtimes web em CPU e GPU para modelos de visão e áudio. E ao executar cargas de trabalho como
00:02:53rastreamento de objetos, transcrição de áudio ou manipulação de imagem na GPU ou NPU, em vez da CPU,
00:03:00obtemos aumentos de desempenho que saltam de cinco vezes até 60 vezes mais rápidos,
00:03:07dependendo da tarefa. E vale mencionar que esse é o melhor cenário possível. O Google também
00:03:13reconhece isso. Então seus resultados podem variar, levando em consideração sua GPU específica,
00:03:18thermal throttling e qualidade do driver. E há mais uma coisa que realmente importa para este runtime.
00:03:24Se você já possui modelos que usa no PyTorch ou TensorFlow, se você tem um arquivo TF Lite
00:03:30existente, o LiteRT.js pode executá-lo diretamente. E se você estiver no PyTorch, também existe o LiteRT
00:03:38Torch, um caminho de conversão que leva seu modelo diretamente para .TF Lite. Além disso, há um quantizador
00:03:44AI Edge para reduzir o tamanho dos modelos sem uma reescrita completa. Então, fluxos de trabalho legados que você usava no
00:03:50TensorFlow.js podem ser facilmente portados para o novo LiteRT.js, o que é super legal. Mas o que você
00:03:58realmente pode fazer com ele? Bem, o Google tem algumas demos bem legais por aí, que dão uma noção da
00:04:03gama de possibilidades. Você pode fazer detecção de objetos YOLO em tempo real, estimativa de profundidade monocular com a
00:04:09biblioteca depth anything que transforma o feed da sua webcam em uma nuvem de pontos 3D ao vivo. E também pode fazer
00:04:16upscaling de imagem com a biblioteca real ESR GAN. E todas essas demos rodam completamente no lado do cliente,
00:04:23sem back-ends, sem APIs, diretamente dentro do seu navegador. E eles já anunciaram o que vem a seguir,
00:04:29LiteRT.LM.js. E isso servirá para executar modelos de linguagem completos localmente no navegador.
00:04:36Então, isso não é apenas para visão computacional. Em breve, oferecerá também inferência local de LLM.
00:04:42Certo, tudo isso soa ótimo, mas eu queria testar por conta própria para ver o quão poderoso ele realmente
00:04:48é. Então, para esta demo, decidi criar um aplicativo de captura de movimento real que usa sua webcam para
00:04:55estimativa de pose em tempo real. E ele também roda inteiramente no seu navegador, no lado do cliente e offline, sem
00:05:03nenhuma restrição. Então, codifiquei este aplicativo no Cloud Code usando o novo modelo Fable 5. E aqui está o resultado final.
00:05:10E, a propósito, se você quiser baixar este repositório e brincar com ele, adicionei também um link
00:05:15para o projeto na descrição abaixo. Aqui o LiteRT.js está rodando no navegador usando um modelo blaze pose
00:05:23com 33 pontos de referência corporais, controlando um personagem 3D em tempo real usando 3.js. Não há servidor back-end e
00:05:31tudo o que você vê está acontecendo nesta máquina agora, completamente offline. Então, podemos ver aqui que na
00:05:38CPU, estamos com uma média de cerca de 38 FPS com uma inferência de 23,3 milissegundos. E podemos ver que a
00:05:47estimativa de pose está um pouco lenta. Mas agora, se mudarmos para a versão web GPU, vemos que estamos
00:05:54obtendo sólidos 120 quadros por segundo com uma inferência de 8,4 milissegundos. E a estimativa de pose também está um pouco
00:06:02mais rápida. Isso é aproximadamente um salto de três vezes na taxa de quadros e uma queda de 2,8 vezes no tempo de inferência,
00:06:10o que se alinha com os números do Google, embora esteja na extremidade modesta do que eles publicaram. Mas precisamos
00:06:16levar em consideração que o blaze pose é genuinamente um modelo pequeno. Portanto, há menos computação bruta para a GPU
00:06:23processar. Mas mesmo assim, mover a matemática de tensores da CPU para a web GPU reduz a latência
00:06:30o suficiente para que o atraso seja significativamente menor. E adicionei também um recurso onde você pode gravar sua
00:06:36animação de captura de pose e exportá-la como um JSON ou como um arquivo de captura de movimento bio vision, e depois abrir isso em
00:06:44algo como o Blender e retargetear essa animação para seu próprio personagem personalizado. E como você pode ver aqui,
00:06:49não é perfeito. Os movimentos não são muito detalhados ou refinados. Então, isso ainda é um trabalho em
00:06:56progresso. Mas é super legal que eu tenha conseguido fazer essa versão inicial funcionar em apenas 10 minutos
00:07:01usando o novo LiteRT.js. Então, aí está, pessoal. Isso é o LiteRT.js em poucas palavras. É
00:07:08honestamente incrível ver o quão longe o WebAssembly impulsionou as capacidades de rodar aplicações complexas
00:07:14no navegador. E essa nova biblioteca LiteRT.js realmente prova que, às vezes, o JavaScript pode
00:07:21ser um verdadeiro gargalo para alcançar aquelas velocidades de desempenho quase nativo. Portanto, estou muito impressionado com esta
00:07:27biblioteca e mal posso esperar para experimentar o LiteRT.js quando ele for finalmente lançado no final deste ano. Mas o que você acha
00:07:35do LiteRT.js? Você já testou? Vai usar? Deixe-nos saber nos comentários abaixo. E pessoal,
00:07:40se você gosta desses tipos de análises técnicas, por favor, deixe-me saber esmagando o botão de like
00:07:45abaixo do vídeo. E também não se esqueça de se inscrever no nosso canal. Este foi o Andres da
00:07:50BetterStack e eu vejo vocês nos próximos vídeos.