RAG环境搭建:Azure VM平台最佳实践

云信安装大师
90
AI 质量分
10 5 月, 2025
3 分钟阅读
0 阅读

RAG环境搭建:Azure VM平台最佳实践

引言

RAG(Retrieval-Augmented Generation)是当前AI领域的热门技术,它将检索(Retrieval)和生成(Generation)相结合,显著提升了语言模型的知识准确性和事实性。本文将指导您在Azure VM上搭建完整的RAG开发环境,包括向量数据库、大语言模型和检索系统。

准备工作

在开始前,您需要:
1. 有效的Azure订阅账号
2. Azure CLI已安装并配置(可通过az login登录)
3. 基础Linux命令行知识
4. 推荐VM配置:
– 至少4核CPU
– 16GB内存
– 100GB SSD存储
– Ubuntu 20.04 LTS或更高版本

步骤1:创建Azure VM实例

代码片段
# 创建资源组
az group create --name RAG-ResourceGroup --location eastus

# 创建VM实例(建议使用NV系列GPU机型以获得最佳性能)
az vm create \
    --resource-group RAG-ResourceGroup \
    --name RAG-VM \
    --image Ubuntu2204 \
    --size Standard_NV6 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --public-ip-sku Standard

# 打开必要的端口(HTTP、SSH等)
az vm open-port --resource-group RAG-ResourceGroup --name RAG-VM --port 22,80,5000

注意事项
– NV系列VM提供NVIDIA GPU,适合运行LLM推理
– 如果没有GPU需求,可选择B系列降低成本
--generate-ssh-keys会自动创建SSH密钥对

步骤2:连接到VM并安装基础软件

通过SSH连接到您的VM:

代码片段
ssh azureuser@<your-vm-public-ip>

然后安装必要组件:

代码片段
# 更新系统包
sudo apt update && sudo apt upgrade -y

# 安装基础工具
sudo apt install -y python3-pip python3-dev git curl wget unzip

# 安装Docker(用于容器化部署)
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER

# 验证Docker安装
docker run hello-world

步骤3:设置Python虚拟环境

代码片段
# 安装virtualenv
sudo pip3 install virtualenv

# 创建并激活虚拟环境
virtualenv rag_env && source rag_env/bin/activate

# 安装常用Python包
pip install torch transformers sentence-transformers faiss-cpu pypdf langchain openai flask gunicorn

原理说明
torchtransformers是运行LLM的基础框架
sentence-transformers用于文本嵌入(embedding)
faiss-cpu是Facebook的高效向量搜索库(有GPU版可选)
langchain提供RAG的框架支持

步骤4:部署向量数据库(Qdrant)

我们使用Qdrant作为向量数据库:

代码片段
# 拉取Qdrant Docker镜像(轻量级版本)
docker pull qdrant/qdrant:v1.7.4

# 启动Qdrant服务(数据将持久化到./qdrant_data目录)
docker run -p 6333:6333 \
    -v $(pwd)/qdrant_data:/qdrant/storage \ 
    qdrant/qdrant:v1.7.4

# Qdrant管理界面可通过 http://<your-vm-ip>:6333/dashboard访问 

实践经验
– Qdrant比FAISS更适合生产环境,支持分布式部署
--memory-only参数可用于纯内存模式(重启后数据丢失)
– ARM架构需使用特殊镜像标签

步骤5:配置LangChain应用示例

创建一个简单的RAG应用示例:

代码片段
# app.py (RAG示例应用)
from langchain.document_loaders import PyPDFLoader 
from langchain.text_splitter import RecursiveCharacterTextSplitter 
from langchain.embeddings import HuggingFaceEmbeddings 
from langchain.vectorstores import Qdrant 
from langchain.chains import RetrievalQA 
from langchain.llms import OpenAI 

# PDF文档处理 (以白皮书为例)
loader = PyPDFLoader("example.pdf")
pages = loader.load_and_split()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
)
docs = text_splitter.split_documents(pages)

# HuggingFace嵌入模型 (也可使用OpenAI的text-embedding模型) 
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")

# Qdrant向量存储配置 (连接本地服务) 
qdrant = Qdrant.from_documents(
    docs,
    embeddings,
    url="http://localhost:6333",
    collection_name="rag_demo",
)

retriever = qdrant.as_retriever(search_kwargs={"k":5})

qa_chain = RetrievalQA.from_chain_type(
    llm=OpenAI(temperature=0), # API key需在环境变量OPENAI_API_KEY中设置 
    chain_type="stuff",
    retriever=retriever,
)

response = qa_chain.run("本文档的主要观点是什么?")
print(response)

关键点解释
1. RecursiveCharacterTextSplitter确保文本被合理分块而不破坏语义完整性
2. all-mpnet-base-v2是当前性能优异的开源嵌入模型
3. search_kwargs={"k":5}表示检索最相关的5个文档片段
4. OpenAI LLM可替换为本地模型如Llama2

步骤6:部署Flask API服务 (可选)

要对外提供服务,可创建API接口:

代码片段
# api.py 
from flask import Flask, request, jsonify 
app = Flask(__name__)

@app.route('/query', methods=['POST'])
def query():
    question = request.json.get('question')
    result = qa_chain.run(question)
    return jsonify({"answer": result})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000) 

# Gunicorn生产模式启动 (在虚拟环境中执行) 
gunicorn -w4 -b :5000 api:app &

测试API:

代码片段
curl -X POST http://localhost:5000/query \ 
     -H "Content-Type: application/json" \  
     -d '{"question":"文档中提到了哪些关键技术?"}'

Azure优化建议

  1. 自动缩放:为应对流量波动可配置VMSS (虚拟机规模集)

    代码片段
    az vmss create \  
        --resource-group RAG-ResourceGroup \  
        --name RAG-ScaleSet \  
        --image Ubuntu2204 \  
        --vm-sku Standard_NV6 \  
        --instance-count2 \  
        --autoscale-rules '{"metric":{"metricName":"Percentage CPU","timeGrain":"PT1M","statistic":"Average"},"scale":{"direction":"Increase","type":"ChangeCount","value":"1","cooldown":"PT5M"}}'   
    
  2. 成本控制:使用Spot实例可降低60%-90%成本

  3. 监控集成:启用Azure Monitor收集性能指标

FAQ常见问题解决

Q: GPU驱动未正确加载?
A: Azure NV系列预装NVIDIA驱动,手动验证:

代码片段
nvidia-smi #应显示GPU状态   

Q: Qdrant连接超时?
A:检查防火墙规则并确保端口6333开放

Q: LangChain报API密钥错误?
A:导出环境变量或在代码中直接指定:

代码片段
OpenAI(api_key="your-key")   

总结

本文完整介绍了在Azure VM上搭建RAG系统的流程,关键步骤包括:

  1. Azure VM的正确选型和配置
    2.Qdrant向量数据库的容器化部署
    3.LangChain框架的实际应用示例
    4.Azure特有的优化技巧

后续可扩展方向:接入Azure AI服务、实现多模态检索、添加缓存层提升性能。

原创 高质量