A AWS publicou um guia combinando DVC (Data Version Control), Amazon SageMaker AI e SageMaker AI MLflow Apps pra resolver rastreabilidade de modelos em produção. Dois padrões acompanham notebooks prontos: lineage em nível de dataset e em nível de registro individual, esse último pensado pra compliance em saúde e finance. Tudo rodável em conta AWS própria.
Time de ML em produção sofre pra rastrear a linhagem completa de um modelo: qual código treinou, qual versão exata do dataset foi consumida, quais métricas de experimento justificaram o deploy. Sem isso, perguntas tipo "qual dado treinou o modelo que tá em prod?" ou "consegue reproduzir o modelo que subimos 6 meses atrás?" viram investigação de vários dias em logs espalhados, notebooks e buckets S3.
O problema aperta em setor regulado — saúde, financeiro, veículo autônomo — onde auditoria exige link entre modelo deployado e dado exato de treino, e registros individuais podem precisar sair de treinos futuros sob pedido.
.dvc metafiles leves no Git e o dado real no S3.A ideia: DVC cobre a ponta dado → treino, MLflow cobre treino → deploy, e o hash do commit Git costura tudo.
dvc pull pra puxar o dataset versionado exato, treina o modelo e loga tudo no MLflow.data_git_commit_id, que é o hash do commit DVC apontando pro dataset no S3.Cadeia completa: Production Model → MLflow Run → DVC commit → dataset exato no S3.
Git sozinho não lida com binário grande — repo incha e o GitHub bloqueia arquivo acima de 100 MB. DVC resolve com storage content-addressable (hash MD5): só arquivo novo ou modificado sobe. Adicionar 1.000 imagens novas a um dataset existente só manda essas 1.000 pro S3, o resto não re-upa.
O MLflow traz o que DVC tem mais fraco: model registry maduro com versioning, aliases pra lifecycle e integração de deploy. Separação limpa de responsabilidade.
Na prática, pra quem já roda SageMaker e tá montando governança de MLOps do zero, esse stack faz sentido sem adicionar fornecedor novo — DVC é open source e os dois outros já estão na casa.
O notebook foundational simula cenário comum: começar com dado rotulado limitado e expandir ao longo do tempo. Usa CIFAR-10 em dois experimentos:
Pra cada versão, o pipeline roda Processing job (baixa CIFAR-10, amostra, splita train/val/test, versiona com DVC) e depois Training job (clona repo DVC na tag exata, roda dvc pull, fine-tuna MobileNetV3-Small e loga no MLflow).
A ponte de lineage tá dentro do script de treino:
data_git_commit_id = fetch_data_from_dvc()
with mlflow.start_run(run_name=run_name) as run:
mlflow.log_params({
"data_version": data_version,
"data_git_commit_id": data_git_commit_id, # <-- a ponte de lineage
"dvc_repo_url": dvc_repo_url,
"model_architecture": "mobilenet_v3_small",
# ...
})
No MLflow UI você compara curva de acurácia entre versões, hiperparâmetro e o data_git_commit_id que linka cada modelo ao seu dataset DVC. O modelo treinado entra automaticamente no MLflow Model Registry, e por integração com SageMaker AI Model Registry, também no registry nativo.
Responde: qual versão treinou esse modelo, dá pra reproduzir, por que a performance mudou. Não responde: o registro X estava nesse treino?
Esse padrão estende o primeiro pra ambiente regulado onde você precisa rastrear registro individual. A adição chave é o manifest: um CSV estruturado listando cada registro em cada versão do dataset.
patient_id,scan_id,file_path,split,label
PAT-00001,PAT-00001-SCAN-0001,train/normal/00042.png,train,normal
PAT-00023,PAT-00023-SCAN-0015,train/tubercolosis/00015.png,train,tubercolosis
O manifest fica dentro do dataset versionado com DVC e é logado como artefato MLflow a cada run. Resultado: registro individual consultável direto do MLflow sem puxar o dataset inteiro.
O fluxo é guiado por um consent registry — CSV listando cada paciente e seu status de consentimento. Em produção viraria banco com transacional e audit trail próprio. O processing code é idempotente: filtra consent_status == "active" e processa o que sobra. Opt-out vira mudança de input que gera dataset novo e limpo no mesmo pipeline.
revoked no registry.O módulo utils/audit_queries.py traz três funções que rodam baixando o manifest do MLflow — sem checkout do DVC:
find_models_with_patient("PAT-00023") — quais modelos treinaram com esse pacienteverify_patient_excluded_after_date(...) — PASSED/FAILED automático pra auditoriaget_patients_in_model(run_id) — lista registros num modelo específicoNota importante de produção: essas queries baixam o manifest.csv de cada training run e escaneiam. Funciona pra poucos runs, não escala. Em produção, gravar tuplas (record_id, run_id, data_version) em DynamoDB no momento do treino, apontar Athena pro prefix de artefatos MLflow no S3, ou usar Lambda pós-treino pra popular índice.
DVC e MLflow dão rastreabilidade mas não são tamper-evident sozinhos. Pra deploy HIPAA, FDA 21 CFR Part 11, GDPR, empilha controle de infra:
keep_alive_period_in_seconds no Compute config. Só vale pra training, não processing.Os dois notebooks no repo companheiro são deployáveis como estão. O padrão foundational serve time que precisa de lineage em nível de dataset. O padrão healthcare compliance estende pra ambiente regulado com audit trail de registro. Os dois compartilham o mesmo código de treino SageMaker AI e mesma arquitetura.
Mesma lógica funciona além de saúde: serviços financeiros, moderação de conteúdo, qualquer sistema ML sujeito a pedido de deleção de dado.
☕ gostou dessa?
Matérias favoritadas ficam no seu /favoritos e, se você tem o cafecomtech instalado, disponíveis offline — no metrô, no avião, na fila do café.
☕ comentários · 0