昇腾社区首页
中文
注册

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,则不需要手工删除图缓存的文件。

    1. (可选)手动删除整图缓存的文件(包括模型缓存文件、索引文件和变量格式文件,具体内容请参考缓存文件生成规则)。
    2. 重新编译。

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

缓存文件生成规则

生成文件包括:

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