12 de outubro de 2023
_blog_post
marcos@hubbe.app
12 de outubro de 2023
_blog_post
marcos@hubbe.app
12 de outubro de 2023
_blog_post
marcos@hubbe.app
12 de outubro de 2023
Elementor #1745
marcos@hubbe.app

Olá a todos! A Hubbe teve o prazer de participar do NASA Space Apps Challenge 2023, onde escolhemos resolver o desafio STAR: Revolutionizing Technical Standards with AI.
O principal objetivo deste desafio é centralizar e operar de maneira eficiente nos documentos da NASA. Devido à fragmentação do conhecimento, muitas vezes encontrar as informações de forma eficiente torna-se trabalhoso e caro. Quando se trata de uma missão crítica, a velocidade de encontrar a informação correta, mesmo a partir de uma entrada imprecisa, pode ser determinante para a segurança da equipe.
Para resolver esse problema, tínhamos à disposição Microsoft Azure e Google Cloud como fornecedores de poder de computação na nuvem. Nossa abordagem foi criar uma arquitetura de nuvem que pudesse ingerir os documentos da NASA, aprender com eles e responder às entradas. Abaixo você encontrará detalhes de como fizemos isso.
-
- A nossa abordagem consistiu em criar uma IA usando um modelo LLM totalmente Open Source, o Mistral AI.
-
- Usamos como base o projeto localGPT, escrito em Flask.
-
- Na parte do UI, desenvolvemos uma interface usando Figma, projetada para ser executada tanto em um desktop quanto em um cockpit de uma aeronave.
-
- A implementação da UI foi feita usando Next.js.
Um item específico do desafio era poder responder a uma entrada e fornecer uma resposta consistente em relação àquele documento, informando a referência e o parágrafo onde aquele item foi citado. O design de nossa API conseguiu fazer isso de forma consistente e semântica, o que proporcionou um desenvolvimento fluido da UI.
https://vimeo.com/872385546
Outro ponto que podemos destacar é sobre a interação com voz. Tirando vantagem do Google Chrome, utilizamos a Google Speech-To-Text API para converter áudio em texto, proporcionando acessibilidade para que qualquer pessoa possa criar seus prompts.
Desafios técnicos
Nossa primeira problema era ter acesso aos documentos disponibilizados, para treinar nosso modelo precisamos ter os arquivos locais, entao criamos um crawler que fez o download desses documentos localmente. Foi escrito usando Node.js e programacao recursiva navegando pela arvoce de links e fazendo download de todos os arquivos PDF.
Com os documentos em mãos, tentamos treinar o modelo localmente. No entanto, apesar de nossos engenheiros estarem equipados com Mac's M1, descobrimos que o modelo padrão que estávamos usando não estava otimizado para o Apple Silicon. Diante disso, precisamos repensar a abordagem. Descobrimos que haviam modelos pré-treinados otimizados para essa arquitetura de processadores. Mas, como nosso objetivo era executar o modelo na nuvem, decidimos não seguir por esse caminho e migramos imediatamente para a AWS.
Para executar modelos LLM, é necessário um alto poder de processamento. Por isso, optamos por usar uma máquina com 16 unidades de processamento e 32 gigabytes de memória RAM. Os créditos disponibilizados pela Microsoft e Google não eram suficientes para rodar essa configuração, então, decidimos executar na AWS.
Utilizamos como base o projeto localGPT, que já possuía uma implementação inicial de como usar o PyTorch para carregar e executar o modelo LLM. No entanto, ele foi construído usando Flask e Python 3.11. Essa versão do Python foi recentemente lançada e as imagens disponíveis de Ubuntu não vêm com ela pré-instalada, o que nos exigiu adaptar a instalação para executar a aplicação. Além disso, enfrentamos um desafio com o Flask, pois parece que ele apresenta dificuldades ao rodar sua configuração de CORS em conjunto com o Nginx. Após resolvermos esse problema, estávamos prontos para conectar com o Frontend.
Optamos por usar o Next.js como framework para o desenvolvimento do Front-end. Esse framework foi desenvolvido para simplificar a publicação de projetos em React. Embora nosso time tivesse uma experiência mais junior nessa tecnologia, para nossa surpresa, o desempenho da equipe superou todas as expectativas. Começamos o desenvolvimento compreendendo o uso da Google Speech-To-Text API. Infelizmente, aprendemos da maneira mais difícil que ela só estava disponível no Google Chrome. No entanto, esse recurso era essencial, pois buscávamos um diferencial. A conversão de áudio para texto, sem dúvida, expandiria o alcance da nossa aplicação, atendendo a todos os públicos com foco na acessibilidade.
Resultados
Durante o processo, nosso objetivo foi processar 55 documentos que havíamos baixado. O tempo médio de treinamento foi de 20 minutos. O modelo da Mistral AI tem um tamanho aproximado de 5GB. Após o treinamento e estar pronto para uso, notamos que nosso modelo levava cerca de 15 minutos para fornecer a primeira resposta. No entanto, após algumas interações e com o modelo já carregado na memória do servidor, o tempo de resposta reduziu para um intervalo entre 15 e 30 segundos.
Links
- https://github.com/hubbe-app/cerebelo
- https://github.com/hubbe-app/nasa-download
- https://github.com/hubbe-app/star-ai
Share
Tags