DataFlow子图编译缓存
功能介绍
开启DataFlow编译缓存功能,当修改DataFlow单个节点的子图时,只增量编译修改的子图,其余子图使用缓存,从而降低编译耗时。
使用约束
- 该功能支持FlowGraph,不支持AscendGraph。
- 当前不支持带资源类算子的模型。
- 缓存不保证跨版本的兼容性,如果版本升级,需要清理缓存目录重新编译生成缓存。
- DataFlow子图发生变化后,原来的缓存文件不可用,用户需要手动删除缓存目录中的缓存文件,重新编译生成缓存文件。
使用方法
- 缓存配置启用。配置示例如下。
1 2 3 4 5 6
std::map<ge::AscendString, ge::AscendString> session_options = {{"ge.graph_compiler_cache_dir", "./build_cache_dir"}}; std::shared_ptr<ge::Session> session = std::make_shared<ge::Session>(session_options); const auto graph = CreateFlowGraph(); std::map<ge::AscendString, ge::AscendString> graph_options = {{"ge.graph_key", "test_graph_001"}}; auto = session->AddGraph(0, graph, graph_options); ...
表1 参数解释 参数名
含义
ge.graph_compiler_cache_dir
图编译磁盘缓存目录,和ge.graph_key配合使用,ge.graph_compiler_cache_dir和ge.graph_key同时配置非空时图编译磁盘缓存功能生效。
配置的缓存目录必须存在,否则会导致编译失败。
图发生变化后,原来的缓存文件不可用,用户需要手动删除缓存目录中的缓存文件,包括模型缓存文件、索引文件和变量格式文件,重新编译生成缓存文件。
说明:如果用户需要减少缓存恢复时间,可以在该目录下增加配置文件"cache.conf",示例如下。
{ "cache_manual_check":true, "cache_debug_mode":true }
- cache_manual_check:是否开启缓存手工检查模式。配置为true时,表示当图发生变化再次编译时,需要手工删除DataFlow子图缓存文件夹下对应的子图缓存文件。
- cache_debug_mode:是否开启缓存调试模式。配置为true时,不会生成整图缓存的文件(包括模型缓存文件、索引文件和变量格式文件,具体内容请参考缓存文件生成规则)。
ge.graph_key
图唯一标识,建议取值只包含大小写字母(A-Z,a-z)、数字(0-9)、下划线(_)、中划线(-)并且长度不超过128。不满足条件时,系统会报错。
编译完成会在指定的目录下生成缓存文件。具体内容请参考缓存文件生成规则。
- 图发生变化后,如果需要重新编译。请参考如下步骤。
- 模型缓存文件。
- 索引文件,便于用户通过graph_key快速找到对应的缓存文件,索引文件内容示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
{ "cache_file_list":[ { "cache_file_name":"./cache_dir/graph_$key1_20230117202307.om", "graph_key":"graph_$key1", "var_desc_file_name":"./cache_dir/graph_$key1_20230117202307.rdcpkt" }, { "cache_file_name":"./cache_dir/graph_$key1_20230117203007.om", "graph_key":"graph_$key1", "var_desc_file_name":"./cache_dir/graph_$key1_20230117203007.rdcpkt" } ] }
- 变量格式文件,仅在图中存在变量时生成。用于框架匹配模型缓存文件,如果graph_key对应的图内变量格式发生变更,则之前缓存的缓存文件将无法直接恢复使用,该场景下会重新触发编译流程重新生成缓存文件。
- 如果开启了权重外置功能,即options选项中配置了ge.externalWeight参数,并且设置为1,则在ge.graph_compiler_cache_dir参数指定路径下还会生成weight目录,用于保存原始网络中的Const/Constant节点的权重信息。
- DataFlow子图缓存文件夹,仅在FlowGraph场景下生成。以graph_key命名,存放DataFlow子图编译时产生的缓存文件。
文件名生成规则:
- 当ge.graph_key配置值只包含大小写字母(A-Z,a-z)、数字(0-9)、下划线(_)、中划线(-)并且长度不超过128时
- 索引文件命名为:ge.graph_key+“.idx”。
- 模型缓存文件命名为:ge.graph_key+当前时间+“.om”。
- 变量格式文件命名为:ge.graph_key+当前时间+“.rdcpkt”。
- 不满足上面条件时,系统会报错。
父主题: 专题