MLOps specific to LLMs in 2026: the landscape of three modalities, six stages and ten tools that make them work
Contents
TL;DR
This is the blog’s fourth series and it is called MLOps specific to LLMs. It takes the operational craft of traditional MLOps (reproducible pipelines, model registries, dataset versioning, eval gates, controlled deployments) and redraws it for a world where the model is probabilistic, the outputs are subjective, the dependencies include external vendors that update weights without warning, and the “application” is not a model but an orchestration of models, embeddings, retrievers, guardrails and routers. Gartner predicts that more than 50% of enterprise GenAI deployments will fail before the end of 2026, and the main cause is not the model: it is that deterministic software assumptions were applied to probabilistic systems. This post opens the series with the frame: the seven structural differences between LLMOps and classic MLOps; the six-stage pipeline (data → tune → eval → deploy → observe → retrain); the three modalities of preparing a model (continuous fine-tuning, RAG over datalakes, agent training) with their decision matrix, where 60% of 2025-2026 deployments use hybrid because each modality solves a different problem: “fine-tune for behaviour, RAG for volatile knowledge”; and the 2026 tool landscape, which already forms reasonably stable layers: MLflow 3.10 (March 2026) as a GenAI-aware registry, W&B Weave and ZenML for tracing and pipelines, Kubeflow + KServe vLLM 0.8.1+ for serving, BentoML for flexibility, DVC + lakeFS (joined since November 2025) for data, Langfuse for prompts and observability. The three following posts will go down into the detail of the most critical pieces.
This is the opening of series 4: MLOps for LLMs. It continues the tradition of the previous series: LLM inference (the first), eBPF (the second) and post-tracing (the third). Here we enter the discipline that ties all the pieces together: how an LLM system is operated in production over months, not just deployed once.
The analogy: the SRE’s craft redrawn
Anyone who has worked for years as an SRE or a platform engineer recognises the classic pillars: reproducibility (same code + same data + same config = same result), observability (what happens can be measured), safe rollback (if something goes wrong, I go back within minutes), gradual rollout (the new thing goes to 1% before it goes to 100%). These pillars are not negotiable. The question is whether they hold up when the central component is an LLM.
The answer is: same pillars, radically different mechanics. Reproducibility: versioning code and data is no longer enough; you have to version prompts, retrieval configurations, snapshots of the vendor’s model (which change without warning). Observability: error and latency metrics are no longer enough; you have to measure subjective quality via LLM-as-judge and embedding drift. Rollback: dropping the binary’s version is no longer enough; you have to keep the old model cached because loading a new one takes minutes. Gradual rollout: a % of traffic is no longer enough; you have to decide what % of what kind of queries by segment.
It is the same craft, practised with partly new tools and reflexes. MLOps specific to LLMs, or “LLMOps”, as the field has christened itself, is the discipline that codifies those reflexes.
The seven structural differences between LLMOps and traditional MLOps
Before going down to the pipeline, let us fix the differences that make this territory new rather than a mere continuation. Each one has concrete practical consequences.
1. Non-deterministic outputs
Traditional MLOps: the model receives structured input and returns a bounded, reproducible prediction. Same input → same output. Unit tests work.
LLMOps: same input → different output every time (through sampling, through temperature, through the order of tools invoked, through the retrieval context that changed). The idea of a “unit test” breaks.
Operational consequence: tests over properties (was the tone maintained?, does it mention the source?, does it respect the JSON schema?), not over equality. Statistical evals over a distribution, not over samples.
2. Behaviour metrics, not statistical accuracy
Traditional MLOps: F1, accuracy, AUC, RMSE. Metrics with a clear number.
LLMOps: subjective rubric scores (G-Eval, faithfulness, helpfulness, toxicity), judge LLMs, human feedback. The “number” depends on who judges.
Operational consequence: platforms have to treat evals as versioned artifacts, not just “model v3 scored 0.87”, but “model v3 evaluated with the judge claude-3-5-sonnet-20251022 over the dataset gold-rag-v7 with the prompt judge-v2 scored 0.87”. Versioning the judge is as important as versioning the model being evaluated.
3. The model is an external dependency, not an internal asset
Traditional MLOps: you train the model, it lives in your registry, it does not change until you change it.
LLMOps: the base model belongs to Anthropic, OpenAI, Google, Meta. They change it on you without warning. The claude-3-5-sonnet version that answered well yesterday answers somewhat differently today.
Operational consequence: drift detection becomes far more critical (previous post). Pinning to specific snapshots (claude-3-5-sonnet-20251022) when the vendor allows it. For high-commitment apps, self-hosting the base model to guarantee reproducibility.
4. The application is an orchestration, not a model
Traditional MLOps: an app calls a model and consumes its output.
LLMOps 2026: an app connects foundation model + LoRA adapters + retrievers + vector stores + guardrails + routers + tool servers (MCP) + evaluators, all composing the final behaviour. Any component can degrade the result.
Operational consequence: cross-component debugging requires distributed tracing with OTel (covered in previous posts). The registry does not only store “the model” but the composition: which prompt version + which adapter + which vector store + which retriever config.
5. Cost per inference, not per training
Traditional MLOps: the high cost is training; serving is cheap. You optimise training.
LLMOps: the high cost is serving (every token costs, every call to the vendor is paid for, the GPUs doing the serving are switched on 24/7). You optimise inference.
Operational consequence: cost accountability per tenant, per agent, per tool. Metrics such as gen_ai.usage.input_tokens aggregated at customer and product level. Model decisions based on cost per query, not only on quality.
6. GPU-heavy infra with specific primitives
Traditional MLOps: CPU + some GPU for training. Standard Kubernetes.
LLMOps: Hopper/Blackwell SXM GPUs, NVLink/NVSwitch, tensor parallel, paged attention, KV cache. Infra that only fits into Kubernetes with primitives such as LeaderWorkerSet, GPU Operator, KEDA with LLM metrics (covered in vLLM on Kubernetes).
Operational consequence: the orchestration stack includes specialised operators (OME, vLLM Production Stack, NVIDIA Dynamo, llm-d, see LLM K8s Operators) that traditional MLOps does not contemplate.
7. RLHF and human feedback as a first-class citizen
Traditional MLOps: human feedback means labelling data before training.
LLMOps: human feedback lives inside the model in production, whether through RLHF of the foundation models (Anthropic, OpenAI), through RLAIF, through DPO, or through explicit user feedback that is fed back into fine-tuning.
Operational consequence: bidirectional production → training pipelines. Datasets grow with real incidents. Model decisions are taken with continuous feedback, not in a training project every N months.
Why Gartner predicts 50%+ failures
Gartner published that more than 50% of enterprise GenAI deployments will fail before 2026. The causes are not technical ones about the model but about the system:
- Hallucinated outputs from poor grounding: badly designed RAG, poor retrieval, insufficient context.
- Data architectures that are not ready: companies have data in silos, with no stable schemas, with no controlled freshness. Connecting an LLM to this data without a serious pipeline produces erratic answers.
- Lack of structured workflows for prompt-driven systems: teams that treat prompts as code in hardcoded strings, with no versioning, no tests, no gates.
The conclusion the field draws: LLMOps is not optional. Companies that deploy GenAI without operational discipline fall into one of the three failure modes. Those that apply it (MLflow/W&B for tracking, DVC/lakeFS for data, Langfuse for prompts and evals, KServe or vLLM Production Stack for serving, drift detection in production) are the ones that keep the system working six months after the first release.
The six-stage LLMOps pipeline
On to the pipeline. The six stages that any serious LLM system goes through, in order:
[1. Data] → [2. Tune] → [3. Eval] → [4. Deploy] → [5. Observe] → [6. Retrain]
│
└─→ back to 1
Each stage is an operational domain of its own, with its own tools and traps:
Stage 1 — Data
What happens: ingestion, cleaning, curation, versioning, indexing of the corpus. It is where real projects suffer most, because companies have data in heterogeneous silos.
Typical sub-tasks: extraction from source (CDC over Kafka, batch from data lakes, scraping), cleaning (PII removal, dedup, format), curation (labelling for fine-tuning, golden datasets for eval), versioning (DVC + lakeFS), indexing (embeddings + vector store for RAG).
Traps: schema drift at the source, undetected PII, poor dedup that injects redundancy into training, a vector store that is not updated.
Stage 2 — Tune
What happens: preparing the model for your use case. Three modalities (we go deeper into them shortly): fine-tuning, RAG, agent training.
Typical sub-tasks: base model selection, adapter preparation (LoRA, QLoRA), training loop with continuous eval, hyperparameter sweep (Optuna, W&B Sweeps), saving the checkpoint.
Traps: catastrophic forgetting if the fine-tuning is very aggressive, overfitting to the golden dataset, no independent validation set.
Stage 3 — Eval
What happens: validating that the model + adapters + RAG configuration is acceptable before promoting. Covered in Evals.
Typical sub-tasks: running an eval framework (DeepEval, Promptfoo, Ragas) against the golden dataset, judge LLM evaluations, human review over a sample, gates with thresholds.
Traps: a golden dataset that ages, an uncalibrated judge, evals that pass in CI but fail in production because of distribution shift.
Stage 4 — Deploy
What happens: going from “the model evaluated well” to “the model serves real traffic”. Covered in LLM K8s Operators.
Typical sub-tasks: serving with vLLM/SGLang/TRT-LLM, runtime configuration, gradual rollout (canary, shadow, blue-green), routing between models (LiteLLM, OpenRouter, LangChain routers).
Traps: a naive rolling update that cuts sessions, autoscaling by CPU% that does not respond to LLM metrics (covered), a new model that performs worse in production than in eval.
Stage 5 — Observe
What happens: seeing what is happening in real time. Covered in the whole post-tracing series and the eBPF series.
Typical sub-tasks: tracing (Langfuse, LangSmith, Phoenix, OpenLLMetry), metrics (TTFT, TPOT, queue depth, cost per query), active guardrails (NeMo, Llama Guard), drift detection (Evidently, NannyML, WhyLabs).
Traps: cardinality explosion in metrics, batch evals with no tail-sampling over real traces, drift that is ignored until an incident makes it real.
Stage 6 — Retrain
What happens: closing the loop. Production feedback (incidents, worst-scoring cases, detected drift) generates new data to go back to stage 1.
Typical sub-tasks: extraction of problematic logs, human labelling of the sample, incorporation into the golden dataset, re-fine-tuning if applicable, decision on a new release.
Traps: an “open” loop where production never informs the dataset, human feedback that gets lost, lack of a clear retrain cadence.
The three modalities of “preparing the model”
Stage 2 (Tune) is where there is most confusion. In 2026 three modalities coexist, each solving a different problem:
Fine-tuning
What it does: modifying the model’s weights (or those of a LoRA/QLoRA adapter on top) so that it learns specific behaviour patterns: tone, output structure, idiomatic decisions of the domain.
When: when your main failure is behavioural inconsistency between calls. The model sometimes answers formally, sometimes not; sometimes it structures the JSON, sometimes not; sometimes it follows the company’s conventions, sometimes it invents them. Fine-tuning stabilises it.
When NOT: when what you need is up-to-date knowledge. Fine-tuning fixes knowledge in frozen weights; the day after the fine-tuning, the model knows nothing new.
RAG (Retrieval-Augmented Generation)
What it does: leaving the model intact and, on each call, retrieving fresh context from a knowledge base (vector store + lexical search, typically) and passing it to the model so that it answers on that basis.
When: when the knowledge you need is dynamic or very large. Documentation that changes, a product catalogue that is updated, an internal knowledge base that grows.
When NOT: when the problem is behavioural (RAG does not teach the model how to behave, it only gives it information). Or when retrieval is so noisy that the context arriving is worse than nothing.
Agent training
What it does: going beyond conventional fine-tuning with Reinforcement Learning techniques. RFT (OpenAI’s Reinforcement Fine-Tuning), classic RLHF, RLAIF (with AI feedback), DPO (Direct Preference Optimization) over datasets of (good, bad) pairs.
When: when the model needs to learn complex multistep trajectories: when to choose each tool, how to decompose a task, when to ask the user for confirmation. It is what is turning Claude, Gemini and GPT into agents capable of long tasks.
When NOT: when your case is simple chat or RAG. It is overkill, expensive and complicated for problems that the previous modalities solve.
Decision matrix
| Observed problem | Modality |
|---|---|
| Inconsistent answers in tone/structure | Fine-tuning |
| The model makes things up (hallucinates) | RAG |
| Out-of-date knowledge (>1 year) | RAG |
| The model chooses tools badly | Agent training (RLAIF/RFT) |
| Mixed behaviour + knowledge | Hybrid (fine-tune + RAG) |
| Multi-step trajectory fails | Agent training |
| A specific language/regional style | Fine-tuning |
The 2026 verdict: hybrid is the default
Multiple reports agree that in 2025-2026, around 60% of production projects use hybrid: fine-tuning for behaviour + RAG for knowledge. The key insight:
Fine-tune for behaviour (brand voice, decision protocol, output structure); use RAG for volatile knowledge you need the model to cite. Do not force a single tool to do both jobs.
A practical observation: the biggest quality improvements of 2025-2026 come from better reranking in RAG (cross-encoders), not from better embeddings. Rerankers add 15-35% of quality with little complexity.
On cost: combined fine-tuning + RAG tends to be 30-50% cheaper than pure RAG with frontier models at high volume, because the fine-tuned model can be smaller and cheaper while keeping equivalent quality.
The 2026 tool landscape
On to the concrete pieces, grouped by function. The field has matured enough for each piece to have 2-3 reasonable options and a couple of leaders.
Experiment tracking and model registry
MLflow remains the de facto standard, now with LLM-specific traction. MLflow 3 was published in June 2025; version 3.10.1 (March 2026) added:
- A GenAI Overview dashboard with ready-made metrics for LLM apps.
- Multi-workspace support for large teams.
- Cost tracking in traces (gen_ai.usage.* aggregated per experiment).
- MemAlign: a new specific eval algorithm.
- Integrated native OpenTelemetry tracing.
- First-class support for LangChain, LlamaIndex, AutoGen as frameworks.
MLflow treats prompts and agents as first-class citizens alongside classic models. It is the biggest change relative to MLflow 2.x.
Weights & Biases (W&B) with its LLM-specific product Weave offers tracing + eval + debug with a very polished UI. More commercial, less self-host friendly, but excellent UX.
ZenML is the piece that most cleanly integrates “classic MLOps + emerging LLMOps” into a single framework. Its automatic artifact versioning captures prompt templates, retrieval chunks and agent conversation histories with no extra work. Open-source. The most complete unification option that exists.
Dataset versioning
DVC remains the OSS standard. It extends Git to large files and pipelines. Important news from November 2025: lakeFS acquired DVC, consolidating the two OSS data versioning projects under one organisation. The combined roadmap is oriented towards LLM training and RAG datalakes specifically.
Typical pattern: Git for code + DVC for data/models + MLflow or W&B for experiment tracking + registry. Few teams use just one; the combination is what covers the cycle. Detailed in the dedicated post on data versioning for LLMOps — the four artifacts to version separately, schema contracts, end-to-end lineage, and a golden eval set with a strict holdout.
Prompt versioning and observability
Covered in depth in the AgentSight post where we go deeper into Langfuse as the OSS reference. Summary here:
- Langfuse: MIT, self-host, prompt management with v1/v2/v3 versioning + labels + cache + linkage with traces.
- LangSmith: if your stack is LangChain.
- Arize Phoenix: ELv2, OTel-native.
Pipeline orchestration
For the LLMOps pipeline steps, the dominant options:
- Kubeflow Pipelines: the K8s-native standard. KServe (the serving part of Kubeflow) has its vLLM runtime upgraded to v0.8.1+ with support for reasoning models, tool calling, embeddings, reranking, Llama 4 and Qwen 3.
- ZenML: already mentioned; also a pipeline orchestrator.
- Metaflow (Netflix-originated): Python-first pipelines, less LLM-specific but workable.
- Argo Workflows: a pure K8s OSS alternative.
- Flyte: Kubernetes-native, OSS.
Serving
Covered in depth in vLLM on Kubernetes and LLM K8s Operators. Summary:
- vLLM Production Stack: a curated Helm chart.
- KServe vLLM runtime: K8s-native, vLLM 0.8.1+ with full agentic support.
- BentoML: flexible serving, popular in startups for its simplicity.
- NVIDIA Dynamo: the successor to Triton.
- llm-d: CNCF Sandbox.
- OME: an LMSYS operator with native SGLang.
Evals and guardrails
Covered in Evals and Guardrails. Ultra-short summary:
- Evals CI: DeepEval, Promptfoo, Ragas.
- Evals platform: Langfuse, LangSmith, Phoenix, Braintrust.
- Guardrails: NeMo Guardrails, Llama Guard 4, Llama Prompt Guard 2, LLM Guard, Lakera.
Drift detection and observability
Covered in the closing eBPF post. Summary:
- Drift: Evidently AI, NannyML, WhyLabs.
- Tracing: Langfuse, OpenLLMetry, Phoenix.
- eBPF: AgentSight, Hubble, Tetragon, ProfInfer.
The typical 2026 stack table
| Stage | Dominant piece | Alternatives |
|---|---|---|
| Data ingestion + versioning | DVC + lakeFS (unified Nov 2025) | Pachyderm, Quilt |
| Vector store / RAG index | Milvus, Qdrant, pgvector, Weaviate | LanceDB, Pinecone, Chroma |
| Experiment tracking | MLflow 3.10 | W&B Weave, Neptune |
| Pipeline orchestration | Kubeflow + Argo | ZenML, Metaflow, Flyte |
| Model registry | MLflow registry | W&B Models, KServe ModelMesh |
| Prompt versioning | Langfuse | LangSmith, MLflow Prompts |
| Serving | vLLM Production Stack | KServe, BentoML, Dynamo, llm-d, OME |
| Evals CI | DeepEval, Ragas | Promptfoo, OpenAI Evals |
| Evals platform | Langfuse, Phoenix | LangSmith, Braintrust |
| Guardrails | NeMo + Llama Guard | LLM Guard, Lakera |
| Tracing | OpenLLMetry + Langfuse | Phoenix, LangSmith |
| Drift detection | Evidently AI | NannyML, WhyLabs |
| eBPF observability | AgentSight + Tetragon + Hubble | (new territory, few alternatives) |
13 pieces. No org uses them all; any serious org uses at least six. This is the current LLMOps stack.
The operational reality: nobody uses a single tool
Multiple comparisons agree on one thing: the teams that win combine. Recurring patterns:
- ZenML to orchestrate + MLflow for tracking + KServe for serving: the most popular OSS stack in companies coming from classic MLOps.
- Kubeflow + W&B + BentoML: for teams with a research focus.
- Langfuse + DeepEval + Phoenix + LiteLLM: for pure-LLM teams with no classic MLOps background.
- MLflow + DVC + Argo + KServe: an idiomatic cloud-native stack without additional LLM-specifics (with its limitations).
The choice depends on the team’s background, on the licensing model they can afford, on the level of self-hosting they need, and on which frictions blocked them most in previous projects. There is no “one right answer”; there is a stable meta-pattern of layers worth covering.
Common operational traps
Treating the prompt as text in code
Hardcoding prompts in strings in the repo. Changing them requires a PR + redeploy. Result: teams that do not iterate on prompts because every change costs hours of pipeline. Solution: externalised prompt management (Langfuse, MLflow Prompts) with versioning, labels, hot-reload.
Skipping dataset versioning
“DVC is complicated, we will add it later”. Result: two months later, nobody knows which dataset trained which model. Impossible to reproduce incidents. Solution: DVC + lakeFS from day 1, even if only with a small subset.
Mixing layers in the same pipeline
Teams that put ingestion, fine-tuning, eval and deploy into a single giant pipeline. When something fails, the whole pipeline fails. Solution: independent pipelines per stage, with versioned artifacts as the interfaces between them.
Tracking with no structure
Logging everything to stdout and “we will look at it in CloudWatch later”. Result: impossible to correlate, compare, debug. Solution: OTel from day 1 with gen_ai.* semantic conventions.
Evals that block nothing
You have evals, you run them, you look at them, but they do not prevent the deploy if they drop. Eventually it drops gradually and nobody notices. Solution: eval gates in CI/CD that block the merge if critical metrics regress by more than X%.
No retrain cadence
You launch v1 and never go back to the model. Six months later, drift has degraded it but the team is on other projects. Solution: a formal retrain cadence (monthly, quarterly) tied to the production incident queue.
Invisible vendor lock-in
You start with the OpenAI API + LangSmith + Pinecone. When you want to self-host, you discover that migrating is a 3-month project. Solution: abstraction layers (LiteLLM, OpenLLMetry) and vendor-neutrality from the start.
What is coming in the following posts of the series
- Post 2 — RAG over datalakes with Kafka: end-to-end technical architecture — the most hands-on one. Kafka as source-of-truth, Flink CDC, embedding pipelines, continuous indexing in Milvus/Qdrant, a complete example with real numbers and manifests.
- Post 3 — The six-stage LLMOps pipeline: global architecture — the master map of the complete system with a reusable “you are here” SVG for the following posts. A deep dive into each of the six stages (Data, Tune, Eval, Deploy, Observe, Retrain).
- Post 4 — PostgreSQL + Qdrant in the ingestion stage — synchronisation patterns (dual-write, outbox + CDC, event-driven), a complete microservices architecture, a Qdrant cluster manifest.
- Upcoming posts — still to be decided: the cluster as a multi-tenant platform, Constitutional AI / alignment runtime, continuous fine-tuning in depth, edge LLMs.
- Synthesis post — Anatomy of an LLM request in production, May 2026 — the complete journey of a real request through the six stages and the two cross-cutting components, with cross-links to each dedicated post. It works as a mental map of the blog and as an integrator’s guide.
- Parallel OSS vs hyperscalers catalogue — The parallel catalogue: the six LLMOps stages in OSS and in AWS / GCP / Azure — for each stage of the pipeline, which tools the blog’s reference OSS stack uses and what the cloud equivalents are, with summary tables, identification of real gaps and the multi-tenant chatbot ported to an AWS stack component by component. A neutral editorial stance.
- OSS catalogue entry by entry — The OSS catalogue for LLMOps in six stages: entry by entry — the zoom in on the open source side: ~150 words of description per core tool (vLLM, Langfuse, DVC, Qdrant, Airflow, NeMo Guardrails, Presidio…), licence and governance, a decision matrix per stage, a diagram of the connected OSS stack and a master table of licences and EE / SaaS offerings.
References
LLMOps vs MLOps:
- The Complete MLOps/LLMOps Roadmap for 2026 (Sanjeeb Panda).
- MLOps vs LLMOps: What Changes (Raghuveer).
- MLOps in 2026: Architecture, Trends & Strategy (Hyscaler).
- LLMOps vs MLOps: Differences and Evolution (Ideas2IT).
- LLMOps vs MLOps in production (DEV/Apprecode).
Tools:
- MLflow — registry + tracking + serving.
- Weights & Biases Weave — LLM tracing.
- ZenML — pipeline orchestration MLOps + LLMOps.
- Kubeflow — K8s-native MLOps.
- KServe — model serving K8s.
- BentoML — flexible serving.
- Metaflow — Netflix’s pipelines.
- DVC — dataset versioning.
- lakeFS — enterprise data versioning, acquired DVC in Nov 2025.
2026 comparisons:
- MLflow vs Kubeflow vs W&B (Kanerika).
- 9 MLflow alternatives tested (ZenML).
- Metaflow vs Kubeflow vs ZenML (ZenML).
- 12 Best MLOps Tools for Agentic AI (ZenML).
- MLOps Pipeline on GPU Cloud 2026 (Spheron).
- Top 7 Kubeflow alternatives 2026 (Northflank).
- Top 20 MLOps Tools 2026 (SG Analytics).
RAG vs Fine-Tuning:
- RAG Vs Fine-Tuning In 2026 (ScalaCode).
- Fine-Tuning with RAG (ICLR 2026, arxiv).
- RAG vs Fine-Tuning — What Actually Works in Production 2026 (DEV).
- How to Build a RAG Pipeline from Scratch in 2026 (kapa.ai).
Cross-references (the three previous series):
- LLM inference series: KV cache, vLLM on K8s, PagedAttention, LLM K8s Operators.
- eBPF series: eBPF from zero to Cilium, Tetragon, Hubble, AgentSight.
- Post-tracing series: Evals, Guardrails, MCP observability, eBPF + drift.