Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

DVC (Data Version Control): Versionando Dados, Modelos e Pipelines de Machine Learning como Código

DVC (Data Version Control): Versionando Dados, Modelos e Pipelines de Machine Learning como Código

O Problema do Versionamento em Machine Learning

Em projetos de Machine Learning, o código-fonte é apenas uma parte do que precisa ser versionado. Datasets com gigabytes ou terabytes, modelos treinados que pesam centenas de megabytes, parâmetros de treinamento e pipelines inteiros de transformação — tudo isso muda constantemente. Git não foi projetado para lidar com arquivos grandes, e é aí que entra o DVC (Data Version Control).

O DVC é uma ferramenta open-source que estende o Git com capacidades de versionamento de dados e machine learning. Ele trata datasets, modelos e artefatos como partes integrantes do seu repositório, armazenando-os em storage externo (S3, GCS, Azure, drive local) enquanto mantém metadados leves no Git.

Como o DVC funciona por baixo dos panos

Diferente do Git LFS, que armazena referências diretas a arquivos grandes, o DVC utiliza um conceito de cache content-addressable. Cada arquivo versionado tem seu hash SHA-256 calculado, e o DVC armazena uma cópia no cache local e no remote storage. O Git mantém apenas pequenos arquivos .dvc com os hashes.

# Estrutura de um arquivo .dvc típico
outs:
- md5: a1b2c3d4e5f6...  # hash do dataset
  size: 2458675309
  path: data/dataset.parquet

Isso significa que você pode fazer checkout de qualquer versão do seu repositório Git e, com um comando dvc checkout, restaurar exatamente os dados correspondentes àquela versão — tudo rastreável e reproduzível.

Instalação e configuração inicial

# Instalar DVC
pip install dvc

# Inicializar em um repositório Git existente
cd meu-projeto-ml
git init
dvc init

# Configurar remote storage (exemplo: S3)
dvc remote add -d myremote s3://meu-bucket/dvc-store

# Seu projeto está pronto para versionar dados!

Versionando datasets

Adicionar um dataset ao DVC é simples:

# Adicionar dataset ao DVC
dvc add data/imagens_treinamento/

# Os arquivos .gitignore e data/imagens_treinamento.dvc foram criados
git add data/imagens_treinamento.dvc .gitignore
git commit -m "feat: adiciona dataset de treinamento v1"

# Enviar dados para o remote
dvc push

O comando dvc add faz três coisas:

  1. Move os dados para o cache do DVC (.dvc/cache)
  2. Cria um arquivo .dvc com o hash e metadados
  3. Adiciona os dados originais ao .gitignore para não poluírem o Git

Para recuperar uma versão específica posteriormente:

# No futuro, em outra máquina
git clone https://github.com/usuario/meu-projeto-ml
git checkout tags/v1.0
dvc pull  # restaura os dados exatos da versão v1.0

Versionando modelos treinados

# Após treinar um modelo
dvc add models/modelo_rf.pkl
git add models/modelo_rf.pkl.dvc
git commit -m "feat: modelo Random Forest v2 - acurácia 0.92"

# Enviar modelo para o remote
dvc push

Com isso, cada versão do modelo fica associada a um commit específico do código que o gerou — rastreabilidade completa.

Pipelines reproduzíveis com DVC

O recurso mais poderoso do DVC é o sistema de pipelines. Você define um dvc.yaml que descreve as etapas do seu fluxo de ML e suas dependências:

# dvc.yaml
stages:
  preprocess:
    cmd: python src/preprocess.py
    deps:
      - data/raw/
      - src/preprocess.py
    outs:
      - data/processed/
  train:
    cmd: python src/train.py
    deps:
      - data/processed/
      - src/train.py
    outs:
      - models/modelo.pkl
    params:
      - params.yaml:
          - train.learning_rate
          - train.n_estimators
  evaluate:
    cmd: python src/evaluate.py
    deps:
      - models/modelo.pkl
      - data/processed/
      - src/evaluate.py
    metrics:
      - metrics.json:
          cache: false

Para executar o pipeline:

# Executa todo o pipeline (apenas etapas com mudanças)
dvc repro

# Visualizar o grafo de dependências
dvc dag

# Comparar métricas entre versões
dvc metrics diff

O DVC detecta automaticamente quais arquivos mudaram (via hash) e executa apenas as etapas necessárias — exatamente como um Makefile inteligente para ML.

Parâmetros e experimentos

Com o dvc params, você pode rastrear e comparar hiperparâmetros entre experimentos:

# params.yaml
train:
  learning_rate: 0.01
  n_estimators: 100
  max_depth: 10

# Executar experimento com parâmetros diferentes
dvc exp run --set-param train.learning_rate=0.001

# Listar todos os experimentos
dvc exp show

# Comparar métricas entre experimentos
dvc exp diff

# Aplicar um experimento específico
dvc exp apply exp-abc123

Experiment tracking com DVC é totalmente open-source — sem dependência de serviços externos pagos.

DVC vs MLflow vs Weights & Biases

O DVC não compete diretamente com MLflow ou W&B — eles resolvem problemas diferentes:

  • DVC: versionamento de dados, modelos e pipelines. Ideal para equipes que querem rastreabilidade Git-based e pipelines reproduzíveis sem depender de serviços externos.
  • MLflow: foco em experiment tracking, registro de modelos e deploy. Excelente para times que precisam de uma UI para comparar experimentos.
  • Weights & Biases: experiment tracking avançado com visualizações ricas, dashboards colaborativos e integração com frameworks de deep learning.

Na prática, muitos times usam DVC + MLflow juntos: DVC para dados e pipelines, MLflow para experiment tracking e registry de modelos.

Integração com CI/CD

# .github/workflows/ml-pipeline.yml
name: ML Pipeline
on: [push]
jobs:
  train:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - name: Instalar dependências
        run: |
          pip install dvc[s3]
          pip install -r requirements.txt
      - name: Baixar dados
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: dvc pull
      - name: Reproduzir pipeline
        run: dvc repro
      - name: Commit novo modelo
        run: |
          git config user.name "CI Bot"
          git config user.email "ci@exemplo.com"
          git add .
          git commit -m "ci: atualiza modelo [skip ci]" || true
          git push
      - name: Push dados e modelos
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: dvc push

Casos de uso reais

  • Iterative.ai (criadores do DVC): usam o próprio DVC para versionar todos os datasets e modelos de seus projetos internos de ML.
  • Microsoft: equipes de pesquisa utilizam DVC em projetos de visão computacional com datasets de centenas de GB.
  • Nvidia: aplica DVC em pipelines de treinamento de modelos de deep learning para garantir reprodutibilidade.
  • Empresas de saúde: usam DVC para versionar datasets sensíveis mantendo trilha de auditoria completa.

Boas práticas com DVC

  • Não versionar dados brutos descartáveis: apenas datasets que serão reutilizados ou precisam de rastreabilidade.
  • Usar .dvcignore: exclua arquivos temporários e caches desnecessários do controle do DVC.
  • Combinar com Git tags: marque versões importantes (v1.0, v2.0) para facilitar rollbacks.
  • Configurar cache compartilhado: em times grandes, configure um cache de rede para evitar downloads duplicados.
  • Sempre rodar dvc repro antes de commits importantes: garante que o pipeline está atualizado e o DAG reflete o estado real dos dados.

Conclusão

O DVC é uma ferramenta essencial para qualquer equipe de Machine Learning que leva reprodutibilidade a sério. Ao integrar versionamento de dados, modelos e pipelines diretamente no fluxo Git que os desenvolvedores já conhecem, ele elimina o abismo entre o código e os dados que alimentam os modelos.

Se você já perdeu horas tentando reproduzir um resultado antigo, ou já enviou o dataset errado para um colega de time, está na hora de experimentar o DVC. Comece hoje com pip install dvc && dvc init no seu projeto — em minutos você terá dados versionados e pipelines reproduzíveis.

Craft XP
Craft XP