大模型学习: 亲测DockerCompose 部署支持 GPU 的 向量数据库Milvus

    Zilliz 采用 Milvus 作为其开源高性能、高扩展性向量数据库的名称,该数据库可在从笔记本电脑到大规模分布式系统等各种环境中高效运行。它既是开源软件,也是云服务。

    Milvus 由 Zilliz 开发,并很快捐赠给了 Linux 基金会下的 LF AI & Data 基金会,现已成为世界领先的开源向量数据库项目之一。它采用 Apache 2.0 许可发布,大多数贡献者都是高性能计算(HPC)领域的专家,擅长构建大规模系统和优化硬件感知代码。核心贡献者包括来自 Zilliz、ARM、英伟达、AMD、英特尔、Meta、IBM、Salesforce、阿里巴巴和微软的专业人士。

有趣的是,Zilliz 的每个开源项目都以鸟命名,这种命名方式象征着自由、远见和技术的敏捷发展。

非结构化数据、Embeddings 和 Milvus

    非结构化数据(如文本、图像和音频)格式各异,蕴含丰富的潜在语义,因此分析起来极具挑战性。为了处理这种复杂性,Embeddings 被用来将非结构化数据转换成能够捕捉其基本特征的数字向量。然后将这些向量存储在向量数据库中,从而实现快速、可扩展的搜索和分析。

Milvus 提供强大的数据建模功能,使您能够将非结构化或多模式数据组织成结构化的 Collections。它支持多种数据类型,适用于不同的属性模型,包括常见的数字和字符类型、各种向量类型、数组、集合和 JSON,为您节省了维护多个数据库系统的精力。

安装 Milvus

要使用 Docker Compose 安装支持 GPU 的 Milvus,请按照以下步骤操作。

1.下载并配置 YAML 文件

下载 milvus-standalone-docker-compose-gpu.yml并手动保存为 docker-compose.yml,或使用以下命令

mkdir milvus
cd milvus
wget https://github.com/milvus-io/milvus/releases/download/v2.5.10/milvus-standalone-dock
<think>我们首先需要明确目标:在Ubuntu 24.04服务器上配置Ollama(支持CUDA加速)、Python环境,并部署Milvus向量数据库,最终实现通过本地大模型API读取向量数据。 步骤分解: 1. 安装Ubuntu 24.04系统(假设已经完成) 2. 安装NVIDIA驱动和CUDA(如果服务器有NVIDIA GPU) 3. 安装Docker(因为Milvus通常使用Docker部署) 4. 部署Milvus向量数据库 5. 安装Ollama(支持GPU加速) 6. 配置Python环境(建议使用conda管理) 7. 编写代码:使用Ollama的API进行文本嵌入(embedding)和生成,并将文档存入Milvus;然后通过本地大模型API读取向量数据 详细步骤: ### 1. 安装NVIDIA驱动和CUDA 如果服务器有NVIDIA GPU,需要安装驱动和CUDA。 添加NVIDIA官方驱动仓库并安装: ```bash sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update sudo apt install nvidia-driver-535 # 根据你的GPU型号选择最新驱动 ``` 安装CUDA Toolkit(以CUDA 12.3为例): 访问[NVIDIA CUDA下载页面](https://developer.nvidia.com/cuda-downloads)选择对应版本,按照指令安装。 例如: ```bash wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda-repo-ubuntu2404-12-3-local_12.3.2-545.23.08-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2404-12-3-local_12.3.2-545.23.08-1_amd64.deb sudo cp /var/cuda-repo-ubuntu2404-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/ sudo apt update sudo apt install cuda-toolkit-12-3 ``` 安装完成后,设置环境变量: ```bash echo 'export PATH=/usr/local/cuda-12.3/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc ``` 验证安装: ```bash nvidia-smi nvcc --version ``` ### 2. 安装Docker 按照官方文档安装Docker: ```bash sudo apt update sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` 将当前用户加入docker组(避免每次sudo): ```bash sudo usermod -aG docker $USER newgrp docker # 刷新组,或重新登录 ``` ### 3. 部署Milvus Milvus官方推荐使用Docker Compose部署,这里我们使用单机版(Standalone)。 下载docker-compose.yml: ```bash wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml ``` 启动Milvus: ```bash docker compose up -d ``` 验证: ```bash docker ps # 查看容器是否正常运行 ``` Milvus会启动三个容器:etcd、minio和milvus-standalone。默认端口:19530(Milvus服务端口),9091(Web端口)。 ### 4. 安装Ollama 按照Ollama官方文档安装(支持GPU): ```bash curl -fsSL https://ollama.com/install.sh | sh ``` 启动Ollama服务: ```bash systemctl start ollama ``` 下载模型(例如Qwen:7b): ```bash ollama pull qwen:7b ``` 注意:Ollama会自动使用GPU(如果检到CUDA环境)。可以通过环境变量`OLLAMA_GPU_LAYERS`设置使用GPU的层数(例如50层): ```bash export OLLAMA_GPU_LAYERS=50 ``` ### 5. 配置Python环境 建议使用conda创建虚拟环境。 安装Miniconda: ```bash wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh ``` 创建并激活环境: ```bash conda create -n rag python=3.10 conda activate rag pip install pymilvus ollama langchain ``` ### 6. 编写代码 我们将使用LangChain集成Milvus和Ollama。主要步骤: - 加载文档(假设为txt文件) - 使用Ollama的嵌入模型(如nomic-embed-text)将文档向量化 - 存入Milvus - 查询时,将问题向量化,检索Milvus,将结果和问题一起发给Ollama生成答案 示例代码(rag.py): ```python from langchain_community.document_loaders import TextLoader from langchain_text_splitters import CharacterTextSplitter from langchain_community.vectorstores import Milvus from langchain_community.embeddings import OllamaEmbeddings from langchain_community.llms import Ollama # 1. 加载文档 loader = TextLoader("./document.txt") documents = loader.load() text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) docs = text_splitter.split_documents(documents) # 2. 初始化嵌入模型和向量数据库 embeddings = OllamaEmbeddings(model="nomic-embed-text") # 确保已下载此模型:ollama pull nomic-embed-text vector_db = Milvus.from_documents( docs, embedding=embeddings, connection_args={"host": "127.0.0.1", "port": "19530"}, collection_name="my_docs" ) # 3. 检索 query = "用户的问题" results = vector_db.similarity_search(query) # 4. 使用大模型生成答案 llm = Ollama(model="qwen:7b") context = "\n".join([doc.page_content for doc in results]) prompt = f"基于以下上下文:\n{context}\n\n请回答:{query}" response = llm.invoke(prompt) print(response) ``` 注意:需要先下载嵌入模型:`ollama pull nomic-embed-text` 运行代码前,确保Milvus和Ollama服务已启动。 ### 7. 通过API提供服务 我们可以使用FastAPI构建一个简单的API服务。 安装FastAPI: ```bash pip install fastapi uvicorn ``` 创建main.py: ```python from fastapi import FastAPI from pydantic import BaseModel from typing import List from rag import vector_db, llm # 假设上面的代码封装在rag.py中,并做了适当调整 app = FastAPI() class Query(BaseModel): question: str @app.post("/ask") async def ask(query: Query): # 检索 results = vector_db.similarity_search(query.question) context = "\n".join([doc.page_content for doc in results]) # 生成答案 prompt = f"基于以下上下文:\n{context}\n\n请回答:{query.question}" response = llm.invoke(prompt) return {"answer": response} # 注意:需要提前初始化vector_db和llm(考虑全局初始化一次) ``` 启动API: ```bash uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` 这样,就可以通过`http://服务器IP:8000/ask`发送POST请求(body: {"question": "你的问题"})来获取答案。 注意事项: - 确保服务器防火墙开放相应端口(8000, 19530等) - 如果文档更新,需要重新加载到Milvus - 根据硬件调整模型大小(如7B模型需要约4GB GPU显存) 以上步骤涵盖了从环境配置到API服务的整个流程。根据实际需求,可能还需要调整参数(如分块大小、重叠大小等)。 §§相关问题§§ 1. 如何在Ubuntu 24.04上安装NVIDIA驱动和CUDA? 2. 如何验证Milvus是否成功启动? 3. Ollama支持哪些嵌入模型? 4. 如何更新Milvus中的文档数据? 5. 如何优化向量检索的性能?</think>以下是在Ubuntu 24.04服务器上配置Ollama、CUDA、Python和Milvus的完整方案,实现本地文档向量数据库大模型API调用: --- ### **1. 系统准备与驱动安装** #### 1.1 更新系统 ```bash sudo apt update && sudo apt upgrade -y sudo reboot ``` #### 1.2 安装NVIDIA驱动(GPU服务器必需) ```bash # 检推荐驱动 ubuntu-drivers devices # 安装驱动(示例为535版本) sudo apt install nvidia-driver-535 -y # 验证安装 nvidia-smi ``` #### 1.3 安装CUDA Toolkit 12.3 ```bash wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/3bf863cc.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/ /" sudo apt install cuda-toolkit-12-3 -y # 添加环境变量 echo 'export PATH=/usr/local/cuda-12.3/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc ``` --- ### **2. 安装Ollama(支持CUDA)** #### 2.1 安装Ollama ```bash curl -fsSL https://ollama.com/install.sh | sh sudo systemctl enable ollama sudo systemctl start ollama ``` #### 2.2 配置GPU加速 ```bash # 编辑配置文件 sudo nano /etc/systemd/system/ollama.service ``` 在`[Service]`部分添加: ```ini Environment="OLLAMA_GPU_LAYERS=50" # 根据GPU显存调整 Environment="PATH=/usr/local/cuda-12.3/bin:$PATH" Environment="LD_LIBRARY_PATH=/usr/local/cuda-12.3/lib64" ExecStart=/usr/local/bin/ollama serve ``` 重启服务: ```bash sudo systemctl daemon-reload sudo systemctl restart ollama ``` #### 2.3 下载大模型(示例Qwen 7B) ```bash ollama pull qwen:7b # 验证模型运行 ollama run qwen:7b "你好" ``` --- ### **3. 部署Milvus向量数据库** #### 3.1 安装Docker ```bash sudo apt install docker.io docker-compose -y sudo usermod -aG docker $USER newgrp docker ``` #### 3.2 启动Milvus单机版 ```bash wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml docker compose up -d ``` 验证: ```bash docker ps | grep milvus ``` --- ### **4. Python环境配置** #### 4.1 安装Miniconda ```bash wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh source ~/.bashrc ``` #### 4.2 创建虚拟环境 ```bash conda create -n rag python=3.10 -y conda activate rag ``` #### 4.3 安装依赖库 ```bash pip install pymilvus langchain-community ollama sentence-transformers ``` --- ### **5. 构建文档向量系统** #### 5.1 文档向量化存储脚本 (`ingest.py`) ```python from langchain_community.document_loaders import TextLoader from langchain_community.embeddings import OllamaEmbeddings from langchain_community.vectorstores import Milvus from langchain_text_splitters import RecursiveCharacterTextSplitter # 加载文档 loader = TextLoader("your_doc.txt") documents = loader.load() # 文档分块 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) docs = text_splitter.split_documents(documents) # 生成嵌入向量并存储 embeddings = OllamaEmbeddings(model="nomic-embed-text") # 高效文本嵌入模型 vector_db = Milvus.from_documents( docs, embeddings, connection_args={"host": "localhost", "port": "19530"}, collection_name="doc_collection" ) ``` #### 5.2 查询API服务 (`api.py`) ```python from fastapi import FastAPI from pymilvus import connections, Collection from langchain_community.embeddings import OllamaEmbeddings from langchain_community.llms import Ollama app = FastAPI() # 连接Milvus connections.connect("default", host="localhost", port="19530") collection = Collection("doc_collection") # 初始化模型 embeddings = OllamaEmbeddings(model="nomic-embed-text") llm = Ollama(model="qwen:7b") @app.post("/query") async def query_doc(question: str): # 向量化问题 query_vec = embeddings.embed_query(question) # 向量检索 results = collection.search( data=[query_vec], anns_field="embedding", limit=3, output_fields=["text"] ) # 组合上下文 context = "\n".join([hit.entity.get("text") for hit in results[0]]) # 大模型生成答案 prompt = f"基于以下文档:\n{context}\n\n回答:{question}" response = llm.invoke(prompt) return {"answer": response} ``` #### 5.3 启动API ```bash uvicorn api:app --reload --host 0.0.0.0 --port 8000 ``` --- ### **6. 系统验证** 1. 文档入库: ```bash python ingest.py ``` 2. API试: ```bash curl -X POST http://localhost:8000/query \ -H "Content-Type: application/json" \ -d '{"question": "文档中提到的关键技术是什么?"}' ``` --- ### **资源要求建议** | 组件 | 7B模型 | 13B模型 | |------------|--------|---------| | **GPU VRAM** | 4GB | 8GB | | **内存** | 16GB | 32GB | | **存储** | 50GB SSD | 100GB NVMe | > 注:Ollama量化模型可降低显存需求[^1] --- ### **常见问题解决** - **CUDA不可用**:检查`nvidia-smi`和`nvcc --version`输出 - **Ollama GPU加速失败**:尝试设置`OLLAMA_GPU_LAYERS=35`(降低层数) - **Milvus连接问题**:确认端口`19530`开放,执行`docker logs milvus-standalone` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终极量化数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值