milvus-logo
LFAI
Home
  • Preguntas frecuentes

Preguntas frecuentes sobre el producto

¿Cuánto cuesta Milvus?

Milvus es un proyecto de código abierto 100% gratuito.

Por favor, adhiérase a la Licencia Apache 2.0 cuando utilice Milvus con fines de producción o distribución.

Zilliz, la empresa que está detrás de Milvus, también ofrece una versión en la nube totalmente gestionada de la plataforma para aquellos que no quieran construir y mantener su propia instancia distribuida. Zilliz Cloud mantiene automáticamente la fiabilidad de los datos y permite a los usuarios pagar sólo por lo que utilizan.

¿Es Milvus compatible con arquitecturas que no sean x86?

Milvus no puede instalarse ni ejecutarse en plataformas que no sean x86.

Su CPU debe soportar uno de los siguientes conjuntos de instrucciones para ejecutar Milvus: SSE4.2, AVX, AVX2, AVX512. Todos ellos son conjuntos de instrucciones SIMD dedicados a x86.

¿Dónde almacena Milvus los datos?

Milvus maneja dos tipos de datos, los datos insertados y los metadatos.

Los datos insertados, incluidos los datos vectoriales, los datos escalares y el esquema específico de la colección, se almacenan en el almacenamiento persistente como registro incremental. Milvus es compatible con múltiples backends de almacenamiento de objetos, incluidos MinIO, AWS S3, Google Cloud Storage (GCS), Azure Blob Storage, Alibaba Cloud OSS y Tencent Cloud Object Storage (COS).

Los metadatos se generan dentro de Milvus. Cada módulo de Milvus tiene sus propios metadatos que se almacenan en etcd.

¿Por qué no hay datos vectoriales en etcd?

etcd almacena los metadatos del módulo Milvus; MinIO almacena las entidades.

¿Milvus permite insertar y buscar datos simultáneamente?

Sí. Las operaciones de inserción y las operaciones de consulta son gestionadas por dos módulos separados que son mutuamente independientes. Desde la perspectiva del cliente, una operación de inserción se completa cuando los datos insertados entran en la cola de mensajes. Sin embargo, los datos insertados no se pueden buscar hasta que se cargan en el nodo de consulta. Si el tamaño del segmento no alcanza el umbral de creación de índices (512 MB por defecto), Milvus recurre a la búsqueda por fuerza bruta y el rendimiento de la consulta puede disminuir.

¿Pueden insertarse en Milvus vectores con claves primarias duplicadas?

Sí. Milvus no comprueba si las claves primarias de los vectores están duplicadas.

Cuando se insertan vectores con claves primarias duplicadas, ¿Milvus lo trata como una operación de actualización?

No. Milvus no soporta actualmente operaciones de actualización y no comprueba si las claves primarias de entidad son duplicadas. Usted es responsable de asegurar que las claves primarias de las entidades son únicas, y si no lo son Milvus puede contener múltiples entidades con claves primarias duplicadas.

Si esto ocurre, qué copia de datos devolverá cuando se consulte sigue siendo un comportamiento desconocido. Esta limitación se corregirá en futuras versiones.

¿Cuál es la longitud máxima de las claves primarias de entidad autodefinidas?

Las claves primarias de entidad deben ser enteros no negativos de 64 bits.

¿Cuál es la cantidad máxima de datos que se pueden añadir por operación de inserción?

Una operación de inserción no debe superar los 1.024 MB. Se trata de un límite impuesto por gRPC.

¿Influye el tamaño de la colección en el rendimiento de la consulta cuando se busca en una partición específica?

No. Si se especifican particiones para una búsqueda, Milvus sólo busca en las particiones especificadas.

Depende de los datos que se necesiten para la búsqueda. Todas las particiones que puedan aparecer en el resultado de la búsqueda deben cargarse antes de buscar.

  • Por ejemplo, si sólo quiere buscar en una(s) partición(es) específica(s), no necesita cargarlas todas. Llame a load_partition() para cargar la(s) partición(es) deseada(s) y luego especifique la(s) partición(es) en la llamada al método search().
  • Si desea buscar en todas las particiones, llame a load_collection() para cargar toda la colección incluyendo todas las particiones.
  • Si no carga la colección o la(s) partición(es) específica(s) antes de buscar, Milvus devolverá un error.

¿Se pueden crear índices después de insertar vectores?

Sí. Si antes se ha creado un índice para una colección mediante create_index(), Milvus creará automáticamente un índice para los vectores insertados posteriormente. Sin embargo, Milvus no construye un índice hasta que los vectores recién insertados llenan un segmento entero y el archivo de índice recién creado está separado del anterior.

¿En qué se diferencian los índices FLAT e IVF_FLAT?

El índice IVF_FLAT divide el espacio vectorial en grupos de listas. Con el valor de lista por defecto de 16.384, Milvus compara las distancias entre el vector objetivo y los centroides de todos los 16.384 clusters para devolver los clusters más cercanos a la sonda. Milvus compara entonces las distancias entre el vector objetivo y los vectores en los clusters seleccionados para obtener los vectores más cercanos. A diferencia de IVF_FLAT, FLAT compara directamente las distancias entre el vector objetivo y cualquier otro vector.

Cuando el número total de vectores es aproximadamente igual a nlist, hay poca distancia entre IVF_FLAT y FLAT en términos de requisitos de cálculo y rendimiento de búsqueda. Sin embargo, a medida que el número de vectores supera nlist por un factor de dos o más, IVF_FLAT comienza a demostrar ventajas de rendimiento.

Consulte Índice de vectores para obtener más información.

¿Cómo descarga Milvus los datos?

Milvus devuelve éxito cuando los datos insertados se ingestan en la cola de mensajes. Sin embargo, los datos aún no se han volcado al disco. Entonces el nodo de datos de Milvus escribe los datos de la cola de mensajes en el almacenamiento persistente como registros incrementales. Si se llama a flush(), el nodo de datos se ve obligado a escribir todos los datos de la cola de mensajes en el almacenamiento persistente inmediatamente.

¿Qué es la normalización? ¿Por qué es necesaria la normalización?

La normalización se refiere al proceso de convertir un vector para que su norma sea igual a 1. Si se utiliza el producto interno para calcular la similitud vectorial, los vectores deben ser normalizados. Después de la normalización, el producto interior es igual a la similitud coseno.

Para más información, véase Wikipedia.

¿Por qué la distancia euclídea (L2) y el producto interior (PI) devuelven resultados diferentes?

Para vectores normalizados, la distancia euclídea (L2) es matemáticamente equivalente al producto interior (PI). Si estas métricas de similitud devuelven resultados diferentes, compruebe si sus vectores están normalizados

¿Existe un límite para el número total de colecciones y particiones en Milvus?

Sí. Puede crear hasta 65.535 colecciones en una instancia de Milvus. Al calcular el número de colecciones existentes, Milvus cuenta todas las colecciones con fragmentos y particiones en ellas.

Por ejemplo, supongamos que ya ha creado 100 colecciones, con 2 fragmentos y 4 particiones en 60 de ellas y con 1 fragmento y 12 particiones en las 40 colecciones restantes. El número actual de colecciones se puede calcular como:

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

¿Por qué obtengo menos de k vectores cuando busco vectores en topk?

Entre los índices que soporta Milvus, IVF_FLAT e IVF_SQ8 implementan el método de agrupación k-means. Un espacio de datos se divide en nlist clusters y los vectores insertados se distribuyen en estos clusters. Milvus selecciona entonces los nprobe clusters más cercanos y compara las distancias entre el vector objetivo y todos los vectores en los clusters seleccionados para devolver los resultados finales.

Si nlist y topk son grandes y nprobe es pequeño, el número de vectores en los clusters nprobe puede ser menor que k. Por lo tanto, cuando se buscan los vectores más cercanos topk, el número de vectores devueltos es menor que k.

Para evitarlo, intente establecer nprobe más grande y nlist y k más pequeños.

Consulte Índice de vectores para obtener más información.

¿Cuál es la dimensión máxima de vector soportada en Milvus?

Milvus puede gestionar vectores con hasta 32.768 dimensiones por defecto. Puede aumentar el valor de Proxy.maxDimension para permitir un vector de mayor dimensión.

¿Es Milvus compatible con la CPU Apple M1?

La versión actual de Milvus no es compatible directamente con la CPU Apple M1. Después de Milvus 2.3, Milvus proporciona imágenes Docker para la arquitectura ARM64.

¿Qué tipos de datos soporta Milvus en el campo de clave primaria?

En la versión actual, Milvus soporta tanto INT64 como string.

¿Es Milvus escalable?

Sí. Puede desplegar un clúster Milvus con múltiples nodos a través de Helm Chart en Kubernetes. Consulte la Guía de escalado para obtener más instrucciones.

¿Qué son segmento creciente y segmento sellado?

Cuando llega una solicitud de búsqueda, Milvus busca tanto datos incrementales como datos históricos. Los datos incrementales son actualizaciones recientes, se almacenan en los segmentos crecientes, que se almacenan en memoria antes de que alcancen el umbral para ser persistidos en el almacenamiento de objetos y se construye un índice más eficiente para ellos, mientras que los datos históricos son actualizaciones de hace un tiempo. Se encuentran en los segmentos sellados que se han persistido en el almacenamiento de objetos. Los datos incrementales y los datos históricos juntos constituyen el conjunto de datos para la búsqueda. Este diseño hace que cualquier dato ingestado a Milvus sea instantáneamente consultable. Para Milvus Distributed, hay factores más complejos que deciden cuándo un registro recién ingestado puede aparecer en el resultado de la búsqueda. Conozca más matices al respecto en los niveles de consistencia.

Sí. Para consultas sobre la misma colección, Milvus busca simultáneamente en los datos incrementales e históricos. Sin embargo, las consultas sobre colecciones diferentes se realizan en serie. Mientras que los datos históricos pueden ser un conjunto de datos extremadamente grande, las búsquedas en los datos históricos consumen relativamente más tiempo y se realizan esencialmente en serie.

¿Por qué permanecen los datos en MinIO después de que se abandone la colección correspondiente?

Los datos en MinIO están diseñados para permanecer durante un cierto período de tiempo para la conveniencia de la reversión de datos.

¿Milvus admite motores de mensajes distintos de Pulsar?

Sí. Kafka está soportado en Milvus 2.1.0.

¿Cuál es la diferencia entre una búsqueda y una consulta?

En Milvus, una búsqueda de similitud vectorial recupera vectores basándose en el cálculo de similitud y la aceleración del índice vectorial. A diferencia de una búsqueda de similitud vectorial, una consulta vectorial recupera vectores mediante un filtrado escalar basado en una expresión booleana. La expresión booleana filtra los campos escalares o el campo de clave primaria, y recupera todos los resultados que coinciden con los filtros. En una consulta no intervienen ni la métrica de similitud ni el índice vectorial.

¿Por qué un valor vectorial flotante tiene una precisión de 7 dígitos decimales en Milvus?

Milvus permite almacenar vectores como matrices Float32. Un valor Float32 tiene una precisión de 7 dígitos decimales. Incluso con un valor Float64, como 1.3476964684980388, Milvus lo almacena como 1.347696. Por lo tanto, cuando se recupera un vector de Milvus, se pierde la precisión del valor Float64.

¿Cómo maneja Milvus los tipos de datos vectoriales y la precisión?

Milvus soporta los tipos de vectores Binary, Float32, Float16 y BFloat16.

  • Vectores binarios: Almacenan datos binarios como secuencias de 0s y 1s, utilizados en el procesamiento de imágenes y recuperación de información.
  • Vectores Float32: Almacenamiento por defecto con una precisión de unos 7 dígitos decimales. Incluso los valores Float64 se almacenan con precisión Float32, lo que conlleva una posible pérdida de precisión al recuperarlos.
  • Vectores Float16 y BFloat16: Ofrecen una precisión y un uso de memoria reducidos. Float16 es adecuado para aplicaciones con ancho de banda y almacenamiento limitados, mientras que BFloat16 equilibra el rango y la eficiencia, comúnmente utilizado en el aprendizaje profundo para reducir los requisitos computacionales sin afectar significativamente a la precisión.

¿Milvus permite especificar valores por defecto para campos escalares o vectoriales?

Actualmente, Milvus 2.4.x no permite especificar valores por defecto para campos escalares o vectoriales. Esta característica está prevista para futuras versiones.

¿Aún tiene preguntas?

Puede hacerlo:

  • Eche un vistazo a Milvus en GitHub. Puede plantear preguntas, compartir ideas y ayudar a otros.
  • Únase a nuestra comunidad Slack para encontrar apoyo y participar con nuestra comunidad de código abierto.

Traducido porDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

¿Fue útil esta página?