milvus-logo
LFAI
Casa
  • Domande frequenti

FAQ sul prodotto

Quanto costa Milvus?

Milvus è un progetto open-source gratuito al 100%.

Quando si utilizza Milvus per scopi di produzione o distribuzione, si prega di attenersi alla Licenza Apache 2.0.

Zilliz, l'azienda che sta dietro a Milvus, offre anche una versione cloud completamente gestita della piattaforma per coloro che non vogliono costruire e mantenere la propria istanza distribuita. Zilliz Cloud mantiene automaticamente l'affidabilità dei dati e consente agli utenti di pagare solo per ciò che utilizzano.

Milvus supporta architetture non x86?

Milvus non può essere installato o eseguito su piattaforme non-x86.

La CPU deve supportare uno dei seguenti set di istruzioni per eseguire Milvus: SSE4.2, AVX, AVX2, AVX512. Si tratta di set di istruzioni SIMD dedicati a x86.

Dove vengono memorizzati i dati in Milvus?

Milvus tratta due tipi di dati: i dati inseriti e i metadati.

I dati inseriti, compresi i dati vettoriali, i dati scalari e lo schema specifico della collezione, sono memorizzati in un archivio persistente come log incrementale. Milvus supporta diversi backend di archiviazione a oggetti, tra cui MinIO, AWS S3, Google Cloud Storage (GCS), Azure Blob Storage, Alibaba Cloud OSS e Tencent Cloud Object Storage (COS).

I metadati sono generati all'interno di Milvus. Ogni modulo Milvus ha i propri metadati che vengono memorizzati in etcd.

Perché non ci sono dati vettoriali in etcd?

etcd memorizza i metadati dei moduli Milvus; MinIO memorizza le entità.

Milvus supporta l'inserimento e la ricerca di dati contemporaneamente?

Sì. Le operazioni di inserimento e di interrogazione sono gestite da due moduli distinti e indipendenti tra loro. Dal punto di vista del client, un'operazione di inserimento è completa quando i dati inseriti entrano nella coda dei messaggi. Tuttavia, i dati inseriti non sono ricercabili finché non vengono caricati sul nodo di interrogazione. Se la dimensione del segmento non raggiunge la soglia di costruzione dell'indice (512 MB per impostazione predefinita), Milvus ricorre alla ricerca bruta e le prestazioni della query possono diminuire.

È possibile inserire in Milvus vettori con chiavi primarie duplicate?

Sì, Milvus non controlla se i vettori hanno chiavi primarie duplicate. Milvus non controlla se le chiavi primarie dei vettori sono duplicate.

Quando si inseriscono vettori con chiavi primarie duplicate, Milvus li tratta come un'operazione di aggiornamento?

No. Milvus non supporta attualmente le operazioni di aggiornamento e non controlla se le chiavi primarie delle entità sono duplicate. È responsabilità dell'utente assicurarsi che le chiavi primarie delle entità siano uniche e, in caso contrario, Milvus potrebbe contenere più entità con chiavi primarie duplicate.

In questo caso, la copia dei dati che verrà restituita quando viene interrogata rimane un comportamento sconosciuto. Questa limitazione sarà risolta nelle prossime versioni.

Qual è la lunghezza massima delle chiavi primarie autodefinite delle entità?

Le chiavi primarie delle entità devono essere numeri interi non negativi a 64 bit.

Qual è la quantità massima di dati che possono essere aggiunti per ogni operazione di inserimento?

Un'operazione di inserimento non deve superare i 1.024 MB. Si tratta di un limite imposto da gRPC.

La dimensione della raccolta influisce sulle prestazioni della query quando si effettua una ricerca in una partizione specifica?

No. Se vengono specificate le partizioni per una ricerca, Milvus cerca solo nelle partizioni specificate.

Dipende dai dati necessari per la ricerca. Tutte le partizioni che potrebbero apparire nei risultati della ricerca devono essere caricate prima della ricerca.

  • Ad esempio, se si desidera cercare solo una o più partizioni specifiche, non è necessario caricarle tutte. Chiamare load_partition() per caricare le partizioni desiderate , quindi specificare la partizione o le partizioni nella chiamata al metodo search().
  • Se si desidera cercare tutte le partizioni, chiamare load_collection() per caricare l'intero insieme, comprese tutte le partizioni.
  • Se non si carica l'insieme o le partizioni specifiche prima della ricerca, Milvus restituisce un errore.

È possibile creare indici dopo aver inserito i vettori?

Sì. Se in precedenza è stato creato un indice per una collezione da create_index(), Milvus creerà automaticamente un indice per i vettori inseriti successivamente. Tuttavia, Milvus non costruisce un indice finché i nuovi vettori inseriti non riempiono un intero segmento e il nuovo file di indice creato è separato da quello precedente.

Come si differenziano gli indici FLAT e IVF_FLAT?

L'indice IVF_FLAT divide lo spazio vettoriale in cluster di elenchi. Al valore predefinito di 16.384, Milvus confronta le distanze tra il vettore di destinazione e i centroidi di tutti i 16.384 cluster per restituire i cluster più vicini. Milvus confronta quindi le distanze tra il vettore target e i vettori nei cluster selezionati per ottenere i vettori più vicini. A differenza di IVF_FLAT, FLAT confronta direttamente le distanze tra il vettore target e ogni altro vettore.

Quando il numero totale di vettori è approssimativamente pari a nlist, la distanza tra IVF_FLAT e FLAT è minima in termini di requisiti di calcolo e prestazioni di ricerca. Tuttavia, quando il numero di vettori supera nlist di un fattore due o più, IVF_FLAT inizia a mostrare vantaggi in termini di prestazioni.

Per ulteriori informazioni, vedere Indice dei vettori.

Come fa Milvus a scaricare i dati?

Milvus restituisce un successo quando i dati inseriti vengono inseriti nella coda dei messaggi. Tuttavia, i dati non vengono ancora scaricati sul disco. Quindi il nodo dati di Milvus scrive i dati nella coda dei messaggi in un archivio persistente come log incrementale. Se si chiama flush(), il nodo dati è costretto a scrivere immediatamente tutti i dati nella coda dei messaggi nell'archivio persistente.

Cos'è la normalizzazione? Perché la normalizzazione è necessaria?

La normalizzazione si riferisce al processo di conversione di un vettore in modo che la sua norma sia uguale a 1. Se il prodotto interno viene utilizzato per calcolare la somiglianza tra vettori, i vettori devono essere normalizzati. Dopo la normalizzazione, il prodotto interno equivale alla somiglianza del coseno.

Per ulteriori informazioni, consultare Wikipedia.

Perché la distanza euclidea (L2) e il prodotto interno (IP) danno risultati diversi?

Per i vettori normalizzati, la distanza euclidea (L2) è matematicamente equivalente al prodotto interno (IP). Se queste metriche di somiglianza danno risultati diversi, verificare se i vettori sono normalizzati.

C'è un limite al numero totale di collezioni e partizioni in Milvus?

Sì. È possibile creare fino a 65.535 collezioni in un'istanza di Milvus. Quando si calcola il numero di collezioni esistenti, Milvus conta tutte le collezioni con frammenti e partizioni al loro interno.

Ad esempio, supponiamo di aver già creato 100 raccolte, con 2 frammenti e 4 partizioni in 60 di esse e con 1 frammento e 12 partizioni nelle altre 40 raccolte. Il numero attuale di raccolte può essere calcolato come:

60 * 2 * 4 + 40 * 1 * 12 = 960

Perché ottengo meno di k vettori quando cerco i vettori di topk?

Tra gli indici supportati da Milvus, IVF_FLAT e IVF_SQ8 implementano il metodo di clustering k-means. Uno spazio dati viene suddiviso in nlist cluster e i vettori inseriti vengono distribuiti in questi cluster. Milvus seleziona quindi i cluster nprobe più vicini e confronta le distanze tra il vettore target e tutti i vettori nei cluster selezionati per restituire i risultati finali.

Se nlist e topk sono grandi e nprobe è piccolo, il numero di vettori nei cluster nprobe può essere inferiore a k. Pertanto, quando si cercano i vettori più vicini a topk, il numero di vettori restituiti è inferiore a k.

Per evitare questo problema, provare a impostare nprobe più grande e nlist e k più piccoli.

Per ulteriori informazioni, vedere Indice vettoriale.

Qual è la dimensione massima dei vettori supportata da Milvus?

Per impostazione predefinita, Milvus può gestire vettori con un massimo di 32.768 dimensioni. È possibile aumentare il valore di Proxy.maxDimension per consentire un vettore di dimensioni maggiori.

Milvus supporta la CPU Apple M1?

L'attuale versione di Milvus non supporta direttamente la CPU Apple M1. Dopo Milvus 2.3, Milvus fornirà immagini Docker per l'architettura ARM64.

Quali tipi di dati supporta Milvus per il campo chiave primaria?

Nella versione attuale, Milvus supporta sia INT64 che stringhe.

Milvus è scalabile?

Sì. È possibile distribuire il cluster Milvus con più nodi tramite Helm Chart su Kubernetes. Per ulteriori istruzioni, consultare la Guida alla scalabilità.

Cosa sono il segmento crescente e il segmento chiuso?

Quando arriva una richiesta di ricerca, Milvus cerca sia i dati incrementali che quelli storici. I dati incrementali sono aggiornamenti recenti e sono memorizzati nei segmenti in crescita, che vengono bufferizzati in memoria prima che raggiungano la soglia per essere persistiti nello storage a oggetti e per i quali viene costruito un indice più efficiente, mentre i dati storici sono aggiornamenti di qualche tempo fa. Si trovano nei segmenti sigillati che sono stati persistiti nell'archivio oggetti. I dati incrementali e i dati storici costituiscono l'intero set di dati per la ricerca. Questo design rende qualsiasi dato inserito in Milvus immediatamente ricercabile. Per Milvus Distributed, ci sono fattori più complessi che decidono quando un record appena ingerito può apparire nei risultati di ricerca. Per saperne di più su questo aspetto, consultate i livelli di consistenza.

Sì. Per le interrogazioni sulla stessa collezione, Milvus è disponibile per la ricerca concorrente? Per le query sulla stessa collezione, Milvus esegue ricerche simultanee sui dati incrementali e storici. Tuttavia, le query su collezioni diverse sono condotte in serie. Mentre i dati storici possono essere un insieme di dati estremamente vasto, le ricerche sui dati storici sono relativamente più lunghe ed eseguite essenzialmente in serie.

Perché i dati in MinIO rimangono anche dopo che la raccolta corrispondente è stata eliminata?

I dati in MinIO sono progettati per rimanere per un certo periodo di tempo per la comodità del rollback dei dati.

Milvus supporta motori di messaggi diversi da Pulsar?

Sì. Kafka è supportato in Milvus. Kafka è supportato in Milvus 2.1.0.

Qual è la differenza tra una ricerca e una query?

In Milvus, una ricerca per similarità vettoriale recupera i vettori in base al calcolo della similarità e all'accelerazione dell'indice vettoriale. A differenza di una ricerca per similarità vettoriale, una query vettoriale recupera i vettori tramite un filtro scalare basato su un'espressione booleana. L'espressione booleana filtra i campi scalari o il campo chiave primaria e recupera tutti i risultati che corrispondono ai filtri. In una query non sono coinvolti né la metrica di similarità né l'indice vettoriale.

Perché un valore vettoriale float ha una precisione di 7 cifre decimali in Milvus?

Milvus supporta la memorizzazione di vettori come array Float32. Un valore Float32 ha una precisione di 7 cifre decimali. Anche con un valore Float64, ad esempio 1,3476964684980388, Milvus lo memorizza come 1,347696. Pertanto, quando si recupera un vettore di questo tipo da Milvus, si perde la precisione del valore Float64.

Come gestisce Milvus i tipi di dati vettoriali e la precisione?

Milvus supporta i tipi di vettore Binary, Float32, Float16 e BFloat16.

  • Vettori binari: Memorizzano dati binari come sequenze di 0 e 1, utilizzati nell'elaborazione delle immagini e nel recupero delle informazioni.
  • Vettori Float32: Memorizzazione predefinita con una precisione di circa 7 cifre decimali. Anche i valori Float64 sono memorizzati con precisione Float32, con conseguente potenziale perdita di precisione al momento del recupero.
  • Vettori Float16 e BFloat16: Offrono una precisione e un utilizzo della memoria ridotti. Float16 è adatto per applicazioni con larghezza di banda e memoria limitate, mentre BFloat16 bilancia la portata e l'efficienza, ed è comunemente usato nel deep learning per ridurre i requisiti computazionali senza impattare significativamente sulla precisione.

Milvus supporta la specificazione di valori predefiniti per campi scalari o vettoriali?

Attualmente, Milvus 2.4.x non supporta la specificazione di valori predefiniti per i campi scalari o vettoriali. Questa funzione è prevista per le prossime versioni.

Lo spazio di archiviazione viene rilasciato subito dopo la cancellazione dei dati in Milvus?

No, lo spazio di archiviazione non viene rilasciato immediatamente quando si eliminano i dati in Milvus. Anche se l'eliminazione dei dati segna le entità come "logicamente eliminate", lo spazio effettivo potrebbe non essere liberato immediatamente. Ecco perché:

  • Compattazione: Milvus compatta automaticamente i dati in background. Questo processo unisce segmenti di dati più piccoli in segmenti più grandi e rimuove i dati eliminati logicamente (entità contrassegnate per l'eliminazione) o i dati che hanno superato il loro Time-To-Live (TTL). Tuttavia, la compattazione crea nuovi segmenti e contrassegna quelli vecchi come "abbandonati".
  • Garbage Collection: Un processo separato chiamato Garbage Collection (GC) rimuove periodicamente questi segmenti "abbandonati", liberando lo spazio di memoria che occupavano. Ciò garantisce un uso efficiente dello spazio di archiviazione, ma può comportare un leggero ritardo tra l'eliminazione e il recupero dello spazio.

Posso vedere i dati inseriti, cancellati o upsertati subito dopo l'operazione senza aspettare il flush?

Sì, in Milvus la visibilità dei dati non è direttamente legata alle operazioni di flush, grazie alla sua architettura di disaggregazione storage-computer. È possibile gestire la leggibilità dei dati utilizzando i livelli di coerenza.

Quando si sceglie un livello di consistenza, bisogna considerare il compromesso tra consistenza e prestazioni. Per le operazioni che richiedono una visibilità immediata, utilizzare un livello di coerenza "forte". Per le scritture più veloci, privilegiare una consistenza più debole (i dati potrebbero non essere immediatamente visibili). Per ulteriori informazioni, consultare Consistenza.

Dopo aver abilitato la funzione di chiave di partizione, qual è il valore predefinito di num_partitions in Milvus e perché?

Quando la funzione di chiave di partizione è abilitata, il valore predefinito di num_partitions in Milvus è impostato su 16. Questo valore predefinito è stato scelto per motivi di stabilità e prestazioni. È possibile modificare il valore di num_partitions in base alle esigenze specificandolo nella funzione create_collection.

Esiste un limite massimo di lunghezza per le espressioni di filtraggio scalari?

Sì, la lunghezza massima di un'espressione di filtraggio scalare è vincolata dal limite di trasferimento RPC, che è definito nel file di configurazione milvus.yaml. In particolare, il limite è impostato dal parametro serverMaxRecvSize nella sezione proxy:

proxy:
  grpc:
    serverMaxRecvSize: 67108864 # The maximum size of each RPC request that the proxy can receive, unit: byte

Per impostazione predefinita, la dimensione massima di ogni richiesta RPC è di 64 MB. Pertanto, la lunghezza dell'espressione di filtraggio deve essere inferiore a questo limite per garantire un'elaborazione corretta.

Quando si esegue una ricerca massiva di vettori, quanti vettori possono essere specificati contemporaneamente? C'è un limite?

Sì, il numero di vettori che possono essere specificati in una ricerca vettoriale massiva è limitato dalla dimensione del trasferimento RPC, come definito nel file di configurazione milvus.yaml. Questo limite è determinato dal parametro serverMaxRecvSize nella sezione proxy:

proxy:
  grpc:
    serverMaxRecvSize: 67108864 # The maximum size of each RPC request that the proxy can receive, unit: byte

Per impostazione predefinita, la dimensione massima di ogni richiesta RPC è di 64 MB. Pertanto, la dimensione totale dei vettori di input, compresi i dati dimensionali e i metadati, deve essere inferiore a questo limite per garantire un'esecuzione corretta.

Avete ancora domande?

È possibile:

  • Controllare Milvus su GitHub. Siete invitati a porre domande, condividere idee e aiutare gli altri.
  • Unitevi alla nostra comunità Slack per trovare supporto e impegnarvi con la nostra comunità open-source.

Tradotto daDeepL

Tabella dei contenuti

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Questa pagina è stata utile?