| name | vllm-distributed |
| description | Distributed inference, tensor/pipeline parallelism |
| triggers | ["When user wants to run models larger than single GPU memory","When user needs multi-GPU inference","When user wants to set up Ray cluster","When user needs tensor or pipeline parallelism"] |
vllm-distributed
Overview
vLLM supports distributed inference across multiple GPUs through tensor parallelism and pipeline parallelism. This skill covers multi-GPU and multi-node configurations.
Prerequisites
- Multiple GPUs available on single node or cluster
- NCCL (for CUDA) or Gloo (for CPU) configured
- Sufficient interconnect bandwidth (NVLink, InfiniBand)
Main Workflow
Step 1: Tensor Parallelism (Single Node Multi-GPU)
Tensor parallelism splits model layers across GPUs.
from vllm import LLM
llm = LLM(
model="meta-llama/Llama-2-70b-chat-hf",
tensor_parallel_size=4
)
output = llm.generate("Hello world")
vllm serve meta-llama/Llama-2-70b-chat-hf \
--tensor-parallel-size 4
Step 2: Pipeline Parallelism (Multi-Stage)
Pipeline parallelism splits model into stages.
from vllm import LLM
llm = LLM(
model="meta-llama/Llama-2-70b-chat-hf",
tensor_parallel_size=2,
pipeline_parallel_size=2
)
Step 3: Ray Cluster Setup
Start Ray Head:
ray start --head --port=6379
Connect Workers:
ray start --address="head-node-ip:6379"
Verify Cluster:
ray status
Step 4: Multi-Node Inference
from vllm import LLM
import ray
ray.init(address="auto")
llm = LLM(
model="meta-llama/Llama-2-70b-chat-hf",
tensor_parallel_size=8
)
Common Patterns
Pattern 1: Large Model on 4 GPUs
from vllm import LLM
llm = LLM(
model="meta-llama/Llama-2-70b-chat-hf",
tensor_parallel_size=4,
dtype="bfloat16",
gpu_memory_utilization=0.90
)
Pattern 2: 8-GPU Configuration
from vllm import LLM
llm = LLM(
model="mistralai/Mixtral-8x22B-Instruct-v0.1",
tensor_parallel_size=8,
max_model_len=8192,
dtype="bfloat16"
)
Pattern 3: Select Specific GPUs
export CUDA_VISIBLE_DEVICES=0,1,2,3
vllm serve model --tensor-parallel-size 4
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3"
from vllm import LLM
llm = LLM(model="model", tensor_parallel_size=4)
Pattern 4: Ray Cluster with Docker
docker run --gpus all --network host \
-e RAY_ROLE=head \
vllm/vllm-openai:latest \
ray start --head --port=6379
docker run --gpus all --network host \
-e RAY_ROLE=worker \
vllm/vllm-openai:latest \
ray start --address="head-ip:6379"
Pattern 5: Pipeline Parallel for Very Large Models
from vllm import LLM
llm = LLM(
model="meta-llama/Meta-Llama-3.1-405B-Instruct",
tensor_parallel_size=4,
pipeline_parallel_size=2,
dtype="bfloat16",
max_model_len=4096
)
Troubleshooting
Problem: NCCL communication error
Solution:
python -c "import torch; print(torch.cuda.is_available())"
export NCCL_DEBUG=INFO
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_DISABLE=0
export NCCL_NET_GDR_LEVEL=5
Problem: Ray cluster connection failed
Solution:
ray status
ray stop
ray start --head --port=6379
python --version
Problem: OOM despite multiple GPUs
Solution:
llm = LLM(
model="model",
tensor_parallel_size=8,
quantization="awq",
max_model_len=4096
)
Problem: Slow distributed inference
Solution:
nvidia-smi topo -m
export NCCL_P2P_DISABLE=1
References