Índice no disco
Este artigo apresenta o DiskANN, um algoritmo de indexação em disco para pesquisas vetoriais otimizadas em disco. Com base nos gráficos Vamana, o DiskANN permite pesquisas vetoriais eficientes no disco em grandes conjuntos de dados.
Para melhorar o desempenho da consulta, é possível especificar um tipo de índice para cada campo de vetor.
Pré-requisitos
Para usar o DiskANN no Milvus, observe que
- A instância do Milvus é executada no Ubuntu 18.04.6 ou em uma versão posterior.
- O caminho de dados do Milvus deve ser montado em um SSD NVMe para obter desempenho total:
- Para uma instância Milvus Standalone, o caminho de dados deve ser /var/lib/milvus/data no contentor onde a instância é executada.
- Para uma instância de Milvus Cluster, o caminho de dados deve ser /var/lib/milvus/data nos contentores onde são executados os QueryNodes e os IndexNodes.
Limites
Para utilizar o DiskANN, certifique-se de que
- Utilize apenas vectores de flutuação com pelo menos 1 dimensão nos seus dados.
- Utilize apenas a Distância Euclidiana (L2), o Produto Interno (IP) ou COSINE para medir a distância entre vectores.
Configurações de índice e pesquisa
Parâmetros de criação de índices
Ao construir um índice DiskANN, utilize
DISKANNcomo o tipo de índice. Não são necessários parâmetros de índice.Parâmetros de pesquisa
Parâmetro Descrição Intervalo Valor por defeito search_listTamanho da lista de candidatos; um tamanho maior oferece uma taxa de recuperação mais elevada com um desempenho degradado. [topk, int32_max] 16
Configurações de Milvus relacionadas com DiskANN
A DiskANN pode ser afinada. Pode modificar os parâmetros relacionados com a DiskANN em ${MILVUS_ROOT_PATH}/configs/milvus.yaml para melhorar o seu desempenho.
...
DiskIndex:
MaxDegree: 56
SearchListSize: 100
PQCodeBudgetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
| Parâmetro | Descrição | Intervalo de valores | Valor predefinido |
|---|---|---|---|
MaxDegree | Grau máximo do gráfico Vamana. Um valor mais elevado oferece uma taxa de recuperação mais elevada, mas aumenta o tamanho e o tempo de criação do índice. | [1, 512] | 56 |
SearchListSize | Tamanho da lista de candidatos. Um valor maior aumenta o tempo despendido na construção do índice, mas oferece uma taxa de recuperação mais elevada. Defina-o para um valor inferior a MaxDegree a menos que precise de reduzir o tempo de construção do índice. | [1, int32_max] | 100 |
PQCodeBudgetGBRatio | Limite de tamanho do código PQ. Um valor maior oferece uma taxa de recuperação mais elevada, mas aumenta a utilização de memória. | (0.0, 0.25] | 0.125 |
SearchCacheBudgetGBRatio | Rácio de números de nós em cache para dados em bruto. Um valor maior melhora o desempenho da construção de índices com maior utilização de memória. | [0.0, 0.3) | 0.10 |
BeamWidthRatio | Rácio entre o número máximo de pedidos IO por iteração de pesquisa e o número de CPU. | [1, max(128 / número da CPU, 16)] | 4.0 |
Resolução de problemas
Como lidar com o erro
io_setup() failed; returned -11, errno=11:Resource temporarily unavailable?O kernel Linux fornece o recurso AIO (Asynchronous non-blocking I/O) que permite que um processo inicie várias operações de E/S simultaneamente sem ter que esperar que qualquer uma delas seja concluída. Isso ajuda a melhorar o desempenho de aplicativos que podem sobrepor processamento e E/S.
O desempenho pode ser ajustado usando o arquivo virtual
/proc/sys/fs/aio-max-nrno sistema de arquivos proc. O parâmetroaio-max-nrdetermina o número máximo de pedidos simultâneos permitidos.O parâmetro
aio-max-nré predefinido para65535, pode ser configurado para10485760.