Deploy vLLM with an OpenAI-compatible API on GPU infrastructure. Complete provisioning, configuration, and verification workflow for production-ready inference endpoints.
This entire deployment exists as a tested, machine-readable recipe in the Massed Compute MCP. Skip the manual steps and deploy with natural language commands through compatible AI agents.
vLLM provides high-performance inference for large language models with an OpenAI-compatible API. This guide walks through launching a GPU VM, installing vLLM with proper dependencies, configuring a systemd service, and running verification tests to ensure your inference endpoint is production-ready.
You’ll get a fully functional /v1/chat/completions endpoint that accepts OpenAI-format requests while leveraging GPU acceleration for fast inference. The setup includes automatic service management, error handling, and comprehensive testing.
| Component | Version | Purpose |
|---|---|---|
| Ubuntu Server | 24.04 LTS | Base OS with NVIDIA drivers |
| vLLM | 0.6.3.post1 | High-performance inference engine |
| PyTorch | 2.4.0 | CUDA 12.1 backend |
| Transformers | 4.45.2 | Model loading and tokenization |
| LM Format Enforcer | Latest | Guided decoding support |
| Resource | Minimum | Recommended |
|---|---|---|
| GPU Memory | 24GB | 48GB+ for larger models |
| System RAM | 32GB | 72GB+ for model caching |
| vCPU | 8 cores | 14+ cores for throughput |
| Storage | 256GB | 512GB+ for multiple models |
| Network | 1Gbps | High bandwidth for model downloads |
Massed Compute VM Pricing
Current GPU VM options that meet the minimum requirements for vLLM deployment:
| SKU | Description | vCPU | RAM | Storage | Price | Capacity |
|---|---|---|---|---|---|---|
gpu_1x_A30 |
1x A30 (24GB) | 16 | 48 GiB | 256 GB | $0.35/hr | 0 |
gpu_1x_a5000 |
1x RTX A5000 (24GB) | 10 | 32 GiB | 256 GB | $0.44/hr | 0 |
gpu_2x_A30 |
2x A30 (24GB) | 30 | 96 GiB | 512 GB | $0.70/hr | 0 |
gpu_1x_l40_spot |
1x L40 (48GB) [Spot] | 14 | 72 GiB | 625 GB | $0.78/hr | 15 |
gpu_1x_6000_ada |
1x RTX 6000 ADA (48GB) | 12 | 72 GiB | 350 GB | $0.79/hr | 14 |
gpu_1x_l40 |
1x L40 (48GB) | 14 | 72 GiB | 625 GB | $0.86/hr | 15 |
Step-by-Step Deployment
Launch GPU VM
Create a new VM with GPU support and NVIDIA drivers pre-installed:
# Launch via Massed Compute dashboard or API
# Product: gpu_1x_l40 (or preferred GPU SKU)
# Image: 184 (Ubuntu Server 24.04 w/ Drivers)
# SSH Key: attach your public key
# Instance name: vllm-openai-api
Wait for the VM to reach running status and note the SSH connection details.
Verify GPU Access
Confirm NVIDIA drivers and GPU detection:
ssh ubuntu@YOUR_VM_IP 'nvidia-smi --query-gpu=name,memory.total,memory.free --format=csv,noheader'
You should see output showing your GPU name and memory specifications.
Bootstrap vLLM Installation
Run the complete setup script on your VM:
ssh ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euxo pipefail
VLLM_MODEL="${VLLM_MODEL:-Qwen/Qwen2.5-0.5B-Instruct}"
VLLM_PORT="${VLLM_PORT:-8000}"
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \
python3-venv python3-pip git curl
mkdir -p ~/vllm-openai
python3 -m venv ~/vllm-openai/venv
. ~/vllm-openai/venv/bin/activate
python -m pip install --upgrade pip setuptools wheel
python -m pip install \
--extra-index-url https://download.pytorch.org/whl/cu121 \
'torch==2.4.0' \
'vllm==0.6.3.post1' \
'transformers==4.45.2' \
lm-format-enforcer
sudo tee /etc/systemd/system/vllm-openai.service >/dev/null <
This installs Python dependencies, creates a virtual environment, and configures vLLM as a systemd service.
Verify Service Status
Check that the vLLM service started successfully:
ssh ubuntu@YOUR_VM_IP 'systemctl is-active vllm-openai'
Expected output: active
Test Models Endpoint
Wait for model loading and verify the API is responding:
ssh ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
for _ in $(seq 1 90); do
if curl -sf http://127.0.0.1:8000/v1/models >/tmp/vllm-models.json; then
cat /tmp/vllm-models.json
echo
echo VLLM_MODELS_OK
exit 0
fi
sleep 10
done
journalctl -u vllm-openai -n 160 --no-pager
exit 1
EOF
This polls the models endpoint with a 15-minute timeout. Model downloading may take several minutes on first startup.
Run Chat Completion Test
Verify inference is working with a chat completion request:
ssh ubuntu@YOUR_VM_IP 'bash -s' <<'EOF'
set -euo pipefail
cat >/tmp/vllm-chat.json <
This sends a test prompt and validates the response format and content.
Confirm GPU Utilization
Verify the request used GPU resources:
ssh ubuntu@YOUR_VM_IP 'nvidia-smi --query-gpu=name,memory.used,utilization.gpu --format=csv,noheader'
You should see memory usage indicating the model is loaded on the GPU.
Troubleshooting
Common Issues
SSH connection fails: Refresh known_hosts with ssh-keygen -R YOUR_VM_IP if you see host key warnings. Verify the VM is in running status and the IP address is correct.
CUDA not detected: Ensure you launched with image 184 (Ubuntu Server 24.04 w/ Drivers). Run nvidia-smi to confirm driver installation before proceeding with vLLM setup.
Model loading timeout: Large models require significant download time on first startup. Monitor with journalctl -u vllm-openai -f to see download progress. Consider using a smaller model for testing.
Out of memory errors: Reduce --gpu-memory-utilization to 0.5 or lower, switch to a smaller model, or upgrade to a GPU with more VRAM.
Gated model access: Some models require Hugging Face authentication. Set HF_TOKEN environment variable in the systemd service or use an ungated model for testing.
Port 8000 conflicts: Check for existing processes with sudo lsof -i :8000. Stop conflicting services or change VLLM_PORT in the service configuration.
Service crashes: Inspect logs with journalctl -u vllm-openai -n 160 --no-pager to identify startup issues. Common causes include insufficient memory, CUDA driver problems, or model download failures.
Skip All of This: Deploy with an AI Agent
This guide exists as a tested, machine-readable recipe in the Massed Compute MCP. Instead of running these steps manually, you can deploy vLLM through compatible AI agents using natural language.
Add this MCP server to your AI agent configuration:
{
"mcpServers": {
"massed-compute": {
"type": "http",
"url": "https://vm.massedcompute.com/api/mcp",
"headers": { "Authorization": "Bearer MC_TOKEN" }
}
}
}
Then say:
The agent matches your request against the recipe catalog, provisions the right GPU VM, runs the complete setup and verification workflow above, and reports back with connection details and test results. If any step fails, the process stops and provides diagnostic information.
Recipe tested on June 10, 2026
Quick Setup Reference
For experienced users, here's the essential command sequence:
# 1. Launch GPU VM with image 184
# 2. Verify GPU
ssh ubuntu@YOUR_VM_IP 'nvidia-smi'
# 3. Bootstrap vLLM
ssh ubuntu@YOUR_VM_IP 'bash -s' < bootstrap-script.sh
# 4. Test endpoints
ssh ubuntu@YOUR_VM_IP 'curl -sf http://127.0.0.1:8000/v1/models'
ssh ubuntu@YOUR_VM_IP 'curl -sf http://127.0.0.1:8000/v1/chat/completions -H "Content-Type: application/json" -d "{...}"'
# 5. Monitor service
ssh ubuntu@YOUR_VM_IP 'journalctl -u vllm-openai -f'
Frequently Asked Questions
01What models work with this setup?
Any Hugging Face model supported by vLLM and transformers. Popular choices include Llama, Qwen, Mistral, and Code Llama families. Check vLLM documentation for the latest compatibility matrix. Gated models require a Hugging Face token.
02How do I change the model after deployment?
Edit /etc/systemd/system/vllm-openai.service, update the VLLM_MODEL environment variable, then run sudo systemctl daemon-reload && sudo systemctl restart vllm-openai. The new model will download on restart.
03Can I run multiple models simultaneously?
Yes, but each model requires its own service instance on different ports. Consider GPU memory constraints and use tensor parallelism for large models. You may need multiple GPUs or larger VRAM for multiple concurrent models.
04How do I enable external access to the API?
Change --host 127.0.0.1 to --host 0.0.0.0 in the systemd service, configure firewall rules, and consider adding authentication middleware. For production, use a reverse proxy with TLS termination.
05What's the difference between spot and on-demand pricing?
Spot instances can be interrupted with short notice but offer significant cost savings. On-demand instances provide guaranteed availability. Use spot for development and testing, on-demand for production workloads requiring high availability.











