---
title: DataFlow离线编译
description: "DataFlow离线编译是指在开发环境编译，在运行环境上加载和部署，从而实现编译和建链解耦。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/dataflowdevg/dfdevp_23_0025.html
sourcePath: /source/zh/canncommercial/900/others/dataflowdevg/dfdevp_23_0025.html
indexId: f99fa9f306362259328716c8e457897beba9e0f27e725151c8f13f1d9403560769
---
# DataFlow离线编译

#### 功能介绍

DataFlow离线编译是指在开发环境编译，在运行环境上加载和部署，从而实现编译和建链解耦。


#### 使用约束

无


#### 使用方法

1. 开启图编译缓存。示例如下。
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 初始化 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", "ge.runFlag":"0" } 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)

2. 配置开发环境。
  通过环境变量RESOURCE_CONFIG_PATH配置目标执行环境的numa_config.json文件。示例如下：

```
export RESOURCE_CONFIG_PATH=numa_config.json //用于设置配置异构资源描述信息文件的存储路径。
```


  numa_config.json请参考numa_config.json配置。ipaddr字段可以使用任意IP。

3. 图生成。

  a. 调用feed_data接口进行图编译，生成缓存文件。
    示例如下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 graph_options = {"ge.graph_key" : "key"} # 构建FlowGraph dag = df.FlowGraph([flow_node2_out], graph_options) # feed data feed_data0 = np.ones([1,2], dtype=np.int32) feed_data1 = np.array([[1,2]], dtype=np.int32) flow_info = df.FlowInfo() flow_info.start_time = 0 flow_info.end_time = 5 dag.feed_data({data0:feed_data0, data1:feed_data1}, flow_info) # 异步喂数据 # feed_data接口涉及图编译和加载，如果设置ge.runFlag为0，则只进行图编译： graph_options = {"ge.graph_key" : "key", "ge.runFlag": "0"}

  b. 离线部署。
    将开发环境中graph_compiler_cache_dir路径下的模型缓存文件、索引文件和变量格式文件拷贝到运行环境的graph_compiler_cache_dir路径。具体文件请参考缓存文件生成规则。

    Atlas A2 训练系列产品 / Atlas A2 推理系列产品 下的约束条件如下：

    执行环境的numa_config.json需要和编译时候保持一致，ipaddr字段除外。
