Deploying llm-d in Kubernetes: The Future of Distributed AI Inference at Scale
Introduction

Deploying llm-d in Kubernetes: The Future of Distributed AI Inference at Scale
Introduction
llm-d is a new open source community project designed to enable scalable distributed generative AI inference using Kubernetes and vLLM. This groundbreaking platform addresses one of the most critical challenges in AI deployment: inference at scale. In this comprehensive guide, we’ll explore what llm-d is, why it matters, and how to deploy distributed AI inference using the architectural patterns and technologies that llm-d leverages.
What is llm-d?
llm-d is a new open source community project backed by industry leaders including CoreWeave, Google Cloud, IBM Research, NVIDIA, AMD, Cisco, Hugging Face, Intel, Lambda, and Mistral AI. It’s powered by a native Kubernetes architecture, vLLM-based distributed inference, and intelligent AI-aware network routing, enabling robust large language model inference clouds to meet demanding production service-level objectives. Unlike traditional centralized inference approaches, llm-d aims to distribute AI workloads across multiple servers, dramatically improving efficiency and reducing costs.
Why llm-d Matters
According to Gartner, by 2028, as the market matures, more than 80% of data center workload accelerators will be specifically deployed for inference as opposed to training use. The shift from training to inference represents the future of AI, where the real value lies in executing models at scale rather than just building them.
Traditional centralized inference faces critical limitations:
- Resource bottlenecks: Single-server constraints limit scalability
- High costs: Prohibitive expenses for sophisticated reasoning models
- Latency issues: Crippling delays in response times
- Limited flexibility: Difficulty supporting diverse model types and accelerators
Key Innovations in llm-d
llm-d delivers a powerful suite of innovations that set it apart from traditional inference solutions:
1. vLLM Foundation
vLLM has become the open source de facto standard inference server, providing day 0 model support for emerging frontier models and support for a broad list of accelerators, including Google Cloud Tensor Processor Units.
2. Prefill and Decode Disaggregation
This technique separates the input context and token generation phases of AI into discrete operations, which can then be distributed across multiple servers. This separation allows for:
- Better resource utilization
- Parallel processing of different inference phases
- Reduced latency for token generation
3. KV Cache Offloading
Based on LMCache (an experimental technology from the LMCache Lab at the University of Chicago), KV cache offloading shifts the memory burden of the KV cache from GPU memory to more cost-efficient and abundant standard storage, like CPU memory or network storage. This innovation significantly reduces the cost per inference.
Technical Note: LMCache integration is still evolving. The configuration examples shown are illustrative of the concept and may differ in production implementations.
4. Kubernetes-Powered Orchestration
Kubernetes-powered clusters and controllers enable more efficient scheduling of compute and storage resources as workload demands fluctuate, while maintaining performance and lower latency.
5. AI-Aware Network Routing
AI-aware network routing schedules incoming requests to the servers and accelerators that are most likely to have hot caches of past inference calculations, improving cache hit rates and reducing response times.
6. High-Performance Communication
High-performance communication APIs enable faster and more efficient data transfer between servers, with support for NVIDIA Inference Xfer Library (NIXL).
Industry Support and Ecosystem
llm-d has garnered support from a formidable coalition of leading gen AI model providers, AI accelerator pioneers, and premier AI cloud platforms. CoreWeave, Google Cloud, IBM Research, and NVIDIA are founding contributors, with AMD, Cisco, Hugging Face, Intel, Lambda, and Mistral AI as partners.
This broad industry support ensures:
- Cross-platform compatibility
- Multi-vendor accelerator support
- Access to cutting-edge AI models
- Long-term viability and community growth
Prerequisites for Deploying llm-d
Before deploying llm-d, ensure you have:
- Kubernetes Cluster: Version 1.24 or higher with GPU node support
- GPU Resources: NVIDIA GPUs (or other supported accelerators like Google TPUs, AMD GPUs)
- NVIDIA GPU Operator: For GPU management in Kubernetes
- Storage: High-performance storage for model weights and KV cache (200GB+ recommended)
- Network: High-bandwidth networking for distributed operations
- Tools: kubectl, Helm 3.x, and container registry access
Architecture Overview
An llm-d deployment consists of:
┌─────────────────────────────────────────────────────┐
│ Load Balancer │
│ (Ingress Controller) │
└─────────────────┬───────────────────────────────────┘
│
┌─────────┴─────────┐
│ │
┌───────▼────────┐ ┌──────▼──────────┐
│ Prefill Pods │ │ Decode Pods │
│ (Context) │ │ (Generation) │
└────────┬───────┘ └──────┬──────────┘
│ │
┌────▼─────────────────▼─────┐
│ KV Cache Storage Layer │
│ (CPU RAM / Network Store) │
└─────────────┬──────────────┘
│
┌────────▼─────────┐
│ Model Storage │
│ (Persistent Vol)│
└──────────────────┘
Step-by-Step Deployment Guide
Step 1: Set Up the Namespace
# Create dedicated namespace for llm-d
kubectl create namespace llm-d-inference
# Label namespace for monitoring
kubectl label namespace llm-d-inference purpose=ai-inference
Step 2: Configure Storage for Models
Important: The storage class must support
ReadWriteMany(RWX) access mode for model sharing across pods. Suitable backends include NFS, CephFS, or cloud-native solutions like AWS EFS, Azure Files, or Google Filestore. Verify your storage class supports RWX before proceeding.
# model-storage-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: llm-models-pvc
namespace: llm-d-inference
spec:
accessModes:
- ReadWriteMany # Requires RWX-capable storage class
storageClassName: fast-ssd # Use your RWX-capable storage class
resources:
requests:
storage: 500Gi
Apply the configuration:
kubectl apply -f model-storage-pvc.yaml
Step 3: Create ConfigMap for llm-d Configuration
# llm-d-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: llm-d-config
namespace: llm-d-inference
data:
vllm-config.json: |
{
"model": "meta-llama/Llama-2-70b-chat-hf",
"tensor_parallel_size": 4,
"pipeline_parallel_size": 2,
"max_num_seqs": 256,
"gpu_memory_utilization": 0.95,
"enable_prefix_caching": true,
"enable_chunked_prefill": true,
"max_num_batched_tokens": 8192
}
lmcache-config.yaml: |
cache_engine: "redis"
storage_backend: "s3"
chunk_size: 256
eviction_policy: "lru"
Step 4: Deploy Prefill Service (Context Processing)
Architecture Note: This example shows prefill and decode as separate deployments to illustrate the disaggregation pattern. In practice, both may run the same vLLM server with different configuration flags. This is an advanced deployment pattern that llm-d aims to standardize.
# prefill-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: llm-d-prefill
namespace: llm-d-inference
spec:
replicas: 3
selector:
matchLabels:
app: llm-d-prefill
component: prefill
template:
metadata:
labels:
app: llm-d-prefill
component: prefill
spec:
containers:
- name: vllm-prefill
image: vllm/vllm-openai:latest
command:
- python3
- -m
- vllm.entrypoints.openai.api_server
args:
- --model=/models/llama-2-70b
- --tensor-parallel-size=2
- --disable-log-requests
- --served-model-name=llama-2-70b
- --enable-prefix-caching
- --enable-chunked-prefill
- --max-num-batched-tokens=8192
ports:
- containerPort: 8000
name: http
- containerPort: 8001
name: metrics
env:
- name: CUDA_VISIBLE_DEVICES
value: "0,1"
- name: VLLM_WORKER_MULTIPROC_METHOD
value: "spawn"
- name: NCCL_DEBUG
value: "INFO"
resources:
requests:
memory: "80Gi"
cpu: "16"
nvidia.com/gpu: "2"
limits:
memory: "120Gi"
cpu: "32"
nvidia.com/gpu: "2"
volumeMounts:
- name: model-storage
mountPath: /models
- name: shm
mountPath: /dev/shm
- name: config
mountPath: /config
volumes:
- name: model-storage
persistentVolumeClaim:
claimName: llm-models-pvc
- name: shm
emptyDir:
medium: Memory
sizeLimit: 32Gi
- name: config
configMap:
name: llm-d-config
nodeSelector:
nvidia.com/gpu.product: "NVIDIA-A100-SXM4-80GB"
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
---
apiVersion: v1
kind: Service
metadata:
name: llm-d-prefill-service
namespace: llm-d-inference
spec:
selector:
app: llm-d-prefill
ports:
- name: http
port: 8000
targetPort: 8000
- name: metrics
port: 8001
targetPort: 8001
type: ClusterIP
Step 5: Deploy Decode Service (Token Generation)
# decode-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: llm-d-decode
namespace: llm-d-inference
spec:
replicas: 5
selector:
matchLabels:
app: llm-d-decode
component: decode
template:
metadata:
labels:
app: llm-d-decode
component: decode
spec:
containers:
- name: vllm-decode
image: vllm/vllm-openai:latest
command:
- python3
- -m
- vllm.entrypoints.openai.api_server
args:
- --model=/models/llama-2-70b
- --tensor-parallel-size=2
- --disable-log-requests
- --served-model-name=llama-2-70b
- --enable-prefix-caching
- --kv-cache-dtype=fp8
ports:
- containerPort: 8000
name: http
env:
- name: CUDA_VISIBLE_DEVICES
value: "0,1"
resources:
requests:
memory: "60Gi"
cpu: "12"
nvidia.com/gpu: "2"
limits:
memory: "80Gi"
cpu: "24"
nvidia.com/gpu: "2"
volumeMounts:
- name: model-storage
mountPath: /models
- name: shm
mountPath: /dev/shm
volumes:
- name: model-storage
persistentVolumeClaim:
claimName: llm-models-pvc
- name: shm
emptyDir:
medium: Memory
sizeLimit: 24Gi
nodeSelector:
nvidia.com/gpu.product: "NVIDIA-A100-SXM4-80GB"
---
apiVersion: v1
kind: Service
metadata:
name: llm-d-decode-service
namespace: llm-d-inference
spec:
selector:
app: llm-d-decode
ports:
- name: http
port: 8000
targetPort: 8000
type: ClusterIP
Step 6: Deploy LMCache for KV Cache Management
# lmcache-deployment.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: lmcache
namespace: llm-d-inference
spec:
serviceName: lmcache
replicas: 3
selector:
matchLabels:
app: lmcache
template:
metadata:
labels:
app: lmcache
spec:
containers:
- name: redis
image: redis:7-alpine
command:
- redis-server
- --maxmemory
- 32gb
- --maxmemory-policy
- allkeys-lru
ports:
- containerPort: 6379
resources:
requests:
memory: "32Gi"
cpu: "4"
limits:
memory: "40Gi"
cpu: "8"
volumeMounts:
- name: cache-storage
mountPath: /data
volumeClaimTemplates:
- metadata:
name: cache-storage
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: fast-nvme
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
name: lmcache-service
namespace: llm-d-inference
spec:
selector:
app: lmcache
ports:
- port: 6379
targetPort: 6379
clusterIP: None
Step 7: Deploy AI-Aware Load Balancer
Production Note: This NGINX example demonstrates basic routing logic. In production, llm-d would use a more sophisticated AI-aware router or Envoy-based solution that considers cache locality, GPU availability, and request characteristics for optimal routing decisions.
# ai-aware-router.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: llm-d-router
namespace: llm-d-inference
spec:
replicas: 2
selector:
matchLabels:
app: llm-d-router
template:
metadata:
labels:
app: llm-d-router
spec:
containers:
- name: nginx-router
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
resources:
requests:
memory: "512Mi"
cpu: "1"
limits:
memory: "1Gi"
cpu: "2"
volumes:
- name: nginx-config
configMap:
name: nginx-routing-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-routing-config
namespace: llm-d-inference
data:
nginx.conf: |
events {
worker_connections 4096;
}
http {
upstream prefill_backend {
least_conn;
server llm-d-prefill-service:8000;
}
upstream decode_backend {
least_conn;
server llm-d-decode-service:8000;
}
server {
listen 80;
location /v1/chat/completions {
# Route to prefill for new conversations
if ($request_method = POST) {
proxy_pass http://prefill_backend;
}
}
location /v1/completions {
# Intelligent routing based on cache probability
proxy_pass http://decode_backend;
}
}
}
---
apiVersion: v1
kind: Service
metadata:
name: llm-d-router-service
namespace: llm-d-inference
spec:
selector:
app: llm-d-router
ports:
- port: 80
targetPort: 80
type: LoadBalancer
Step 8: Configure Horizontal Pod Autoscaling
Custom Metrics Note: The
gpu_utilizationmetric requires a custom metrics adapter like NVIDIA DCGM Exporter and Prometheus Adapter. Without this, remove the GPU metric and rely on CPU/memory-based scaling.
# hpa-config.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: llm-d-prefill-hpa
namespace: llm-d-inference
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: llm-d-prefill
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
# GPU utilization requires NVIDIA DCGM Exporter + Prometheus Adapter
# Uncomment only if you have custom metrics configured:
# - type: Pods
# pods:
# metric:
# name: gpu_utilization
# target:
# type: AverageValue
# averageValue: "75"
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: llm-d-decode-hpa
namespace: llm-d-inference
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: llm-d-decode
minReplicas: 3
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
Step 9: Set Up Monitoring with Prometheus
# monitoring-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
namespace: llm-d-inference
data:
prometheus.yml: |
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'llm-d-prefill'
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- llm-d-inference
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_component]
action: keep
regex: prefill
- source_labels: [__meta_kubernetes_pod_ip]
target_label: __address__
replacement: $1:8001
- job_name: 'llm-d-decode'
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- llm-d-inference
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_component]
action: keep
regex: decode
- source_labels: [__meta_kubernetes_pod_ip]
target_label: __address__
replacement: $1:8001
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus
namespace: llm-d-inference
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus:latest
args:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
ports:
- containerPort: 9090
volumeMounts:
- name: config
mountPath: /etc/prometheus
- name: storage
mountPath: /prometheus
resources:
requests:
memory: "4Gi"
cpu: "2"
limits:
memory: "8Gi"
cpu: "4"
volumes:
- name: config
configMap:
name: prometheus-config
- name: storage
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: prometheus-service
namespace: llm-d-inference
spec:
selector:
app: prometheus
ports:
- port: 9090
targetPort: 9090
type: ClusterIP
Deployment Commands
Execute these commands in order:
# 1. Create namespace
kubectl create namespace llm-d-inference
# 2. Deploy storage
kubectl apply -f model-storage-pvc.yaml
# 3. Deploy configuration
kubectl apply -f llm-d-config.yaml
# 4. Deploy LMCache
kubectl apply -f lmcache-deployment.yaml
# 5. Wait for LMCache to be ready
kubectl wait --for=condition=ready pod -l app=lmcache -n llm-d-inference --timeout=300s
# 6. Deploy Prefill service
kubectl apply -f prefill-deployment.yaml
# 7. Deploy Decode service
kubectl apply -f decode-deployment.yaml
# 8. Deploy router
kubectl apply -f nginx-routing-config.yaml
kubectl apply -f ai-aware-router.yaml
# 9. Configure autoscaling
kubectl apply -f hpa-config.yaml
# 10. Set up monitoring
kubectl apply -f monitoring-config.yaml
# 11. Verify deployment
kubectl get pods -n llm-d-inference
kubectl get svc -n llm-d-inference
Testing Your Deployment
Test the Inference Endpoint
# Get the external IP
export LB_IP=$(kubectl get svc llm-d-router-service -n llm-d-inference -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
# Test with curl
curl -X POST http://$LB_IP/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama-2-70b",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain quantum computing in simple terms."}
],
"temperature": 0.7,
"max_tokens": 256
}'
Test with Python Client
import requests
import json
endpoint = f"http://{LB_IP}/v1/chat/completions"
def query_llm(prompt):
payload = {
"model": "llama-2-70b",
"messages": [
{"role": "user", "content": prompt}
],
"temperature": 0.7,
"max_tokens": 512
}
response = requests.post(endpoint, json=payload)
return response.json()['choices'][0]['message']['content']
# Test
result = query_llm("What are the benefits of distributed AI inference?")
print(result)
Performance Optimization
1. GPU Utilization
Monitor GPU usage:
kubectl exec -it <pod-name> -n llm-d-inference -- nvidia-smi
2. Cache Hit Rates
Check LMCache performance:
kubectl exec -it lmcache-0 -n llm-d-inference -- redis-cli INFO stats
3. Network Latency
Use network policies to optimize pod-to-pod communication:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-llm-d-traffic
namespace: llm-d-inference
spec:
podSelector:
matchLabels:
app: llm-d-prefill
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: llm-d-router
egress:
- to:
- podSelector:
matchLabels:
app: llm-d-decode
- podSelector:
matchLabels:
app: lmcache
Best Practices
1. Resource Allocation
- Prefill pods: Allocate more GPUs for context processing
- Decode pods: Scale horizontally for token generation
- CPU memory: Reserve sufficient CPU RAM for KV cache offloading
2. Model Selection
- Start with smaller models (7B-13B) for testing
- Use quantized models (FP8, INT4) to reduce memory
- Implement model warm-up strategies
3. Storage Strategy
- Use NVMe SSDs for model storage
- Implement tiered storage: GPU VRAM → CPU RAM → Disk
- Pre-load frequently used models
4. Monitoring and Alerts
Track these key metrics:
- Latency: Time to first token (TTFT) and tokens per second (TPS)
- Throughput: Requests per second
- Resource utilization: GPU, CPU, memory usage
- Cache performance: Hit rates and eviction rates
- Error rates: Failed requests and timeouts
5. Security
Note: PodSecurityPolicy was deprecated in Kubernetes 1.25. Use Pod Security Admission (available since 1.22) for newer clusters.
Apply Pod Security Standards to the namespace:
# Enforce restricted pod security standard
kubectl label namespace llm-d-inference \
pod-security.kubernetes.io/enforce=restricted \
pod-security.kubernetes.io/audit=restricted \
pod-security.kubernetes.io/warn=restricted
For GPU workloads that need privileged access, use baseline or privileged standards with careful review:
# For GPU workloads (use cautiously)
kubectl label namespace llm-d-inference \
pod-security.kubernetes.io/enforce=baseline \
pod-security.kubernetes.io/audit=baseline \
pod-security.kubernetes.io/warn=baseline
Additional security configuration:
# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: llm-d-network-policy
namespace: llm-d-inference
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: llm-d-inference
egress:
- to:
- namespaceSelector:
matchLabels:
name: llm-d-inference
# Allow DNS
- to:
- namespaceSelector:
matchLabels:
name: kube-system
ports:
- protocol: UDP
port: 53
Troubleshooting
Common Issues and Solutions
Issue 1: Pods stuck in Pending state
# Check events
kubectl describe pod <pod-name> -n llm-d-inference
# Check GPU availability
kubectl describe nodes | grep -A 5 nvidia.com/gpu
Issue 2: Out of memory errors
# Increase shared memory
# Edit deployment and increase shm size
emptyDir:
medium: Memory
sizeLimit: 64Gi # Increase as needed
Issue 3: Slow inference
# Check network latency
kubectl exec -it <prefill-pod> -n llm-d-inference -- ping <decode-pod-ip>
# Verify cache hit rates
kubectl logs <lmcache-pod> -n llm-d-inference | grep "hit_rate"# Verify cache hit rates
kubectl logs <lmcache-pod> -n llm-d-inference | grep "hit_rate"
Cost Optimization
1. Use Spot Instances
nodeSelector:
node.kubernetes.io/instance-type: "spot"
tolerations:
- key: "spot"
operator: "Equal"
value: "true"
effect: "NoSchedule"
2. Implement Request Batching
Configure vLLM for optimal batching:
--max-num-batched-tokens=16384
--max-num-seqs=512
3. Right-size GPU Allocation
- Use GPU fractional sharing for smaller models
- Implement GPU time-slicing for development environments
Future Enhancements
The llm-d project roadmap aims to include:
- Multi-cloud federation: Seamless deployment across cloud providers
- Advanced scheduling: ML-based workload prediction and placement
- Enhanced caching: Semantic caching and cross-request optimization
- Model composition: Dynamic model mixing and LoRA adapter support
- Standardized APIs: OpenAI-compatible endpoints for easy integration
As an emerging open source project, the community is actively working on these features. Check the llm-d GitHub repository for the latest roadmap and contribution opportunities.
Conclusion
llm-d represents a pivotal advancement in distributed AI inference, bringing together industry leaders to enable scalable, cost-effective deployment of large language models across hybrid cloud environments. By leveraging Kubernetes orchestration, vLLM’s inference capabilities, and innovative techniques like prefill/decode disaggregation and KV cache offloading, organizations can now deploy AI at scale without prohibitive costs.
The platform’s vision of supporting any model, any accelerator, and any cloud environment makes it a compelling solution for enterprises looking to maximize their AI investments. As a newly launched open source community project with backing from industry leaders like NVIDIA, Google Cloud, IBM Research, and others, llm-d is positioned to become a standard for production AI inference.
Resources
- GitHub Repository: https://github.com/llm-d (check for latest documentation and examples)
- vLLM Documentation: vLLM Official Docs
- LMCache Project: LMCache GitHub
- Kubernetes Documentation: Kubernetes.io
Get Involved
The llm-d community welcomes contributors! Whether you’re interested in:
- Adding support for new accelerators
- Optimizing inference algorithms
- Improving documentation
- Reporting bugs or suggesting features
Visit the GitHub repository to get started and help shape the future of distributed AI inference. As this is a newly launched project, early contributors have a unique opportunity to influence its direction and architecture.
This blog post covers the llm-d community project and publicly available technologies (vLLM, Kubernetes, LMCache). The deployment examples are illustrative and represent architectural patterns for distributed AI inference. For production deployments, always refer to the official llm-d documentation and community guidelines.
메타데이터
- post_id
- f3ff3eefeb1b
- slug
- deploying-llm-d-in-kubernetes-the-future-of-distributed-ai-inference-at-scale-f3ff3eefeb1b
- url
- https://medium.com/@thamizhelango/deploying-llm-d-in-kubernetes-the-future-of-distributed-ai-inference-at-scale-f3ff3eefeb1b
- canonical_url
- https://medium.com/@thamizhelango/deploying-llm-d-in-kubernetes-the-future-of-distributed-ai-inference-at-scale-f3ff3eefeb1b
- author_url
- https://medium.com/@thamizhelango
- status
- ok
- fetched_at
- 2026-08-22 23:45:46