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.

Qual è la dimensione massima del set di dati che Milvus può gestire?

In teoria, la dimensione massima del set di dati che Milvus può gestire è determinata dall'hardware su cui viene eseguito, in particolare dalla memoria di sistema e dallo storage:

  • Milvus carica in memoria tutte le collezioni e le partizioni specificate prima di eseguire le query. Pertanto, la dimensione della memoria determina la quantità massima di dati che Milvus può interrogare.
  • Quando si aggiungono a Milvus nuove entità e schemi relativi alle collezioni (attualmente è supportato solo MinIO per la persistenza dei dati), lo storage del sistema determina la dimensione massima consentita dei dati inseriti.

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 viene 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 si specificano le partizioni per una ricerca, Milvus cerca solo nelle partizioni specificate.

No. Milvus ha un comportamento diverso. I dati devono essere caricati in memoria prima della ricerca.

  • Se si conoscono le partizioni in cui si trovano i dati, chiamare load_partition() per caricare la partizione o le partizioni desiderate , quindi specificare la partizione o le partizioni nella chiamata al metodo search().
  • Se non si conoscono le partizioni esatte, chiamare load_collection() prima di chiamare search().
  • Se non si caricano le collezioni o le partizioni 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 caricati 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 tale 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?

La versione attuale di Milvus non supporta la CPU Apple M1.

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à.

La query viene eseguita in memoria? Cosa sono i dati incrementali e i dati storici?

Si. Quando arriva una richiesta di query, Milvus cerca sia i dati incrementali che i dati storici caricandoli in memoria. I dati incrementali si trovano nei segmenti in crescita, che vengono bufferizzati in memoria prima che raggiungano la soglia per essere persistiti nel motore di archiviazione, mentre i dati storici provengono dai segmenti sigillati che vengono archiviati nella memoria degli oggetti. I dati incrementali e i dati storici costituiscono l'intero set di dati da ricercare.

Sì. Per le interrogazioni sulla stessa collezione, Milvus è disponibile per la ricerca simultanea? Per le interrogazioni sulla stessa collezione, Milvus cerca simultaneamente i dati incrementali e storici. Tuttavia, le interrogazioni 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, come 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.

Avete ancora domande?

È possibile:

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

Tradotto daDeepLogo

Tabella dei contenuti
Feedback

Questa pagina è stata utile?