# How to Integrate DeepSeek-V3 with vLLM for Production-Grade Serving with Pipeline Parallelism

> Integrate DeepSeek-V3 with vLLM for production-grade serving. Learn to convert checkpoints and configure pipeline parallelism for efficient deployment across multiple GPUs.

- Repository: [DeepSeek/DeepSeek-V3](https://github.com/deepseek-ai/DeepSeek-V3)
- Tags: how-to-guide
- Published: 2026-02-26

---

**To integrate DeepSeek-V3 with vLLM for production-grade serving using pipeline parallelism, convert the raw checkpoint to Hugging Face format using [`inference/convert.py`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/convert.py), then launch vLLM with `--pipeline-parallel-size` configured to distribute transformer layers across multiple GPUs.**

DeepSeek-V3 is a large-scale transformer model released by DeepSeek AI that requires efficient serving infrastructure to handle production traffic. Integrating DeepSeek-V3 with vLLM enables high-throughput inference through optimized kernel fusion and pipeline parallelism, but requires converting the native checkpoint format first. This guide walks through the exact steps to deploy the model using the official `deepseek-ai/DeepSeek-V3` repository components for scalable, low-latency serving.

## Convert DeepSeek-V3 Checkpoints to Hugging Face Format

DeepSeek-V3 ships as a collection of raw `.pt` files that are not directly compatible with vLLM. The repository provides [`inference/convert.py`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/convert.py) to rewrite the checkpoint into the Hugging Face `transformers` format required by vLLM's engine.

Run the conversion script to generate the HF-compatible checkpoint:

```bash
python -m inference.convert \
    --src-dir /path/to/deepseek-v3/raw_checkpoint \
    --dst-dir /path/to/deepseek-v3/hf_checkpoint \
    --dtype bf16

```

- The script loads raw tensors from the original model class defined in [`inference/model.py`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/model.py) and persists them using `save_pretrained()`.
- It generates a [`config.json`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/config.json) that specifies the transformer architecture parameters (num_layers, hidden_size, n_head).
- **Key source:** [[`inference/convert.py`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/convert.py)](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/convert.py)

## Configure Pipeline Parallelism in vLLM

After conversion, launch the vLLM engine with pipeline parallelism to split the model's transformer layers across multiple GPU ranks. This configuration allows the full model to exceed single GPU memory limits.

```bash
vllm serve /path/to/deepseek-v3/hf_checkpoint \
    --tensor-parallel-size 1 \
    --pipeline-parallel-size 2 \
    --max-model-len 32768 \
    --dtype bf16 \
    --port 8000

```

- `--pipeline-parallel-size N` divides the model into `N` stages, each residing on a separate GPU.
- vLLM automatically constructs the pipeline by traversing the transformer block list defined in the HF [`config.json`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/config.json).
- For optimal performance, vLLM utilizes custom CUDA kernels found in [[`inference/kernel.py`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/kernel.py)](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/kernel.py) for fused attention and feed-forward operations.

### Combining Tensor and Pipeline Parallelism

For extremely large deployments, combine tensor parallelism (partitioning weight matrices within layers) with pipeline parallelism:

```bash
vllm serve /path/to/deepseek-v3/hf_checkpoint \
    --tensor-parallel-size 2 \
    --pipeline-parallel-size 2 \
    --max-model-len 65536

```

This configuration distributes the model across 4 GPUs (2 tensor shards × 2 pipeline stages).

## Serve Requests via OpenAI-Compatible API

vLLM exposes an OpenAI-compatible HTTP endpoint for inference. Use the following Python client to stream completions:

```python
import openai

client = openai.OpenAI(
    base_url="http://your-vllm-host:8000/v1",
    api_key="skip-me"
)

resp = client.completions.create(
    model="deepseek-v3",
    prompt="Explain pipeline parallelism in a single paragraph.",
    max_tokens=256,
    temperature=0.7,
    stream=True,
)

for chunk in resp:
    print(chunk.choices[0].delta.content, end='', flush=True)

```

- The `model` parameter is arbitrary; vLLM maps it to the checkpoint folder specified at startup.
- Enabling `stream=True` ensures low latency by returning tokens as soon as they are generated on the pipeline's first stage.

## Production Deployment Strategies

Deploying DeepSeek-V3 with vLLM in production requires attention to memory management, fault tolerance, and observability.

**GPU Memory Optimization**
Use BF16 precision (`--dtype bf16`) whenever hardware supports it to halve memory consumption compared to FP16 while maintaining numerical stability.

**Cold-Start Latency**
Keep the vLLM service warm by pre-warming each pipeline stage with a dummy generation at startup, preventing latency spikes on the first real request.

**Autoscaling Architecture**
Deploy vLLM inside a Kubernetes StatefulSet where each replica runs an identical pipeline configuration. Use a service mesh such as Istio to load-balance across replicas.

**Observability**
vLLM emits Prometheus metrics including `vllm_requests_total` and `vllm_prompt_tokens`. Scrape these endpoints for real-time latency and throughput monitoring.

**Fault Tolerance**
Pipeline parallelism assigns each stage to a separate process. If a single GPU fails, the service should restart; implement a graceful-restart script since the weights are static and reloading is inexpensive.

**Security**
Run the vLLM container with a non-root user. Disable the OpenAI API key check only if exposing the service internally.

## End-to-End Docker Deployment Example

The following Dockerfile builds the DeepSeek-V3 checkpoint and runs vLLM with pipeline parallelism on a 4-GPU node:

```dockerfile
FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04

RUN apt-get update && apt-get install -y python3-pip git && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir \
    torch==2.2.0+cu121 -f https://download.pytorch.org/whl/cu121/torch_stable.html \
    transformers==4.38.0 \
    vllm==0.4.0 \
    accelerate==0.27.0

RUN git clone https://github.com/deepseek-ai/DeepSeek-V3.git /app/DeepSeek-V3
WORKDIR /app/DeepSeek-V3

RUN python -m inference.convert \
    --src-dir /data/deepseek_raw \
    --dst-dir /data/deepseek_hf \
    --dtype bf16

EXPOSE 8000

CMD ["vllm", "serve", "/data/deepseek_hf",
     "--pipeline-parallel-size", "2",
     "--tensor-parallel-size", "1",
     "--max-model-len", "32768",
     "--port", "8000"]

```

Build and run the container:

```bash
docker build -t deepseek-vllm .
docker run --gpus all -p 8000:8000 deepseek-vllm

```

## Scaling to Multi-Node Clusters

When the model exceeds single-node memory capacity, combine tensor parallelism with pipeline parallelism across multiple nodes. vLLM automatically creates NCCL groups for cross-node communication.

Launch vLLM with a hostfile specifying node addresses:

```bash
vllm launch \
    --model /path/to/hf_checkpoint \
    --tensor-parallel-size 2 \
    --pipeline-parallel-size 4 \
    --hostfile hosts.txt

```

Each node in the cluster must expose the same port and have the HF checkpoint available at an identical path.

## Summary

- **Convert checkpoints first:** DeepSeek-V3 requires conversion from raw `.pt` files to Hugging Face format using [`inference/convert.py`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/convert.py) before vLLM can load the model.
- **Use pipeline parallelism:** Configure `--pipeline-parallel-size` to distribute transformer layers across GPUs, enabling models larger than single GPU memory.
- **Leverage optimized kernels:** vLLM automatically utilizes CUDA kernels from [`inference/kernel.py`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/kernel.py) for accelerated attention and FFN operations.
- **Deploy with observability:** Monitor Prometheus metrics and run vLLM in Kubernetes StatefulSets for production-grade autoscaling and fault tolerance.

## Frequently Asked Questions

### Why must I convert DeepSeek-V3 checkpoints before using vLLM?

vLLM expects models in Hugging Face `transformers` format with a [`config.json`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/config.json) and properly sharded weights. DeepSeek-V3 ships as raw PyTorch `.pt` files that lack this structure. The [`inference/convert.py`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/convert.py) script rewrites these tensors into the HF layout and generates the necessary configuration files, enabling vLLM to construct the pipeline stages correctly.

### What is the difference between pipeline parallelism and tensor parallelism in vLLM?

**Pipeline parallelism** splits the model's transformer layers into sequential stages across GPUs, with each GPU holding a subset of the full layer stack. **Tensor parallelism** partitions individual weight matrices within each layer across GPUs. Pipeline parallelism is essential when the model exceeds single-GPU memory, while tensor parallelism further accelerates computation by parallelizing matrix operations within layers.

### How do I handle GPU memory limitations when serving DeepSeek-V3?

Use BF16 precision via `--dtype bf16` to reduce memory consumption by 50% compared to FP16. Configure `--pipeline-parallel-size` to distribute layers across multiple GPUs, ensuring no single device holds the entire model. For context windows longer than 32k tokens, increase `--max-model-len` but monitor memory usage, as activation memory scales with sequence length.

### Can I use custom CUDA kernels from DeepSeek-V3 with vLLM?

Yes. vLLM automatically detects and utilizes optimized kernels defined in [[`inference/kernel.py`](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/kernel.py)](https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/kernel.py) for fused attention and feed-forward operations. These kernels accelerate inference when the pipeline stages are constructed, providing production-grade throughput without manual kernel injection.