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 la 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 soporta directamente 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.

¿Se libera el espacio de almacenamiento inmediatamente después de la eliminación de datos en Milvus?

No, el espacio de almacenamiento no se libera inmediatamente cuando se borran datos en Milvus. Aunque la eliminación de datos marca las entidades como "eliminadas lógicamente", el espacio real puede no liberarse instantáneamente. He aquí por qué:

  • Compactación: Milvus compacta automáticamente los datos en segundo plano. Este proceso fusiona segmentos de datos más pequeños en otros más grandes y elimina los datos eliminados lógicamente (entidades marcadas para su eliminación) o los datos que han superado su tiempo de vida (TTL). Sin embargo, la compactación crea nuevos segmentos mientras marca los antiguos como "Eliminados".
  • Recogida de Basura: Un proceso independiente llamado Recogida de Basura (GC) elimina periódicamente estos segmentos "Arrojados", liberando el espacio de almacenamiento que ocupaban. Esto garantiza un uso eficiente del almacenamiento, pero puede introducir un ligero retraso entre la eliminación y la recuperación de espacio.

¿Puedo ver los datos insertados, borrados o subinsertados inmediatamente después de la operación sin esperar a que se produzca una descarga?

Sí, en Milvus, la visibilidad de los datos no está directamente ligada a las operaciones de vaciado debido a su arquitectura de desagregación almacenamiento-ordenador. Puede gestionar la legibilidad de los datos utilizando niveles de consistencia.

Al seleccionar un nivel de consistencia, tenga en cuenta las compensaciones entre consistencia y rendimiento. Para operaciones que requieran visibilidad inmediata, utilice un nivel de consistencia "Fuerte". Para escrituras más rápidas, priorice una consistencia más débil (los datos pueden no ser visibles inmediatamente). Para más información, consulte Consistencia.

Después de habilitar la función de clave de partición, ¿cuál es el valor predeterminado de num_partitions en Milvus, y por qué?

Cuando se activa la función de clave de partición, el valor por defecto de num_partitions en Milvus se establece en 16. Este valor por defecto se elige por razones de estabilidad y rendimiento. Puede ajustar el valor de num_partitions según sea necesario especificándolo en la función create_collection.

¿Existe un límite máximo de longitud para las expresiones de filtrado escalar?

Sí, la longitud máxima de una expresión de filtrado escalar está restringida por el límite de transferencia RPC, que se define en el archivo de configuración milvus.yaml. En concreto, el límite se establece mediante el parámetro serverMaxRecvSize de la sección proxy:

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

Por defecto, el tamaño máximo de cada petición RPC es de 64 MB. Por lo tanto, la longitud de la expresión de filtrado debe ser inferior a este límite para garantizar un procesamiento correcto.

Al realizar una búsqueda masiva de vectores, ¿cuántos vectores se pueden especificar a la vez? ¿Existe algún límite?

Sí, el número de vectores que se pueden especificar en una búsqueda masiva de vectores está limitado por el tamaño de la transferencia RPC, tal y como se define en el archivo de configuración milvus.yaml. Este límite viene determinado por el parámetro serverMaxRecvSize de la sección proxy:

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

Por defecto, el tamaño máximo de cada petición RPC es de 64MB. Por lo tanto, el tamaño total de los vectores de entrada, incluidos sus datos dimensionales y metadatos, debe ser inferior a este límite para garantizar el éxito de la ejecución.

¿Aún tiene preguntas?

Puede hacerlo:

  • Eche un vistazo a Milvus en GitHub. Puede plantear preguntas, compartir ideas y ayudar a los demás.
  • Únase a nuestra comunidad de Slack para encontrar ayuda y participar en 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?