DataFlow离线编译
功能介绍
DataFlow离线编译是指在开发环境编译,在运行环境上加载和部署,从而实现编译和建链解耦。
使用约束
无
使用方法
- 开启图编译缓存。示例如下。
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)
- 配置开发环境。如果目标执行环境为
Atlas A2 训练系列产品 /Atlas 800I A2 推理产品 /A200I A2 Box 异构组件,需要配置目标执行环境的numa_config.json文件,使用环境变量RESOURCE_CONFIG_PATH进行设置。示例如下:export RESOURCE_CONFIG_PATH=numa_config.json //用于设置配置异构资源描述信息文件的存储路径。
- 图生成。
- 调用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"}
- 离线部署。
将开发环境中graph_compiler_cache_dir路径下的模型缓存文件、索引文件和变量格式文件拷贝到运行环境的graph_compiler_cache_dir路径。具体文件请参考缓存文件生成规则。
Atlas A2 训练系列产品 /Atlas 800I A2 推理产品 /A200I A2 Box 异构组件下的约束条件如下:执行环境的numa_config.json需要和编译时候保持一致,ipaddr字段除外。
- 调用feed_data接口进行图编译,生成缓存文件。
父主题: 专题