PyPSA-Earth中Snakemake中断恢复及CBC强制调用问题求助
解决PyPSA-Earth与Snakemake的三个核心问题:恢复、强制CBC、安全进度管理
1. 中断后安全恢复,避免不必要文件删除
- 精准清理锁文件:不要删除整个
.snakemake/locks目录,只删除对应中断任务的锁文件(文件名包含任务ID),避免触发全量重建 - 组合安全运行参数:执行Snakemake时使用
--keep-incomplete --no-cleanup-shadow --no-delete-all-output-on-error,禁止错误时批量删除输出,同时保留shadow目录临时文件 - 标记完整文件为已完成:对确认无损坏的中间文件(如
.nc、.geojson),用snakemake --touch <文件路径>标记为已完成,Snakemake会跳过这些文件的重新生成 - 调整重运行触发逻辑:添加
--rerun-triggers mtime,让Snakemake仅根据文件修改时间判断是否重运行,而非默认元数据校验,降低误删概率
2. 强制PyPSA-Earth仅使用CBC,禁用Gurobi
- 双重锁定配置:确保
config.yaml中solver: cbc,同时添加solver_options: {"threads": 4}(根据CPU核心数调整),明确指定CBC运行参数 - 屏蔽Gurobi环境:运行Snakemake前执行
export GUROBI_HOME="",让PyPSA无法检测到Gurobi安装路径 - 检查规则硬编码:打开Snakefile,查找
solve_network等求解相关规则,删除所有调用Gurobi的条件分支,强制指向CBC求解器 - Conda环境隔离:用
--use-conda启动Snakemake,在每个规则的conda环境配置中仅安装cbc,不包含Gurobi相关依赖
3. 模块化、Checkpoint安全的进度管理
- 拆分流程为独立模块:将工作流拆分为数据预处理、网络构建、模型求解、结果分析四个核心模块,每个模块对应一组规则
- 用Checkpoint标记关键节点:在Snakefile中定义Checkpoint锚定每个模块的完成状态,示例:
checkpoint preprocess_complete: output: directory("data/preprocessed/flag") shell: "mkdir -p {output} && touch {output}/done" - 动态依赖生成:通过
checkpoint.get获取Checkpoint输出,动态生成后续规则的输入,确保模块间依赖清晰,单个任务失败不会导致全流程回滚 - 定期备份元数据:每隔几个关键步骤,备份
.snakemake/metadata目录,该目录记录所有任务完成状态,元数据损坏时可通过备份恢复进度 - 资源控制优化:用
--jobs 8(根据机器配置调整)限制并行任务数,添加--latency-wait 60给文件系统足够同步时间,减少文件读写延迟导致的中断
内容的提问来源于stack exchange,提问作者Gregor Horedt
相关产品推荐
相关产品推荐

