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

#### 功能介绍

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


#### 使用约束

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


#### 使用方法

1. 缓存配置启用。
  配置示例如下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 初始化 SOC_VERSION = os.getenv('SOC_VERSION', 'AscendXXX') options = { "ge.exec.deviceId":"0", "ge.exec.logicalDeviceClusterDeployMode":"SINGLE", "ge.exec.logicalDeviceId":"[0:0]", "ge.graph_compiler_cache_dir":"./build_cache_dir" } df.init(options) flow_node0 = df.FlowNode(input_num=1, output_num=2) flow_node0_out = flow_node0(data0) # 构建FlowGraph，此处重点说明option使用，实际构造dataflow graph请参考其他章节 options = { "ge.graph_key":"test_graph_00" } dag = df.FlowGraph([out for out in flow_node0_out], options)

  表1 参数解释 参数名 含义 ge.graph_compiler_cache_dir 图编译磁盘缓存目录，和ge.graph_key配合使用，ge.graph_compiler_cache_dir和ge.graph_key同时配置非空时图编译磁盘缓存功能生效。 配置的缓存目录需要存在，否则会导致编译失败。 图发生变化后，原来的缓存文件不可用，用户需要手动删除缓存目录中的缓存文件，包括模型缓存文件、索引文件和变量格式文件，重新编译生成缓存文件。 ge.graph_key 图唯一标识，建议取值只包含大小写字母（A-Z，a-z）、数字（0-9）、下划线（_）、中划线（-）并且长度不超过128。不满足条件时，系统会报错。

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

2. 图发生变化后，如果需要重新编译。请参考如下步骤。
  图变化包括：修改GraphProcessPoint对应的graph或者config.json、修改UDF的实现文件和修改部署信息。 手动删除整图缓存的文件（包括模型缓存文件、索引文件和变量格式文件，具体内容请参考缓存文件生成规则）。 重新编译。 编译完成后，会在指定的目录下生成缓存文件。具体内容请参考缓存文件生成规则。


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

生成文件包括：


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