📦 Dvc Pipeline Auditor
v1.0.0审计 DVC(Data Version Control)流水线,确保可复现性、存储效率与追踪正确性。检查 dvc.yaml、dvc.lock、.dvc 文件、远程存储…
运行时依赖
安装命令
点击复制技能文档
DVC Pipeline Auditor 审计 DVC(Data Version Control)流水线是否具备可复现性、存储效率与运行正确性。检查 dvc.yaml 流水线定义、.dvc 文件追踪、远程存储配置、参数管理、指标收集及依赖链。扮演资深 ML 工程师,为你的数据版本与流水线基础设施做审计。
用法 基础:审计 /path/to/project/ 的 DVC 流水线 聚焦:
- 检查流水线阶段依赖
- 找出 .dvc 文件不同步
- 分析 DVC 存储占用
- 审查 params.yaml 结构
工作原理 Step 1:发现 DVC 项目结构 find /path/to/project -name ".dvc" -type d cat /path/to/project/.dvc/config find /path/to/project -name "dvc.yaml" -o -name "dvc.lock" -o -name "*.dvc" find /path/to/project -name "params.yaml" -o -name "params.json" 解析阶段(cmd、deps、outs、params、metrics、plots)、lock 哈希、.dvc 元数据、远程配置。
Step 2:审计流水线阶段 Stage: prepare PASS:脚本在 deps 中,变更会触发重跑 PASS:参数显式列出,输出目录已追踪 Stage: train PASS:依赖链来自 prepare 输出 PASS:指标 cache:false,已提交 git FAIL:未定义评估阶段 流水线只训练,从未在 holdout 集评估 FIX:新增 evaluate 阶段,依赖模型+测试数据 FAIL:阶段 "featurize" 缺失依赖 cmd 使用 config.yaml 但未列入 deps RISK:config 变更不会触发重跑 FIX:将 config.yaml 加入 deps FAIL:阶段 "train" 有未声明输出 脚本写入 logs/training.log 但未列入 outs FIX:加入 outs 或显式排除
Step 3:验证依赖图 prepare -> featurize -> train -> evaluate -> export_model 深度:4 | 无环 | 无孤立阶段 FAIL:隐式依赖 — train 读取 data/prepared/features.csv(由 featurize 产出),但 deps 指向 data/prepared/(来自 prepare) FIX:将 dep 改为 data/features/(featurize 输出) WARN:export_model 无下游消费者 — 确认是否为终端阶段
Step 4:检查 lock 文件完整性
FAIL:dvc.lock 过期
阶段 "prepare" 锁哈希与当前 src/prepare.py 不符
RISK:结果不反映最新代码
FIX:执行 dvc repro prepare
FAIL:dvc.lock 引用已删文件 src/old_featurize.py
FIX:更新 dvc.yaml dep,执行 dvc repro featurize
WARN:dvc.lock 未提交 git
RISK:协作者无法复现同一状态
FIX:确保 dvc.lock 被追踪(勿入 .gitignore)
Step 5:审计 .dvc 文件追踪
8 个追踪文件,共 4.7 GB
FAIL:data/raw/users.csv 哈希不一致
本地文件已改但 .dvc 未更新
FIX:dvc add data/raw/users.csv
FAIL:models/model_v2.pkl 存在 .dvc 但本地缺失
缓存亦无
FIX:dvc pull models/model_v2.pkl
WARN:3 个大文件(1.4 GB)未纳入 DVC
data/embeddings/vectors.npy (890 MB)
models/backup_model.pkl (320 MB)
data/external/reference.parquet (180 MB)
RISK:已入 git(膨胀)或未追踪(克隆丢失)
FIX:逐个 dvc add
WARN:data/raw/transactions.csv 2.1 GB CSV
建议转 Parquet,可省 60-80% 体积
Step 6:审查远程存储
Remotes:
"storage"(默认,s3://ml-data-bucket/dvc-store/)
"backup"(gs://backup-bucket/dvc/)
FAIL:"storage" 未配置认证
缺少 .dvc/config.local,dvc push/pull 将失败
FIX:dvc remote modify --local storage access_key_id
FAIL:远程 "backup" 从未推送
灾备失效
FIX:dvc push -r backup
WARN:未配置共享缓存
FIX:共享机器上 dvc cache dir /shared/dvc-cache
存储:追踪 4.7 GB,远程 3.2 GB(去重节省 32%)
RECOMMEND:dvc gc -c 清理约 800 MB 无用缓存
Step 7:审计参数与指标
FAIL:参数 "learning_rate" 重复于 params.yaml 与 params/train.yaml,值不同(0.01 vs 0.001)
FIX:统一单一来源
FAIL:未用参数 "model.dropout" — 无阶段引用
FIX:删除或接入训练脚本
WARN:src/train.py 硬编码
batch_size=64, num_epochs=100 应移入 params.yaml
WARN:仅定义 1 个 plot。建议增加混淆矩阵、ROC、特征重要性
WARN:未用 dvc exp,改用 dvc exp run 做实验追踪
Step 8:可复现性检查
FAIL:未固定 Python 版本(无 .python-version)
FAIL:依赖未完全固定:
"scikit-learn>=1.0", "pandas"(任意版本)
FIX:pip freeze > requirements.txt 锁定版本
FAIL:仅对 numpy 设随机种子,未对 Python random 或 torch 设置
RISK:运行结果非确定
WARN:系统依赖 ffmpeg 未文档化 — 影响输出但无追踪
WARN:无 CI/CD 执行 dvc repro --dry