编译并运行FlowGraph
功能介绍
构建完FlowGraph之后,如果您希望直接编译并运行FlowGraph,得到图的执行结果,可以参考本节内容。涉及的主要接口为:
开发示例
- 包含的头文件。
1
#include "ge_api.h"
- 申请系统资源。
Graph定义完成后,调用GEInitialize进行系统初始化(也可在Graph定义前调用),申请系统资源。示例代码如下:
1 2 3 4 5 6
std::map<AscendString, AscendString>config = {{"ge.exec.deviceId", "0"}, {"ge.exec.logicalDeviceClusterDeployMode", "SINGLE"}, {"ge.exec.logicalDeviceId", "[0:0]"}, {"ge.graphRunMode", "1"}, {"ge.exec.precision_mode", "allow_fp32_to_fp16"}}; Status ret = ge::GEInitialize(config);
可以通过config配置传入GE运行的初始化信息, 以上配置中的参数(ge.exec.deviceId、ge.graphRunMode和ge.exec.precision_mode),分别用于指定GE实例运行设备,图执行模式(在线推理请配置为0,训练请配置为1),以及算子精度模式。更多配置请参考“options参数说明”。
由于部分UDF不支持负荷分担,所以需要在GE初始化时添加{"ge.exec.logicalDeviceClusterDeployMode", "SINGLE"}, {"ge.exec.logicalDeviceId", "[0:0]"}。其中logicalDeviceId 可以是[0:0],也可以是[0:1]。如果需要多实例部署,可以参考指定DataFlow节点部署位置来实现多实例部署。logicalDeviceId解释如下。
logical_device_cluster_deploy_mode为SINGLE时,用于指定模型部署在某个指定的设备上。
配置格式:[node_id:device_id]
- node_id:昇腾AI处理器逻辑id,从0开始,表示资源配置文件中第几个设备。
- device_id:昇腾AI处理器物理id。
- 添加Graph对象并运行Graph。
若想使定义好的Graph运行起来,首先,要创建一个session对象,然后调用AddGraph接口添加图,再调用RunGraph接口执行图。示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
std::map <AscendString, AscendString> options; ge::Session *session = new Session(options); if(session == nullptr) { std::cout << "Create session failed." << std::endl; return FAILED; } // 构造FlowGraph Status ret = session->AddGraph(graph_id, flow_graph.ToGeGraph()); if(ret != SUCCESS) { return FAILED; } // 方式一:RunGraph ret = session->RunGraph(graph_id, input, output); if(ret != SUCCESS) { return FAILED; } // 方式二:先FeedDataFlowGraph再FetchDataFlowGraph ge::DataFlowInfo dataFlowInfo; geRet = session->FeedDataFlowGraph(0, input, dataFlowInfo, 3000); if (geRet != ge::SUCCESS) { return FAILED; } geRet = session->FetchDataFlowGraph(0, output, dataFlowInfo, 3000); if (geRet != ge::SUCCESS) { return FAILED; }
用户可以通过传入options配置图运行相关配置信息,相关配置请参考“options参数说明”。
其中图运行完之后的数据保存在output中。
如果dataflow图中包含udf节点,dataflow在图编译过程中会将编译结果放到用户指定udf的workspace目录下,落盘文件以graph_name_release.tar.gz格式存储。该文件用于dataflow模型部署阶段解压使用,在程序运行期间保证该文件不能被手动删除。
- 图运行完之后,通过GEFinalize释放资源。
1
ret = ge::GEFinalize();