DVC报load_extract_save阶段循环依赖CyclicGraphError如何解决
错误原因
DVC 流水线依赖有向无环图(DAG)解析阶段执行顺序,抛出循环错误的核心原因是load_extract_save阶段存在自依赖配置:
- 你在该阶段的
deps(依赖项)中声明了artifacts/data路径 - 同时在该阶段的
outs(输出项)中也声明了同一路径artifacts/data
DVC 构建依赖图的规则是:为每个「输出路径所属阶段 → 依赖该路径的阶段」绘制一条有向边。当同一路径同时是一个阶段的输入和输出时,就会生成一条从该阶段指向自身的边,直接形成闭环,违反DAG的无环要求,因此抛出循环错误。
修复方案
根据artifacts/data的实际属性二选一调整即可:
如果
artifacts/data是stage_01_load_extract_save.py脚本运行生成的目录(比如脚本负责下载原始数据、解压到该路径):
直接从load_extract_save的deps列表中删除- artifacts/data这一项即可,输出路径不需要作为自身的依赖。
修正后该阶段配置如下:load_extract_save: cmd: python src/stage_01_load_extract_save.py --config=config/config.yaml deps: - config/config.yaml - src/utils/all_utils.py - src/stage_01_load_extract_save.py outs: - artifacts/data - artifacts/clean_data/X.npy - artifacts/clean_data/Y.npy其余三个阶段(train_test_split_save、train_model、metrics)的配置不需要改动。
如果
artifacts/data是你提前存放的静态原始数据集、不是该脚本生成的:
从load_extract_save的outs列表中删除- artifacts/data这一项,保留其在deps中的配置,提前执行dvc add artifacts/data命令将静态原始数据集纳入DVC版本追踪即可,不要让同一路径同时作为单个阶段的输入和输出。
调整完成后重新执行dvc repro即可正常解析流水线,不会再报循环错误。
内容的提问来源于stack exchange,提问作者Padmanabhan Poraiyar
相关产品推荐
相关产品推荐

