通过ES构建Graph
功能介绍
使用ES构建Graph,整体流程分为如下四个步骤:

其中:
- 创建图构建器:初始化图构建器实例,用于提供构图所需的上下文、工作空间及构建相关方法。
- 添加起始节点:起始节点指无输入依赖的节点,通常包括图的输入(如Data节点)和权重常量(如Const节点)。
- 添加中间节点:中间节点为具有输入依赖的计算节点,通常由用户构图逻辑生成,并通过已有节点作为输入连接。
- 设置图输出:明确图的输出节点,作为计算结果的终点。
构图过程中,主要涉及两个对象, 以C++为例:
构建Graph实例
以下是使用C、C++、Python三种语言实现ES构图的实例,以构造一个“两个输入求和”计算图为例:
- C代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include "es_math_ops_c.h" // Add算子所在的聚合头文件,里面包含了所有算子的头文件合集以及图构建器等基础结构的头文件 // 1. 创建图构建器(EsCGraphBuilder) EsCGraphBuilder *builder = ("graph_name"); // 2. 添加起始节点 *data0 = (builder, 0); // 添加第1个输入节点 EsCTensorHolder *data1 = EsCreateInput(builder, 1); // 添加第2个输入节点 // 3. 添加中间节点 EsCTensorHolder *add = EsAdd(data0, data1); // 添加加法计算节点(不再需要显式传入builder) // 4. 设置图输出 EsSetOutput(add, 0); // 将add节点设置为图的第1个输出 // 5. 完成构图,返回最终图对象 EsGraph *graph = (builder); // 获取构建完成的图 // 6.释放builder及其管理的过程资源 (builder);
- CPP代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include "es_math_ops.h" // Add算子所在的聚合头文件,里面包含了所有算子的头文件合集以及图构建器等基础结构的头文件 namespace ge { namespace es { // 1. 创建图构建器(EsGraphBuilder) builder("graph_name"); // 2. 添加2个输入节点 [data0, data1] = builder.<2>(); // 3. 添加中间节点,C++中,加减乘除等常用运算符被重载,可以直接使用 EsTensorHolder add = data0 + data1; // 4. 设置图输出 builder.(add, 0); // 5. 完成构图,获取构造好的Graph对象,builder中的资源随析构而销毁 std::unique_ptr<ge::Graph> graph = builder.(); } }
- Python代码示例:
使用Python代码构图之前,需要先安装生成ES构图API(可选)中生成的whl包,安装示例如下:
1pip3 install {OUTPUT_PATH}/whl/es_math-1.0.0-py3-none-any.whl
构图示例代码如下:1 2 3 4 5 6 7 8 9 10 11 12
from ge.es import GraphBuilder from ge.es.math import Add # 1. 创建图构建器(EsBuilder) builder = GraphBuilder("graph_name") # 2. 添加 2 个输入节点 data0, data1 = builder.create_inputs(2) # 3. 添加中间节点 Python中,加减乘除等常用运算符被重载,可以直接使用 add = data0 + data1 # 4. 设置图输出 builder.set_output(add, 0) # 5. 完成构图,返回最终图对象 graph = builder.build_and_reset()
源码仓还给出了如下各种场景的ES构图样例,供用户参考:
|
特性 |
获取链接 |
备注 |
|---|---|---|
|
控制边场景的ES构图 |
参见README执行相关操作。 |
|
|
控制算子场景的ES构图 |
||
|
动态输入场景的ES构图 |
||
|
动态输出场景的ES构图 |
||
|
设置普通属性的ES构图 |
||
|
普通输入的ES构图 |
||
|
操作符重载的ES构图 |
||
|
可选输入场景的ES构图 |
||
|
私有属性场景的ES构图 |
||
|
transformer场景(部分片段)的ES构图 |
||
|
自定义ES API并构图 |
- |
父主题: 使用ES极简构图构建Graph