小言_互联网的博客

基于 Google Colab 的 Milvus 使用教程

397人阅读  评论(0)

 

Milvus 简介

Milvus 是一款开源的向量相似度搜索引擎,集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,并提供了一整套简单直观的 API。Milvus 具备高度灵活、稳定可靠以及高速搜索等特点,在全球范围内已被数百家组织和机构所采用。他们将 Milvus 与 AI 模型结合,广泛应用于以下场景:

  • 图像、音视频搜索领域

  • 文本搜索、推荐和交互式问答系统等文本搜索领域

  • 新药搜索、基因筛选等生物医药领域

 

Google Colab 简介

Google Colab 是谷歌开放的一款云服务工具,主要用于机器学习的开发和研究。Google Colab 提供了免费的 Jupyter 云环境及 GPU 资源。它支持许多常用的机器学习库,集成了 PyTorch、TensorFlow、Keras 和 OpenCV。本文将介绍如何使用 Google Colab 运行 Milvus 并且通过 Python SDK 执行一些基本操作。让我们一起熟悉 Milvus 吧。

 

使用 Google Colab 运行 Milvus

Milvus 官方文档中推荐使用 Docker 启动服务。但 Google Colab 云环境中目前不支持安装 Docker,且考虑到有人不会使用 Docker,因此本文将介绍源码编译的启动服务方式。

环境准备

我们将根据 Milvus 源码编译来启动服务。编译要求的 GCC、CMake 和 Git 在 Colab 中已安装。另外, GPU 版本编译所需的 CUDA 和 NVIDIA driver 在 Colab GPU 环境中也已默认安装,因此简化了 Milvus 的安装与启动过程。

1. 下载 Milvus_tutorial.ipynb

wget https://raw.githubusercontent.com/milvus-io/bootcamp/0.10.0/getting_started/basics/milvus_tutorial/Milvus_tutorial.ipynb

2. 在 Google Colab 中加载 notebook

安装与启动

  • 下载并编译源码

注意:如需编译 GPU 版本,请修改 Notebook 环境为 GPU(Edit -> Notebook settings 选择 GPU),并且在 Step 3 Build Milvus source code 运行 ./build.sh -t Release -g。

  • 启动 Milvus 服务

 

注意:如果你前面选择编译 GPU 版本,那么将会看到 “GPU resources ENABLED!”如下图:

 

基本操作

我们在 Google Colab 成功启动了 Milvus 服务。Milvus 提供 Python/Java/Go/Restful/C++ 多种 API 接口。接下来我们将在 Colab 中使用 Python 接口执行 Milvus 的基本操作:

  • 安装 pymilvus

! pip install pymilvus==0.2.14  
  • 连接服务端


   
  1. # Connect to Milvus Server
  2. milvus = Milvus(_HOST, _PORT) 
  3. # Return the status of the Milvus server
  4. server_status = milvus.server_status(timeout= 10)
  • 创建集合 / 分区/ 索引


   
  1. # Information needed to create a collection   
  2. param={ 'collection_name' :collection_name,  'dimension': _DIM,  'index_file_size': _INDEX_FILE_SIZE,  'metric_type': MetricType.L2}   
  3. # Create a collection  
  4. milvus.create_collection(param, timeout= 10)   
  5. # Create a partition for a collection   
  6. milvus.create_partition(collection_name=collection_name, partition_tag=partition_tag, timeout= 10)   
  7. ivf_param = { 'nlist':  16384}   
  8. # Create index for a collection   
  9. milvus.create_index(collection_name=collection_name, index_type=IndexType.IVF_FLAT, params=ivf_param)  
  • 插入数据并落盘


   
  1. # Insert vectors to a collection
  2. milvus.insert(collection _name=collection_name, records=vectors, ids=ids)  
  3. # Flush vector data in one collection or multiple collections to disk  
  4. milvus.flush(collection _name_array=[collection _name], timeout=None)  
  • 加载数据并检索


   
  1. # Load a collection for caching  
  2. milvus.load_collection(collection_name=collection_name, timeout= None)  
  3. # Search vectors in a collection 
  4. search_param = {  "nprobe"16 }  
  5. milvus.search(collection_name=collection_name,query_records=[vectors[ 0]],partition_tags= None,top_k= 10,params=search_param)  
  • 获取集合 / 索引信息


   
  1. # Return information of a collection 
  2. milvus.get_collection_info(collection_name=collection_name, timeout=10)  
  3. # Show index information of a collection
  4. milvus.get_index_info(collection_name=collection_name, timeout=10)  
  • 通过 ID 获取向量


   
  1. # List the ids in segment  
  2. # you can get the segment_name list by get_collection_stats() function  
  3. milvus.list_id_in_segment(collection_name =collection_name, segment_name= '1600328539015368000', timeout= None)  
  4. # Return raw vectors according to ids, and you can get the ids list by list_id_in_segment() function 
  5. milvus.get_entity_by_id(collection_name=collection_name, ids=[ 0], timeout= None)  
  • 获取 / 设置参数


   
  1. # Get Milvus configurations
  2. milvus.get_config(parent_key= 'cache', child_key= 'cache_size')  
  3. # Set Milvus configurations  
  4. milvus.set_config(parent_key= 'cache', child_key= 'cache_size'value= '5G')  
  • 删除索引 / 向量 / 分区 / 集合


   
  1. # Remove an index.   
  2. milvus.drop_index(collection_name=collection_name, timeout= None)   
  3. # Delete vectors in a collection by vector ID.   
  4. # id_array (list[int]) -- list of vector id   
  5. milvus.delete_entity_by_id(collection_name=collection_name, id_array=[ 0], timeout= None)   
  6. # Delete a partition in a collection.   
  7. milvus.drop_partition(collection_name=collection_name, partition_tag=partition_tag, timeout= None)   
  8. # Delete a collection by name.   
  9. milvus.drop_collection(collection_name=collection_name, timeout= 10)  

 写在最后

感谢 Google Colab 提供的免费云服务,简化了 Milvus 源码编译过程,轻松实现 Python 基本操作。同时,Milvus 作为 LF AI & Data 基金会的开源孵化项目,也为机器学习爱好者提供了有关向量相似度检索引擎的资源。相信  Milvus 与 Colab 的结合将加快 AI 在你的机器学习项目中的应用。

本文仅介绍了 Milvus 的基本操作。关于 Milvus 的使用场景可以参考 

Milvus-Bootcamp:(https://github.com/milvus-io/bootcamp/tree/master/EN_solutions/graph_based_recommend),包含了以图搜图,问答机器人以及化学式检索等多个开源项目。

更多 Milvus  实战系列文章

Milvus 实战 | 基于 Milvus 的食谱检索系统

Milvus 实战|利用 Milvus 搭建基于图的推荐系统

Milvus 实战 | 基于 Milvus 的 CORD-19 论文检索引擎

Milvus 实战 | Milvus 与 BERT 搭建文本搜索

 

欢迎加入 Milvus 社区

github.com/milvus-io/milvus | 源码

milvus.io | 官网

milvusio.slack.com | Slack 社区

zhihu.com/org/zilliz-11| 知乎

zilliz.blog.csdn.net | CSDN 博客

space.bilibili.com/478166626 | Bilibili

 


转载:https://blog.csdn.net/weixin_44839084/article/details/110459015
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场