Dvc 流水线审计员
v1.0.0审计DVC(数据版本控制)管道以确保可复现性、存储效率和跟踪准确性。检查dvc.yaml、dvc.lock、.dvc文件、远程存储...
运行时依赖
安装命令
点击复制技能文档
DVC Pipeline 审计员 审计 DVC(数据版本控制)管道,以实现可复现性、存储效率和操作正确性。审查 dvc.yaml 管道定义、.dvc 文件跟踪、远程存储配置、参数管理、指标收集和依赖链。充当高级 ML 工程师,审计您的数据版本控制和管道基础设施。
使用 基本:审计 /path/to/project/ 中的 DVC 管道 专注:检查管道阶段依赖 | 查找 .dvc 文件不同步 | 分析 DVC 存储使用情况 | 审查 params.yaml 结构
工作原理 步骤 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)、锁文件哈希、.dvc 跟踪元数据和远程配置。
步骤 2:审计管道阶段 阶段:prepare 通过:脚本在 deps 中 —— 更改触发重新运行 通过:参数显式列出,输出目录跟踪 阶段:train 通过:依赖链从 prepare 输出 通过:指标与 cache:false —— 提交到 git 失败:没有定义评估阶段 管道训练但从不在 holdout 集上评估 修复:添加评估阶段,模型 + 测试数据作为依赖 失败:阶段 "featurize" 缺少依赖 cmd 使用 config.yaml 但它没有在 deps 中列出 风险:配置更改不会触发重新运行 修复:将 "config.yaml" 添加到 deps 中 失败:阶段 "train" 有未声明的输出 脚本写入 logs/training.log 但没有在 outs 中列出 修复:添加到 outs 或显式排除
步骤 3:验证依赖图 prepare -> featurize -> train -> evaluate -> export_model 深度:4 | 没有循环依赖 | 没有孤立阶段 失败:隐式依赖 —— "train" 读取 "featurize" 产生的 data/prepared/features.csv,但依赖引用 data/prepared/(来自 prepare) 修复:更改依赖为 data/features/(featurize 输出) 警告: "export_model" 没有下游消费者 —— 验证终端阶段
步骤 4:检查锁文件完整性
失败:dvc.lock 已过期
阶段 "prepare" 锁哈希与当前 src/prepare.py 不匹配
风险:管道结果不反映当前代码
修复:运行 dvc repro prepare
失败:dvc.lock 引用已删除的文件 src/old_featurize.py
修复:更新 dvc.yaml 依赖,运行 dvc repro featurize
警告:dvc.lock 未提交到 git
风险:协作者无法复制确切的管道状态
修复:确保 dvc.lock 被跟踪(不在 .gitignore 中)
步骤 5:审计 .dvc 文件跟踪
8 个跟踪文件,总共 4.7 GB
失败:data/raw/users.csv —— 哈希不匹配
本地文件已修改,但 .dvc 未更新
修复: dvc add data/raw/users.csv
失败:models/model_v2.pkl —— .dvc 存在,但文件在本地丢失
也不在缓存中。
修复: dvc pull models/model_v2.pkl
警告:3 个大文件(总共 1.4 GB)未被 DVC 跟踪
data/embeddings/vectors.npy(890 MB)
models/backup_model.pkl(320 MB)
data/external/reference.parquet(180 MB)
风险:提交到 git(膨胀)或未跟踪(在克隆时丢失)
修复: dvc add 每个
警告:data/raw/transactions.csv —— 2.1 GB CSV
考虑使用 Parquet 格式以减小 60-80% 的大小
步骤 6:审查远程存储
远程存储: "storage"(默认,s3://ml-data-bucket/dvc-store/),"backup"(gs://backup-bucket/dvc/)
失败:没有为 "storage" 配置身份验证
.dvc/config.local 缺失。 dvc push/pull 将失败。
修复: dvc remote modify --local storage access_key_id
失败:远程 "backup" 从未被推送到
灾难恢复不起作用。
修复: dvc push -r backup
警告:没有配置共享缓存
修复: dvc cache dir /shared/dvc-cache 在共享机器上
存储:4.7 GB 跟踪,3.2 GB 远程(32% 去重节省)
推荐: dvc gc -c 以清除约 800 MB 未使用的缓存
步骤 7:审计参数和指标
失败:params.yaml 和 params/train.yaml 中的重复参数 "learning_rate"
值不同(0.01 vs 0.001)。
修复:单一事实来源
失败:未使用的参数 "model.dropout" —— 没有阶段引用它
修复:删除或将其连接到训练脚本
警告:src/train.py 中的硬编码值
batch_size=64,num_epochs=100 应该在 params.yaml 中
警告:只有 1 个定义的图表。添加混淆矩阵、ROC、特征重要性。
警告:没有 dvc exp 使用 —— 切换到 dvc exp run 以进行实验跟踪
步骤 8:检查可复现性
失败:Python 版本未固定(没有 .python-version)
失败:依赖项未完全固定: "scikit-learn>=1.0", "pandas"(任何版本)
修复: pip freeze > requirements.txt 以获取确切版本
失败:随机种子仅设置为 numpy,而不是 Python 随机或 torch
风险:非确定性结果在运行之间
警告:系统依赖项(ffmpeg)未记录 —— 影响输出但未跟踪
警告:没有 CI/CD 运行 dvc repro --dry 在