Hochleistungsfähige Vektor-Retrieval-Bibliothek für LLM

Hochleistungsfähige Vektor-Retrieval-Bibliothek

ein Drachen

Einführung

Milvus ist eine Open-Source-Vektordatenbank-Engine, die effiziente Funktionen zum Speichern, Abrufen und Analysieren von Vektoren bietet. Es ist für die Verarbeitung großer, hochdimensionaler Vektordaten konzipiert und wird häufig in Bereichen wie maschinellem Lernen, Computer Vision, Verarbeitung natürlicher Sprache und Empfehlungssystemen eingesetzt.

Milvus bietet eine Vielzahl von Funktionen und Features, die es ideal für die Arbeit mit Vektordaten machen. Hier sind einige Hauptmerkmale von Milvus:

  1. Hohe Leistung: Milvus verwendet hochoptimierte Datenstrukturen und Indizierungsalgorithmen, um einen schnellen Vektorabruf zu erreichen. Es unterstützt mehrere Indextypen, z. B. flachen Index, invertierten Index und HNSW (Hierarchical Navigable Small World) usw. Diese Indizes können die Ähnlichkeitssuche von Vektoren beschleunigen.
  2. Skalierbarkeit: Milvus verfügt über eine gute Skalierbarkeit und kann problemlos auf große Vektordatensätze erweitert werden. Es unterstützt die verteilte Bereitstellung und kann Datenspeicher- und Abfragevorgänge auf mehreren Knoten durchführen, um einen hohen Durchsatz und eine geringe Latenz zu erreichen.
  3. Diversifizierte Vektortypen: Milvus unterstützt mehrere Vektortypen, einschließlich Gleitkommavektoren, Binärvektoren und Textvektoren. Dadurch lässt es sich an Vektordatenanforderungen in verschiedenen Bereichen und Anwendungen anpassen.
  4. Mehrsprachige Unterstützung: Milvus bietet SDKs (Software Development Kits) für mehrere Programmiersprachen, darunter Python, Java, Go und C++, sodass Entwickler Milvus problemlos in ihre Anwendungen integrieren können.
  5. Visuelle Verwaltungsoberfläche: Milvus bietet eine benutzerfreundliche Weboberfläche zur Verwaltung und Überwachung der Vektordatenbank. Über diese Schnittstelle können Entwickler Vorgänge wie Datenimport, Indexerstellung und Abfrageoptimierung durchführen und außerdem den Systemstatus und Leistungsindikatoren anzeigen.

Zusammenfassend ist Milvus eine leistungsstarke Vektordatenbank-Engine, die durch ihre hohe Leistung, Skalierbarkeit und vielfältigen Funktionen große hochdimensionale Vektordaten effizient speichern und abrufen kann. Es spielt in Anwendungen in vielen Bereichen eine wichtige Rolle und hilft Entwicklern, die Entwicklung und Bereitstellung vektorbezogener Aufgaben zu beschleunigen.

Installieren

  • Docker-Installationsimage: docker pull milvusdb/milvus:cpu-latest

  • Erstellen Sie ein Arbeitsverzeichnis:

    mkdir Drachen

    CD-Drachen

    mkdir config

    mkdir db

    mkdir-Protokolle

    mkdir wal

Meine Verzeichnisstruktur ist:

  milvus
    ├─conf //配置文件目录
    │      server_config.yaml  //配置文件 搜索引擎配置都在这里修改
    ├─db //数据库存储目录 你的索引与向量存储的位置
    └─logs //日志存储目录 
    └─wal // 预写式日志相关配置

server_config.yaml

docker run -it milvusdb/milvus:cpu-latest bash

docker cp 74c20a680091:/var/lib/milvus/conf/server_config.yaml milvus/conf/

  • Starten Sie den Container

    docker run -td --name mymilvus -e "TZ=Asia/Shanghai" -p 19530:19530 -p 19121:19121 -v /work/lnn_workspace/chatgpt/search/milvus/conf:/var/lib/milvus/conf -v /work/lnn_workspace/chatgpt/search/milvus/db:/var/lib/milvus/db -v /work/lnn_workspace/chatgpt/search/milvus/logs:/var/lib/milvus/logs   milvusdb/milvus:cpu-latest
    

    Docker PS | grep mymilvus

[Externer Link Bildübertragung fehlgeschlagen, die Quellseite verfügt möglicherweise über einen Anti-Leeching-Mechanismus, es wird empfohlen, das Bild zu speichern und direkt hochzuladen (img-orhH8dlK-1685346967888) (C:\Users\Administrator\AppData\Roaming\Typora\ typora-user-images\ image-20230519105321396.png)]

  • Installieren Sie Pymilvus
pip install pymilvus==1.1.2
ps:注意这里安装最新版本可以会无法正常调用,1.1.2经过测试可正常使用

überweisen

# -*- coding: utf-8 -*-  

# 导入相应的包  
import numpy as np  
from milvus import Milvus, MetricType  

# 初始化一个Milvus类,以后所有的操作都是通过milvus来的  
milvus = Milvus(host='localhost', port='19530')  

# 向量个数  
num_vec = 5000  
# 向量维度  
vec_dim = 768  
# name  
collection_name = "test_collection"  
# 创建collection,可理解为mongo的collection  
collection_param = {
    
      
    'collection_name': collection_name,  
    'dimension': vec_dim,  
    'index_file_size': 32,  
    'metric_type': MetricType.IP  # 使用内积作为度量值  
}  
milvus.create_collection(collection_param)  

# 随机生成一批向量数据  
# 支持ndarray,也支持list  
vectors_array = np.random.rand(num_vec, vec_dim)  

# 把向量添加到刚才建立的collection中  
status, ids = milvus.insert(collection_name=collection_name, records=vectors_array)  # 返回 状态和这一组向量的ID  
milvus.flush([collection_name])  

# 输出统计信息  
print(milvus.get_collection_stats(collection_name))  

# 创建查询向量  
query_vec_array = np.random.rand(1, vec_dim)  
# 进行查询,  
status, results = milvus.search(collection_name=collection_name, query_records=query_vec_array, top_k=5)  
print(status)  
print(results)  

# 如果不用可以删掉  
status = milvus.drop_collection(collection_name)  

# 断开、关闭连接  
milvus.close()
collection_name = "test_collection"
- 定义集合名称为test_collection
collection_param = {
    
    
    'collection_name': collection_name,
    'dimension': vec_dim,
    'index_file_size': 32,
    'metric_type': MetricType.IP 
}
milvus.create_collection(collection_param)  



- collection_name 指定集合名称为test_collection
- dimension 表示集合中向量的维度,由vec_dim变量赋值
- index_file_size 设置索引文件大小为32MB
- metric_type 设置度量类型为IP,表示使用向量内积作为相似度度量
所以,这段代码定义了集合名称和相关参数,用于在Milvus服务上创建一个新的集合。
在Milvus中,集合相当于关系数据库的表,是存储向量的基本单元。在创建集合时,我们需要指定:
1. 集合名称:唯一标识一个集合
2. 向量维度:集合中向量的特征数量
3. 度量类型:测量向量之间相似度的算法,如IP(内积)、L2(欧氏距离)4. 索引文件大小:用于提高搜索性能,索引文件会存储向量的索引信息

faiss

Einführung

Faiss ist eine von Facebook bereitgestellte Open-Source-Vektor-Retrieval-Bibliothek, die zur Indizierung und Suche umfangreicher Vektorsammlungen verwendet wird. Zu den Hauptmerkmalen gehören:

  1. Unterstützt mehrere Indexstrukturen: IVF, IVFFlat, HNSW usw. Diese Indexstrukturen ermöglichen eine hochpräzise Vektorsuche mit hohem Recall.
  2. Unterstützt mehrere Messmethoden: inneres Produkt, euklidischer Abstand, Kosinusähnlichkeit usw. Eine Sammlung von Vektoren kann durch Auswahl einer geeigneten Metrik indiziert werden.
  3. Schnelle Indexerstellung und Suche: Faiss nutzt die GPU-Beschleunigung, um die Indexerstellung und Suche in Milliarden von Vektoren zu realisieren.
  4. Dimensionsreduktion und Clustering: Faiss bietet PCA, IVFFlat und andere Algorithmen zur Reduzierung der Vektordimensionalität und unterstützt den Kmeans-Algorithmus für Vektorclustering.
  5. Erweiterte Funktionen: Faiss unterstützt erweiterte Funktionen wie Online-Lernen, heterogene Vektorabfrage und Indexkomprimierung.

Typische Anwendungen von Faiss sind:

  1. Bildabruf: Finden Sie das Bild, das einem Eingabebild am ähnlichsten ist, in einer umfangreichen Bilddatenbank.

  2. Textabgleich: Finden Sie schnell den Textinhalt, der dem Eingabetext am nächsten kommt.

  3. Empfehlungssystem: Je nach Nutzerinteressen schnell eine Vielzahl von Produkten abrufen und empfehlen.

  4. Stimmabdruckerkennung: Spracherkennung und -abruf in umfangreichen Sprachdaten realisieren.

Faiss bietet C++-, Python- und Java-Sprachschnittstellen, mit denen sich problemlos ein Vektorabrufsystem aufbauen lässt. Wenn Sie riesige hochdimensionale Vektoren verwalten und durchsuchen müssen, ist Faiss eine sehr gute Wahl.

Installieren

install faiss-cpu

überweisen

# 导入库  
import numpy as np  
import faiss  

# 向量个数  
num_vec = 5000  
# 向量维度  
vec_dim = 768  
# 搜索topk  
topk = 10  

# 随机生成一批向量数据  
vectors = np.random.rand(num_vec, vec_dim)  

# 创建索引  
faiss_index = faiss.IndexFlatL2(vec_dim)  # 使用欧式距离作为度量  
# 添加数据  
faiss_index.add(vectors)  

# 查询向量 假设有5个  
query_vectors = np.random.rand(5, vec_dim)  
# 搜索结果  
# 分别是 每条记录对应topk的距离和索引  
# ndarray类型 。shape:len(query_vectors)*topk  
res_distance, res_index = faiss_index.search(query_vectors, topk)  
print(res_index)  
print(res_distance)

Guess you like

Origin blog.csdn.net/qq128252/article/details/130930164