趋近智
为了稳妥部署 RAG 组件,容器化和编排变得不可或缺。分布式 RAG 系统,可能由用于检索、生成、数据处理和编排的多个微服务构成,需要一个一致、可扩展且易于管理的运行环境。Docker 用于容器化、Kubernetes 用于编排提供了行业标准方案。使用这些技术,可以将 RAG 组件及其依赖项打包,在不同环境中可靠地部署它们,并根据需求动态扩展,同时与大规模 RAG 的 MLOps 实践集成。
容器化,主要是通过 Docker 实现,为 RAG 系统这类复杂应用提供多项优势:
transformers 或 faiss 等特定库、系统工具,以及用于 GPU 加速任务的 CUDA 版本。Docker 将每个组件及其依赖项封装成一个便携式镜像。这个镜像在开发者的笔记本电脑、测试服务器或生产 Kubernetes 集群中运行完全相同,消除了“在我机器上能跑”的问题。为您的 RAG 服务创建 Docker 镜像需要为每个服务编写一个 Dockerfile。我们来看几个典型的 RAG 组件:
Dockerfile 将指定一个 Python 基础镜像,复制应用程序代码,安装 requirements.txt 中的依赖项(包括向量数据库客户端),并定义启动 API 服务器的命令。一个常见做法是在 Dockerfile 中使用多阶段构建,通过排除构建时依赖项或中间文件来保持最终镜像的大小小巧和安全。
# 示例:基于 Python 的检索器服务 Dockerfile(简化版)
# 阶段 1:构建阶段(如果需要编译或资产构建)
FROM python:3.10-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# 如果有必要,在此处添加任何构建步骤
# 阶段 2:最终阶段
FROM python:3.10-slim
WORKDIR /app
COPY --from=builder /app /app
# 为安全起见,确保使用非 root 用户
RUN useradd -ms /bin/bash appuser
USER appuser
EXPOSE 8000
CMD ["python", "main_retriever.py"]
Docker 负责打包您的 RAG 组件,而 Kubernetes 则负责编排它们。对于大型分布式 RAG 系统,Kubernetes 提供:
用于部署 RAG 系统的 Kubernetes 对象包括:
ClusterIP 服务,或用于将您的 RAG API 外部公开的 LoadBalancer 服务。下面是典型 RAG 系统在 Kubernetes 上部署的图示:
Kubernetes 集群中编排的 RAG 组件。用户查询通过 API 网关路由到编排器 Pod,后者再与检索器和 LLM 服务通信。每个服务组件都由 Kubernetes Deployment 管理,并可使用 HPA 进行自动扩展。外部服务(如向量数据库和模型存储)由相应的 Pod 访问。
检索器服务的 Kubernetes Deployment YAML 文件可能如下所示(简化版):
apiVersion: apps/v1
kind: Deployment
metadata:
name: retriever-deployment
labels:
app: rag-retriever
spec:
replicas: 3 # Start with 3 replicas, HPA can adjust this
selector:
matchLabels:
app: rag-retriever
template:
metadata:
labels:
app: rag-retriever
spec:
containers:
- name: retriever
image: your-repo/rag-retriever-service:v1.2.0
ports:
- containerPort: 8000
resources:
requests:
memory: "2Gi"
cpu: "1"
limits:
memory: "4Gi"
cpu: "2"
envFrom:
- configMapRef:
name: retriever-config
- secretRef:
name: vector-db-credentials
---
apiVersion: v1
kind: Service
metadata:
name: retriever-service
spec:
selector:
app: rag-retriever
ports:
- protocol: TCP
port: 80
targetPort: 8000
type: ClusterIP # Internal service
此清单定义了检索器的 Deployment,指定了容器镜像、端口、资源请求/限制,以及对 ConfigMap 和 Secret 的引用以进行配置。相应的 Service 使其在集群内可被发现。
有效的资源管理对于性能和成本效益非常重要:
requests(保障资源)和 limits(最大可分配资源)。检索器在查询处理或重排过程中可能受限于 CPU。LLM 编排器和 API 网关也需要适当的 CPU/内存。requests 和 limits(通常是 nvidia.com/gpu: 1)。
# Snippet for GPU resources in an LLM pod spec
resources:
limits:
nvidia.com/gpu: 1
requests:
nvidia.com/gpu: 1
Horizontal Pod Autoscaler (HPA) 对于处理可变负载非常必要:
检索器服务的 HPA:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: retriever-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: retriever-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
# - type: Pods # 自定义指标示例(QPS)
# pods:
# metric:
# name: qps_per_pod
# target:
# type: AverageValue
# averageValue: "10" # 目标每个 Pod 10 QPS
除了 Pod 自动扩展之外,集群自动扩展器(云提供商特有的组件)可以根据整体资源需求从您的集群中添加或删除节点,确保您的 RAG 系统拥有所需的底层基础设施。
Kubernetes Deployment 支持滚动更新,让您可以零停机地将 RAG 组件更新到新版本。通过逐步替换旧 Pod 为新 Pod 并监控它们的健康状况,您可以最大程度地减少服务中断。为您的 RAG 组件 Pod 配置 readinessProbes 和 livenessProbes。
对于高度成熟的 RAG 部署,您可以考虑:
通过对 RAG 组件进行容器化并使用 Kubernetes 进行编排,您可以构建一个有韧性、可扩展且易于管理的体系。这种方式不仅简化了部署,还与更广泛的 MLOps 工具(用于监控、日志记录和 CI/CD)配合,这对于在生产环境中高效运行大规模 RAG 系统非常必要。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造