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:
- Move os dados para o cache do DVC (
.dvc/cache) - Cria um arquivo
.dvccom o hash e metadados - Adiciona os dados originais ao
.gitignorepara 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.







