分片预填#
本教程将介绍如何运行分片预填系统,该系统将模型执行拆分为跨不同服务器的预填和解码阶段。通过将初始处理(预填)与令牌生成(解码)阶段分开,这种方法可以提高吞吐量和资源利用率。
先决条件#
Kubernetes 部署#
对于生产环境,您可以使用 Kubernetes 和 Helm 部署分片预填系统。这种方法提供了更好的可伸缩性、资源管理和高可用性。
步骤 1: 创建配置文件#
创建一个名为 values-16-disagg-prefill.yaml 的配置文件,其中包含以下内容
# Unified configuration for disaggregated prefill setup
servingEngineSpec:
enableEngine: true
runtimeClassName: ""
containerPort: 8000
modelSpec:
# Prefill node configuration
- name: "llama-prefill"
repository: "lmcache/vllm-openai"
tag: "2025-05-17-v1"
modelURL: "meta-llama/Llama-3.1-8B-Instruct"
replicaCount: 1
requestCPU: 8
requestMemory: "30Gi"
requestGPU: 1
pvcStorage: "50Gi"
vllmConfig:
enableChunkedPrefill: false
enablePrefixCaching: false
maxModelLen: 32000
v1: 1
lmcacheConfig:
enabled: true
kvRole: "kv_producer"
enableNixl: true
nixlRole: "sender"
nixlPeerHost: "pd-llama-decode-engine-service"
nixlPeerPort: "55555"
nixlBufferSize: "1073741824" # 1GB
nixlBufferDevice: "cuda"
nixlEnableGc: true
enablePD: true
hf_token: <your-hf-token>
labels:
model: "llama-prefill"
# Decode node configuration
- name: "llama-decode"
repository: "lmcache/vllm-openai"
tag: "2025-05-17-v1"
modelURL: "meta-llama/Llama-3.1-8B-Instruct"
replicaCount: 1
requestCPU: 8
requestMemory: "30Gi"
requestGPU: 1
pvcStorage: "50Gi"
vllmConfig:
enableChunkedPrefill: false
enablePrefixCaching: false
maxModelLen: 32000
v1: 1
lmcacheConfig:
enabled: true
kvRole: "kv_consumer"
enableNixl: true
nixlRole: "receiver"
nixlPeerHost: "0.0.0.0"
nixlPeerPort: "55555"
nixlBufferSize: "1073741824" # 1GB
nixlBufferDevice: "cuda"
nixlEnableGc: true
enablePD: true
hf_token: <your-hf-token>
labels:
model: "llama-decode"
routerSpec:
enableRouter: true
repository: "lmcache/lmstack-router"
tag: "pd-05-26"
replicaCount: 1
containerPort: 8000
servicePort: 80
routingLogic: "disaggregated_prefill"
engineScrapeInterval: 15
requestStatsWindow: 60
enablePD: true
resources:
requests:
cpu: "4"
memory: "16G"
limits:
cpu: "4"
memory: "32G"
labels:
environment: "router"
release: "router"
extraArgs:
- "--prefill-model-labels"
- "llama-prefill"
- "--decode-model-labels"
- "llama-decode"
步骤 2: 使用 Helm 部署#
使用 Helm 和配置文件安装部署
helm install pd helm/ -f tutorials/assets/values-16-disagg-prefill.yaml
这将部署
具有指定配置的预填服务器
具有指定配置的解码服务器
协调它们之间的路由器
配置包括
每个组件的资源请求和限制
NIXL 通信设置
模型配置
分片预填的路由器设置
步骤 3: 验证部署#
检查您的部署状态
kubectl get pods
kubectl get services
您应该会看到以下 Pod
预填服务器
解码服务器
路由器
步骤 4: 访问服务#
首先进行端口转发以访问服务
kubectl port-forward svc/pd-router-service 30080:80
然后通过以下方式向路由器发送请求
curl https://:30080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Llama-3.1-8B-Instruct",
"prompt": "Your prompt here",
"max_tokens": 100
}'