<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Fine-Tuning on lo0 — Blog Técnico</title><link>https://blog.lo0.es/tags/fine-tuning/</link><description>Recent content in Fine-Tuning on lo0 — Blog Técnico</description><generator>Hugo -- gohugo.io</generator><language>es</language><lastBuildDate>Thu, 21 May 2026 05:30:00 +0200</lastBuildDate><atom:link href="https://blog.lo0.es/tags/fine-tuning/index.xml" rel="self" type="application/rss+xml"/><item><title>MLOps específico para LLMs en 2026: el panorama de tres modalidades, seis etapas y diez herramientas que las hacen funcionar</title><link>https://blog.lo0.es/posts/mlops-llms-panorama-2026/</link><pubDate>Thu, 21 May 2026 05:30:00 +0200</pubDate><guid>https://blog.lo0.es/posts/mlops-llms-panorama-2026/</guid><description>&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>Esta es la cuarta serie del blog y se llama &lt;strong>MLOps específico para LLMs&lt;/strong>. Toma el oficio operativo de MLOps tradicional —pipelines reproducibles, model registries, dataset versioning, eval gates, despliegues controlados— y lo redibuja para un mundo donde el modelo es &lt;strong>probabilístico&lt;/strong>, las salidas son &lt;strong>subjetivas&lt;/strong>, las dependencias incluyen &lt;strong>vendors externos que actualizan pesos sin avisar&lt;/strong>, y la &amp;ldquo;aplicación&amp;rdquo; no es un modelo sino una &lt;strong>orquestación de modelos, embeddings, retrievers, guardrails y routers&lt;/strong>. Gartner predice que más del 50% de los despliegues GenAI empresariales fracasarán antes de que acabe 2026, y la causa principal no es el modelo: es que se aplicaron &lt;strong>suposiciones de software determinístico&lt;/strong> a sistemas probabilísticos. Este post abre la serie con el marco: las &lt;strong>siete diferencias estructurales&lt;/strong> entre LLMOps y MLOps clásico; el &lt;strong>pipeline de seis etapas&lt;/strong> (data → tune → eval → deploy → observe → retrain); las &lt;strong>tres modalidades&lt;/strong> de preparar un modelo (fine-tuning continuo, RAG sobre datalakes, agent training) con su matriz de decisión —el 60% de despliegues 2025-2026 usa &lt;strong>hybrid&lt;/strong> porque cada modalidad resuelve un problema distinto: &amp;ldquo;fine-tune para behavior, RAG para conocimiento volátil&amp;rdquo;—; y el &lt;strong>panorama de herramientas 2026&lt;/strong> que ya forma capas razonablemente estables: MLflow 3.10 (marzo 2026) como registry GenAI-aware, W&amp;amp;B Weave y ZenML para tracing y pipelines, Kubeflow + KServe vLLM 0.8.1+ para serving, BentoML para flexibilidad, DVC + lakeFS (unidos desde noviembre 2025) para data, Langfuse para prompts y observabilidad. Los tres posts siguientes bajarán al detalle de las piezas más críticas.&lt;/p>
&lt;blockquote>
&lt;p>Esta es la apertura de la &lt;strong>serie 4: MLOps para LLMs&lt;/strong>. Continúa la tradición de las series previas: &lt;a href="https://blog.lo0.es/posts/kv-cache-fundamentos/">inferencia LLM&lt;/a> (la primera), &lt;a href="https://blog.lo0.es/posts/ebpf-cilium-tcp-ip-bypass/">eBPF&lt;/a> (la segunda) y &lt;a href="https://blog.lo0.es/posts/evals-llm-la-capa-despues-de-tracing/">post-tracing&lt;/a> (la tercera). Aquí entramos en la disciplina que ata todas las piezas: cómo se opera un sistema LLM en producción durante meses, no solo se despliega una vez.&lt;/p>
&lt;/blockquote>
&lt;h2 id="la-analogía-el-oficio-del-sre-redibujado">La analogía: el oficio del SRE redibujado&lt;/h2>
&lt;p>Quien lleva años trabajando como SRE o como ingeniero de plataforma reconoce los pilares clásicos: &lt;strong>reproducibilidad&lt;/strong> (mismo código + misma data + misma config = mismo resultado), &lt;strong>observabilidad&lt;/strong> (lo que pasa se puede medir), &lt;strong>rollback seguro&lt;/strong> (si algo va mal, vuelvo atrás en minutos), &lt;strong>gradual rollout&lt;/strong> (lo nuevo entra al 1% antes que al 100%). Estos pilares no son negociables. La pregunta es si &lt;strong>se sostienen&lt;/strong> cuando el componente central es un LLM.&lt;/p>
&lt;p>La respuesta es: &lt;strong>mismos pilares, mecánica radicalmente distinta&lt;/strong>. Reproducibilidad: ya no basta con versionar código y datos; hay que versionar &lt;strong>prompts, configuraciones de retrieval, snapshots del modelo del vendor&lt;/strong> (que cambian sin avisar). Observabilidad: ya no basta con métricas de error y latencia; hay que medir &lt;strong>calidad subjetiva&lt;/strong> vía LLM-as-judge y drift de embeddings. Rollback: ya no basta con bajar la versión del binario; hay que &lt;strong>mantener el modelo viejo cacheado&lt;/strong> porque cargar uno nuevo tarda minutos. Gradual rollout: ya no basta con un % de tráfico; hay que decidir qué % de &lt;strong>qué tipo de queries&lt;/strong> por segmento.&lt;/p>
&lt;p>Es el mismo oficio, ejercido con herramientas y reflejos parcialmente nuevos. &lt;strong>MLOps específico para LLMs&lt;/strong> —o &amp;ldquo;LLMOps&amp;rdquo;, como el campo se ha autobautizado— es la disciplina que codifica esos reflejos.&lt;/p>
&lt;h2 id="las-siete-diferencias-estructurales-entre-llmops-y-mlops-tradicional">Las siete diferencias estructurales entre LLMOps y MLOps tradicional&lt;/h2>
&lt;p>Antes de bajar al pipeline, fijemos las diferencias que hacen este territorio nuevo, no una mera continuación. Cada una tiene consecuencias prácticas concretas.&lt;/p>
&lt;h3 id="1-salidas-no-determinísticas">1. Salidas no-determinísticas&lt;/h3>
&lt;p>MLOps tradicional: el modelo recibe input estructurado, devuelve &lt;strong>una predicción acotada y reproducible&lt;/strong>. Mismo input → mismo output. Tests unitarios funcionan.&lt;/p>
&lt;p>LLMOps: mismo input → output &lt;strong>distinto cada vez&lt;/strong> (por sampling, por temperature, por orden de tools invocadas, por el contexto retrieval que cambió). La idea de &amp;ldquo;test unitario&amp;rdquo; se rompe.&lt;/p>
&lt;p>&lt;strong>Consecuencia operativa&lt;/strong>: tests sobre &lt;strong>propiedades&lt;/strong> (¿se mantuvo el tono?, ¿menciona la fuente?, ¿respeta el JSON schema?), no sobre igualdad. Evals estadísticos sobre distribución, no sobre muestras.&lt;/p>
&lt;h3 id="2-métricas-behavior-no-statistical-accuracy">2. Métricas behavior, no statistical accuracy&lt;/h3>
&lt;p>MLOps tradicional: F1, accuracy, AUC, RMSE. Métricas con un número claro.&lt;/p>
&lt;p>LLMOps: &lt;strong>rubric scores&lt;/strong> subjetivos (G-Eval, faithfulness, helpfulness, toxicity), &lt;strong>judge LLMs&lt;/strong>, &lt;strong>human feedback&lt;/strong>. El &amp;ldquo;número&amp;rdquo; depende de quién juzga.&lt;/p>
&lt;p>&lt;strong>Consecuencia operativa&lt;/strong>: las plataformas tienen que tratar evals como &lt;strong>artifacts versionados&lt;/strong> —no solo &amp;ldquo;el modelo v3 sacó 0.87&amp;rdquo;, sino &amp;ldquo;el modelo v3 evaluado con el judge claude-3-5-sonnet-20251022 sobre el dataset gold-rag-v7 con el prompt judge-v2 sacó 0.87&amp;rdquo;—. Versionar el judge es tan importante como versionar el modelo evaluado.&lt;/p>
&lt;h3 id="3-el-modelo-es-dependencia-externa-no-asset-interno">3. El modelo es dependencia externa, no asset interno&lt;/h3>
&lt;p>MLOps tradicional: el modelo lo entrenas tú, vive en tu registry, no cambia hasta que lo cambies.&lt;/p>
&lt;p>LLMOps: el modelo base es de Anthropic, OpenAI, Google, Meta. &lt;strong>Te lo cambian sin avisar&lt;/strong>. La versión &lt;code>claude-3-5-sonnet&lt;/code> que respondía bien ayer responde algo distinto hoy.&lt;/p>
&lt;p>&lt;strong>Consecuencia operativa&lt;/strong>: &lt;strong>drift detection&lt;/strong> se vuelve mucho más crítico (&lt;a href="https://blog.lo0.es/posts/ebpf-on-device-inference-drift/">post anterior&lt;/a>). Pinning a snapshots específicos (&lt;code>claude-3-5-sonnet-20251022&lt;/code>) cuando el vendor lo permite. Para apps de alto compromiso, &lt;strong>self-host del modelo base&lt;/strong> para garantizar reproducibilidad.&lt;/p>
&lt;h3 id="4-la-aplicación-es-una-orquestación-no-un-modelo">4. La aplicación es una orquestación, no un modelo&lt;/h3>
&lt;p>MLOps tradicional: una app llama un modelo y consume su output.&lt;/p>
&lt;p>LLMOps 2026: una app conecta &lt;strong>foundation model + adapters LoRA + retrievers + vector stores + guardrails + routers + tool servers (MCP) + evaluators&lt;/strong>, todos componiendo el comportamiento final. Cualquier componente puede degradar el resultado.&lt;/p>
&lt;p>&lt;strong>Consecuencia operativa&lt;/strong>: el &lt;strong>debugging cross-componente&lt;/strong> requiere tracing distribuido con OTel (cubierto en posts previos). El registry no solo guarda &amp;ldquo;el modelo&amp;rdquo; sino la &lt;strong>composición&lt;/strong>: qué versión del prompt + qué adapter + qué vector store + qué retriever config.&lt;/p>
&lt;h3 id="5-coste-por-inferencia-no-por-training">5. Coste por inferencia, no por training&lt;/h3>
&lt;p>MLOps tradicional: el coste alto es entrenar; servir es barato. Optimizas training.&lt;/p>
&lt;p>LLMOps: el coste alto es &lt;strong>servir&lt;/strong> (cada token cuesta, cada llamada al vendor se paga, las GPUs que sirven están encendidas 24/7). Optimizas inferencia.&lt;/p>
&lt;p>&lt;strong>Consecuencia operativa&lt;/strong>: cost accountability por tenant, por agente, por tool. Métricas como &lt;code>gen_ai.usage.input_tokens&lt;/code> agregadas a nivel cliente y producto. Decisiones de modelo según coste por query, no solo según calidad.&lt;/p>
&lt;h3 id="6-infra-gpu-pesada-con-primitivas-específicas">6. Infra GPU-pesada con primitivas específicas&lt;/h3>
&lt;p>MLOps tradicional: CPU + algo de GPU para entrenamiento. Kubernetes estándar.&lt;/p>
&lt;p>LLMOps: GPUs Hopper/Blackwell SXM, NVLink/NVSwitch, tensor parallel, paged attention, KV cache. Infra que solo encaja en Kubernetes con primitivas como &lt;strong>LeaderWorkerSet, GPU Operator, KEDA con métricas LLM&lt;/strong> (cubierto en &lt;a href="https://blog.lo0.es/posts/vllm-kubernetes/">vLLM en Kubernetes&lt;/a>).&lt;/p>
&lt;p>&lt;strong>Consecuencia operativa&lt;/strong>: la pila de orquestación incluye operadores especializados (OME, vLLM Production Stack, NVIDIA Dynamo, llm-d, ver &lt;a href="https://blog.lo0.es/posts/operators-llm-kubernetes/">Operators LLM K8s&lt;/a>) que el MLOps tradicional no contempla.&lt;/p>
&lt;h3 id="7-rlhf-y-feedback-humano-como-ciudadano-de-primera">7. RLHF y feedback humano como ciudadano de primera&lt;/h3>
&lt;p>MLOps tradicional: el feedback humano es etiquetar datos antes del training.&lt;/p>
&lt;p>LLMOps: el feedback humano vive &lt;strong>dentro del modelo en producción&lt;/strong>, ya sea por RLHF de los foundation models (Anthropic, OpenAI), por RLAIF, por DPO, o por feedback explícito de usuarios que se reincorpora al fine-tuning.&lt;/p>
&lt;p>&lt;strong>Consecuencia operativa&lt;/strong>: pipelines bidireccionales producción → training. Datasets crecen con incidentes reales. Las decisiones de modelo se toman con feedback continuo, no en un proyecto de training cada N meses.&lt;/p>
&lt;h2 id="por-qué-gartner-predice-50-de-fracasos">Por qué Gartner predice 50%+ de fracasos&lt;/h2>
&lt;p>&lt;a href="https://medium.com/@sanjeebmeister/the-complete-mlops-llmops-roadmap-for-2026-building-production-grade-ai-systems-bdcca5ed2771">Gartner publicó que más del 50% de los despliegues GenAI empresariales fracasarán antes de 2026&lt;/a>. Las causas no son técnicas sobre el modelo sino sobre el sistema:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Hallucinated outputs por mal grounding&lt;/strong>: RAG mal diseñado, retrieval pobre, contexto insuficiente.&lt;/li>
&lt;li>&lt;strong>Arquitecturas de datos no preparadas&lt;/strong>: las empresas tienen datos en silos, sin schemas estables, sin freshness controlado. Conectar un LLM a estos datos sin pipeline serio produce respuestas erráticas.&lt;/li>
&lt;li>&lt;strong>Falta de workflows estructurados&lt;/strong> para sistemas prompt-driven: equipos que tratan los prompts como código en strings hardcodeados, sin versionado, sin tests, sin gates.&lt;/li>
&lt;/ul>
&lt;p>La conclusión que el campo extrae: &lt;strong>LLMOps no es opcional&lt;/strong>. Las empresas que despliegan GenAI sin disciplina operacional caen en uno de los tres modos de fracaso. Las que la aplican —MLflow/W&amp;amp;B para tracking, DVC/lakeFS para datos, Langfuse para prompts y evals, KServe o vLLM Production Stack para serving, drift detection en producción— son las que mantienen el sistema funcionando seis meses después del primer release.&lt;/p>
&lt;h2 id="el-pipeline-llmops-de-seis-etapas">El pipeline LLMOps de seis etapas&lt;/h2>
&lt;p>Vamos al pipeline. Las seis etapas que cualquier sistema LLM serio recorre, en orden:&lt;/p>
&lt;pre tabindex="0">&lt;code>[1. Data] → [2. Tune] → [3. Eval] → [4. Deploy] → [5. Observe] → [6. Retrain]
│
└─→ vuelve a 1
&lt;/code>&lt;/pre>&lt;p>Cada etapa es un dominio operacional propio con sus herramientas y trampas:&lt;/p>
&lt;h3 id="etapa-1--data">Etapa 1 — Data&lt;/h3>
&lt;p>&lt;strong>Qué pasa&lt;/strong>: ingestión, limpieza, curación, versionado, indexación del corpus. Es donde más se sufre en proyectos reales porque las empresas tienen datos en silos heterogéneos.&lt;/p>
&lt;p>&lt;strong>Sub-tareas típicas&lt;/strong>: extracción desde origen (CDC sobre Kafka, batch desde data lakes, scraping), limpieza (PII removal, dedup, formato), curación (labeling para fine-tuning, golden datasets para eval), versionado (DVC + lakeFS), indexación (embeddings + vector store para RAG).&lt;/p>
&lt;p>&lt;strong>Trampas&lt;/strong>: drift de schema en el origen, PII no detectada, dedup pobre que mete redundancia en training, vector store que no se actualiza.&lt;/p>
&lt;h3 id="etapa-2--tune">Etapa 2 — Tune&lt;/h3>
&lt;p>&lt;strong>Qué pasa&lt;/strong>: preparar el modelo para tu caso de uso. Tres modalidades (las profundizamos en breve): fine-tuning, RAG, agent training.&lt;/p>
&lt;p>&lt;strong>Sub-tareas típicas&lt;/strong>: selección de modelo base, preparación del adapter (LoRA, QLoRA), training loop con eval continuo, hyperparameter sweep (Optuna, W&amp;amp;B Sweeps), guardado del checkpoint.&lt;/p>
&lt;p>&lt;strong>Trampas&lt;/strong>: catastrophic forgetting si el fine-tuning es muy agresivo, overfitting al dataset golden, sin validation set independiente.&lt;/p>
&lt;h3 id="etapa-3--eval">Etapa 3 — Eval&lt;/h3>
&lt;p>&lt;strong>Qué pasa&lt;/strong>: validar que el modelo + adapters + RAG configuration es aceptable antes de promotar. Cubierto en &lt;a href="https://blog.lo0.es/posts/evals-llm-la-capa-despues-de-tracing/">Evals&lt;/a>.&lt;/p>
&lt;p>&lt;strong>Sub-tareas típicas&lt;/strong>: ejecución de eval framework (DeepEval, Promptfoo, Ragas) contra golden dataset, judge LLM evaluations, human review sobre muestreo, gates con thresholds.&lt;/p>
&lt;p>&lt;strong>Trampas&lt;/strong>: golden dataset que envejece, judge no calibrado, evals que pasan en CI pero fallan en producción por shift de distribución.&lt;/p>
&lt;h3 id="etapa-4--deploy">Etapa 4 — Deploy&lt;/h3>
&lt;p>&lt;strong>Qué pasa&lt;/strong>: pasar de &amp;ldquo;el modelo se evaluó bien&amp;rdquo; a &amp;ldquo;el modelo sirve tráfico real&amp;rdquo;. Cubierto en &lt;a href="https://blog.lo0.es/posts/operators-llm-kubernetes/">Operators LLM K8s&lt;/a>.&lt;/p>
&lt;p>&lt;strong>Sub-tareas típicas&lt;/strong>: serving con vLLM/SGLang/TRT-LLM, configuración del runtime, rollout gradual (canary, shadow, blue-green), routing entre modelos (LiteLLM, OpenRouter, LangChain routers).&lt;/p>
&lt;p>&lt;strong>Trampas&lt;/strong>: rolling update naive que corta sesiones, autoscaling por CPU% que no responde a métricas LLM (cubierto), modelo nuevo que rinde peor en producción que en eval.&lt;/p>
&lt;h3 id="etapa-5--observe">Etapa 5 — Observe&lt;/h3>
&lt;p>&lt;strong>Qué pasa&lt;/strong>: ver lo que está pasando en tiempo real. Cubierto en la serie post-tracing entera y la serie eBPF.&lt;/p>
&lt;p>&lt;strong>Sub-tareas típicas&lt;/strong>: tracing (Langfuse, LangSmith, Phoenix, OpenLLMetry), métricas (TTFT, TPOT, queue depth, cost per query), guardrails activos (NeMo, Llama Guard), drift detection (Evidently, NannyML, WhyLabs).&lt;/p>
&lt;p>&lt;strong>Trampas&lt;/strong>: explosión de cardinalidad en métricas, evals batch sin tail-sampling sobre traces reales, drift que se ignora hasta que el incidente lo materializa.&lt;/p>
&lt;h3 id="etapa-6--retrain">Etapa 6 — Retrain&lt;/h3>
&lt;p>&lt;strong>Qué pasa&lt;/strong>: cerrar el bucle. El feedback de producción (incidentes, casos peor evaluados, drift detectado) genera nuevos datos para volver a la etapa 1.&lt;/p>
&lt;p>&lt;strong>Sub-tareas típicas&lt;/strong>: extracción de logs problemáticos, labeling humano de la muestra, incorporación al dataset golden, re-fine-tuning si aplica, decisión sobre nuevo release.&lt;/p>
&lt;p>&lt;strong>Trampas&lt;/strong>: bucle &amp;ldquo;abierto&amp;rdquo; donde producción no informa nunca al dataset, feedback humano que se pierde, falta de cadencia clara de retrain.&lt;/p>
&lt;h2 id="las-tres-modalidades-de-preparar-el-modelo">Las tres modalidades de &amp;ldquo;preparar el modelo&amp;rdquo;&lt;/h2>
&lt;p>La etapa 2 (Tune) es donde más confusión hay. En 2026 conviven &lt;strong>tres modalidades&lt;/strong>, cada una resolviendo un problema distinto:&lt;/p>
&lt;h3 id="fine-tuning">Fine-tuning&lt;/h3>
&lt;p>&lt;strong>Qué hace&lt;/strong>: modificar los pesos del modelo (o de un adapter LoRA/QLoRA encima) para que aprenda &lt;strong>patrones de comportamiento&lt;/strong> específicos: tono, estructura de output, decisiones idiomáticas del dominio.&lt;/p>
&lt;p>&lt;strong>Cuándo&lt;/strong>: cuando tu fallo principal es &lt;strong>inconsistencia de comportamiento&lt;/strong> entre llamadas. El modelo a veces responde formal, a veces no; a veces estructura el JSON, a veces no; a veces sigue las convenciones de la empresa, a veces inventa. Fine-tuning lo estabiliza.&lt;/p>
&lt;p>&lt;strong>Cuándo NO&lt;/strong>: cuando lo que necesitas es &lt;strong>conocimiento actualizado&lt;/strong>. Fine-tuning fija conocimiento en pesos congelados; al día siguiente del fine-tuning, el modelo no sabe nada nuevo.&lt;/p>
&lt;h3 id="rag-retrieval-augmented-generation">RAG (Retrieval-Augmented Generation)&lt;/h3>
&lt;p>&lt;strong>Qué hace&lt;/strong>: dejar el modelo intacto y, en cada llamada, &lt;strong>recuperar contexto fresco&lt;/strong> de un knowledge base (vector store + lexical search típicamente) y pasárselo al modelo para que responda basándose en él.&lt;/p>
&lt;p>&lt;strong>Cuándo&lt;/strong>: cuando el conocimiento que necesitas es &lt;strong>dinámico o muy grande&lt;/strong>. Documentación que cambia, catálogo de productos que se actualiza, knowledge base interna que crece.&lt;/p>
&lt;p>&lt;strong>Cuándo NO&lt;/strong>: cuando el problema es behavioral (RAG no enseña al modelo a comportarse, solo le da información). O cuando el retrieval es tan ruidoso que el contexto que llega es peor que nada.&lt;/p>
&lt;h3 id="agent-training">Agent training&lt;/h3>
&lt;p>&lt;strong>Qué hace&lt;/strong>: ir más allá del fine-tuning convencional con técnicas de Reinforcement Learning. RFT (Reinforcement Fine-Tuning de OpenAI), RLHF clásico, RLAIF (con AI feedback), DPO (Direct Preference Optimization) sobre datasets de pares (good, bad).&lt;/p>
&lt;p>&lt;strong>Cuándo&lt;/strong>: cuando el modelo necesita aprender &lt;strong>trayectorias multistep complejas&lt;/strong> —cuando elegir cada tool, cómo descomponer una tarea, cuándo pedir confirmación al usuario—. Es lo que está convirtiendo a Claude, Gemini, GPT en agentes capaces de tareas largas.&lt;/p>
&lt;p>&lt;strong>Cuándo NO&lt;/strong>: cuando tu caso es chat simple o RAG. Es overkill, caro y complicado para problemas que las modalidades anteriores resuelven.&lt;/p>
&lt;h3 id="matriz-de-decisión">Matriz de decisión&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Problema observado&lt;/th>
&lt;th>Modalidad&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Respuestas inconsistentes en tono/estructura&lt;/td>
&lt;td>Fine-tuning&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>El modelo inventa cosas (alucina)&lt;/td>
&lt;td>RAG&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Conocimiento desactualizado (&amp;gt;1 año)&lt;/td>
&lt;td>RAG&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>El modelo elige mal las tools&lt;/td>
&lt;td>Agent training (RLAIF/RFT)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Behavior + conocimiento mixto&lt;/td>
&lt;td>&lt;strong>Hybrid (fine-tune + RAG)&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Multi-step trajectory falla&lt;/td>
&lt;td>Agent training&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Idioma/estilo regional concreto&lt;/td>
&lt;td>Fine-tuning&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="el-veredicto-2026-hybrid-es-el-default">El veredicto 2026: hybrid es el default&lt;/h3>
&lt;p>&lt;a href="https://www.scalacode.com/blog/rag-vs-fine-tuning/">Múltiples reports&lt;/a> coinciden en que en 2025-2026, &lt;strong>alrededor del 60% de proyectos productivos usan hybrid&lt;/strong>: fine-tuning para behavior + RAG para knowledge. El insight clave:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Fine-tune para comportamiento (brand voice, decision protocol, output structure); usa RAG para conocimiento volátil que necesitas que el modelo cite. No fuerces una sola herramienta a hacer ambos trabajos.&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>Una observación práctica: las mejoras de calidad más grandes de 2025-2026 vienen de &lt;strong>mejor reranking en RAG&lt;/strong> (cross-encoders), no de mejores embeddings. Los rerankers añaden 15-35% de calidad con poca complejidad.&lt;/p>
&lt;p>Sobre coste: combined fine-tuning + RAG suele ser &lt;strong>30-50% más barato&lt;/strong> que RAG puro con frontier models a volumen alto, porque el modelo finetuneado puede ser más pequeño y barato manteniendo calidad equivalente.&lt;/p>
&lt;h2 id="el-panorama-de-herramientas-2026">El panorama de herramientas 2026&lt;/h2>
&lt;p>Vamos a las piezas concretas, agrupadas por función. El campo ha madurado lo suficiente para que cada pieza tenga 2-3 opciones razonables y un par de líderes.&lt;/p>
&lt;h3 id="experiment-tracking-y-model-registry">Experiment tracking y model registry&lt;/h3>
&lt;p>&lt;strong>&lt;a href="https://mlflow.org/">MLflow&lt;/a>&lt;/strong> sigue siendo el estándar de facto, ahora con tracción específica LLM. &lt;strong>MLflow 3&lt;/strong> se publicó en junio 2025; la versión 3.10.1 (marzo 2026) añadió:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GenAI Overview dashboard&lt;/strong> con métricas pre-hechas para LLM apps.&lt;/li>
&lt;li>&lt;strong>Multi-workspace support&lt;/strong> para equipos grandes.&lt;/li>
&lt;li>&lt;strong>Cost tracking en traces&lt;/strong> (gen_ai.usage.* agregados por experimento).&lt;/li>
&lt;li>&lt;strong>MemAlign&lt;/strong>: nuevo algoritmo de eval específico.&lt;/li>
&lt;li>&lt;strong>OpenTelemetry tracing nativo&lt;/strong> integrado.&lt;/li>
&lt;li>Soporte de primera para &lt;strong>LangChain, LlamaIndex, AutoGen&lt;/strong> como frameworks.&lt;/li>
&lt;/ul>
&lt;p>MLflow trata prompts y agents como &lt;strong>ciudadanos de primera clase&lt;/strong> junto a los modelos clásicos. Es el cambio mayor respecto a MLflow 2.x.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://wandb.ai/">Weights &amp;amp; Biases (W&amp;amp;B)&lt;/a>&lt;/strong> con su producto &lt;strong>Weave&lt;/strong> específico para LLM ofrece tracing + eval + debug con UI muy pulida. Más comercial, menos self-host friendly, pero excelente UX.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://www.zenml.io/">ZenML&lt;/a>&lt;/strong> es la pieza que más limpia integra &amp;ldquo;MLOps clásico + LLMOps emergente&amp;rdquo; en un solo framework. Su artifact versioning &lt;strong>automático&lt;/strong> captura prompt templates, retrieval chunks, agent conversation histories sin trabajo extra. Open-source. La opción de unificación más completa que existe.&lt;/p>
&lt;h3 id="dataset-versioning">Dataset versioning&lt;/h3>
&lt;p>&lt;strong>&lt;a href="https://dvc.org/">DVC&lt;/a>&lt;/strong> sigue siendo el estándar OSS. Extiende Git a archivos grandes y pipelines. &lt;strong>Noticia importante de noviembre 2025&lt;/strong>: &lt;a href="https://medium.com/the-modern-scientist/reproducible-ai-versioning-models-prompts-and-data-96dd0337af65">lakeFS adquirió DVC&lt;/a>, consolidando los dos proyectos OSS de versionado de datos bajo una organización. La hoja de ruta combinada está orientada a LLM training y RAG datalakes específicamente.&lt;/p>
&lt;p>&lt;strong>Patrón típico&lt;/strong>: Git para código + DVC para data/modelos + MLflow o W&amp;amp;B para experiment tracking + registry. Pocas teams usan uno solo; la &lt;strong>combinación&lt;/strong> es lo que cubre el ciclo.&lt;/p>
&lt;h3 id="prompt-versioning-y-observability">Prompt versioning y observability&lt;/h3>
&lt;p>Cubierto en profundidad en el &lt;a href="https://blog.lo0.es/posts/agentsight-tracing-llm/">post de AgentSight&lt;/a> donde profundizamos en &lt;strong>Langfuse&lt;/strong> como referencia OSS. Resumen aquí:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://langfuse.com/">Langfuse&lt;/a>&lt;/strong>: MIT, self-host, prompt management con versionado v1/v2/v3 + labels + cache + linkage con traces.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://www.langchain.com/langsmith">LangSmith&lt;/a>&lt;/strong>: si tu stack es LangChain.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://phoenix.arize.com/">Arize Phoenix&lt;/a>&lt;/strong>: ELv2, OTel-native.&lt;/li>
&lt;/ul>
&lt;h3 id="pipeline-orchestration">Pipeline orchestration&lt;/h3>
&lt;p>Para los pasos del pipeline LLMOps, las opciones dominantes:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://www.kubeflow.org/docs/components/pipelines/">Kubeflow Pipelines&lt;/a>&lt;/strong>: el estándar K8s-native. KServe (la parte de serving de Kubeflow) tiene &lt;strong>vLLM runtime upgraded a v0.8.1+&lt;/strong> con soporte para reasoning models, tool calling, embeddings, reranking, Llama 4 y Qwen 3.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://www.zenml.io/">ZenML&lt;/a>&lt;/strong>: ya mencionado; también orquestador de pipelines.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://metaflow.org/">Metaflow&lt;/a>&lt;/strong> (Netflix-originated): pipelines Python-first, menos LLM-específico pero workable.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://argoproj.github.io/workflows/">Argo Workflows&lt;/a>&lt;/strong>: alternativa OSS pura K8s.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://flyte.org/">Flyte&lt;/a>&lt;/strong>: Kubernetes-native, OSS.&lt;/li>
&lt;/ul>
&lt;h3 id="serving">Serving&lt;/h3>
&lt;p>Cubierto en profundidad en &lt;a href="https://blog.lo0.es/posts/vllm-kubernetes/">vLLM en Kubernetes&lt;/a> y &lt;a href="https://blog.lo0.es/posts/operators-llm-kubernetes/">Operators LLM K8s&lt;/a>. Resumen:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://github.com/vllm-project/production-stack">vLLM Production Stack&lt;/a>&lt;/strong>: Helm chart curado.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://kserve.github.io/website/">KServe vLLM runtime&lt;/a>&lt;/strong>: K8s-native, vLLM 0.8.1+ con soporte agentic completo.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://www.bentoml.com/">BentoML&lt;/a>&lt;/strong>: serving flexible, popular en startups por su simplicidad.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://developer.nvidia.com/dynamo">NVIDIA Dynamo&lt;/a>&lt;/strong>: el sucesor de Triton.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://github.com/llm-d/llm-d">llm-d&lt;/a>&lt;/strong>: CNCF Sandbox.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://github.com/ome-projects/ome">OME&lt;/a>&lt;/strong>: LMSYS operator con SGLang nativo.&lt;/li>
&lt;/ul>
&lt;h3 id="evals-y-guardrails">Evals y guardrails&lt;/h3>
&lt;p>Cubierto en &lt;a href="https://blog.lo0.es/posts/evals-llm-la-capa-despues-de-tracing/">Evals&lt;/a> y &lt;a href="https://blog.lo0.es/posts/guardrails-safety-llm/">Guardrails&lt;/a>. Resumen ultra-corto:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Evals CI&lt;/strong>: DeepEval, Promptfoo, Ragas.&lt;/li>
&lt;li>&lt;strong>Evals platform&lt;/strong>: Langfuse, LangSmith, Phoenix, Braintrust.&lt;/li>
&lt;li>&lt;strong>Guardrails&lt;/strong>: NeMo Guardrails, Llama Guard 4, Llama Prompt Guard 2, LLM Guard, Lakera.&lt;/li>
&lt;/ul>
&lt;h3 id="drift-detection-y-observability">Drift detection y observability&lt;/h3>
&lt;p>Cubierto en el &lt;a href="https://blog.lo0.es/posts/ebpf-on-device-inference-drift/">post de cierre eBPF&lt;/a>. Resumen:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Drift&lt;/strong>: Evidently AI, NannyML, WhyLabs.&lt;/li>
&lt;li>&lt;strong>Tracing&lt;/strong>: Langfuse, OpenLLMetry, Phoenix.&lt;/li>
&lt;li>&lt;strong>eBPF&lt;/strong>: AgentSight, Hubble, Tetragon, ProfInfer.&lt;/li>
&lt;/ul>
&lt;h3 id="la-tabla-de-stack-típico-2026">La tabla de stack típico 2026&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Etapa&lt;/th>
&lt;th>Pieza dominante&lt;/th>
&lt;th>Alternativas&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Data ingestión + versioning&lt;/td>
&lt;td>DVC + lakeFS (unificadas Nov 2025)&lt;/td>
&lt;td>Pachyderm, Quilt&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Vector store / RAG index&lt;/td>
&lt;td>Milvus, Qdrant, pgvector, Weaviate&lt;/td>
&lt;td>LanceDB, Pinecone, Chroma&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Experiment tracking&lt;/td>
&lt;td>MLflow 3.10&lt;/td>
&lt;td>W&amp;amp;B Weave, Neptune&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Pipeline orchestration&lt;/td>
&lt;td>Kubeflow + Argo&lt;/td>
&lt;td>ZenML, Metaflow, Flyte&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Model registry&lt;/td>
&lt;td>MLflow registry&lt;/td>
&lt;td>W&amp;amp;B Models, KServe ModelMesh&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Prompt versioning&lt;/td>
&lt;td>Langfuse&lt;/td>
&lt;td>LangSmith, MLflow Prompts&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Serving&lt;/td>
&lt;td>vLLM Production Stack&lt;/td>
&lt;td>KServe, BentoML, Dynamo, llm-d, OME&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Evals CI&lt;/td>
&lt;td>DeepEval, Ragas&lt;/td>
&lt;td>Promptfoo, OpenAI Evals&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Evals platform&lt;/td>
&lt;td>Langfuse, Phoenix&lt;/td>
&lt;td>LangSmith, Braintrust&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Guardrails&lt;/td>
&lt;td>NeMo + Llama Guard&lt;/td>
&lt;td>LLM Guard, Lakera&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Tracing&lt;/td>
&lt;td>OpenLLMetry + Langfuse&lt;/td>
&lt;td>Phoenix, LangSmith&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Drift detection&lt;/td>
&lt;td>Evidently AI&lt;/td>
&lt;td>NannyML, WhyLabs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>eBPF observability&lt;/td>
&lt;td>AgentSight + Tetragon + Hubble&lt;/td>
&lt;td>(territorio nuevo, pocas alternativas)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>13 piezas. Ninguna org usa todas; cualquier org seria usa al menos seis. &lt;strong>Esto es el LLMOps stack actual&lt;/strong>.&lt;/p>
&lt;h2 id="la-realidad-operativa-nadie-usa-una-sola-herramienta">La realidad operativa: nadie usa una sola herramienta&lt;/h2>
&lt;p>&lt;a href="https://medium.com/@kanerika/mlflow-vs-kubeflow-vs-w-b-which-mlops-tool-fits-your-stack-b59007460b25">Múltiples comparativas&lt;/a> coinciden en algo: &lt;strong>los equipos que ganan combinan&lt;/strong>. Patrones recurrentes:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>ZenML para orquestar + MLflow para tracking + KServe para serving&lt;/strong>: el stack OSS más popular en empresas que vienen de MLOps clásico.&lt;/li>
&lt;li>&lt;strong>Kubeflow + W&amp;amp;B + BentoML&lt;/strong>: para equipos con foco en research.&lt;/li>
&lt;li>&lt;strong>Langfuse + DeepEval + Phoenix + LiteLLM&lt;/strong>: para equipos LLM-puros sin background MLOps clásico.&lt;/li>
&lt;li>&lt;strong>MLflow + DVC + Argo + KServe&lt;/strong>: stack idiomático cloud-native sin LLM-specifics adicionales (con sus limitaciones).&lt;/li>
&lt;/ul>
&lt;p>La elección depende del background del equipo, del modelo de licencia que pueden permitirse, del nivel de self-hosting que necesitan, y de qué fricciones les bloquearon más en proyectos previos. &lt;strong>No hay &amp;ldquo;una respuesta correcta&amp;rdquo;&lt;/strong>; hay un meta-patrón estable de capas que conviene cubrir.&lt;/p>
&lt;h2 id="trampas-operativas-comunes">Trampas operativas comunes&lt;/h2>
&lt;h3 id="tratar-el-prompt-como-texto-en-código">Tratar el prompt como texto en código&lt;/h3>
&lt;p>Hardcodear prompts en strings en el repo. Cambiarlos requiere PR + redeploy. Resultado: equipos que no iteran sobre prompts porque cada cambio cuesta horas de pipeline. &lt;strong>Solución&lt;/strong>: prompt management externalizado (Langfuse, MLflow Prompts) con versionado, etiquetas, hot-reload.&lt;/p>
&lt;h3 id="saltarse-el-dataset-versioning">Saltarse el dataset versioning&lt;/h3>
&lt;p>&amp;ldquo;DVC es complicado, ya lo metemos después&amp;rdquo;. Resultado: dos meses después, nadie sabe qué dataset entrenó qué modelo. Imposible reproducir incidentes. &lt;strong>Solución&lt;/strong>: DVC + lakeFS desde el día 1, aunque sea con un subset pequeño.&lt;/p>
&lt;h3 id="mezclar-capas-en-el-mismo-pipeline">Mezclar capas en el mismo pipeline&lt;/h3>
&lt;p>Equipos que meten ingestión, fine-tuning, eval, deploy en un único pipeline gigante. Cuando algo falla, todo el pipeline falla. &lt;strong>Solución&lt;/strong>: pipelines independientes por etapa, con artifacts versionados como interfaces entre ellos.&lt;/p>
&lt;h3 id="tracking-sin-estructura">Tracking sin estructura&lt;/h3>
&lt;p>Loguear todo en stdout y &amp;ldquo;ya lo veremos en CloudWatch&amp;rdquo;. Resultado: imposible correlar, comparar, debugear. &lt;strong>Solución&lt;/strong>: OTel desde el día 1 con &lt;code>gen_ai.*&lt;/code> semantic conventions.&lt;/p>
&lt;h3 id="evals-que-no-bloquean-nada">Evals que no bloquean nada&lt;/h3>
&lt;p>Tienes evals, los corres, los miras, pero &lt;strong>no impiden el deploy&lt;/strong> si bajan. Eventualmente baja gradualmente y nadie lo nota. &lt;strong>Solución&lt;/strong>: eval gates en CI/CD que &lt;strong>bloquean merge&lt;/strong> si métricas críticas regresan más de X%.&lt;/p>
&lt;h3 id="sin-retrain-cadence">Sin retrain cadence&lt;/h3>
&lt;p>Lanzas v1 y nunca vuelves al modelo. Seis meses después, drift lo ha degradado pero el equipo está en otros proyectos. &lt;strong>Solución&lt;/strong>: cadencia formal de retrain (mensual, trimestral) ligada a la cola de incidentes de producción.&lt;/p>
&lt;h3 id="vendor-lock-in-invisible">Vendor lock-in invisible&lt;/h3>
&lt;p>Empiezas con OpenAI API + LangSmith + Pinecone. Cuando quieres self-host, &lt;strong>descubres&lt;/strong> que migrar es un proyecto de 3 meses. &lt;strong>Solución&lt;/strong>: capas de abstracción (LiteLLM, OpenLLMetry) y vendor-neutrality desde el principio.&lt;/p>
&lt;h2 id="lo-que-viene-en-los-siguientes-posts-de-la-serie">Lo que viene en los siguientes posts de la serie&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Post 2 — &lt;a href="https://blog.lo0.es/posts/rag-kafka-datalake-arquitectura/">RAG sobre datalakes con Kafka: arquitectura técnica end-to-end&lt;/a>&lt;/strong> — el más hands-on. Kafka como source-of-truth, Flink CDC, embedding pipelines, indexación continua en Milvus/Qdrant, ejemplo completo con números reales y manifests.&lt;/li>
&lt;li>&lt;strong>Post 3 — &lt;a href="https://blog.lo0.es/posts/pipeline-llmops-seis-etapas/">El pipeline LLMOps de seis etapas: arquitectura global&lt;/a>&lt;/strong> — el mapa maestro del sistema completo con SVG reutilizable de &amp;ldquo;estás aquí&amp;rdquo; para los siguientes posts. Deep dive en cada una de las seis etapas (Data, Tune, Eval, Deploy, Observe, Retrain).&lt;/li>
&lt;li>&lt;strong>Post 4 — &lt;a href="https://blog.lo0.es/posts/postgresql-qdrant-ingestion-microservicios/">PostgreSQL + Qdrant en la etapa de ingestión&lt;/a>&lt;/strong> — patrones de sincronización (dual-write, outbox + CDC, event-driven), arquitectura de microservicios completa, manifest de Qdrant cluster.&lt;/li>
&lt;li>&lt;strong>Próximos posts&lt;/strong> — pendientes de decidir: el cluster como plataforma multi-tenant, Constitutional AI / alignment runtime, fine-tuning continuo en profundidad, edge LLMs.&lt;/li>
&lt;/ul>
&lt;h2 id="referencias">Referencias&lt;/h2>
&lt;p>LLMOps vs MLOps:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://medium.com/@sanjeebmeister/the-complete-mlops-llmops-roadmap-for-2026-building-production-grade-ai-systems-bdcca5ed2771">The Complete MLOps/LLMOps Roadmap for 2026 (Sanjeeb Panda)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.iamraghuveer.com/posts/mlops-vs-llmops-what-changes/">MLOps vs LLMOps: What Changes (Raghuveer)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://hyscaler.com/insights/mlops-in-2026-guide/">MLOps in 2026: Architecture, Trends &amp;amp; Strategy (Hyscaler)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.ideas2it.com/blogs/llmops-vs-mlops-key-differences-and-evolution">LLMOps vs MLOps: Differences and Evolution (Ideas2IT)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://dev.to/apprecode/llmops-vs-mlops-whats-different-whats-the-same-and-how-to-run-both-in-production-2o52">LLMOps vs MLOps in production (DEV/Apprecode)&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>Herramientas:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://mlflow.org/">MLflow&lt;/a> — registry + tracking + serving.&lt;/li>
&lt;li>&lt;a href="https://wandb.ai/site/weave">Weights &amp;amp; Biases Weave&lt;/a> — LLM tracing.&lt;/li>
&lt;li>&lt;a href="https://www.zenml.io/">ZenML&lt;/a> — pipeline orchestration MLOps + LLMOps.&lt;/li>
&lt;li>&lt;a href="https://www.kubeflow.org/">Kubeflow&lt;/a> — K8s-native MLOps.&lt;/li>
&lt;li>&lt;a href="https://kserve.github.io/website/">KServe&lt;/a> — model serving K8s.&lt;/li>
&lt;li>&lt;a href="https://www.bentoml.com/">BentoML&lt;/a> — serving flexible.&lt;/li>
&lt;li>&lt;a href="https://metaflow.org/">Metaflow&lt;/a> — Netflix&amp;rsquo;s pipelines.&lt;/li>
&lt;li>&lt;a href="https://dvc.org/">DVC&lt;/a> — dataset versioning.&lt;/li>
&lt;li>&lt;a href="https://lakefs.io/">lakeFS&lt;/a> — data versioning enterprise, adquirió DVC en Nov 2025.&lt;/li>
&lt;/ul>
&lt;p>Comparativas 2026:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://medium.com/@kanerika/mlflow-vs-kubeflow-vs-w-b-which-mlops-tool-fits-your-stack-b59007460b25">MLflow vs Kubeflow vs W&amp;amp;B (Kanerika)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.zenml.io/blog/mlflow-alternatives">9 MLflow alternatives tested (ZenML)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.zenml.io/blog/metaflow-vs-kubeflow">Metaflow vs Kubeflow vs ZenML (ZenML)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.zenml.io/blog/mlops-tools">12 Best MLOps Tools for Agentic AI (ZenML)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.spheron.network/blog/mlops-pipeline-gpu-cloud-kubeflow-zenml-metaflow-2026/">MLOps Pipeline on GPU Cloud 2026 (Spheron)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://northflank.com/blog/top-7-kubeflow-alternatives">Top 7 Kubeflow alternatives 2026 (Northflank)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.sganalytics.com/blog/mlops-tools/">Top 20 MLOps Tools 2026 (SG Analytics)&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>RAG vs Fine-Tuning:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.scalacode.com/blog/rag-vs-fine-tuning/">RAG Vs Fine-Tuning In 2026 (ScalaCode)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.arxiv.org/pdf/2510.01375">Fine-Tuning with RAG (ICLR 2026, arxiv)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://dev.to/tyson_cung/rag-vs-fine-tuning-what-actually-works-in-production-2026-20jg">RAG vs Fine-Tuning — What Actually Works in Production 2026 (DEV)&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.kapa.ai/blog/how-to-build-a-rag-pipeline-from-scratch-in-2026">How to Build a RAG Pipeline from Scratch in 2026 (kapa.ai)&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>Cross-references (las tres series previas):&lt;/p>
&lt;ul>
&lt;li>Serie inferencia LLM: &lt;a href="https://blog.lo0.es/posts/kv-cache-fundamentos/">KV cache&lt;/a>, &lt;a href="https://blog.lo0.es/posts/vllm-kubernetes/">vLLM en K8s&lt;/a>, &lt;a href="https://blog.lo0.es/posts/pagedattention-deep-dive/">PagedAttention&lt;/a>, &lt;a href="https://blog.lo0.es/posts/operators-llm-kubernetes/">Operators LLM K8s&lt;/a>.&lt;/li>
&lt;li>Serie eBPF: &lt;a href="https://blog.lo0.es/posts/ebpf-cilium-tcp-ip-bypass/">eBPF de cero a Cilium&lt;/a>, &lt;a href="https://blog.lo0.es/posts/tetragon-runtime-security/">Tetragon&lt;/a>, &lt;a href="https://blog.lo0.es/posts/hubble-observabilidad-ebpf/">Hubble&lt;/a>, &lt;a href="https://blog.lo0.es/posts/agentsight-tracing-llm/">AgentSight&lt;/a>.&lt;/li>
&lt;li>Serie post-tracing: &lt;a href="https://blog.lo0.es/posts/evals-llm-la-capa-despues-de-tracing/">Evals&lt;/a>, &lt;a href="https://blog.lo0.es/posts/guardrails-safety-llm/">Guardrails&lt;/a>, &lt;a href="https://blog.lo0.es/posts/mcp-observability-otel/">MCP observability&lt;/a>, &lt;a href="https://blog.lo0.es/posts/ebpf-on-device-inference-drift/">eBPF + drift&lt;/a>.&lt;/li>
&lt;/ul></description></item></channel></rss>