昇腾CANN/GE编译运行FlowGraph

昇腾CANN/GE编译运行FlowGraph 编译并运行FlowGraph【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge功能介绍构建完FlowGraph之后如果您希望直接编译并运行FlowGraph得到图的执行结果可以参考本节内容。涉及的主要接口为调用“GEInitialize”接口进行系统初始化也可在Graph构建前调用申请系统资源。调用“Session构造函数”创建Session类对象申请Session资源。调用“FlowGraph”接口在Session类对象中添加定义好的图。调用“RunGraph”接口或者“FeedDataFlowGraphfeed所有输入”和“FetchDataFlowGraph获取所有输出数据”接口运行图。调用GEFinalize接口释放系统资源。[!NOTE]说明 如上步骤中的“GEInitialize”、“Session构造函数”、“AddGraph”、“RunGraph”、“GEFinalize”详细信息请参考《GE图引擎 API》。 使用DataFlow开发框架时NN模型执行使用的是饱和模式。该模式下计算精度可能存在误差该模式仅为兼容旧版本后续不演进。开发示例包含的头文件。#include ge_api.h申请系统资源。Graph定义完成后调用GEInitialize进行系统初始化也可在Graph定义前调用申请系统资源。示例代码如下std::mapAscendString, AscendStringconfig {{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以及算子精度模式。[!NOTE]说明 由于部分UDF不支持负荷分担所以需要在GE初始化时添加{ge.exec.logicalDeviceClusterDeployMode, SINGLE}, {ge.exec.logicalDeviceId, [0:0]}。其中logicalDeviceId可以是[0:0]也可以是[0:1]。如果需要多实例部署可以参考指定DataFlow节点部署位置来实现多实例部署。logicalDeviceId解释如下。 logicalDeviceClusterDeployMode为SINGLE时用于指定模型部署在某个指定的设备上。 配置格式[node_id:device_id]node_idAI处理器逻辑ID从0开始表示资源配置文件中第几个设备。device_idAI处理器物理ID。添加Graph对象并运行Graph。若想使定义好的Graph运行起来首先要创建一个Session对象然后调用AddGraph接口添加图再调用RunGraph接口执行图。示例代码如下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配置图运行相关配置信息。其中图运行完之后的数据保存在output中。如果DataFlow图中包含UDF节点DataFlow在图编译过程中会将编译结果放到用户指定UDF的workspace目录下落盘文件以graph_name_release.tar.gz格式存储。该文件用于DataFlow模型部署阶段解压使用在程序运行期间保证该文件不能被手动删除。图运行完之后通过GEFinalize释放资源。ret ge::GEFinalize();【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考