Capítulo 2: MLOps vs DevOps vs DataOps
Entendendo o Cenário Ops
O cenário moderno de dados e software envolve várias disciplinas "Ops". Compreender como elas se relacionam e diferem é crucial para construir equipes e sistemas eficazes.
Visão Geral da Comparação
Tabela Comparativa Detalhada
| Aspecto | DevOps | DataOps | MLOps |
|---|---|---|---|
| Foco Principal | Entrega de software | Entrega de pipeline de dados | Entrega de modelos de ML |
| Artefato Principal | Código da aplicação | Produtos de dados | Modelos de ML |
| Testes | Unitário, integração, E2E | Qualidade dos dados, esquema | Validação de modelo, A/B |
| Versionamento | Apenas código | Linhagem de dados | Código + Dados + Modelos |
| Monitoramento | Métricas de app, logs | Métricas de qualidade de dados | Performance do modelo, drift |
| Alvo de CI/CD | Deploy de aplicações | Deploy de pipelines de dados | Deploy de modelos |
| Ciclo de Feedback | Relatórios de bugs | Problemas de dados | Degradação do modelo |
DevOps: A Fundação
DevOps foca em encurtar o ciclo de desenvolvimento enquanto entrega funcionalidades, correções e atualizações com frequência.
Práticas Centrais de DevOps
# Example: Standard DevOps CI/CD Pipeline
name: Application CI/CD
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: npm run build
- name: Unit Tests
run: npm test
- name: Integration Tests
run: npm run test:integration
- name: Build Docker Image
run: docker build -t myapp:${{ github.sha }} .
deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to Production
run: kubectl apply -f k8s/
Ferramentas DevOps
| Categoria | Ferramentas |
|---|---|
| Controle de Versão | Git, GitHub, GitLab |
| CI/CD | Jenkins, GitHub Actions, GitLab CI |
| Containers | Docker, Podman |
| Orquestração | Kubernetes, Docker Swarm |
| Monitoramento | Prometheus, Grafana, Datadog |
| IaC | Terraform, Ansible, Pulumi |
DataOps: Gerenciando Pipelines de Dados
DataOps aplica princípios de DevOps aos fluxos de trabalho de análise e engenharia de dados.
Práticas Centrais de DataOps
# Example: DataOps Pipeline with Great Expectations
import great_expectations as gx
from great_expectations.core.batch import BatchRequest
# Create data context
context = gx.get_context()
# Define expectations for data quality
validator = context.get_validator(
batch_request=BatchRequest(
datasource_name="my_datasource",
data_connector_name="default_inferred_data_connector",
data_asset_name="sales_data",
),
expectation_suite_name="sales_data_expectations"
)
# Data quality checks
validator.expect_column_values_to_not_be_null("customer_id")
validator.expect_column_values_to_be_between("quantity", min_value=1, max_value=1000)
validator.expect_column_values_to_be_unique("order_id")
validator.expect_column_values_to_match_regex("email", r"^[\w\.-]+@[\w\.-]+\.\w+$")
# Save expectations
validator.save_expectation_suite(discard_failed_expectations=False)
Ferramentas DataOps
| Categoria | Ferramentas |
|---|---|
| Orquestração | Apache Airflow, Dagster, Prefect |
| Qualidade de Dados | Great Expectations, dbt tests, Soda |
| Catálogo de Dados | DataHub, Amundsen, Apache Atlas |
| ETL/ELT | dbt, Spark, Fivetran |
| Linhagem de Dados | OpenLineage, Marquez |
MLOps: A Interseção
MLOps está na interseção entre DevOps e DataOps, herdando práticas de ambos e adicionando capacidades específicas de ML.
O que MLOps Adiciona
Desafios Específicos de MLOps
| Desafio | Descrição | Solução |
|---|---|---|
| Reprodutibilidade de Modelo | Mesmo código, resultados diferentes | Fixação de seed, bloqueio de ambiente |
| Data Drift | Dados de entrada mudam com o tempo | Detecção de drift, monitoramento |
| Decaimento do Modelo | Performance do modelo degrada | Treinamento contínuo, alertas |
| Gestão de Experimentos | Rastrear muitos experimentos | MLflow, W&B, Neptune |
| Consistência de Features | Inconsistência entre treino/serving | Feature stores |
Estruturas de Equipe
Opção 1: Equipe Centralizada de MLOps
┌─────────────────────────────────────────────────────────┐
│ MLOps Platform Team │
├─────────────────────────────────────────────────────────┤
│ • Owns ML infrastructure │
│ • Provides self-service tools │
│ • Sets standards and best practices │
│ • Supports multiple ML teams │
└─────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ ML Team │ │ ML Team │ │ ML Team │
│ A │ │ B │ │ C │
└─────────┘ └─────────┘ └─────────┘
Vantagens:
- Padrões consistentes
- Utilização eficiente de recursos
- Especialização técnica
Desvantagens:
- Potencial gargalo
- Pode não entender necessidades específicas das equipes
Opção 2: Engenheiros de MLOps Embutidos
┌─────────────────────────────────────────────────────────┐
│ Product Team A │
├─────────────────────────────────────────────────────────┤
│ Data Scientists (3) + ML Engineer (1) + MLOps (1) │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Product Team B │
├─────────────────────────────────────────────────────────┤
│ Data Scientists (2) + ML Engineer (2) + MLOps (1) │
└─────────────────────────────────────────────────────────┘
Vantagens:
- Conhecimento profundo do domínio
- Iteração rápida
- Comunicação direta
Desvantagens:
- Esforços duplicados
- Práticas inconsistentes
- Alto consumo de recursos
Opção 3: Modelo Híbrido (Recomendado)
┌─────────────────────────────────────────────────────────┐
│ Central MLOps Platform Team │
│ (Infrastructure, Tools, Standards, Support) │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Product │ │ Product │ │ Product │
│ Team A │ │ Team B │ │ Team C │
│ │ │ │ │ │
│ ML Eng ◄──┼───────┼──► Shared │◄──────┼─► ML Eng │
│ │ │ Tools │ │ │
└───────────┘ └───────────┘ └───────────┘
Matriz de Responsabilidades
Matriz RACI para Projeto de ML
| Atividade | Cientista de Dados | Engenheiro de ML | Engenheiro de MLOps | Engenheiro de Dados |
|---|---|---|---|---|
| Coleta de Dados | C | I | I | R/A |
| Engenharia de Features | R/A | C | I | C |
| Desenvolvimento de Modelo | R/A | C | I | I |
| Pipeline de Treinamento | C | R/A | C | I |
| Deploy de Modelo | I | C | R/A | I |
| Monitoramento | I | C | R/A | C |
| Infraestrutura | I | I | R/A | I |
Legenda: R = Responsável, A = Aprovador, C = Consultado, I = Informado
Pontos de Colaboração
Entrega de Dados (DataOps → MLOps)
# Example: Data contract between DataOps and MLOps
data_contract:
name: customer_features
version: 1.2.0
owner: data-engineering@company.com
schema:
customer_id:
type: string
nullable: false
pattern: "^CUS-[0-9]{8}$"
age:
type: integer
nullable: false
min: 18
max: 120
total_purchases:
type: float
nullable: false
min: 0.0
sla:
freshness: 1 hour
availability: 99.9%
delivery:
format: parquet
location: s3://data-lake/features/customer/
update_frequency: hourly
Entrega de Deploy (MLOps → DevOps)
# Example: Model deployment specification
model_deployment:
name: customer-churn-model
version: 2.1.0
container:
image: mlplatform/models:customer-churn-v2.1.0
resources:
cpu: "2"
memory: "4Gi"
gpu: "0"
scaling:
min_replicas: 2
max_replicas: 10
target_cpu_utilization: 70%
endpoints:
health: /health
predict: /predict
metrics: /metrics
monitoring:
latency_p99_threshold_ms: 100
error_rate_threshold: 0.01
Principais Aprendizados
Summary
- DevOps foca na entrega de aplicações – MLOps estende isso para modelos
- DataOps foca na qualidade dos dados – MLOps depende de dados limpos e versionados
- MLOps combina ambos e adiciona práticas específicas de ML (rastreamento de experimentos, versionamento de modelos)
- A estrutura da equipe deve acompanhar a maturidade e o tamanho da organização
- Interfaces claras entre equipes evitam gargalos e confusão
Exercício Prático
Crie um documento simples de comparação para sua organização:
- Liste as práticas atuais de DevOps
- Liste as práticas atuais de DataOps (se houver)
- Identifique lacunas para implementação de MLOps
- Proponha mudanças na estrutura da equipe
Próximo: Capítulo 3: O Ciclo de Vida de ML