---
title: DataFlow子图编译缓存
description: "开启DataFlow编译缓存功能，当修改DataFlow单个节点的子图时，只增量编译修改的子图，其余子图使用缓存，从而降低编译耗时。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/dataflowdevg/dfdevc_23_0025.html
sourcePath: /source/zh/canncommercial/900/others/dataflowdevg/dfdevc_23_0025.html
indexId: b8257207599db37838e671f071e0585c0fcb9636271e006132b77cc169a6d74469
---
# DataFlow子图编译缓存

#### 功能介绍

开启DataFlow编译缓存功能，当修改DataFlow单个节点的子图时，只增量编译修改的子图，其余子图使用缓存，从而降低编译耗时。


#### 使用约束

- 该功能支持FlowGraph，不支持AscendGraph。
- 当前不支持带资源类算子的模型。
- 缓存不保证跨版本的兼容性，如果版本升级，需要清理缓存目录重新编译生成缓存。
- DataFlow子图发生变化后，原来的缓存文件不可用，用户需要手动删除缓存目录中的缓存文件，重新编译生成缓存文件。


#### 使用方法

1. 缓存配置启用。
  配置示例如下。 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。不满足条件时，系统会报错。

  编译完成后，会在指定的目录下生成缓存文件。具体内容请参考缓存文件生成规则。

2. 图发生变化后，如果需要重新编译。请参考如下步骤。
  图变化包括：修改graphpp对应的graph或config.json、修改UDF的实现文件和修改部署信息。 如果ge.graph_compiler_cache_dir配置了"cache.conf"，并且cache_debug_mode=true，则不需要手工删除图缓存的文件。

  a. （可选）手动删除整图缓存的文件（包括模型缓存文件、索引文件和变量格式文件，具体内容请参考    缓存文件生成规则
）。
  b. 重新编译。
    编译完成后，会在指定的目录下生成缓存文件。具体内容请参考缓存文件生成规则。


#### 缓存文件生成规则

生成文件包括：


- 模型缓存文件。
- 索引文件，便于用户通过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”。
- 不满足上面条件时，系统会报错。
