Um dos principais componentes da plataforma de desenvolvimento de IA de ponta Copilot Runtime da Microsoft para Windows é uma nova tecnologia de pesquisa vetorial, DiskANN (Disk Accelerated Nearest Neighbors). Com base em um projeto de longa duração da Microsoft Research, o DiskANN é uma maneira de criar e gerenciar índices vetoriais dentro de seus aplicativos. Ele usa uma mistura de armazenamento em memória e em disco para mapear um gráfico vetorial quantizado na memória para uma ajuda de gráfico de alta precisão no disco.
O que é DiskANN?
Embora não seja uma correspondência exata, você pode pensar no DiskANN como o equivalente de índice vetorial de ferramentas como o SQLite. Adicionado ao seu código, ele fornece uma maneira direta de pesquisar em um índice vetorial composto de embeddings semânticos de um modelo de linguagem pequena (SLM), como o Phi Silica do Copilot Runtime.
É importante entender que o DiskANN não é um banco de dados; é um conjunto de algoritmos entregues como uma ferramenta para adicionar índices de vetores a outros armazenamentos que não são projetados para suportar pesquisas de vetores. Isso o torna um companheiro ideal para outros armazenamentos incorporados, sejam relacionais ou um armazenamento de valor de chave NoSQL.
O requisito para armazenamento em memória e disco ajuda a explicar algumas das especificações de hardware para PCs Copilot+, com o dobro dos requisitos de memória base anteriores do Windows, bem como SSDs maiores e mais rápidos. Utilmente, há um requisito de CPU menor em relação a outros algoritmos de pesquisa de vetores, com implementações em escala em serviços do Azure exigindo apenas 5% da CPU que os métodos tradicionais usam.
Você precisará de um armazenamento separado para os dados que estão sendo indexados. Ter armazenamentos separados para seus índices e a fonte de seus embeddings tem seus problemas. Se você estiver trabalhando com informações pessoalmente identificáveis ou outros dados regulamentados, não pode negligenciar a garantia de que os dados de origem estejam criptografados. Isso pode adicionar sobrecarga nas consultas, mas, curiosamente, a Microsoft está trabalhando em enclaves seguros baseados em software que podem criptografar dados em repouso e em uso, reduzindo o risco de vazamento de PII ou prompts sendo manipulados por malware.
O DiskANN é uma implementação de uma busca aproximada de vizinho mais próximo, usando um índice de gráfico Vamana. Ele foi projetado para trabalhar com dados que mudam frequentemente, o que o torna uma ferramenta útil para aplicativos de IA do tipo agente que precisam indexar arquivos locais ou dados mantidos em serviços como o Microsoft 365, como e-mail ou chats do Teams.
Introdução ao diskannpy
Um início rápido útil vem na forma da implementação diskannpy Python. Isso fornece classes para construir índices e para pesquisa. Há a opção de usar bibliotecas Python de análise numérica, como NumPy, para construir e trabalhar com índices, vinculando-os a ferramentas de ciência de dados existentes. Ele também permite que você use notebooks Jupyter no Visual Studio Code para testar índices antes de construir aplicativos em torno deles. Adotar uma abordagem baseada em notebook para prototipagem permitirá que você desenvolva elementos de um aplicativo baseado em SLM separadamente, passando resultados entre células.
Comece usando uma das duas classes Index Builder para construir um índice de vetor híbrido ou na memória a partir do conteúdo de uma matriz NumPy ou de um arquivo de vetor de formato DiskANN. A biblioteca diskannpy contém ferramentas que podem construir esse arquivo a partir de uma matriz, o que é uma maneira útil de adicionar embeddings a um índice rapidamente. Os arquivos de índice são salvos em um diretório especificado, prontos para pesquisa. Outros recursos permitem que você atualize índices, suportando operações dinâmicas.
A pesquisa é novamente uma classe simples, com uma matriz de consulta contendo a incorporação da pesquisa, juntamente com parâmetros que definem o número de vizinhos a serem retornados, juntamente com a complexidade da lista. Uma lista maior levará mais tempo para ser entregue, mas será mais precisa. A compensação entre precisão e latência torna essencial executar experimentos antes de se comprometer com o código final. Outras opções permitem que você melhore o desempenho agrupando consultas. Você pode definir a complexidade do índice, bem como o tipo de métrica de distância usada para pesquisas. Valores maiores para complexidade e grau do gráfico são melhores, mas os índices resultantes levam mais tempo para serem criados.
Diskannpy é uma ferramenta útil para aprender a usar o DiskANN. É provável que, à medida que o Copilot Runtime evolui, a Microsoft forneça um conjunto de wrappers que fornece uma abstração de alto nível, muito parecida com a que está fornecendo para o Cosmos DB. Há uma dica de como isso pode funcionar no anúncio inicial do Copilot Runtime, com referência a uma API Vector Embeddings usada para construir aplicativos baseados em geração autenticada de recuperação (RAG). Isso está planejado para uma atualização futura do Copilot Runtime.
Por que DiskANN?
Explorando o repositório GitHub para o projeto, é fácil ver por que a Microsoft escolheu o DiskANN para ser uma das tecnologias fundamentais no Copilot Runtime, pois ele é otimizado para operações SSD e in-memory, e pode fornecer uma abordagem híbrida que indexa muitos dados economicamente. O artigo inicial do DiskANN da Microsoft Research sugere que um índice híbrido SSD/RAM pode indexar de cinco a dez vezes mais vetores do que o algoritmo equivalente puro in-memory, capaz de endereçar cerca de um bilhão de vetores com alta precisão de pesquisa e com latência de 5 ms.
Na prática, é claro, um aplicativo SLM hospedado na borda provavelmente não precisará indexar tantos dados, então o desempenho e a precisão devem ser maiores.
Se você estiver construindo um aplicativo de IA semântica em um SLM, precisará se concentrar no rendimento, usando um pequeno número de tokens para cada operação. Se você puder manter a busca necessária para construir prompts fundamentados para um aplicativo RAG o mais rápido possível, você reduzirá o risco de usuários infelizes esperando pelo que pode ser uma resposta simples.
Ao carregar um índice na memória no lançamento, você pode simplificar as pesquisas para que seu aplicativo só precise acessar os dados de origem quando for necessário para construir um prompt fundamentado para seu SLM. Uma opção útil é a capacidade de adicionar filtros a uma pesquisa, refinando os resultados e fornecendo um aterramento mais preciso para seu aplicativo.
Estamos nos primeiros dias do Copilot Runtime, e algumas peças-chave do quebra-cabeça ainda estão faltando. Um essencial para usar índices DiskANN são ferramentas para codificar seus dados de origem como embeddings de vetores. Isso é necessário para construir uma pesquisa de vetores, seja como parte do seu código ou para enviar um conjunto base de índices de vetores com um aplicativo.
DiskANN em outro lugar na Microsoft
Fora do Copilot Runtime, a Microsoft está usando o DiskANN para adicionar pesquisa vetorial rápida ao Cosmos DB. Outros serviços que o usam incluem o Microsoft 365 e o Bing. No Cosmos DB, ele está adicionando pesquisa vetorial à sua API NoSQL, onde você provavelmente trabalhará com grandes quantidades de dados altamente distribuídos. Aqui, o suporte do DiskANN para dados que mudam rapidamente funciona junto com o dimensionamento dinâmico do Cosmos DB, adicionando um novo índice a cada nova partição. As consultas podem então ser passadas para todos os índices de partição disponíveis em paralelo.
A Microsoft Research vem trabalhando em ferramentas como o DiskANN há algum tempo, e é bom vê-los saltar de pesquisa pura para produto, especialmente produtos tão amplamente usados como Cosmos DB e Windows. Ter um índice vetorial rápido e preciso como parte do Copilot Runtime reduzirá os riscos associados à IA generativa e manterá seus índices em seu PC, mantendo os dados de origem privados e aterrando SLMs. Combinado com técnicas de computação confidenciais no Windows, a Microsoft parece estar pronta para fornecer IA segura e privada em nossos próprios dispositivos.
